@shushed/helpers 0.0.198-v2-20251121152811 → 0.0.198

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 (234) hide show
  1. package/dist/index.d.ts +34970 -0
  2. package/dist/index.js +112969 -0
  3. package/dist/package.json +3 -6
  4. package/package.json +4 -7
  5. package/dist/cjs/dist-dereferenced/asset.js +0 -4
  6. package/dist/cjs/dist-dereferenced/category.js +0 -4
  7. package/dist/cjs/dist-dereferenced/country.js +0 -4
  8. package/dist/cjs/dist-dereferenced/currency.js +0 -4
  9. package/dist/cjs/dist-dereferenced/customer-segment.js +0 -4
  10. package/dist/cjs/dist-dereferenced/development-colour.js +0 -4
  11. package/dist/cjs/dist-dereferenced/index.js +0 -69
  12. package/dist/cjs/dist-dereferenced/marketing-preferences.js +0 -4
  13. package/dist/cjs/dist-dereferenced/messages/ean-change.js +0 -4
  14. package/dist/cjs/dist-dereferenced/messages/index.js +0 -50
  15. package/dist/cjs/dist-dereferenced/messages/order/delivered.js +0 -4
  16. package/dist/cjs/dist-dereferenced/messages/order/index.js +0 -18
  17. package/dist/cjs/dist-dereferenced/messages/order/new.js +0 -4
  18. package/dist/cjs/dist-dereferenced/messages/order/processed.js +0 -4
  19. package/dist/cjs/dist-dereferenced/messages/order/return-initiated.js +0 -4
  20. package/dist/cjs/dist-dereferenced/messages/order/returned.js +0 -4
  21. package/dist/cjs/dist-dereferenced/messages/order/shipped.js +0 -4
  22. package/dist/cjs/dist-dereferenced/messages/price-change.js +0 -4
  23. package/dist/cjs/dist-dereferenced/messages/product-category.js +0 -4
  24. package/dist/cjs/dist-dereferenced/messages/product-draft.js +0 -4
  25. package/dist/cjs/dist-dereferenced/messages/product.js +0 -4
  26. package/dist/cjs/dist-dereferenced/money.js +0 -4
  27. package/dist/cjs/dist-dereferenced/order/address.js +0 -4
  28. package/dist/cjs/dist-dereferenced/order/customer.js +0 -4
  29. package/dist/cjs/dist-dereferenced/order/index.js +0 -51
  30. package/dist/cjs/dist-dereferenced/order/item.js +0 -4
  31. package/dist/cjs/dist-dereferenced/order/orderMain.js +0 -4
  32. package/dist/cjs/dist-dereferenced/order/payment.js +0 -4
  33. package/dist/cjs/dist-dereferenced/order/shipment/index.js +0 -45
  34. package/dist/cjs/dist-dereferenced/order/shipment/item/index.js +0 -11
  35. package/dist/cjs/dist-dereferenced/order/shipment/item/itemMain.js +0 -4
  36. package/dist/cjs/dist-dereferenced/order/shipment/item/returned.js +0 -4
  37. package/dist/cjs/dist-dereferenced/order/shipment/pos/index.js +0 -13
  38. package/dist/cjs/dist-dereferenced/order/shipment/pos/outbound.js +0 -4
  39. package/dist/cjs/dist-dereferenced/order/shipment/pos/posMain.js +0 -4
  40. package/dist/cjs/dist-dereferenced/order/shipment/pos/return.js +0 -4
  41. package/dist/cjs/dist-dereferenced/order/shipment/shipmentMain.js +0 -4
  42. package/dist/cjs/dist-dereferenced/order/shipment/shipped/index.js +0 -13
  43. package/dist/cjs/dist-dereferenced/order/shipment/shipped/outbound.js +0 -4
  44. package/dist/cjs/dist-dereferenced/order/shipment/shipped/return.js +0 -4
  45. package/dist/cjs/dist-dereferenced/order/shipment/shipped/shippedMain.js +0 -4
  46. package/dist/cjs/dist-dereferenced/price.js +0 -4
  47. package/dist/cjs/dist-dereferenced/product-category.js +0 -4
  48. package/dist/cjs/dist-dereferenced/product-draft.js +0 -4
  49. package/dist/cjs/dist-dereferenced/product.js +0 -4
  50. package/dist/cjs/dist-dereferenced/stock.js +0 -4
  51. package/dist/cjs/dist-dereferenced/total.js +0 -4
  52. package/dist/cjs/dist-types/asset.js +0 -2
  53. package/dist/cjs/dist-types/category.js +0 -2
  54. package/dist/cjs/dist-types/country.js +0 -2
  55. package/dist/cjs/dist-types/currency.js +0 -2
  56. package/dist/cjs/dist-types/customer-segment.js +0 -2
  57. package/dist/cjs/dist-types/development-colour.js +0 -2
  58. package/dist/cjs/dist-types/index.js +0 -38
  59. package/dist/cjs/dist-types/marketing-preferences.js +0 -2
  60. package/dist/cjs/dist-types/messages/ean-change.js +0 -2
  61. package/dist/cjs/dist-types/messages/index.js +0 -37
  62. package/dist/cjs/dist-types/messages/order/delivered.js +0 -2
  63. package/dist/cjs/dist-types/messages/order/index.js +0 -2
  64. package/dist/cjs/dist-types/messages/order/new.js +0 -2
  65. package/dist/cjs/dist-types/messages/order/processed.js +0 -2
  66. package/dist/cjs/dist-types/messages/order/return-initiated.js +0 -2
  67. package/dist/cjs/dist-types/messages/order/returned.js +0 -2
  68. package/dist/cjs/dist-types/messages/order/shipped.js +0 -2
  69. package/dist/cjs/dist-types/messages/price-change.js +0 -2
  70. package/dist/cjs/dist-types/messages/product-category.js +0 -2
  71. package/dist/cjs/dist-types/messages/product-draft.js +0 -2
  72. package/dist/cjs/dist-types/messages/product.js +0 -2
  73. package/dist/cjs/dist-types/money.js +0 -2
  74. package/dist/cjs/dist-types/order/address.js +0 -2
  75. package/dist/cjs/dist-types/order/customer.js +0 -2
  76. package/dist/cjs/dist-types/order/index.js +0 -37
  77. package/dist/cjs/dist-types/order/item.js +0 -2
  78. package/dist/cjs/dist-types/order/orderMain.js +0 -2
  79. package/dist/cjs/dist-types/order/payment.js +0 -2
  80. package/dist/cjs/dist-types/order/shipment/index.js +0 -39
  81. package/dist/cjs/dist-types/order/shipment/item/index.js +0 -2
  82. package/dist/cjs/dist-types/order/shipment/item/itemMain.js +0 -2
  83. package/dist/cjs/dist-types/order/shipment/item/returned.js +0 -2
  84. package/dist/cjs/dist-types/order/shipment/pos/index.js +0 -2
  85. package/dist/cjs/dist-types/order/shipment/pos/outbound.js +0 -2
  86. package/dist/cjs/dist-types/order/shipment/pos/posMain.js +0 -2
  87. package/dist/cjs/dist-types/order/shipment/pos/return.js +0 -2
  88. package/dist/cjs/dist-types/order/shipment/shipmentMain.js +0 -2
  89. package/dist/cjs/dist-types/order/shipment/shipped/index.js +0 -2
  90. package/dist/cjs/dist-types/order/shipment/shipped/outbound.js +0 -2
  91. package/dist/cjs/dist-types/order/shipment/shipped/return.js +0 -2
  92. package/dist/cjs/dist-types/order/shipment/shipped/shippedMain.js +0 -2
  93. package/dist/cjs/dist-types/price.js +0 -2
  94. package/dist/cjs/dist-types/product-category.js +0 -2
  95. package/dist/cjs/dist-types/product-draft.js +0 -2
  96. package/dist/cjs/dist-types/product.js +0 -2
  97. package/dist/cjs/dist-types/stock.js +0 -2
  98. package/dist/cjs/dist-types/total.js +0 -2
  99. package/dist/cjs/index.js +0 -39
  100. package/dist/cjs/src-public/airtable.js +0 -590
  101. package/dist/cjs/src-public/bigquery.js +0 -59
  102. package/dist/cjs/src-public/cloudtasks.js +0 -207
  103. package/dist/cjs/src-public/dato.js +0 -260
  104. package/dist/cjs/src-public/env.js +0 -897
  105. package/dist/cjs/src-public/getEventTime.js +0 -28
  106. package/dist/cjs/src-public/index.js +0 -50
  107. package/dist/cjs/src-public/ipValidation.js +0 -167
  108. package/dist/cjs/src-public/jwks.js +0 -108
  109. package/dist/cjs/src-public/pubsub.js +0 -423
  110. package/dist/cjs/src-public/rateLimit.js +0 -140
  111. package/dist/cjs/src-public/redisClient.js +0 -44
  112. package/dist/cjs/src-public/runtime.js +0 -135
  113. package/dist/cjs/src-public/sanitize.js +0 -25
  114. package/dist/cjs/src-public/scheduler.js +0 -247
  115. package/dist/cjs/src-public/secret.js +0 -16
  116. package/dist/cjs/src-public/setHeaders.js +0 -16
  117. package/dist/cjs/src-public/types.js +0 -2
  118. package/dist/cjs/src-public/utils.js +0 -336
  119. package/dist/cjs/src-public/validate.js +0 -40
  120. package/dist/types/dist-dereferenced/asset.d.ts +0 -51
  121. package/dist/types/dist-dereferenced/category.d.ts +0 -58
  122. package/dist/types/dist-dereferenced/country.d.ts +0 -8
  123. package/dist/types/dist-dereferenced/currency.d.ts +0 -8
  124. package/dist/types/dist-dereferenced/customer-segment.d.ts +0 -26
  125. package/dist/types/dist-dereferenced/development-colour.d.ts +0 -114
  126. package/dist/types/dist-dereferenced/index.d.ts +0 -16
  127. package/dist/types/dist-dereferenced/marketing-preferences.d.ts +0 -31
  128. package/dist/types/dist-dereferenced/messages/ean-change.d.ts +0 -17
  129. package/dist/types/dist-dereferenced/messages/index.d.ts +0 -6
  130. package/dist/types/dist-dereferenced/messages/order/delivered.d.ts +0 -3414
  131. package/dist/types/dist-dereferenced/messages/order/index.d.ts +0 -6
  132. package/dist/types/dist-dereferenced/messages/order/new.d.ts +0 -3414
  133. package/dist/types/dist-dereferenced/messages/order/processed.d.ts +0 -3408
  134. package/dist/types/dist-dereferenced/messages/order/return-initiated.d.ts +0 -3414
  135. package/dist/types/dist-dereferenced/messages/order/returned.d.ts +0 -3413
  136. package/dist/types/dist-dereferenced/messages/order/shipped.d.ts +0 -3412
  137. package/dist/types/dist-dereferenced/messages/price-change.d.ts +0 -58
  138. package/dist/types/dist-dereferenced/messages/product-category.d.ts +0 -33
  139. package/dist/types/dist-dereferenced/messages/product-draft.d.ts +0 -589
  140. package/dist/types/dist-dereferenced/messages/product.d.ts +0 -628
  141. package/dist/types/dist-dereferenced/money.d.ts +0 -41
  142. package/dist/types/dist-dereferenced/order/address.d.ts +0 -98
  143. package/dist/types/dist-dereferenced/order/customer.d.ts +0 -309
  144. package/dist/types/dist-dereferenced/order/index.d.ts +0 -3404
  145. package/dist/types/dist-dereferenced/order/item.d.ts +0 -336
  146. package/dist/types/dist-dereferenced/order/orderMain.d.ts +0 -3399
  147. package/dist/types/dist-dereferenced/order/payment.d.ts +0 -94
  148. package/dist/types/dist-dereferenced/order/shipment/index.d.ts +0 -253
  149. package/dist/types/dist-dereferenced/order/shipment/item/index.d.ts +0 -19
  150. package/dist/types/dist-dereferenced/order/shipment/item/itemMain.d.ts +0 -18
  151. package/dist/types/dist-dereferenced/order/shipment/item/returned.d.ts +0 -34
  152. package/dist/types/dist-dereferenced/order/shipment/pos/index.d.ts +0 -282
  153. package/dist/types/dist-dereferenced/order/shipment/pos/outbound.d.ts +0 -320
  154. package/dist/types/dist-dereferenced/order/shipment/pos/posMain.d.ts +0 -280
  155. package/dist/types/dist-dereferenced/order/shipment/pos/return.d.ts +0 -331
  156. package/dist/types/dist-dereferenced/order/shipment/shipmentMain.d.ts +0 -250
  157. package/dist/types/dist-dereferenced/order/shipment/shipped/index.d.ts +0 -288
  158. package/dist/types/dist-dereferenced/order/shipment/shipped/outbound.d.ts +0 -286
  159. package/dist/types/dist-dereferenced/order/shipment/shipped/return.d.ts +0 -287
  160. package/dist/types/dist-dereferenced/order/shipment/shipped/shippedMain.d.ts +0 -286
  161. package/dist/types/dist-dereferenced/price.d.ts +0 -49
  162. package/dist/types/dist-dereferenced/product-category.d.ts +0 -24
  163. package/dist/types/dist-dereferenced/product-draft.d.ts +0 -580
  164. package/dist/types/dist-dereferenced/product.d.ts +0 -619
  165. package/dist/types/dist-dereferenced/stock.d.ts +0 -74
  166. package/dist/types/dist-dereferenced/total.d.ts +0 -172
  167. package/dist/types/dist-types/asset.d.ts +0 -16
  168. package/dist/types/dist-types/category.d.ts +0 -20
  169. package/dist/types/dist-types/country.d.ts +0 -2
  170. package/dist/types/dist-types/currency.d.ts +0 -2
  171. package/dist/types/dist-types/customer-segment.d.ts +0 -6
  172. package/dist/types/dist-types/development-colour.d.ts +0 -31
  173. package/dist/types/dist-types/index.d.ts +0 -16
  174. package/dist/types/dist-types/marketing-preferences.d.ts +0 -9
  175. package/dist/types/dist-types/messages/ean-change.d.ts +0 -5
  176. package/dist/types/dist-types/messages/index.d.ts +0 -6
  177. package/dist/types/dist-types/messages/order/delivered.d.ts +0 -292
  178. package/dist/types/dist-types/messages/order/index.d.ts +0 -6
  179. package/dist/types/dist-types/messages/order/new.d.ts +0 -292
  180. package/dist/types/dist-types/messages/order/processed.d.ts +0 -292
  181. package/dist/types/dist-types/messages/order/return-initiated.d.ts +0 -292
  182. package/dist/types/dist-types/messages/order/returned.d.ts +0 -293
  183. package/dist/types/dist-types/messages/order/shipped.d.ts +0 -293
  184. package/dist/types/dist-types/messages/price-change.d.ts +0 -15
  185. package/dist/types/dist-types/messages/product-category.d.ts +0 -7
  186. package/dist/types/dist-types/messages/product-draft.d.ts +0 -136
  187. package/dist/types/dist-types/messages/product.d.ts +0 -144
  188. package/dist/types/dist-types/money.d.ts +0 -11
  189. package/dist/types/dist-types/order/address.d.ts +0 -27
  190. package/dist/types/dist-types/order/customer.d.ts +0 -81
  191. package/dist/types/dist-types/order/index.d.ts +0 -8
  192. package/dist/types/dist-types/order/item.d.ts +0 -85
  193. package/dist/types/dist-types/order/orderMain.d.ts +0 -289
  194. package/dist/types/dist-types/order/payment.d.ts +0 -26
  195. package/dist/types/dist-types/order/shipment/index.d.ts +0 -6
  196. package/dist/types/dist-types/order/shipment/item/index.d.ts +0 -4
  197. package/dist/types/dist-types/order/shipment/item/itemMain.d.ts +0 -6
  198. package/dist/types/dist-types/order/shipment/item/returned.d.ts +0 -11
  199. package/dist/types/dist-types/order/shipment/pos/index.d.ts +0 -5
  200. package/dist/types/dist-types/order/shipment/pos/outbound.d.ts +0 -76
  201. package/dist/types/dist-types/order/shipment/pos/posMain.d.ts +0 -71
  202. package/dist/types/dist-types/order/shipment/pos/return.d.ts +0 -75
  203. package/dist/types/dist-types/order/shipment/shipmentMain.d.ts +0 -62
  204. package/dist/types/dist-types/order/shipment/shipped/index.d.ts +0 -5
  205. package/dist/types/dist-types/order/shipment/shipped/outbound.d.ts +0 -68
  206. package/dist/types/dist-types/order/shipment/shipped/return.d.ts +0 -68
  207. package/dist/types/dist-types/order/shipment/shipped/shippedMain.d.ts +0 -69
  208. package/dist/types/dist-types/price.d.ts +0 -14
  209. package/dist/types/dist-types/product-category.d.ts +0 -6
  210. package/dist/types/dist-types/product-draft.d.ts +0 -135
  211. package/dist/types/dist-types/product.d.ts +0 -143
  212. package/dist/types/dist-types/stock.d.ts +0 -19
  213. package/dist/types/dist-types/total.d.ts +0 -44
  214. package/dist/types/index.d.ts +0 -3
  215. package/dist/types/src-public/airtable.d.ts +0 -220
  216. package/dist/types/src-public/bigquery.d.ts +0 -17
  217. package/dist/types/src-public/cloudtasks.d.ts +0 -74
  218. package/dist/types/src-public/dato.d.ts +0 -55
  219. package/dist/types/src-public/env.d.ts +0 -144
  220. package/dist/types/src-public/getEventTime.d.ts +0 -1
  221. package/dist/types/src-public/index.d.ts +0 -16
  222. package/dist/types/src-public/ipValidation.d.ts +0 -15
  223. package/dist/types/src-public/jwks.d.ts +0 -15
  224. package/dist/types/src-public/pubsub.d.ts +0 -95
  225. package/dist/types/src-public/rateLimit.d.ts +0 -21
  226. package/dist/types/src-public/redisClient.d.ts +0 -6
  227. package/dist/types/src-public/runtime.d.ts +0 -56
  228. package/dist/types/src-public/sanitize.d.ts +0 -4
  229. package/dist/types/src-public/scheduler.d.ts +0 -71
  230. package/dist/types/src-public/secret.d.ts +0 -6
  231. package/dist/types/src-public/setHeaders.d.ts +0 -13
  232. package/dist/types/src-public/types.d.ts +0 -264
  233. package/dist/types/src-public/utils.d.ts +0 -67
  234. 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,260 +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
