@shushed/helpers 0.0.202 → 0.0.203-bug-erp-770-20251208112219

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/dist/index.d.ts +34970 -0
  2. package/dist/index.js +113321 -0
  3. package/dist/package.json +3 -6
  4. package/package.json +4 -7
  5. package/dist/cjs/contracts/asset.schema.json +0 -78
  6. package/dist/cjs/contracts/category.schema.json +0 -86
  7. package/dist/cjs/contracts/country.schema.json +0 -258
  8. package/dist/cjs/contracts/currency.schema.json +0 -177
  9. package/dist/cjs/contracts/customer-segment.schema.json +0 -32
  10. package/dist/cjs/contracts/development-colour.schema.json +0 -97
  11. package/dist/cjs/contracts/index.js +0 -48
  12. package/dist/cjs/contracts/marketing-preferences.schema.json +0 -41
  13. package/dist/cjs/contracts/messages/ean-change.schema.json +0 -22
  14. package/dist/cjs/contracts/messages/index.js +0 -29
  15. package/dist/cjs/contracts/messages/order/delivered.schema.json +0 -26
  16. package/dist/cjs/contracts/messages/order/index.js +0 -18
  17. package/dist/cjs/contracts/messages/order/new.schema.json +0 -32
  18. package/dist/cjs/contracts/messages/order/processed.schema.json +0 -15
  19. package/dist/cjs/contracts/messages/order/return-initiated.schema.json +0 -26
  20. package/dist/cjs/contracts/messages/order/returned.schema.json +0 -25
  21. package/dist/cjs/contracts/messages/order/shipped.schema.json +0 -26
  22. package/dist/cjs/contracts/messages/product-category.schema.json +0 -21
  23. package/dist/cjs/contracts/messages/product-draft.schema.json +0 -66
  24. package/dist/cjs/contracts/messages/product.schema.json +0 -29
  25. package/dist/cjs/contracts/money.schema.json +0 -54
  26. package/dist/cjs/contracts/order/address.schema.json +0 -127
  27. package/dist/cjs/contracts/order/customer.schema.json +0 -149
  28. package/dist/cjs/contracts/order/index.js +0 -31
  29. package/dist/cjs/contracts/order/item.schema.json +0 -98
  30. package/dist/cjs/contracts/order/payment.schema.json +0 -115
  31. package/dist/cjs/contracts/order/shipment/index.js +0 -29
  32. package/dist/cjs/contracts/order/shipment/item/index.js +0 -8
  33. package/dist/cjs/contracts/order/shipment/item/returned.schema.json +0 -30
  34. package/dist/cjs/contracts/order/shipment/item.schema.json +0 -22
  35. package/dist/cjs/contracts/order/shipment/pos/index.js +0 -10
  36. package/dist/cjs/contracts/order/shipment/pos/outbound.schema.json +0 -37
  37. package/dist/cjs/contracts/order/shipment/pos/return.schema.json +0 -31
  38. package/dist/cjs/contracts/order/shipment/pos.schema.json +0 -48
  39. package/dist/cjs/contracts/order/shipment/shipped/index.js +0 -10
  40. package/dist/cjs/contracts/order/shipment/shipped/outbound.schema.json +0 -34
  41. package/dist/cjs/contracts/order/shipment/shipped/return.schema.json +0 -43
  42. package/dist/cjs/contracts/order/shipment/shipped.schema.json +0 -52
  43. package/dist/cjs/contracts/order/shipment.schema.json +0 -58
  44. package/dist/cjs/contracts/order.schema.json +0 -231
  45. package/dist/cjs/contracts/product-category.schema.json +0 -34
  46. package/dist/cjs/contracts/product-draft.schema.json +0 -782
  47. package/dist/cjs/contracts/product.schema.json +0 -816
  48. package/dist/cjs/contracts/total.schema.json +0 -41
  49. package/dist/cjs/dist-dereferenced/asset.js +0 -4
  50. package/dist/cjs/dist-dereferenced/category.js +0 -4
  51. package/dist/cjs/dist-dereferenced/country.js +0 -4
  52. package/dist/cjs/dist-dereferenced/currency.js +0 -4
  53. package/dist/cjs/dist-dereferenced/customer-segment.js +0 -4
  54. package/dist/cjs/dist-dereferenced/development-colour.js +0 -4
  55. package/dist/cjs/dist-dereferenced/index.js +0 -69
  56. package/dist/cjs/dist-dereferenced/marketing-preferences.js +0 -4
  57. package/dist/cjs/dist-dereferenced/messages/ean-change.js +0 -4
  58. package/dist/cjs/dist-dereferenced/messages/index.js +0 -50
  59. package/dist/cjs/dist-dereferenced/messages/order/delivered.js +0 -4
  60. package/dist/cjs/dist-dereferenced/messages/order/index.js +0 -18
  61. package/dist/cjs/dist-dereferenced/messages/order/new.js +0 -4
  62. package/dist/cjs/dist-dereferenced/messages/order/processed.js +0 -4
  63. package/dist/cjs/dist-dereferenced/messages/order/return-initiated.js +0 -4
  64. package/dist/cjs/dist-dereferenced/messages/order/returned.js +0 -4
  65. package/dist/cjs/dist-dereferenced/messages/order/shipped.js +0 -4
  66. package/dist/cjs/dist-dereferenced/messages/price-change.js +0 -4
  67. package/dist/cjs/dist-dereferenced/messages/product-category.js +0 -4
  68. package/dist/cjs/dist-dereferenced/messages/product-draft.js +0 -4
  69. package/dist/cjs/dist-dereferenced/messages/product.js +0 -4
  70. package/dist/cjs/dist-dereferenced/money.js +0 -4
  71. package/dist/cjs/dist-dereferenced/order/address.js +0 -4
  72. package/dist/cjs/dist-dereferenced/order/customer.js +0 -4
  73. package/dist/cjs/dist-dereferenced/order/index.js +0 -51
  74. package/dist/cjs/dist-dereferenced/order/item.js +0 -4
  75. package/dist/cjs/dist-dereferenced/order/orderMain.js +0 -4
  76. package/dist/cjs/dist-dereferenced/order/payment.js +0 -4
  77. package/dist/cjs/dist-dereferenced/order/shipment/index.js +0 -45
  78. package/dist/cjs/dist-dereferenced/order/shipment/item/index.js +0 -11
  79. package/dist/cjs/dist-dereferenced/order/shipment/item/itemMain.js +0 -4
  80. package/dist/cjs/dist-dereferenced/order/shipment/item/returned.js +0 -4
  81. package/dist/cjs/dist-dereferenced/order/shipment/pos/index.js +0 -13
  82. package/dist/cjs/dist-dereferenced/order/shipment/pos/outbound.js +0 -4
  83. package/dist/cjs/dist-dereferenced/order/shipment/pos/posMain.js +0 -4
  84. package/dist/cjs/dist-dereferenced/order/shipment/pos/return.js +0 -4
  85. package/dist/cjs/dist-dereferenced/order/shipment/shipmentMain.js +0 -4
  86. package/dist/cjs/dist-dereferenced/order/shipment/shipped/index.js +0 -13
  87. package/dist/cjs/dist-dereferenced/order/shipment/shipped/outbound.js +0 -4
  88. package/dist/cjs/dist-dereferenced/order/shipment/shipped/return.js +0 -4
  89. package/dist/cjs/dist-dereferenced/order/shipment/shipped/shippedMain.js +0 -4
  90. package/dist/cjs/dist-dereferenced/price.js +0 -4
  91. package/dist/cjs/dist-dereferenced/product-category.js +0 -4
  92. package/dist/cjs/dist-dereferenced/product-draft.js +0 -4
  93. package/dist/cjs/dist-dereferenced/product.js +0 -4
  94. package/dist/cjs/dist-dereferenced/stock.js +0 -4
  95. package/dist/cjs/dist-dereferenced/total.js +0 -4
  96. package/dist/cjs/dist-types/asset.js +0 -2
  97. package/dist/cjs/dist-types/category.js +0 -2
  98. package/dist/cjs/dist-types/country.js +0 -2
  99. package/dist/cjs/dist-types/currency.js +0 -2
  100. package/dist/cjs/dist-types/customer-segment.js +0 -2
  101. package/dist/cjs/dist-types/development-colour.js +0 -2
  102. package/dist/cjs/dist-types/index.js +0 -38
  103. package/dist/cjs/dist-types/marketing-preferences.js +0 -2
  104. package/dist/cjs/dist-types/messages/ean-change.js +0 -2
  105. package/dist/cjs/dist-types/messages/index.js +0 -37
  106. package/dist/cjs/dist-types/messages/order/delivered.js +0 -2
  107. package/dist/cjs/dist-types/messages/order/index.js +0 -2
  108. package/dist/cjs/dist-types/messages/order/new.js +0 -2
  109. package/dist/cjs/dist-types/messages/order/processed.js +0 -2
  110. package/dist/cjs/dist-types/messages/order/return-initiated.js +0 -2
  111. package/dist/cjs/dist-types/messages/order/returned.js +0 -2
  112. package/dist/cjs/dist-types/messages/order/shipped.js +0 -2
  113. package/dist/cjs/dist-types/messages/price-change.js +0 -2
  114. package/dist/cjs/dist-types/messages/product-category.js +0 -2
  115. package/dist/cjs/dist-types/messages/product-draft.js +0 -2
  116. package/dist/cjs/dist-types/messages/product.js +0 -2
  117. package/dist/cjs/dist-types/money.js +0 -2
  118. package/dist/cjs/dist-types/order/address.js +0 -2
  119. package/dist/cjs/dist-types/order/customer.js +0 -2
  120. package/dist/cjs/dist-types/order/index.js +0 -37
  121. package/dist/cjs/dist-types/order/item.js +0 -2
  122. package/dist/cjs/dist-types/order/orderMain.js +0 -2
  123. package/dist/cjs/dist-types/order/payment.js +0 -2
  124. package/dist/cjs/dist-types/order/shipment/index.js +0 -39
  125. package/dist/cjs/dist-types/order/shipment/item/index.js +0 -2
  126. package/dist/cjs/dist-types/order/shipment/item/itemMain.js +0 -2
  127. package/dist/cjs/dist-types/order/shipment/item/returned.js +0 -2
  128. package/dist/cjs/dist-types/order/shipment/pos/index.js +0 -2
  129. package/dist/cjs/dist-types/order/shipment/pos/outbound.js +0 -2
  130. package/dist/cjs/dist-types/order/shipment/pos/posMain.js +0 -2
  131. package/dist/cjs/dist-types/order/shipment/pos/return.js +0 -2
  132. package/dist/cjs/dist-types/order/shipment/shipmentMain.js +0 -2
  133. package/dist/cjs/dist-types/order/shipment/shipped/index.js +0 -2
  134. package/dist/cjs/dist-types/order/shipment/shipped/outbound.js +0 -2
  135. package/dist/cjs/dist-types/order/shipment/shipped/return.js +0 -2
  136. package/dist/cjs/dist-types/order/shipment/shipped/shippedMain.js +0 -2
  137. package/dist/cjs/dist-types/price.js +0 -2
  138. package/dist/cjs/dist-types/product-category.js +0 -2
  139. package/dist/cjs/dist-types/product-draft.js +0 -2
  140. package/dist/cjs/dist-types/product.js +0 -2
  141. package/dist/cjs/dist-types/stock.js +0 -2
  142. package/dist/cjs/dist-types/total.js +0 -2
  143. package/dist/cjs/index.js +0 -39
  144. package/dist/cjs/src-public/airtable.js +0 -625
  145. package/dist/cjs/src-public/bcOrder.js +0 -943
  146. package/dist/cjs/src-public/bigquery.js +0 -59
  147. package/dist/cjs/src-public/centra.js +0 -1053
  148. package/dist/cjs/src-public/cloudtasks.js +0 -207
  149. package/dist/cjs/src-public/dato.js +0 -403
  150. package/dist/cjs/src-public/env.js +0 -900
  151. package/dist/cjs/src-public/getEventTime.js +0 -28
  152. package/dist/cjs/src-public/index.js +0 -54
  153. package/dist/cjs/src-public/ipValidation.js +0 -167
  154. package/dist/cjs/src-public/jwks.js +0 -108
  155. package/dist/cjs/src-public/pubsub.js +0 -423
  156. package/dist/cjs/src-public/rateLimit.js +0 -140
  157. package/dist/cjs/src-public/redisClient.js +0 -44
  158. package/dist/cjs/src-public/runtime.js +0 -145
  159. package/dist/cjs/src-public/sanitize.js +0 -25
  160. package/dist/cjs/src-public/scheduler.js +0 -247
  161. package/dist/cjs/src-public/secret.js +0 -16
  162. package/dist/cjs/src-public/setHeaders.js +0 -16
  163. package/dist/cjs/src-public/types.js +0 -2
  164. package/dist/cjs/src-public/utils.js +0 -457
  165. package/dist/cjs/src-public/validate.js +0 -74
  166. package/dist/types/contracts/index.d.ts +0 -15
  167. package/dist/types/contracts/messages/index.d.ts +0 -5
  168. package/dist/types/contracts/messages/order/index.d.ts +0 -6
  169. package/dist/types/contracts/order/index.d.ts +0 -6
  170. package/dist/types/contracts/order/shipment/index.d.ts +0 -6
  171. package/dist/types/contracts/order/shipment/item/index.d.ts +0 -1
  172. package/dist/types/contracts/order/shipment/pos/index.d.ts +0 -2
  173. package/dist/types/contracts/order/shipment/shipped/index.d.ts +0 -2
  174. package/dist/types/dist-dereferenced/asset.d.ts +0 -51
  175. package/dist/types/dist-dereferenced/category.d.ts +0 -58
  176. package/dist/types/dist-dereferenced/country.d.ts +0 -8
  177. package/dist/types/dist-dereferenced/currency.d.ts +0 -8
  178. package/dist/types/dist-dereferenced/customer-segment.d.ts +0 -26
  179. package/dist/types/dist-dereferenced/development-colour.d.ts +0 -114
  180. package/dist/types/dist-dereferenced/index.d.ts +0 -16
  181. package/dist/types/dist-dereferenced/marketing-preferences.d.ts +0 -31
  182. package/dist/types/dist-dereferenced/messages/ean-change.d.ts +0 -17
  183. package/dist/types/dist-dereferenced/messages/index.d.ts +0 -6
  184. package/dist/types/dist-dereferenced/messages/order/delivered.d.ts +0 -3438
  185. package/dist/types/dist-dereferenced/messages/order/index.d.ts +0 -6
  186. package/dist/types/dist-dereferenced/messages/order/new.d.ts +0 -3438
  187. package/dist/types/dist-dereferenced/messages/order/processed.d.ts +0 -3432
  188. package/dist/types/dist-dereferenced/messages/order/return-initiated.d.ts +0 -3438
  189. package/dist/types/dist-dereferenced/messages/order/returned.d.ts +0 -3437
  190. package/dist/types/dist-dereferenced/messages/order/shipped.d.ts +0 -3436
  191. package/dist/types/dist-dereferenced/messages/price-change.d.ts +0 -67
  192. package/dist/types/dist-dereferenced/messages/product-category.d.ts +0 -33
  193. package/dist/types/dist-dereferenced/messages/product-draft.d.ts +0 -589
  194. package/dist/types/dist-dereferenced/messages/product.d.ts +0 -628
  195. package/dist/types/dist-dereferenced/money.d.ts +0 -41
  196. package/dist/types/dist-dereferenced/order/address.d.ts +0 -98
  197. package/dist/types/dist-dereferenced/order/customer.d.ts +0 -312
  198. package/dist/types/dist-dereferenced/order/index.d.ts +0 -3428
  199. package/dist/types/dist-dereferenced/order/item.d.ts +0 -339
  200. package/dist/types/dist-dereferenced/order/orderMain.d.ts +0 -3423
  201. package/dist/types/dist-dereferenced/order/payment.d.ts +0 -110
  202. package/dist/types/dist-dereferenced/order/shipment/index.d.ts +0 -253
  203. package/dist/types/dist-dereferenced/order/shipment/item/index.d.ts +0 -19
  204. package/dist/types/dist-dereferenced/order/shipment/item/itemMain.d.ts +0 -18
  205. package/dist/types/dist-dereferenced/order/shipment/item/returned.d.ts +0 -34
  206. package/dist/types/dist-dereferenced/order/shipment/pos/index.d.ts +0 -282
  207. package/dist/types/dist-dereferenced/order/shipment/pos/outbound.d.ts +0 -319
  208. package/dist/types/dist-dereferenced/order/shipment/pos/posMain.d.ts +0 -280
  209. package/dist/types/dist-dereferenced/order/shipment/pos/return.d.ts +0 -330
  210. package/dist/types/dist-dereferenced/order/shipment/shipmentMain.d.ts +0 -250
  211. package/dist/types/dist-dereferenced/order/shipment/shipped/index.d.ts +0 -288
  212. package/dist/types/dist-dereferenced/order/shipment/shipped/outbound.d.ts +0 -286
  213. package/dist/types/dist-dereferenced/order/shipment/shipped/return.d.ts +0 -287
  214. package/dist/types/dist-dereferenced/order/shipment/shipped/shippedMain.d.ts +0 -286
  215. package/dist/types/dist-dereferenced/price.d.ts +0 -58
  216. package/dist/types/dist-dereferenced/product-category.d.ts +0 -24
  217. package/dist/types/dist-dereferenced/product-draft.d.ts +0 -580
  218. package/dist/types/dist-dereferenced/product.d.ts +0 -619
  219. package/dist/types/dist-dereferenced/stock.d.ts +0 -74
  220. package/dist/types/dist-dereferenced/total.d.ts +0 -172
  221. package/dist/types/dist-types/asset.d.ts +0 -16
  222. package/dist/types/dist-types/category.d.ts +0 -20
  223. package/dist/types/dist-types/country.d.ts +0 -2
  224. package/dist/types/dist-types/currency.d.ts +0 -2
  225. package/dist/types/dist-types/customer-segment.d.ts +0 -6
  226. package/dist/types/dist-types/development-colour.d.ts +0 -31
  227. package/dist/types/dist-types/index.d.ts +0 -16
  228. package/dist/types/dist-types/marketing-preferences.d.ts +0 -9
  229. package/dist/types/dist-types/messages/ean-change.d.ts +0 -5
  230. package/dist/types/dist-types/messages/index.d.ts +0 -6
  231. package/dist/types/dist-types/messages/order/delivered.d.ts +0 -300
  232. package/dist/types/dist-types/messages/order/index.d.ts +0 -6
  233. package/dist/types/dist-types/messages/order/new.d.ts +0 -300
  234. package/dist/types/dist-types/messages/order/processed.d.ts +0 -300
  235. package/dist/types/dist-types/messages/order/return-initiated.d.ts +0 -300
  236. package/dist/types/dist-types/messages/order/returned.d.ts +0 -301
  237. package/dist/types/dist-types/messages/order/shipped.d.ts +0 -301
  238. package/dist/types/dist-types/messages/price-change.d.ts +0 -16
  239. package/dist/types/dist-types/messages/product-category.d.ts +0 -7
  240. package/dist/types/dist-types/messages/product-draft.d.ts +0 -136
  241. package/dist/types/dist-types/messages/product.d.ts +0 -144
  242. package/dist/types/dist-types/money.d.ts +0 -11
  243. package/dist/types/dist-types/order/address.d.ts +0 -27
  244. package/dist/types/dist-types/order/customer.d.ts +0 -82
  245. package/dist/types/dist-types/order/index.d.ts +0 -8
  246. package/dist/types/dist-types/order/item.d.ts +0 -86
  247. package/dist/types/dist-types/order/orderMain.d.ts +0 -297
  248. package/dist/types/dist-types/order/payment.d.ts +0 -30
  249. package/dist/types/dist-types/order/shipment/index.d.ts +0 -6
  250. package/dist/types/dist-types/order/shipment/item/index.d.ts +0 -4
  251. package/dist/types/dist-types/order/shipment/item/itemMain.d.ts +0 -6
  252. package/dist/types/dist-types/order/shipment/item/returned.d.ts +0 -11
  253. package/dist/types/dist-types/order/shipment/pos/index.d.ts +0 -5
  254. package/dist/types/dist-types/order/shipment/pos/outbound.d.ts +0 -76
  255. package/dist/types/dist-types/order/shipment/pos/posMain.d.ts +0 -71
  256. package/dist/types/dist-types/order/shipment/pos/return.d.ts +0 -75
  257. package/dist/types/dist-types/order/shipment/shipmentMain.d.ts +0 -62
  258. package/dist/types/dist-types/order/shipment/shipped/index.d.ts +0 -5
  259. package/dist/types/dist-types/order/shipment/shipped/outbound.d.ts +0 -68
  260. package/dist/types/dist-types/order/shipment/shipped/return.d.ts +0 -68
  261. package/dist/types/dist-types/order/shipment/shipped/shippedMain.d.ts +0 -69
  262. package/dist/types/dist-types/price.d.ts +0 -15
  263. package/dist/types/dist-types/product-category.d.ts +0 -6
  264. package/dist/types/dist-types/product-draft.d.ts +0 -135
  265. package/dist/types/dist-types/product.d.ts +0 -143
  266. package/dist/types/dist-types/stock.d.ts +0 -19
  267. package/dist/types/dist-types/total.d.ts +0 -44
  268. package/dist/types/index.d.ts +0 -3
  269. package/dist/types/src-public/airtable.d.ts +0 -227
  270. package/dist/types/src-public/bcOrder.d.ts +0 -84
  271. package/dist/types/src-public/bigquery.d.ts +0 -17
  272. package/dist/types/src-public/centra.d.ts +0 -176
  273. package/dist/types/src-public/cloudtasks.d.ts +0 -74
  274. package/dist/types/src-public/dato.d.ts +0 -62
  275. package/dist/types/src-public/env.d.ts +0 -144
  276. package/dist/types/src-public/getEventTime.d.ts +0 -1
  277. package/dist/types/src-public/index.d.ts +0 -19
  278. package/dist/types/src-public/ipValidation.d.ts +0 -15
  279. package/dist/types/src-public/jwks.d.ts +0 -15
  280. package/dist/types/src-public/pubsub.d.ts +0 -95
  281. package/dist/types/src-public/rateLimit.d.ts +0 -21
  282. package/dist/types/src-public/redisClient.d.ts +0 -6
  283. package/dist/types/src-public/runtime.d.ts +0 -58
  284. package/dist/types/src-public/sanitize.d.ts +0 -4
  285. package/dist/types/src-public/scheduler.d.ts +0 -71
  286. package/dist/types/src-public/secret.d.ts +0 -6
  287. package/dist/types/src-public/setHeaders.d.ts +0 -13
  288. package/dist/types/src-public/types.d.ts +0 -264
  289. package/dist/types/src-public/utils.d.ts +0 -101
  290. package/dist/types/src-public/validate.d.ts +0 -9
