@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,457 +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
- exports.FUNCTION_EXPR_ERROR = exports.getIdentityToken = exports.getAccessToken = exports.parseDateOrDefault = exports.validateGoogleAuth = exports.isCloudTask = exports.isRespectfulNudge = exports.isCronMessage = exports.isPubSubRequest = void 0;
7
- exports.getEventTime = getEventTime;
8
- exports.shortHash = shortHash;
9
- exports.slugify = slugify;
10
- exports.getFirestore = getFirestore;
11
- exports.createHandlerDecorator = createHandlerDecorator;
12
- exports.getSecret = getSecret;
13
- exports.splitTimeToArr = splitTimeToArr;
14
- exports.minutesAgo = minutesAgo;
15
- exports.setRetryAfterVariable = setRetryAfterVariable;
16
- exports.createFunction = createFunction;
17
- exports.createOnResponse = createOnResponse;
18
- exports.onResponse = onResponse;
19
- exports.parsePrices = parsePrices;
20
- const crypto_1 = __importDefault(require("crypto"));
21
- const firestore_1 = require("@google-cloud/firestore");
22
- const jwks_1 = __importDefault(require("./jwks"));
23
- const isPubSubRequest = (headers) => (headers['User-Agent'] || headers['user-agent'] || '') === 'CloudPubSub-Google'
24
- || (headers['User-Agent'] || headers['user-agent'] || '').indexOf('APIs-Google') !== -1;
25
- exports.isPubSubRequest = isPubSubRequest;
26
- const isCronMessage = (headers) => (headers['User-Agent'] || headers['user-agent'] || '') === 'Google-Cloud-Scheduler';
27
- exports.isCronMessage = isCronMessage;
28
- const isRespectfulNudge = (headers) => (headers['User-Agent'] || headers['user-agent'] || '') === 'Respectful-Nudge';
29
- exports.isRespectfulNudge = isRespectfulNudge;
30
- const isCloudTask = (headers) => (headers['User-Agent'] || headers['user-agent'] || '').indexOf('CloudTasks-Google') !== -1
31
- || (headers['User-Agent'] || headers['user-agent'] || '').indexOf('Google-Cloud-Tasks') !== -1;
32
- exports.isCloudTask = isCloudTask;
33
- const validateGoogleAuth = async (opts, headers, firestore) => {
34
- const token = headers.authorization?.split(" ")[1];
35
- if (!token) {
36
- throw new Error("Missing authorization header or invalid format, needs to be in format: Bearer <IdToken>");
37
- }
38
- let result;
39
- try {
40
- const jwksHelper = new jwks_1.default(opts, firestore);
41
- result = await jwksHelper.validateAuthorizationHeader(token, opts.serviceAccount);
42
- }
43
- catch (err) {
44
- throw new Error('Invalid authorization header ' + err.message);
45
- }
46
- return result;
47
- };
48
- exports.validateGoogleAuth = validateGoogleAuth;
49
- const parseDateOrDefault = (date, defaultValue = null) => {
50
- if (!date) {
51
- return defaultValue;
52
- }
53
- if (date instanceof Date) {
54
- if (isNaN(date.getTime())) {
55
- return defaultValue;
56
- }
57
- return date;
58
- }
59
- const dateObj = new Date(date);
60
- if (isNaN(dateObj.getTime())) {
61
- return defaultValue;
62
- }
63
- return dateObj;
64
- };
65
- exports.parseDateOrDefault = parseDateOrDefault;
66
- function getEventTime(x, defaultValue) {
67
- const possibleKeys = [
68
- 'last_modified_date_time',
69
- 'record_modified_at',
70
- 'last_modified_date',
71
- 'last_modified_datetime',
72
- 'last_modified_date_time',
73
- 'lastModifiedDateTime',
74
- 'lastModifiedAt',
75
- 'last_modified_at',
76
- 'SystemModifiedAt',
77
- 'system_modified_at',
78
- 'lastUpdatedAt',
79
- 'modified_at',
80
- 'last_updated_at',
81
- 'modifiedAt',
82
- ];
83
- for (let i = 0; i < possibleKeys.length; i++) {
84
- if (x[possibleKeys[i]]) {
85
- const possibleDateTime = new Date(x[possibleKeys[i]]);
86
- if (!isNaN(possibleDateTime.getTime())) {
87
- return possibleDateTime;
88
- }
89
- }
90
- }
91
- return defaultValue;
92
- }
93
- function shortHash(input) {
94
- const hash = crypto_1.default.createHash('sha256').update(input).digest();
95
- const base64 = hash.toString('base64')
96
- .replace(/\+/g, '-')
97
- .replace(/\//g, '_')
98
- .replace(/=+$/, '');
99
- return base64.substring(0, 8);
100
- }
101
- function slugify(input) {
102
- return input
103
- .toLowerCase()
104
- .replace(/[()]/g, '')
105
- .replace(/[^a-z0-9\s-]/g, '')
106
- .replace(/[\s-]+/g, '-')
107
- .replace(/^-+|-+$/g, '');
108
- }
109
- global.BUILDSHIP_FIRESTORE_V7_CACHE = global.BUILDSHIP_FIRESTORE_V7_CACHE || {};
110
- const DEFAULT_BRANCH = 'migratedprod';
111
- function getFirestore(systemEnvName) {
112
- const firebaseDb = (systemEnvName === DEFAULT_BRANCH ? '(default)' : systemEnvName);
113
- if (!global.BUILDSHIP_FIRESTORE_V7_CACHE[systemEnvName]) {
114
- let firestore;
115
- if (global.BUILDSHIP_FIRESTORE_V7_INSTANCE) {
116
- firestore = global.BUILDSHIP_FIRESTORE_V7_INSTANCE;
117
- if (firestore.databaseId !== firebaseDb) {
118
- firestore = new global.BUILDSHIP_FIRESTORE_V7_INSTANCE.constructor({
119
- projectId: process.env.GCLOUD_PROJECT,
120
- databaseId: firebaseDb,
121
- });
122
- }
123
- }
124
- else {
125
- firestore = new firestore_1.Firestore({
126
- projectId: process.env.GCLOUD_PROJECT,
127
- databaseId: firebaseDb,
128
- });
129
- }
130
- global.BUILDSHIP_FIRESTORE_V7_CACHE[systemEnvName] = firestore;
131
- }
132
- return global.BUILDSHIP_FIRESTORE_V7_CACHE[systemEnvName];
133
- }
134
- function createHandlerDecorator(decoratorFactory) {
135
- return decoratorFactory;
136
- }
137
- async function getSecret(runtime, name, accessToken) {
138
- if (name.startsWith('process.secret.')) {
139
- name = name.slice('process.secret.'.length);
140
- }
141
- try {
142
- const projectId = process.env.GCLOUD_PROJECT;
143
- if (!projectId) {
144
- throw new Error('GCLOUD_PROJECT env is not set');
145
- }
146
- const url = `https://secretmanager.googleapis.com/v1/projects/${projectId}/secrets/${runtime.systemEnvName}---${name}/versions/latest:access`;
147
- const res = await fetch(url, {
148
- headers: { Authorization: `Bearer ${accessToken}` }
149
- });
150
- if (!res.ok) {
151
- const text = await res.text();
152
- throw new Error(`secret access http ${res.status}: ${text}`);
153
- }
154
- const json = await res.json();
155
- const dataB64 = json?.payload?.data || '';
156
- if (!dataB64)
157
- return '';
158
- const payload = Buffer.from(dataB64, 'base64').toString('utf-8');
159
- return payload;
160
- }
161
- catch (err) {
162
- throw new Error(`Failed to get secret ${name}. Error: ${err.message}`);
163
- }
164
- }
165
- const getAccessToken = async () => {
166
- const metadataUrl = 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token';
167
- try {
168
- const res = await fetch(metadataUrl, {
169
- headers: { 'Metadata-Flavor': 'Google' }
170
- });
171
- if (!res.ok) {
172
- throw new Error(`metadata token http ${res.status}`);
173
- }
174
- const json = await res.json();
175
- if (!json.access_token) {
176
- throw new Error('missing access_token in metadata response');
177
- }
178
- return json.access_token;
179
- }
180
- catch (err) {
181
- throw new Error(`Failed to obtain access token. Error: ${err.message}`);
182
- }
183
- };
184
- exports.getAccessToken = getAccessToken;
185
- const getIdentityToken = async (expectedAudience) => {
186
- const metadataUrl = 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?' + new URLSearchParams({
187
- audience: expectedAudience,
188
- format: 'full',
189
- }).toString();
190
- try {
191
- const res = await fetch(metadataUrl, {
192
- headers: { 'Metadata-Flavor': 'Google' }
193
- });
194
- if (!res.ok) {
195
- throw new Error(`metadata token http ${res.status}`);
196
- }
197
- const accessToken = await res.text();
198
- if (!accessToken) {
199
- throw new Error('missing access_token in metadata response');
200
- }
201
- return accessToken;
202
- }
203
- catch (err) {
204
- throw new Error(`Failed to obtain identity token. Error: ${err.message}`);
205
- }
206
- };
207
- exports.getIdentityToken = getIdentityToken;
208
- function splitTimeToArr(date = new Date()) {
209
- return [date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()];
210
- }
211
- function minutesAgo(minutes) {
212
- return new Date(Date.now() - minutes * 60 * 1000).toISOString();
213
- }
214
- function setRetryAfterVariable(value, options) {
215
- if (!options.root || !options.root.state) {
216
- return null;
217
- }
218
- let v = null;
219
- if (value instanceof Response) {
220
- v = value.headers.get('retry-after') || null;
221
- }
222
- else if (typeof value === 'object') {
223
- if (value instanceof Headers) {
224
- v = value.get('retry-after') || null;
225
- }
226
- else {
227
- v = value['retry-after'] || null;
228
- }
229
- }
230
- else if (typeof value === 'string') {
231
- v = value;
232
- }
233
- let normV = 0;
234
- if (v) {
235
- if (/^\d+$/.test(v)) {
236
- normV = new Date(Date.now() + parseInt(v) * 1000).getTime();
237
- }
238
- else {
239
- normV = new Date(v).getTime();
240
- }
241
- if (isNaN(normV)) {
242
- normV = 0;
243
- }
244
- }
245
- else {
246
- normV = 0;
247
- }
248
- if (!(options.root && options.root.state)) {
249
- return null;
250
- }
251
- let existingV = 0;
252
- if (options.root.state['_$hsRetryAfter_']) {
253
- existingV = new Date(options.root.state['_$hsRetryAfter_']).getTime();
254
- if (isNaN(existingV)) {
255
- existingV = 0;
256
- }
257
- }
258
- if (normV > existingV) {
259
- options.root.state['_$hsRetryAfter_'] = new Date(normV).toISOString();
260
- return new Date(normV).toISOString();
261
- }
262
- return options.root.state['_$hsRetryAfter_'] ?? null;
263
- }
264
- global.functionsCache = global.functionsCache || {};
265
- exports.FUNCTION_EXPR_ERROR = Symbol('function');
266
- function createFunction(expression) {
267
- if (!global.functionsCache[expression]) {
268
- global.functionsCache[expression] = new Function('symbol', 'payload', 'try { return ' + expression + ' } catch (err) { return symbol; }');
269
- }
270
- return (payload) => global.functionsCache[expression](exports.FUNCTION_EXPR_ERROR, payload);
271
- }
272
- function createOnResponse(opts) {
273
- return (config, options) => onResponse(config, options, opts.requiredFlag);
274
- }
275
- function onResponse(config, options, requiredFlag) {
276
- const triggerOutput = options.root[options.triggerId || options.trigger?.id];
277
- const flags = triggerOutput?.flags;
278
- const numberOfInputMessages = triggerOutput?.body?.length ?? 0;
279
- const outputBody = config.outputs?.body;
280
- const outputStatus = config.outputs?.status;
281
- requiredFlag = config.config?.requiredFlag || requiredFlag;
282
- let headersToSet = {};
283
- if (outputBody?.headersToSet) {
284
- headersToSet = outputBody.headersToSet;
285
- }
286
- if (options.root?.state?.['_$hsRetryAfter_'] && !Object.keys(headersToSet).some(x => x.toLocaleLowerCase() === 'retry-after')) {
287
- const retryAfter = options.root.state['_$hsRetryAfter_'];
288
- headersToSet['retry-after'] = retryAfter;
289
- }
290
- if (headersToSet) {
291
- for (const [key, value] of Object.entries(headersToSet)) {
292
- options.request.headers[key] = value;
293
- }
294
- }
295
- if (!triggerOutput) {
296
- return;
297
- }
298
- let responsePayload;
299
- if (outputBody?.headersToSet && outputBody?.responses) {
300
- responsePayload = outputBody.responses;
301
- }
302
- else {
303
- responsePayload = outputBody;
304
- }
305
- const redactedResponse = {
306
- message: `<Redacted Response>. Client does not have required permission flag: ${requiredFlag}`,
307
- error: false,
308
- };
309
- if (responsePayload && Array.isArray(responsePayload) && responsePayload.length === numberOfInputMessages) {
310
- return {
311
- status: headersToSet['retry-after'] ? 429 : (outputStatus ? outputStatus : ((responsePayload && responsePayload instanceof Error) ? 500 : 200)),
312
- value: responsePayload.map(x => {
313
- if (x && typeof x === 'object' && x.statusCode && x.body) {
314
- if (requiredFlag && !flags?.includes(requiredFlag) && !(x.body instanceof Error)) {
315
- return Object.assign({}, x, { body: redactedResponse });
316
- }
317
- if (x.body instanceof Error) {
318
- return Object.assign({}, x, { body: { message: x.body.message, error: true } });
319
- }
320
- return x;
321
- }
322
- return {
323
- statusCode: x instanceof Error ? (headersToSet['retry-after'] ? 429 : 500) : 200,
324
- body: x instanceof Error ? ({
325
- message: x.message,
326
- error: true
327
- }) : (requiredFlag && flags?.includes(requiredFlag) ? x : redactedResponse),
328
- };
329
- })
330
- };
331
- }
332
- return {
333
- status: headersToSet['retry-after'] ? 429 : (outputStatus ? outputStatus : ((responsePayload && responsePayload instanceof Error) ? 500 : 200)),
334
- value: responsePayload instanceof Error ? ({
335
- message: responsePayload.message,
336
- error: true
337
- }) : (requiredFlag && flags?.includes(requiredFlag) ? responsePayload : redactedResponse),
338
- cacheMaxAge: 0,
339
- };
340
- }
341
- function parsePrices(priceData, timeZone = 'UTC') {
342
- const result = [];
343
- const defaultStartDate = convertDateToDatetimeTZ(new Date(0).toISOString(), timeZone);
344
- const defaultEndDate = convertDateToDatetimeTZ(new Date('2099-01-01T00:00:00Z').toISOString(), timeZone);
345
- for (let i = 0; i < priceData.length; i += 1) {
346
- const priceChanges = (priceData[i].price_changes || []).map(x => ({
347
- effective_from: x.effective_from ? (!isNaN(new Date(x.effective_from).getTime()) ? convertDateToDatetimeTZ(x.effective_from, timeZone) : null) : defaultStartDate,
348
- effective_until: x.effective_until ? (!isNaN(new Date(x.effective_until).getTime()) ? convertDateToDatetimeTZ(x.effective_until, timeZone) : null) : defaultEndDate,
349
- price: x.price,
350
- price_type: x.price_type,
351
- }));
352
- const rrpPriceTypes = parsePriceType(priceChanges.filter((x) => x.price_type === 'rrp'));
353
- const permPriceTypes = parsePriceType(priceChanges.filter((x) => x.price_type === 'perm'));
354
- const posPriceTypes = parsePriceType(priceChanges.filter((x) => x.price_type === 'pos'));
355
- let currentPrice;
356
- let currentPriceType;
357
- if (rrpPriceTypes.current) {
358
- currentPrice = rrpPriceTypes.current;
359
- currentPriceType = 'rrp';
360
- }
361
- if (permPriceTypes.current) {
362
- currentPrice = permPriceTypes.current;
363
- currentPriceType = 'perm';
364
- }
365
- if (posPriceTypes.current) {
366
- currentPrice = posPriceTypes.current;
367
- currentPriceType = 'pos';
368
- }
369
- result.push({
370
- ...priceData[i],
371
- current_price: currentPrice,
372
- current_price_type: currentPriceType,
373
- rrp: rrpPriceTypes,
374
- perm: permPriceTypes,
375
- pos: posPriceTypes
376
- });
377
- }
378
- return result;
379
- }
380
- function parsePriceType(priceTypeData, now = new Date()) {
381
- if (!priceTypeData) {
382
- return {
383
- current: undefined,
384
- historical: [],
385
- future: []
386
- };
387
- }
388
- const historicalEntries = [];
389
- const futureEntries = [];
390
- const currentEntries = [];
391
- for (let i = 0; i < priceTypeData.length; i += 1) {
392
- const price = priceTypeData[i];
393
- if (price.effective_from !== null && price.effective_until !== null) {
394
- const priceWithoutNulls = price;
395
- if (priceWithoutNulls.effective_from.getTime() > priceWithoutNulls.effective_until.getTime()) {
396
- continue;
397
- }
398
- else if (priceWithoutNulls.effective_from.getTime() > now.getTime()) {
399
- futureEntries.push(priceWithoutNulls);
400
- }
401
- else if (priceWithoutNulls.effective_until.getTime() < now.getTime()) {
402
- historicalEntries.push(priceWithoutNulls);
403
- }
404
- else {
405
- currentEntries.push(priceWithoutNulls);
406
- }
407
- }
408
- }
409
- const [currentEntry, ...otherFutureEntries] = currentEntries.sort(createSortPriceTypes(false));
410
- const sortedHistoricalEntries = historicalEntries.concat(otherFutureEntries).sort(createSortPriceTypes(true));
411
- const sortedFutureEntries = futureEntries.sort(createSortPriceTypes(true));
412
- return {
413
- current: currentEntry,
414
- historical: sortedHistoricalEntries,
415
- future: sortedFutureEntries
416
- };
417
- }
418
- function createSortPriceTypes(descending) {
419
- return function (a, b) {
420
- let effectiveFromSort;
421
- if (descending) {
422
- effectiveFromSort = b.effective_from.getTime() - a.effective_from.getTime();
423
- }
424
- else {
425
- effectiveFromSort = a.effective_from.getTime() - b.effective_from.getTime();
426
- }
427
- if (effectiveFromSort === 0) {
428
- if (!descending) {
429
- return b.effective_until.getTime() - a.effective_until.getTime();
430
- }
431
- return a.effective_until.getTime() - b.effective_until.getTime();
432
- }
433
- return effectiveFromSort;
434
- };
435
- }
436
- function convertDateToDatetimeTZ(dateString, timeZone) {
437
- let normDateString = '';
438
- if (dateString.includes('T')) {
439
- normDateString = dateString.slice(0, 19);
440
- }
441
- else {
442
- normDateString = dateString + 'T00:00:00';
443
- }
444
- console.error(dateString, normDateString + getOffsetString(timeZone));
445
- return new Date(normDateString + getOffsetString(timeZone));
446
- }
447
- function getOffsetString(timeZone) {
448
- const today = new Date(`${new Date().toISOString().slice(0, 10)}T00:00:00Z`);
449
- const locale = today.toLocaleString("sv-SE", { timeZone });
450
- const tzDate = new Date(locale);
451
- const offsetMinutes = Math.ceil(tzDate.getTime() - today.getTime()) / 60000;
452
- const sign = offsetMinutes >= 0 ? "+" : "-";
453
- const abs = Math.abs(offsetMinutes);
454
- const hours = String(Math.floor(abs / 60)).padStart(2, "0");
455
- const minutes = String(abs % 60).padStart(2, "0");
456
- return `${sign}${hours}:${minutes}`;
457
- }
@@ -1,74 +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
- exports.default = validate;
7
- const ajv_1 = __importDefault(require("ajv"));
8
- const ajv_formats_1 = __importDefault(require("ajv-formats"));
9
- const contracts_1 = require("../contracts");
10
- function validate(payload, schema, options) {
11
- const ajv = new ajv_1.default({
12
- allErrors: true,
13
- coerceTypes: false,
14
- verbose: false,
15
- strictSchema: false,
16
- logger: {
17
- log: options.log.log,
18
- warn: options.log.log,
19
- error: options.log.error,
20
- },
21
- });
22
- (0, ajv_formats_1.default)(ajv);
23
- const schemas = [
24
- contracts_1.Currency,
25
- contracts_1.Country,
26
- contracts_1.Money,
27
- contracts_1.Total,
28
- contracts_1.Order,
29
- contracts_1.OrderAddress,
30
- contracts_1.OrderCustomer,
31
- contracts_1.OrderItem,
32
- contracts_1.OrderPayment,
33
- contracts_1.OrderShipment,
34
- contracts_1.OrderShipmentItem,
35
- contracts_1.OrderShipmentItemReturned,
36
- contracts_1.OrderShipmentPOS,
37
- contracts_1.OrderShipmentPOSOutbound,
38
- contracts_1.OrderShipmentPOSReturn,
39
- contracts_1.OrderShipmentShipped,
40
- contracts_1.OrderShipmentShippedOutbound,
41
- contracts_1.OrderShipmentShippedReturn,
42
- ].filter(Boolean);
43
- for (const s of schemas) {
44
- try {
45
- ajv.addSchema(s);
46
- }
47
- catch {
48
- }
49
- }
50
- const validate = ajv.compile(schema);
51
- if (!validate(payload)) {
52
- const errors = validate.errors?.map(error => `${error.instancePath} ${error.message}: ${JSON.stringify({
53
- keyword: error.keyword,
54
- instancePath: error.instancePath,
55
- schemaPath: error.instancePath,
56
- params: error.params,
57
- propertyName: error.propertyName,
58
- })}`) ||
59
- [];
60
- options.log.error(`Payload validation failed for object type '${schema.title || schema.$id}' because it did not match the expected schema.` +
61
- errors.join('\n'));
62
- throw new Error(`Payload validation failed for object type '${schema.title || schema.$id}' because it did not match the expected schema` +
63
- errors.join('\n'));
64
- }
65
- else {
66
- try {
67
- options.log.log('Validation succeeded');
68
- }
69
- catch {
70
- void 0;
71
- }
72
- return payload;
73
- }
74
- }
@@ -1,15 +0,0 @@
1
- export { default as Currency } from './currency.schema.json';
2
- export { default as Country } from './country.schema.json';
3
- export { default as Money } from './money.schema.json';
4
- export { default as Total } from './total.schema.json';
5
- export { default as ProductDraft } from './product-draft.schema.json';
6
- export { default as Product } from './product.schema.json';
7
- export { default as ProductCategory } from './product-category.schema.json';
8
- export { default as Category } from './category.schema.json';
9
- export { default as DevelopmentColour } from './development-colour.schema.json';
10
- export { default as Asset } from './asset.schema.json';
11
- export { default as CustomerSegment } from './customer-segment.schema.json';
12
- export { default as MarketingPref } from './marketing-preferences.schema.json';
13
- export * from './order';
14
- export { default as Order } from './order.schema.json';
15
- export * from './messages';
@@ -1,5 +0,0 @@
1
- export { default as MessageProductDraft } from './product-draft.schema.json';
2
- export { default as MessageEanChange } from './ean-change.schema.json';
3
- export { default as MessageProductChange } from './product.schema.json';
4
- export { default as MessageProductCategory } from './product-category.schema.json';
5
- export * from './order';
@@ -1,6 +0,0 @@
1
- export { default as MessageOrderDelivered } from './delivered.schema.json';
2
- export { default as MessageOrderNew } from './new.schema.json';
3
- export { default as MessageOrderProcessed } from './processed.schema.json';
4
- export { default as MessageOrderReturnInitiated } from './return-initiated.schema.json';
5
- export { default as MessageOrderReturned } from './returned.schema.json';
6
- export { default as MessageOrderShipped } from './shipped.schema.json';
@@ -1,6 +0,0 @@
1
- export { default as OrderAddress } from './address.schema.json';
2
- export { default as OrderCustomer } from './customer.schema.json';
3
- export { default as OrderItem } from './item.schema.json';
4
- export { default as OrderPayment } from './payment.schema.json';
5
- export { default as OrderShipment } from './shipment.schema.json';
6
- export * from './shipment';
@@ -1,6 +0,0 @@
1
- export { default as OrderShipmentItem } from './item.schema.json';
2
- export { default as OrderShipmentPOS } from './pos.schema.json';
3
- export { default as OrderShipmentShipped } from './shipped.schema.json';
4
- export * from './item';
5
- export * from './pos';
6
- export * from './shipped';
@@ -1 +0,0 @@
1
- export { default as OrderShipmentItemReturned } from './returned.schema.json';
@@ -1,2 +0,0 @@
1
- export { default as OrderShipmentPOSOutbound } from './outbound.schema.json';
2
- export { default as OrderShipmentPOSReturn } from './return.schema.json';
@@ -1,2 +0,0 @@
1
- export { default as OrderShipmentShippedOutbound } from './outbound.schema.json';
2
- export { default as OrderShipmentShippedReturn } from './return.schema.json';
@@ -1,51 +0,0 @@
1
- declare const schema: {
2
- readonly $schema: "http://json-schema.org/draft-07/schema#";
3
- readonly title: "Asset";
4
- readonly type: "object";
5
- readonly additionalProperties: false;
6
- readonly properties: {
7
- readonly product_id: {
8
- readonly type: "string";
9
- };
10
- readonly dash_id: {
11
- readonly type: "string";
12
- };
13
- readonly dash_folder_path: {
14
- readonly type: "string";
15
- };
16
- readonly source_url: {
17
- readonly type: "string";
18
- };
19
- readonly created_at: {
20
- readonly type: "string";
21
- readonly format: "date-time";
22
- };
23
- readonly last_modified_at: {
24
- readonly type: "string";
25
- readonly format: "date-time";
26
- };
27
- readonly width: {
28
- readonly type: "integer";
29
- readonly minimum: 0;
30
- };
31
- readonly height: {
32
- readonly type: "integer";
33
- readonly minimum: 0;
34
- };
35
- readonly meta: {
36
- readonly type: "object";
37
- readonly additionalProperties: true;
38
- };
39
- readonly content_type: {
40
- readonly type: "string";
41
- readonly pattern: "^[a-z0-9-/]+$";
42
- };
43
- readonly file_name: {
44
- readonly type: "string";
45
- readonly pattern: "^[a-z0-9-.]+$";
46
- };
47
- };
48
- readonly required: readonly ["source_url", "content_type", "last_modified_at"];
49
- readonly $id: "https://shushed.example.com/asset.json";
50
- };
51
- export default schema;