@shushed/helpers 0.0.202-v2-20251208085030 → 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 (236) 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/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 -625
  101. package/dist/cjs/src-public/bigquery.js +0 -59
  102. package/dist/cjs/src-public/centra.js +0 -1053
  103. package/dist/cjs/src-public/cloudtasks.js +0 -207
  104. package/dist/cjs/src-public/dato.js +0 -680
  105. package/dist/cjs/src-public/env.js +0 -900
  106. package/dist/cjs/src-public/getEventTime.js +0 -28
  107. package/dist/cjs/src-public/index.js +0 -52
  108. package/dist/cjs/src-public/ipValidation.js +0 -167
  109. package/dist/cjs/src-public/jwks.js +0 -108
  110. package/dist/cjs/src-public/pubsub.js +0 -423
  111. package/dist/cjs/src-public/rateLimit.js +0 -140
  112. package/dist/cjs/src-public/redisClient.js +0 -44
  113. package/dist/cjs/src-public/runtime.js +0 -145
  114. package/dist/cjs/src-public/sanitize.js +0 -25
  115. package/dist/cjs/src-public/scheduler.js +0 -247
  116. package/dist/cjs/src-public/secret.js +0 -16
  117. package/dist/cjs/src-public/setHeaders.js +0 -16
  118. package/dist/cjs/src-public/types.js +0 -2
  119. package/dist/cjs/src-public/utils.js +0 -457
  120. package/dist/cjs/src-public/validate.js +0 -40
  121. package/dist/types/dist-dereferenced/asset.d.ts +0 -51
  122. package/dist/types/dist-dereferenced/category.d.ts +0 -58
  123. package/dist/types/dist-dereferenced/country.d.ts +0 -8
  124. package/dist/types/dist-dereferenced/currency.d.ts +0 -8
  125. package/dist/types/dist-dereferenced/customer-segment.d.ts +0 -26
  126. package/dist/types/dist-dereferenced/development-colour.d.ts +0 -114
  127. package/dist/types/dist-dereferenced/index.d.ts +0 -16
  128. package/dist/types/dist-dereferenced/marketing-preferences.d.ts +0 -31
  129. package/dist/types/dist-dereferenced/messages/ean-change.d.ts +0 -17
  130. package/dist/types/dist-dereferenced/messages/index.d.ts +0 -6
  131. package/dist/types/dist-dereferenced/messages/order/delivered.d.ts +0 -3414
  132. package/dist/types/dist-dereferenced/messages/order/index.d.ts +0 -6
  133. package/dist/types/dist-dereferenced/messages/order/new.d.ts +0 -3414
  134. package/dist/types/dist-dereferenced/messages/order/processed.d.ts +0 -3408
  135. package/dist/types/dist-dereferenced/messages/order/return-initiated.d.ts +0 -3414
  136. package/dist/types/dist-dereferenced/messages/order/returned.d.ts +0 -3413
  137. package/dist/types/dist-dereferenced/messages/order/shipped.d.ts +0 -3412
  138. package/dist/types/dist-dereferenced/messages/price-change.d.ts +0 -67
  139. package/dist/types/dist-dereferenced/messages/product-category.d.ts +0 -33
  140. package/dist/types/dist-dereferenced/messages/product-draft.d.ts +0 -589
  141. package/dist/types/dist-dereferenced/messages/product.d.ts +0 -628
  142. package/dist/types/dist-dereferenced/money.d.ts +0 -41
  143. package/dist/types/dist-dereferenced/order/address.d.ts +0 -98
  144. package/dist/types/dist-dereferenced/order/customer.d.ts +0 -309
  145. package/dist/types/dist-dereferenced/order/index.d.ts +0 -3404
  146. package/dist/types/dist-dereferenced/order/item.d.ts +0 -336
  147. package/dist/types/dist-dereferenced/order/orderMain.d.ts +0 -3399
  148. package/dist/types/dist-dereferenced/order/payment.d.ts +0 -94
  149. package/dist/types/dist-dereferenced/order/shipment/index.d.ts +0 -253
  150. package/dist/types/dist-dereferenced/order/shipment/item/index.d.ts +0 -19
  151. package/dist/types/dist-dereferenced/order/shipment/item/itemMain.d.ts +0 -18
  152. package/dist/types/dist-dereferenced/order/shipment/item/returned.d.ts +0 -34
  153. package/dist/types/dist-dereferenced/order/shipment/pos/index.d.ts +0 -282
  154. package/dist/types/dist-dereferenced/order/shipment/pos/outbound.d.ts +0 -320
  155. package/dist/types/dist-dereferenced/order/shipment/pos/posMain.d.ts +0 -280
  156. package/dist/types/dist-dereferenced/order/shipment/pos/return.d.ts +0 -331
  157. package/dist/types/dist-dereferenced/order/shipment/shipmentMain.d.ts +0 -250
  158. package/dist/types/dist-dereferenced/order/shipment/shipped/index.d.ts +0 -288
  159. package/dist/types/dist-dereferenced/order/shipment/shipped/outbound.d.ts +0 -286
  160. package/dist/types/dist-dereferenced/order/shipment/shipped/return.d.ts +0 -287
  161. package/dist/types/dist-dereferenced/order/shipment/shipped/shippedMain.d.ts +0 -286
  162. package/dist/types/dist-dereferenced/price.d.ts +0 -58
  163. package/dist/types/dist-dereferenced/product-category.d.ts +0 -24
  164. package/dist/types/dist-dereferenced/product-draft.d.ts +0 -580
  165. package/dist/types/dist-dereferenced/product.d.ts +0 -619
  166. package/dist/types/dist-dereferenced/stock.d.ts +0 -74
  167. package/dist/types/dist-dereferenced/total.d.ts +0 -172
  168. package/dist/types/dist-types/asset.d.ts +0 -16
  169. package/dist/types/dist-types/category.d.ts +0 -20
  170. package/dist/types/dist-types/country.d.ts +0 -2
  171. package/dist/types/dist-types/currency.d.ts +0 -2
  172. package/dist/types/dist-types/customer-segment.d.ts +0 -6
  173. package/dist/types/dist-types/development-colour.d.ts +0 -31
  174. package/dist/types/dist-types/index.d.ts +0 -16
  175. package/dist/types/dist-types/marketing-preferences.d.ts +0 -9
  176. package/dist/types/dist-types/messages/ean-change.d.ts +0 -5
  177. package/dist/types/dist-types/messages/index.d.ts +0 -6
  178. package/dist/types/dist-types/messages/order/delivered.d.ts +0 -292
  179. package/dist/types/dist-types/messages/order/index.d.ts +0 -6
  180. package/dist/types/dist-types/messages/order/new.d.ts +0 -292
  181. package/dist/types/dist-types/messages/order/processed.d.ts +0 -292
  182. package/dist/types/dist-types/messages/order/return-initiated.d.ts +0 -292
  183. package/dist/types/dist-types/messages/order/returned.d.ts +0 -293
  184. package/dist/types/dist-types/messages/order/shipped.d.ts +0 -293
  185. package/dist/types/dist-types/messages/price-change.d.ts +0 -16
  186. package/dist/types/dist-types/messages/product-category.d.ts +0 -7
  187. package/dist/types/dist-types/messages/product-draft.d.ts +0 -136
  188. package/dist/types/dist-types/messages/product.d.ts +0 -144
  189. package/dist/types/dist-types/money.d.ts +0 -11
  190. package/dist/types/dist-types/order/address.d.ts +0 -27
  191. package/dist/types/dist-types/order/customer.d.ts +0 -81
  192. package/dist/types/dist-types/order/index.d.ts +0 -8
  193. package/dist/types/dist-types/order/item.d.ts +0 -85
  194. package/dist/types/dist-types/order/orderMain.d.ts +0 -289
  195. package/dist/types/dist-types/order/payment.d.ts +0 -26
  196. package/dist/types/dist-types/order/shipment/index.d.ts +0 -6
  197. package/dist/types/dist-types/order/shipment/item/index.d.ts +0 -4
  198. package/dist/types/dist-types/order/shipment/item/itemMain.d.ts +0 -6
  199. package/dist/types/dist-types/order/shipment/item/returned.d.ts +0 -11
  200. package/dist/types/dist-types/order/shipment/pos/index.d.ts +0 -5
  201. package/dist/types/dist-types/order/shipment/pos/outbound.d.ts +0 -76
  202. package/dist/types/dist-types/order/shipment/pos/posMain.d.ts +0 -71
  203. package/dist/types/dist-types/order/shipment/pos/return.d.ts +0 -75
  204. package/dist/types/dist-types/order/shipment/shipmentMain.d.ts +0 -62
  205. package/dist/types/dist-types/order/shipment/shipped/index.d.ts +0 -5
  206. package/dist/types/dist-types/order/shipment/shipped/outbound.d.ts +0 -68
  207. package/dist/types/dist-types/order/shipment/shipped/return.d.ts +0 -68
  208. package/dist/types/dist-types/order/shipment/shipped/shippedMain.d.ts +0 -69
  209. package/dist/types/dist-types/price.d.ts +0 -15
  210. package/dist/types/dist-types/product-category.d.ts +0 -6
  211. package/dist/types/dist-types/product-draft.d.ts +0 -135
  212. package/dist/types/dist-types/product.d.ts +0 -143
  213. package/dist/types/dist-types/stock.d.ts +0 -19
  214. package/dist/types/dist-types/total.d.ts +0 -44
  215. package/dist/types/index.d.ts +0 -3
  216. package/dist/types/src-public/airtable.d.ts +0 -227
  217. package/dist/types/src-public/bigquery.d.ts +0 -17
  218. package/dist/types/src-public/centra.d.ts +0 -176
  219. package/dist/types/src-public/cloudtasks.d.ts +0 -74
  220. package/dist/types/src-public/dato.d.ts +0 -95
  221. package/dist/types/src-public/env.d.ts +0 -144
  222. package/dist/types/src-public/getEventTime.d.ts +0 -1
  223. package/dist/types/src-public/index.d.ts +0 -18
  224. package/dist/types/src-public/ipValidation.d.ts +0 -15
  225. package/dist/types/src-public/jwks.d.ts +0 -15
  226. package/dist/types/src-public/pubsub.d.ts +0 -95
  227. package/dist/types/src-public/rateLimit.d.ts +0 -21
  228. package/dist/types/src-public/redisClient.d.ts +0 -6
  229. package/dist/types/src-public/runtime.d.ts +0 -58
  230. package/dist/types/src-public/sanitize.d.ts +0 -4
  231. package/dist/types/src-public/scheduler.d.ts +0 -71
  232. package/dist/types/src-public/secret.d.ts +0 -6
  233. package/dist/types/src-public/setHeaders.d.ts +0 -13
  234. package/dist/types/src-public/types.d.ts +0 -264
  235. package/dist/types/src-public/utils.d.ts +0 -101
  236. 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,40 +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