@@ -1,207 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const crypto_1 = __importDefault(require("crypto"));
7
- const runtime_1 = __importDefault(require("./runtime"));
8
- const utils_1 = require("./utils");
9
- async function gcpFetch(url, accessToken, options = {}) {
10
- let res;
11
- try {
12
- res = await fetch(url, {
13
- ...options,
14
- headers: {
15
- ...(options.headers || {}),
16
- 'Authorization': `Bearer ${accessToken}`,
17
- 'Content-Type': 'application/json',
18
- },
19
- });
20
- if (!res.ok) {
21
- const err = new Error(`GCP API error: ${res.status} ${res.statusText}`);
22
- const body = await res.json().catch(() => ({
23
- code: res.status,
24
- }));
25
- console.error('error', body);
26
- err.message = body.error?.message || err.message;
27
- err.code = body.error?.code || res.status;
28
- throw err;
29
- }
30
- }
31
- catch (err) {
32
- const nextErr = Error(`GCP API error: ${err.message}`);
33
- nextErr.code = err.code;
34
- throw nextErr;
35
- }
36
- return res.json();
37
- }
38
- class CloudTasksHelper extends runtime_1.default {
39
- projectId;
40
- serviceAccount;
41
- accessToken;
42
- envName;
43
- workflowId;
44
- triggerId;
45
- location = 'europe-west2';
46
- constructor(opts) {
47
- super(opts);
48
- this.projectId = opts.projectId;
49
- this.serviceAccount = opts.serviceAccount;
50
- this.accessToken = opts.accessToken;
51
- this.envName = opts.envName;
52
- this.workflowId = opts.workflowId;
53
- this.triggerId = opts.triggerId;
54
- }
55
- getQueueName(topicName) {
56
- const infraPrefix = topicName.indexOf('---') !== -1 ? topicName : `${this.envName}---${topicName}-${crypto_1.default.createHash('sha256').update(this.triggerId).digest('hex').slice(0, 8)}`;
57
- return `${infraPrefix}-${(0, utils_1.shortHash)(this.triggerId)}`;
58
- }
59
- getQueuePath(topicName) {
60
- return `projects/${this.projectId}/locations/${this.location}/queues/${this.getQueueName(topicName)}`;
61
- }
62
- getQueueApiUrl(topicName) {
63
- return `https://cloudtasks.googleapis.com/v2/${this.getQueuePath(topicName)}`;
64
- }
65
- getLocationApiUrl() {
66
- return `https://cloudtasks.googleapis.com/v2/projects/${this.projectId}/locations/${this.location}`;
67
- }
68
- async getQueue(topicName) {
69
- try {
70
- const result = await gcpFetch(this.getQueueApiUrl(topicName), this.accessToken, { method: 'GET' });
71
- return result;
72
- }
73
- catch (err) {
74
- console.error('error code', err.code);
75
- if (err.code === 5 || err.message?.includes('notFound') || err.code === 404) {
76
- return null;
77
- }
78
- ;
79
- throw err;
80
- }
81
- }
82
- async createOrUpdateQueue(topicName, retryConfig = {
83
- maxAttempts: 1,
84
- maxRetryDuration: '60s',
85
- minBackoff: '1s',
86
- maxBackoff: '30s',
87
- maxDoublings: 3,
88
- }, rateLimits = {
89
- maxDispatchesPerSecond: 20,
90
- maxConcurrentDispatches: 1,
91
- }) {
92
- const queuePath = this.getQueuePath(topicName);
93
- const queueApiUrl = this.getQueueApiUrl(topicName);
94
- const locationApiUrl = this.getLocationApiUrl();
95
- const queueConfig = {
96
- name: queuePath,
97
- retryConfig: retryConfig || { maxAttempts: 1 },
98
- rateLimits: rateLimits || undefined,
99
- };
100
- const queue = await this.getQueue(topicName);
101
- if (!queue) {
102
- await gcpFetch(`${locationApiUrl}/queues`, this.accessToken, {
103
- method: 'POST',
104
- body: JSON.stringify(queueConfig),
105
- });
106
- }
107
- else if ((retryConfig && (queue.retryConfig?.maxAttempts !== retryConfig.maxAttempts ||
108
- queue.retryConfig?.maxRetryDuration !== retryConfig.maxRetryDuration ||
109
- queue.retryConfig?.minBackoff !== retryConfig.minBackoff ||
110
- queue.retryConfig?.maxBackoff !== retryConfig.maxBackoff ||
111
- queue.retryConfig?.maxDoublings !== retryConfig.maxDoublings)) ||
112
- (rateLimits && ((queue.rateLimits?.maxDispatchesPerSecond !== rateLimits.maxDispatchesPerSecond) ||
113
- queue.rateLimits?.maxConcurrentDispatches !== rateLimits.maxConcurrentDispatches))) {
114
- await gcpFetch(queueApiUrl, this.accessToken, {
115
- method: 'PATCH',
116
- body: JSON.stringify(queueConfig),
117
- });
118
- }
119
- }
120
- async listTasks(topicName) {
121
- const url = `${this.getQueueApiUrl(topicName)}/tasks`;
122
- const res = await gcpFetch(url, this.accessToken, { method: 'GET' });
123
- return res.tasks || [];
124
- }
125
- async deleteTask(taskName) {
126
- const url = `https://cloudtasks.googleapis.com/v2/${taskName}`;
127
- await gcpFetch(url, this.accessToken, { method: 'DELETE' }).catch(err => {
128
- if (err.code === 404 || err.code === 6)
129
- return;
130
- throw err;
131
- });
132
- }
133
- async create(opts) {
134
- const queuePath = this.getQueuePath(opts.topicName);
135
- if (opts.deleteExistingTasks) {
136
- const tasks = await this.listTasks(opts.topicName);
137
- await Promise.allSettled(tasks.map(async (task) => {
138
- try {
139
- await this.deleteTask(task.name);
140
- }
141
- catch (err) {
142
- if (err.code !== 5)
143
- throw err;
144
- }
145
- }));
146
- }
147
- const repeat = opts.repeatCount || 1;
148
- const scheduleSeconds = opts.scheduleSeconds || 0;
149
- const createdTaskNames = [];
150
- for (let i = 0; i < repeat; i++) {
151
- const scheduledDate = scheduleSeconds ? new Date(Date.now() + 1000 * scheduleSeconds * (i + 1)) : new Date();
152
- const taskId = opts.doNotCreateIfExists ? crypto_1.default.createHash('sha256').update(opts.doNotCreateIfExists + (Object.entries(opts.extraQuery || {}).sort().map(x => x.join('=')).join('&'))).digest('hex').slice(0, 8) : undefined;
153
- const scheduleTime = scheduleSeconds ? scheduledDate.toISOString() : undefined;
154
- const httpRequest = {
155
- httpMethod: opts.httpTarget.httpMethod || 'POST',
156
- url: opts.httpTarget.uri || this.runtimeUrl + `/executeWorkflow/${this.workflowId}/${this.triggerId}?cloud_task=${opts.topicName}&schedule_time=${scheduledDate.toISOString()}&${new URLSearchParams(opts.extraQuery).toString()}`,
157
- headers: opts.httpTarget.headers || {
158
- 'Content-Type': 'application/json',
159
- 'User-Agent': 'CloudTasks-Google',
160
- },
161
- body: opts.httpTarget.body ? Buffer.from(JSON.stringify(opts.httpTarget.body)).toString('base64') : undefined,
162
- oidcToken: {
163
- serviceAccountEmail: this.serviceAccount,
164
- audience: process.env.GCLOUD_PROJECT + "/" + this.triggerId,
165
- },
166
- };
167
- try {
168
- const url = `${this.getQueueApiUrl(opts.topicName)}/tasks`;
169
- const body = {
170
- task: {
171
- name: taskId ? `${queuePath}/tasks/${taskId}` : undefined,
172
- scheduleTime: scheduleTime ? scheduleTime : undefined,
173
- httpRequest,
174
- },
175
- };
176
- const res = await gcpFetch(url, this.accessToken, {
177
- method: 'POST',
178
- body: JSON.stringify(body),
179
- });
180
- if (res.name) {
181
- createdTaskNames.push(res.name);
182
- }
183
- }
184
- catch (err) {
185
- if (err.code === 5)
186
- return false;
187
- if ((err.code === 6 || err.code === 409) && opts.doNotCreateIfExists)
188
- return false;
189
- throw err;
190
- }
191
- }
192
- return createdTaskNames;
193
- }
194
- async delete(topicName) {
195
- const queueApiUrl = this.getQueueApiUrl(topicName);
196
- try {
197
- await gcpFetch(queueApiUrl, this.accessToken, { method: 'DELETE' });
198
- return true;
199
- }
200
- catch (err) {
201
- if (err.code === 5 || err.code === 404)
202
- return false;
203
- throw err;
204
- }
205
- }
206
- }
207
- exports.default = CloudTasksHelper;
@@ -1,403 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const fs_1 = __importDefault(require("fs"));
7
- const path_1 = __importDefault(require("path"));
8
- const mime_types_1 = require("mime-types");
9
- const runtime_1 = __importDefault(require("./runtime"));
10
- class DatoHelper extends runtime_1.default {
11
- apiToken;
12
- baseUrl;
13
- environment;
14
- constructor(opts, datoOpts) {
15
- super(opts);
16
- this.apiToken = datoOpts.apiToken;
17
- this.baseUrl = datoOpts.baseUrl || 'https://site-api.datocms.com';
18
- this.environment = datoOpts.environment || 'main';
19
- }
20
- async requestUploadParameters(filename) {
21
- const response = await fetch(`${this.baseUrl}/upload-requests`, {
22
- method: 'POST',
23
- headers: {
24
- 'X-Api-Version': '3',
25
- 'X-Environment': this.environment,
26
- 'Authorization': `Bearer ${this.apiToken}`,
27
- 'Content-Type': "application/vnd.api+json",
28
- 'Accept': 'application/json',
29
- },
30
- body: JSON.stringify({
31
- data: {
32
- type: 'upload_request',
33
- attributes: {
34
- filename: filename,
35
- },
36
- },
37
- }),
38
- });
39
- if (!response.ok) {
40
- const errorText = await response.text();
41
- this.logging.error(`Failed to request upload parameters: ${response.statusText} - ${errorText}`);
42
- throw new Error(`Failed to request upload parameters: ${response.statusText} - ${errorText}`);
43
- }
44
- return await response.json();
45
- }
46
- async uploadToStorageBucket(opts, uploadData, fileStream) {
47
- let blob;
48
- if (fileStream instanceof ReadableStream) {
49
- const response = new Response(fileStream);
50
- blob = await response.blob();
51
- }
52
- else {
53
- const chunks = [];
54
- for await (const chunk of fileStream) {
55
- chunks.push(chunk);
56
- }
57
- const buffer = Buffer.concat(chunks);
58
- blob = new Blob([buffer]);
59
- }
60
- const response = await fetch(uploadData.attributes.url, {
61
- method: 'PUT',
62
- headers: {
63
- 'Content-Type': opts.contentType,
64
- },
65
- body: blob,
66
- });
67
- if (!response.ok) {
68
- const errorText = await response.text();
69
- this.logging.error(`Failed to upload to storage bucket: ${response.statusText} - ${errorText}`);
70
- throw new Error(`Failed to upload to storage bucket: ${response.statusText} - ${errorText}`);
71
- }
72
- return response;
73
- }
74
- async createAssetFromUpload(uploadId, opts, uploadCollectionId) {
75
- const body = {
76
- data: {
77
- type: 'upload',
78
- attributes: {
79
- path: uploadId,
80
- author: opts.author,
81
- copyright: opts.copyright,
82
- notes: opts.notes || null,
83
- default_field_metadata: {
84
- en: {
85
- title: opts.title,
86
- alt: opts.alt,
87
- }
88
- },
89
- tags: opts.tags || [],
90
- },
91
- },
92
- };
93
- if (uploadCollectionId) {
94
- body.data.relationships = {
95
- upload_collection: {
96
- data: {
97
- type: 'upload_collection',
98
- id: uploadCollectionId,
99
- },
100
- },
101
- };
102
- }
103
- const response = await fetch(`${this.baseUrl}/uploads`, {
104
- method: 'POST',
105
- headers: {
106
- 'Authorization': `Bearer ${this.apiToken}`,
107
- 'Accept': 'application/json',
108
- 'X-Api-Version': '3',
109
- 'X-Environment': this.environment,
110
- 'Content-Type': 'application/vnd.api+json',
111
- },
112
- body: JSON.stringify(body),
113
- });
114
- if (!response.ok) {
115
- const errorText = await response.text();
116
- this.logging.error(`Failed to create asset from upload: ${response.statusText} - ${errorText}`);
117
- throw new Error(`Failed to create asset from upload: ${response.statusText} - ${errorText}`);
118
- }
119
- return await response.json();
120
- }
121
- async checkJobResult(jobId) {
122
- const response = await fetch(`${this.baseUrl}/job-results/${jobId}`, {
123
- method: 'GET',
124
- headers: {
125
- 'Authorization': `Bearer ${this.apiToken}`,
126
- 'Accept': 'application/json',
127
- 'X-Api-Version': '3',
128
- 'X-Environment': this.environment
129
- },
130
- });
131
- if (!response.ok) {
132
- if (response.status === 404) {
133
- return null;
134
- }
135
- const errorText = await response.text();
136
- this.logging.error(`Failed to check job result: ${response.statusText} - ${errorText}`);
137
- throw new Error(`Failed to check job result: ${response.statusText} - ${errorText}`);
138
- }
139
- return await response.json();
140
- }
141
- async waitForJobCompletion(jobId, maxAttempts = 30) {
142
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
143
- const jobResult = await this.checkJobResult(jobId);
144
- if (jobResult?.data.attributes.status >= 200 && jobResult?.data.attributes.status < 300) {
145
- return jobResult.data.attributes.payload;
146
- }
147
- if (jobResult?.data.attributes.status) {
148
- const errorMsg = `Job failed: ${JSON.stringify(jobResult.data)}`;
149
- this.logging.error(errorMsg);
150
- throw new Error(errorMsg);
151
- }
152
- await new Promise(resolve => setTimeout(resolve, 1000));
153
- }
154
- const timeoutMsg = 'Job completion timeout';
155
- this.logging.error(timeoutMsg);
156
- throw new Error(timeoutMsg);
157
- }
158
- async uploadFromUrl(options) {
159
- const { url, filename, uploadCollectionId } = options;
160
- this.logging.log(`Starting upload from URL: ${url}`);
161
- const fileResponse = await fetch(url);
162
- if (!fileResponse.ok) {
163
- const errorMsg = `Failed to fetch file from URL: ${fileResponse.statusText}`;
164
- this.logging.error(errorMsg);
165
- throw new Error(errorMsg);
166
- }
167
- let finalFilename = filename || path_1.default.basename(new URL(url).pathname) || 'bs-' + this.triggerId + '-' + new Date().getTime();
168
- if (!path_1.default.extname(finalFilename) && fileResponse.headers.has('content-type')) {
169
- finalFilename += `.${(0, mime_types_1.extension)(fileResponse.headers.get('content-type'))}`;
170
- }
171
- const uploadRequest = await this.requestUploadParameters(finalFilename);
172
- const uploadId = uploadRequest.data.id;
173
- if (!fileResponse.body) {
174
- throw new Error('Response body is null');
175
- }
176
- const contentType = fileResponse.headers.get('content-type') || (0, mime_types_1.lookup)(finalFilename) || 'application/octet-stream';
177
- await this.uploadToStorageBucket({ contentType }, uploadRequest.data, fileResponse.body);
178
- const assetJob = await this.createAssetFromUpload(uploadId, options, uploadCollectionId);
179
- const jobId = assetJob.data.id;
180
- const assetPayload = await this.waitForJobCompletion(jobId);
181
- this.logging.log(`Upload completed successfully: ${assetPayload.data.attributes.url}`);
182
- return {
183
- success: true,
184
- upload: assetPayload.data.attributes.url,
185
- assetId: assetPayload.data.id,
186
- };
187
- }
188
- async uploadFromFile(options) {
189
- const { filePath, filename, uploadCollectionId } = options;
190
- if (!fs_1.default.existsSync(filePath)) {
191
- const errorMsg = `File not found: ${filePath}`;
192
- this.logging.error(errorMsg);
193
- throw new Error(errorMsg);
194
- }
195
- this.logging.log(`Starting upload from file: ${filePath}`);
196
- const finalFilename = filename || path_1.default.basename(filePath);
197
- const uploadRequest = await this.requestUploadParameters(finalFilename);
198
- const uploadId = uploadRequest.data.id;
199
- const fileStream = fs_1.default.createReadStream(filePath);
200
- const contentType = (0, mime_types_1.lookup)(filePath) || 'application/octet-stream';
201
- await this.uploadToStorageBucket({ contentType }, uploadRequest.data, fileStream);
202
- const assetJob = await this.createAssetFromUpload(uploadId, options, uploadCollectionId);
203
- const jobId = assetJob.data.id;
204
- const assetPayload = await this.waitForJobCompletion(jobId);
205
- this.logging.log(`Upload completed successfully: ${assetPayload.data.attributes.url}`);
206
- return {
207
- success: true,
208
- upload: assetPayload.data.attributes.url,
209
- assetId: assetPayload.data.id,
210
- };
211
- }
212
- async getUploadCollections() {
213
- const response = await fetch(`${this.baseUrl}/upload-collections`, {
214
- method: 'GET',
215
- headers: {
216
- 'X-Api-Version': '3',
217
- 'X-Environment': this.environment,
218
- 'Authorization': `Bearer ${this.apiToken}`,
219
- 'Accept': 'application/json',
220
- },
221
- });
222
- if (!response.ok) {
223
- const errorText = await response.text();
224
- this.logging.error(`Failed to fetch upload collections: ${response.statusText} - ${errorText}`);
225
- throw new Error(`Failed to fetch upload collections: ${response.statusText} - ${errorText}`);
226
- }
227
- return await response.json();
228
- }
229
- async findUploadCollectionByLabel(label) {
230
- const collections = await this.getUploadCollections();
231
- return collections.data?.find((collection) => collection.attributes.label === label) || null;
232
- }
233
- static buildUrl(asset, opts) {
234
- const src = (asset ?? '').trim();
235
- const hasAnyNewOption = typeof opts.width === 'number' ||
236
- typeof opts.height === 'number' ||
237
- typeof opts.crop === 'string' ||
238
- typeof opts.quality === 'number' ||
239
- typeof opts.format === 'string';
240
- const qIndex = src.indexOf('?');
241
- const base = qIndex === -1 ? src : src.slice(0, qIndex);
242
- const existingQuery = qIndex === -1 ? '' : src.slice(qIndex + 1);
243
- if (opts.overrideExisting && !hasAnyNewOption) {
244
- return base;
245
- }
246
- const params = new URLSearchParams(opts.overrideExisting ? '' : existingQuery);
247
- const setNum = (key, val) => {
248
- if (typeof val === 'number' && Number.isFinite(val)) {
249
- params.set(key, String(val));
250
- }
251
- };
252
- const setStr = (key, val) => {
253
- if (typeof val === 'string' && val.length > 0) {
254
- params.set(key, val);
255
- }
256
- };
257
- setNum('w', opts.width);
258
- setNum('h', opts.height);
259
- setStr('crop', opts.crop);
260
- setNum('q', opts.quality);
261
- setStr('fm', opts.format);
262
- const query = params.toString();
263
- return query ? `${base}?${query}` : base;
264
- }
265
- async findUploadByFilename(filename) {
266
- try {
267
- const response = await fetch(`${this.baseUrl}/uploads?filter[filename]=${encodeURIComponent(filename)}`, {
268
- headers: {
269
- 'Authorization': `Bearer ${this.apiToken}`,
270
- 'X-Api-Version': '3',
271
- 'X-Environment': this.environment,
272
- 'Accept': 'application/json',
273
- },
274
- });
275
- if (!response.ok) {
276
- const errorText = await response.text();
277
- this.logging.error(`Failed to search for existing upload: ${response.status} ${response.statusText} - ${errorText}`);
278
- return null;
279
- }
280
- const data = await response.json().catch((err) => {
281
- this.logging.error(`Failed to parse JSON in findUploadByFilename: ${err.message}`);
282
- return null;
283
- });
284
- return data?.data?.[0] || null;
285
- }
286
- catch (err) {
287
- this.logging.error(`Error in findUploadByFilename: ${err.message}`);
288
- return null;
289
- }
290
- }
291
- async getItemTypeId(apiKey) {
292
- try {
293
- const res = await fetch(`${this.baseUrl}/item-types`, {
294
- method: "GET",
295
- headers: {
296
- Authorization: `Bearer ${this.apiToken}`,
297
- "X-Api-Version": "3",
298
- "X-Environment": this.environment,
299
- Accept: "application/json",
300
- },
301
- });
302
- if (!res.ok) {
303
- const errorText = await res.text();
304
- throw new Error(`Failed to fetch item types: ${res.status} ${res.statusText} - ${errorText}`);
305
- }
306
- const data = await res.json();
307
- const type = data.data.find((t) => t.attributes.api_key === apiKey);
308
- if (!type)
309
- throw new Error(`Item type "${apiKey}" not found in ${this.environment} - ${JSON.stringify(data)}`);
310
- return type.id;
311
- }
312
- catch (err) {
313
- this.logging.error(`getItemTypeId failed: ${err.message}`);
314
- throw err;
315
- }
316
- }
317
- async getProductBySku(sku) {
318
- try {
319
- const encodedSku = encodeURIComponent(sku);
320
- const res = await fetch(`${this.baseUrl}/items?filter[type]=product&filter[fields][sku][eq]=${encodedSku}&version=current`, {
321
- headers: {
322
- Authorization: `Bearer ${this.apiToken}`,
323
- "X-Api-Version": "3",
324
- "X-Environment": this.environment,
325
- "Content-Type": "application/vnd.api+json",
326
- Accept: "application/json",
327
- },
328
- });
329
- if (!res.ok) {
330
- const errorText = await res.text();
331
- throw new Error(`Failed to fetch product by SKU: ${res.status} ${res.statusText} - ${errorText}`);
332
- }
333
- return await res.json();
334
- }
335
- catch (err) {
336
- this.logging.error(`getProductBySku failed: ${err.message}`);
337
- throw err;
338
- }
339
- }
340
- async createProduct(sku, productTypeId) {
341
- try {
342
- const res = await fetch(`${this.baseUrl}/items`, {
343
- method: "POST",
344
- headers: {
345
- Authorization: `Bearer ${this.apiToken}`,
346
- "X-Api-Version": "3",
347
- "X-Environment": this.environment,
348
- "Content-Type": "application/vnd.api+json",
349
- Accept: "application/json",
350
- },
351
- body: JSON.stringify({
352
- data: {
353
- type: "item",
354
- attributes: { sku },
355
- relationships: {
356
- item_type: { data: { type: "item_type", id: productTypeId } },
357
- },
358
- },
359
- }),
360
- });
361
- if (!res.ok) {
362
- const errorText = await res.text();
363
- throw new Error(`Failed to create product: ${res.status} ${res.statusText} - ${errorText}`);
364
- }
365
- return await res.json();
366
- }
367
- catch (err) {
368
- this.logging.error(`createProduct failed: ${err.message}`);
369
- throw err;
370
- }
371
- }
372
- async updateProductGallery(productId, gallery) {
373
- try {
374
- const res = await fetch(`${this.baseUrl}/items/${productId}`, {
375
- method: "PATCH",
376
- headers: {
377
- Authorization: `Bearer ${this.apiToken}`,
378
- "X-Api-Version": "3",
379
- "X-Environment": this.environment,
380
- "Content-Type": "application/vnd.api+json",
381
- Accept: "application/json",
382
- },
383
- body: JSON.stringify({
384
- data: {
385
- type: "item",
386
- id: productId,
387
- attributes: { gallery },
388
- },
389
- }),
390
- });
391
- if (!res.ok) {
392
- const errorText = await res.text();
393
- throw new Error(`Failed to update product gallery: ${res.status} ${res.statusText} - ${errorText}`);
394
- }
395
- return await res.json();
396
- }
397
- catch (err) {
398
- this.logging.error(`updateProductGallery failed: ${err.message}`);
399
- throw err;
400
- }
401
- }
402
- }
403
- exports.default = DatoHelper;