- constructor(opts, datoOpts) {
14
- super(opts);
15
- this.apiToken = datoOpts.apiToken;
16
- this.baseUrl = datoOpts.baseUrl || 'https://site-api.datocms.com';
17
- }
18
- async requestUploadParameters(filename) {
19
- const response = await fetch(`${this.baseUrl}/upload-requests`, {
20
- method: 'POST',
21
- headers: {
22
- 'X-Api-Version': '3',
23
- 'Authorization': `Bearer ${this.apiToken}`,
24
- 'Content-Type': "application/vnd.api+json",
25
- 'Accept': 'application/json',
26
- },
27
- body: JSON.stringify({
28
- data: {
29
- type: 'upload_request',
30
- attributes: {
31
- filename: filename,
32
- },
33
- },
34
- }),
35
- });
36
- if (!response.ok) {
37
- const errorText = await response.text();
38
- this.logging.error(`Failed to request upload parameters: ${response.statusText} - ${errorText}`);
39
- throw new Error(`Failed to request upload parameters: ${response.statusText} - ${errorText}`);
40
- }
41
- return await response.json();
42
- }
43
- async uploadToStorageBucket(opts, uploadData, fileStream) {
44
- let blob;
45
- if (fileStream instanceof ReadableStream) {
46
- const response = new Response(fileStream);
47
- blob = await response.blob();
48
- }
49
- else {
50
- const chunks = [];
51
- for await (const chunk of fileStream) {
52
- chunks.push(chunk);
53
- }
54
- const buffer = Buffer.concat(chunks);
55
- blob = new Blob([buffer]);
56
- }
57
- const response = await fetch(uploadData.attributes.url, {
58
- method: 'PUT',
59
- headers: {
60
- 'Content-Type': opts.contentType,
61
- },
62
- body: blob,
63
- });
64
- if (!response.ok) {
65
- const errorText = await response.text();
66
- this.logging.error(`Failed to upload to storage bucket: ${response.statusText} - ${errorText}`);
67
- throw new Error(`Failed to upload to storage bucket: ${response.statusText} - ${errorText}`);
68
- }
69
- return response;
70
- }
71
- async createAssetFromUpload(uploadId, opts, uploadCollectionId) {
72
- const body = {
73
- data: {
74
- type: 'upload',
75
- attributes: {
76
- path: uploadId,
77
- author: opts.author,
78
- copyright: opts.copyright,
79
- notes: opts.notes || null,
80
- defaultFieldMetadata: {
81
- en: {
82
- title: opts.title,
83
- alt: opts.alt,
84
- }
85
- },
86
- tags: opts.tags || [],
87
- },
88
- },
89
- };
90
- if (uploadCollectionId) {
91
- body.data.relationships = {
92
- upload_collection: {
93
- data: {
94
- type: 'upload_collection',
95
- id: uploadCollectionId,
96
- },
97
- },
98
- };
99
- }
100
- const response = await fetch(`${this.baseUrl}/uploads`, {
101
- method: 'POST',
102
- headers: {
103
- 'Authorization': `Bearer ${this.apiToken}`,
104
- 'Accept': 'application/json',
105
- 'X-Api-Version': '3',
106
- 'Content-Type': 'application/vnd.api+json',
107
- },
108
- body: JSON.stringify(body),
109
- });
110
- if (!response.ok) {
111
- const errorText = await response.text();
112
- this.logging.error(`Failed to create asset from upload: ${response.statusText} - ${errorText}`);
113
- throw new Error(`Failed to create asset from upload: ${response.statusText} - ${errorText}`);
114
- }
115
- return await response.json();
116
- }
117
- async checkJobResult(jobId) {
118
- const response = await fetch(`${this.baseUrl}/job-results/${jobId}`, {
119
- method: 'GET',
120
- headers: {
121
- 'Authorization': `Bearer ${this.apiToken}`,
122
- 'Accept': 'application/json',
123
- 'X-Api-Version': '3',
124
- },
125
- });
126
- if (!response.ok) {
127
- if (response.status === 404) {
128
- return null;
129
- }
130
- const errorText = await response.text();
131
- this.logging.error(`Failed to check job result: ${response.statusText} - ${errorText}`);
132
- throw new Error(`Failed to check job result: ${response.statusText} - ${errorText}`);
133
- }
134
- return await response.json();
135
- }
136
- async waitForJobCompletion(jobId, maxAttempts = 30) {
137
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
138
- const jobResult = await this.checkJobResult(jobId);
139
- if (jobResult?.data.attributes.status >= 200 && jobResult?.data.attributes.status < 300) {
140
- return jobResult.data.attributes.payload;
141
- }
142
- if (jobResult?.data.attributes.status) {
143
- const errorMsg = `Job failed: ${JSON.stringify(jobResult.data)}`;
144
- this.logging.error(errorMsg);
145
- throw new Error(errorMsg);
146
- }
147
- await new Promise(resolve => setTimeout(resolve, 1000));
148
- }
149
- const timeoutMsg = 'Job completion timeout';
150
- this.logging.error(timeoutMsg);
151
- throw new Error(timeoutMsg);
152
- }
153
- async uploadFromUrl(options) {
154
- const { url, filename, uploadCollectionId } = options;
155
- this.logging.log(`Starting upload from URL: ${url}`);
156
- const fileResponse = await fetch(url);
157
- if (!fileResponse.ok) {
158
- const errorMsg = `Failed to fetch file from URL: ${fileResponse.statusText}`;
159
- this.logging.error(errorMsg);
160
- throw new Error(errorMsg);
161
- }
162
- let finalFilename = filename || path_1.default.basename(new URL(url).pathname) || 'bs-' + this.triggerId + '-' + new Date().getTime();
163
- if (!path_1.default.extname(finalFilename) && fileResponse.headers.has('content-type')) {
164
- finalFilename += `.${(0, mime_types_1.extension)(fileResponse.headers.get('content-type'))}`;
165
- }
166
- const uploadRequest = await this.requestUploadParameters(finalFilename);
167
- const uploadId = uploadRequest.data.id;
168
- if (!fileResponse.body) {
169
- throw new Error('Response body is null');
170
- }
171
- const contentType = fileResponse.headers.get('content-type') || (0, mime_types_1.lookup)(finalFilename) || 'application/octet-stream';
172
- await this.uploadToStorageBucket({ contentType }, uploadRequest.data, fileResponse.body);
173
- const assetJob = await this.createAssetFromUpload(uploadId, options, uploadCollectionId);
174
- const jobId = assetJob.data.id;
175
- const assetPayload = await this.waitForJobCompletion(jobId);
176
- this.logging.log(`Upload completed successfully: ${assetPayload.data.attributes.url}`);
177
- return {
178
- success: true,
179
- upload: assetPayload.data.attributes.url,
180
- assetId: assetPayload.data.id,
181
- };
182
- }
183
- async uploadFromFile(options) {
184
- const { filePath, filename, uploadCollectionId } = options;
185
- if (!fs_1.default.existsSync(filePath)) {
186
- const errorMsg = `File not found: ${filePath}`;
187
- this.logging.error(errorMsg);
188
- throw new Error(errorMsg);
189
- }
190
- this.logging.log(`Starting upload from file: ${filePath}`);
191
- const finalFilename = filename || path_1.default.basename(filePath);
192
- const uploadRequest = await this.requestUploadParameters(finalFilename);
193
- const uploadId = uploadRequest.data.id;
194
- const fileStream = fs_1.default.createReadStream(filePath);
195
- const contentType = (0, mime_types_1.lookup)(filePath) || 'application/octet-stream';
196
- await this.uploadToStorageBucket({ contentType }, uploadRequest.data, fileStream);
197
- const assetJob = await this.createAssetFromUpload(uploadId, options, uploadCollectionId);
198
- const jobId = assetJob.data.id;
199
- const assetPayload = await this.waitForJobCompletion(jobId);
200
- this.logging.log(`Upload completed successfully: ${assetPayload.data.attributes.url}`);
201
- return {
202
- success: true,
203
- upload: assetPayload.data.attributes.url,
204
- assetId: assetPayload.data.id,
205
- };
206
- }
207
- async getUploadCollections() {
208
- const response = await fetch(`${this.baseUrl}/upload-collections`, {
209
- method: 'GET',
210
- headers: {
211
- 'X-Api-Version': '3',
212
- 'Authorization': `Bearer ${this.apiToken}`,
213
- 'Accept': 'application/json',
214
- },
215
- });
216
- if (!response.ok) {
217
- const errorText = await response.text();
218
- this.logging.error(`Failed to fetch upload collections: ${response.statusText} - ${errorText}`);
219
- throw new Error(`Failed to fetch upload collections: ${response.statusText} - ${errorText}`);
220
- }
221
- return await response.json();
222
- }
223
- async findUploadCollectionByLabel(label) {
224
- const collections = await this.getUploadCollections();
225
- return collections.data?.find((collection) => collection.attributes.label === label) || null;
226
- }
227
- static buildUrl(asset, opts) {
228
- const src = (asset ?? '').trim();
229
- const hasAnyNewOption = typeof opts.width === 'number' ||
230
- typeof opts.height === 'number' ||
231
- typeof opts.crop === 'string' ||
232
- typeof opts.quality === 'number' ||
233
- typeof opts.format === 'string';
234
- const qIndex = src.indexOf('?');
235
- const base = qIndex === -1 ? src : src.slice(0, qIndex);
236
- const existingQuery = qIndex === -1 ? '' : src.slice(qIndex + 1);
237
- if (opts.overrideExisting && !hasAnyNewOption) {
238
- return base;
239
- }
240
- const params = new URLSearchParams(opts.overrideExisting ? '' : existingQuery);
241
- const setNum = (key, val) => {
242
- if (typeof val === 'number' && Number.isFinite(val)) {
243
- params.set(key, String(val));
244
- }
245
- };
246
- const setStr = (key, val) => {
247
- if (typeof val === 'string' && val.length > 0) {
248
- params.set(key, val);
249
- }
250
- };
251
- setNum('w', opts.width);
252
- setNum('h', opts.height);
253
- setStr('crop', opts.crop);
254
- setNum('q', opts.quality);
255
- setStr('fm', opts.format);
256
- const query = params.toString();
257
- return query ? `${base}?${query}` : base;
258
- }
259
- }
260
- exports.default = DatoHelper;