- function validate(payload, schema, options) {
10
- const ajv = new ajv_1.default({
11
- allErrors: true,
12
- coerceTypes: false,
13
- verbose: false,
14
- strictSchema: false,
15
- logger: {
16
- log: options.log.log,
17
- warn: options.log.log,
18
- error: options.log.error,
19
- },
20
- });
21
- (0, ajv_formats_1.default)(ajv);
22
- const validate = ajv.compile(schema);
23
- if (!validate(payload)) {
24
- const errors = validate.errors?.map(error => `${error.instancePath} ${error.message}: ${JSON.stringify({
25
- keyword: error.keyword,
26
- instancePath: error.instancePath,
27
- schemaPath: error.instancePath,
28
- params: error.params,
29
- propertyName: error.propertyName,
30
- })}`) ||
31
- [];
32
- options.log.error(`Payload validation failed for object type '${schema.title || schema.$id}' because it did not match the expected schema.` +
33
- errors.join('\n'));
34
- throw new Error(`Payload validation failed for object type '${schema.title || schema.$id}' because it did not match the expected schema` +
35
- errors.join('\n'));
36
- }
37
- else {
38
- return payload;
39
- }
40
- }
@@ -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;
@@ -1,58 +0,0 @@
1
- declare const schema: {
2
- readonly $schema: "http://json-schema.org/draft-07/schema#";
3
- readonly title: "Category";
4
- readonly additionalProperties: false;
5
- readonly type: "object";
6
- readonly properties: {
7
- readonly centra_id: {
8
- readonly type: "string";
9
- };
10
- readonly category_code: {
11
- readonly type: "string";
12
- };
13
- readonly parent_category_code: {
14
- readonly type: "string";
15
- };
16
- readonly parent_centra_id: {
17
- readonly type: "string";
18
- };
19
- readonly categorisation_rules: {
20
- readonly type: "array";
21
- readonly items: {
22
- readonly type: "string";
23
- };
24
- };
25
- readonly translations: {
26
- readonly type: "array";
27
- readonly items: {
28
- readonly type: "object";
29
- readonly properties: {
30
- readonly language_code: {
31
- readonly type: "string";
32
- };
33
- readonly name: {
34
- readonly type: "string";
35
- };
36
- };
37
- };
38
- };
39
- readonly uri: {
40
- readonly type: "string";
41
- };
42
- readonly name: {
43
- readonly type: "string";
44
- };
45
- readonly status: {
46
- readonly type: "string";
47
- readonly enum: readonly ["ACTIVE", "INACTIVE", "DISABLED"];
48
- };
49
- };
50
- readonly required: readonly ["name", "status", "translations"];
51
- readonly anyOf: readonly [{
52
- readonly required: readonly ["centra_id", "parent_centra_id"];
53
- }, {
54
- readonly required: readonly ["category_code", "parent_category_code"];
55
- }];
56
- readonly $id: "https://shushed.example.com/category.schema.json";
57
- };
58
- export default schema;
@@ -1,8 +0,0 @@
1
- declare const schema: {
2
- readonly $schema: "http://json-schema.org/draft-07/schema#";
3
- readonly title: "Country";
4
- readonly type: "string";
5
- readonly enum: readonly ["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CD", "CG", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MK", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "UM", "US", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"];
6
- readonly $id: "https://shushed.example.com/country.schema.json";
7
- };
8
- export default schema;
@@ -1,8 +0,0 @@
1
- declare const schema: {
2
- readonly $schema: "http://json-schema.org/draft-07/schema#";
3
- readonly title: "Currency";
4
- readonly type: "string";
5
- readonly enum: readonly ["AFN", "ALL", "DZD", "USD", "EUR", "AOA", "XCD", "ARS", "AMD", "AWG", "AUD", "AZN", "BSD", "BHD", "BDT", "BBD", "BYN", "BZD", "XOF", "BMD", "BTN", "INR", "BOB", "BOV", "BAM", "BWP", "NOK", "BRL", "BND", "BGN", "BIF", "CVE", "KHR", "XAF", "CAD", "KYD", "CLF", "CLP", "CNY", "COP", "COU", "KMF", "CDF", "NZD", "CRC", "CUC", "CUP", "ANG", "CZK", "DKK", "DJF", "DOP", "EGP", "SVC", "ERN", "ETB", "FKP", "FJD", "XPF", "GMD", "GEL", "GHS", "GIP", "GTQ", "GBP", "GNF", "GYD", "HTG", "HNL", "HKD", "HUF", "ISK", "IDR", "XDR", "IRR", "IQD", "ILS", "JMD", "JPY", "JOD", "KZT", "KES", "KPW", "KRW", "KWD", "KGS", "LAK", "LBP", "LSL", "ZAR", "LRD", "LYD", "CHF", "MOP", "MGA", "MWK", "MYR", "MVR", "MRU", "MUR", "XUA", "MXN", "MXV", "MDL", "MNT", "MAD", "MZN", "MMK", "NAD", "NPR", "NIO", "NGN", "OMR", "PKR", "PAB", "PGK", "PYG", "PEN", "PHP", "PLN", "QAR", "MKD", "RON", "RUB", "RWF", "SHP", "WST", "STN", "SAR", "RSD", "SCR", "SLE", "SGD", "XSU", "SBD", "SOS", "SSP", "LKR", "SDG", "SRD", "SZL", "SEK", "CHE", "CHW", "SYP", "TWD", "TJS", "TZS", "THB", "TOP", "TTD", "TND", "TRY", "TMT", "UGX", "UAH", "AED", "USN", "UYI", "UYU", "UZS", "VUV", "VEF", "VED", "VND", "YER", "ZMW", "ZWL"];
6
- readonly $id: "https://shushed.example.com/currency.schema.json";
7
- };
8
- export default schema;
@@ -1,26 +0,0 @@
1
- declare const schema: {
2
- readonly $schema: "http://json-schema.org/draft-07/schema#";
3
- readonly title: "CustomerSegment";
4
- readonly type: "object";
5
- readonly additionalProperties: false;
6
- readonly properties: {
7
- readonly bc_id: {
8
- readonly type: "string";
9
- readonly maxLength: 20;
10
- };
11
- readonly email: {
12
- readonly type: "string";
13
- readonly format: "email";
14
- readonly example: "alice.johnson@example.com";
15
- };
16
- readonly segments: {
17
- readonly type: readonly ["array", "null"];
18
- readonly items: {
19
- readonly type: "string";
20
- };
21
- };
22
- };
23
- readonly required: readonly ["bc_id", "email", "segments"];
24
- readonly $id: "https://shushed.example.com/order/customer-segment.schema.json";
25
- };
26
- export default schema;