@shushed/helpers 0.0.200-v2-20251128093319 → 0.0.200
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.
- package/dist/index.d.ts +34970 -0
- package/dist/index.js +113017 -0
- package/dist/package.json +3 -6
- package/package.json +4 -7
- package/dist/cjs/dist-dereferenced/asset.js +0 -4
- package/dist/cjs/dist-dereferenced/category.js +0 -4
- package/dist/cjs/dist-dereferenced/country.js +0 -4
- package/dist/cjs/dist-dereferenced/currency.js +0 -4
- package/dist/cjs/dist-dereferenced/customer-segment.js +0 -4
- package/dist/cjs/dist-dereferenced/development-colour.js +0 -4
- package/dist/cjs/dist-dereferenced/index.js +0 -69
- package/dist/cjs/dist-dereferenced/marketing-preferences.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/ean-change.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/index.js +0 -50
- package/dist/cjs/dist-dereferenced/messages/order/delivered.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/order/index.js +0 -18
- package/dist/cjs/dist-dereferenced/messages/order/new.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/order/processed.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/order/return-initiated.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/order/returned.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/order/shipped.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/price-change.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/product-category.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/product-draft.js +0 -4
- package/dist/cjs/dist-dereferenced/messages/product.js +0 -4
- package/dist/cjs/dist-dereferenced/money.js +0 -4
- package/dist/cjs/dist-dereferenced/order/address.js +0 -4
- package/dist/cjs/dist-dereferenced/order/customer.js +0 -4
- package/dist/cjs/dist-dereferenced/order/index.js +0 -51
- package/dist/cjs/dist-dereferenced/order/item.js +0 -4
- package/dist/cjs/dist-dereferenced/order/orderMain.js +0 -4
- package/dist/cjs/dist-dereferenced/order/payment.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/index.js +0 -45
- package/dist/cjs/dist-dereferenced/order/shipment/item/index.js +0 -11
- package/dist/cjs/dist-dereferenced/order/shipment/item/itemMain.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/item/returned.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/pos/index.js +0 -13
- package/dist/cjs/dist-dereferenced/order/shipment/pos/outbound.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/pos/posMain.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/pos/return.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/shipmentMain.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/index.js +0 -13
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/outbound.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/return.js +0 -4
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/shippedMain.js +0 -4
- package/dist/cjs/dist-dereferenced/price.js +0 -4
- package/dist/cjs/dist-dereferenced/product-category.js +0 -4
- package/dist/cjs/dist-dereferenced/product-draft.js +0 -4
- package/dist/cjs/dist-dereferenced/product.js +0 -4
- package/dist/cjs/dist-dereferenced/stock.js +0 -4
- package/dist/cjs/dist-dereferenced/total.js +0 -4
- package/dist/cjs/dist-types/asset.js +0 -2
- package/dist/cjs/dist-types/category.js +0 -2
- package/dist/cjs/dist-types/country.js +0 -2
- package/dist/cjs/dist-types/currency.js +0 -2
- package/dist/cjs/dist-types/customer-segment.js +0 -2
- package/dist/cjs/dist-types/development-colour.js +0 -2
- package/dist/cjs/dist-types/index.js +0 -38
- package/dist/cjs/dist-types/marketing-preferences.js +0 -2
- package/dist/cjs/dist-types/messages/ean-change.js +0 -2
- package/dist/cjs/dist-types/messages/index.js +0 -37
- package/dist/cjs/dist-types/messages/order/delivered.js +0 -2
- package/dist/cjs/dist-types/messages/order/index.js +0 -2
- package/dist/cjs/dist-types/messages/order/new.js +0 -2
- package/dist/cjs/dist-types/messages/order/processed.js +0 -2
- package/dist/cjs/dist-types/messages/order/return-initiated.js +0 -2
- package/dist/cjs/dist-types/messages/order/returned.js +0 -2
- package/dist/cjs/dist-types/messages/order/shipped.js +0 -2
- package/dist/cjs/dist-types/messages/price-change.js +0 -2
- package/dist/cjs/dist-types/messages/product-category.js +0 -2
- package/dist/cjs/dist-types/messages/product-draft.js +0 -2
- package/dist/cjs/dist-types/messages/product.js +0 -2
- package/dist/cjs/dist-types/money.js +0 -2
- package/dist/cjs/dist-types/order/address.js +0 -2
- package/dist/cjs/dist-types/order/customer.js +0 -2
- package/dist/cjs/dist-types/order/index.js +0 -37
- package/dist/cjs/dist-types/order/item.js +0 -2
- package/dist/cjs/dist-types/order/orderMain.js +0 -2
- package/dist/cjs/dist-types/order/payment.js +0 -2
- package/dist/cjs/dist-types/order/shipment/index.js +0 -39
- package/dist/cjs/dist-types/order/shipment/item/index.js +0 -2
- package/dist/cjs/dist-types/order/shipment/item/itemMain.js +0 -2
- package/dist/cjs/dist-types/order/shipment/item/returned.js +0 -2
- package/dist/cjs/dist-types/order/shipment/pos/index.js +0 -2
- package/dist/cjs/dist-types/order/shipment/pos/outbound.js +0 -2
- package/dist/cjs/dist-types/order/shipment/pos/posMain.js +0 -2
- package/dist/cjs/dist-types/order/shipment/pos/return.js +0 -2
- package/dist/cjs/dist-types/order/shipment/shipmentMain.js +0 -2
- package/dist/cjs/dist-types/order/shipment/shipped/index.js +0 -2
- package/dist/cjs/dist-types/order/shipment/shipped/outbound.js +0 -2
- package/dist/cjs/dist-types/order/shipment/shipped/return.js +0 -2
- package/dist/cjs/dist-types/order/shipment/shipped/shippedMain.js +0 -2
- package/dist/cjs/dist-types/price.js +0 -2
- package/dist/cjs/dist-types/product-category.js +0 -2
- package/dist/cjs/dist-types/product-draft.js +0 -2
- package/dist/cjs/dist-types/product.js +0 -2
- package/dist/cjs/dist-types/stock.js +0 -2
- package/dist/cjs/dist-types/total.js +0 -2
- package/dist/cjs/index.js +0 -39
- package/dist/cjs/src-public/airtable.js +0 -590
- package/dist/cjs/src-public/bigquery.js +0 -59
- package/dist/cjs/src-public/cloudtasks.js +0 -207
- package/dist/cjs/src-public/dato.js +0 -680
- package/dist/cjs/src-public/env.js +0 -897
- package/dist/cjs/src-public/getEventTime.js +0 -28
- package/dist/cjs/src-public/index.js +0 -50
- package/dist/cjs/src-public/ipValidation.js +0 -167
- package/dist/cjs/src-public/jwks.js +0 -108
- package/dist/cjs/src-public/pubsub.js +0 -423
- package/dist/cjs/src-public/rateLimit.js +0 -140
- package/dist/cjs/src-public/redisClient.js +0 -44
- package/dist/cjs/src-public/runtime.js +0 -141
- package/dist/cjs/src-public/sanitize.js +0 -25
- package/dist/cjs/src-public/scheduler.js +0 -247
- package/dist/cjs/src-public/secret.js +0 -16
- package/dist/cjs/src-public/setHeaders.js +0 -16
- package/dist/cjs/src-public/types.js +0 -2
- package/dist/cjs/src-public/utils.js +0 -454
- package/dist/cjs/src-public/validate.js +0 -40
- package/dist/types/dist-dereferenced/asset.d.ts +0 -51
- package/dist/types/dist-dereferenced/category.d.ts +0 -58
- package/dist/types/dist-dereferenced/country.d.ts +0 -8
- package/dist/types/dist-dereferenced/currency.d.ts +0 -8
- package/dist/types/dist-dereferenced/customer-segment.d.ts +0 -26
- package/dist/types/dist-dereferenced/development-colour.d.ts +0 -114
- package/dist/types/dist-dereferenced/index.d.ts +0 -16
- package/dist/types/dist-dereferenced/marketing-preferences.d.ts +0 -31
- package/dist/types/dist-dereferenced/messages/ean-change.d.ts +0 -17
- package/dist/types/dist-dereferenced/messages/index.d.ts +0 -6
- package/dist/types/dist-dereferenced/messages/order/delivered.d.ts +0 -3414
- package/dist/types/dist-dereferenced/messages/order/index.d.ts +0 -6
- package/dist/types/dist-dereferenced/messages/order/new.d.ts +0 -3414
- package/dist/types/dist-dereferenced/messages/order/processed.d.ts +0 -3408
- package/dist/types/dist-dereferenced/messages/order/return-initiated.d.ts +0 -3414
- package/dist/types/dist-dereferenced/messages/order/returned.d.ts +0 -3413
- package/dist/types/dist-dereferenced/messages/order/shipped.d.ts +0 -3412
- package/dist/types/dist-dereferenced/messages/price-change.d.ts +0 -67
- package/dist/types/dist-dereferenced/messages/product-category.d.ts +0 -33
- package/dist/types/dist-dereferenced/messages/product-draft.d.ts +0 -589
- package/dist/types/dist-dereferenced/messages/product.d.ts +0 -628
- package/dist/types/dist-dereferenced/money.d.ts +0 -41
- package/dist/types/dist-dereferenced/order/address.d.ts +0 -98
- package/dist/types/dist-dereferenced/order/customer.d.ts +0 -309
- package/dist/types/dist-dereferenced/order/index.d.ts +0 -3404
- package/dist/types/dist-dereferenced/order/item.d.ts +0 -336
- package/dist/types/dist-dereferenced/order/orderMain.d.ts +0 -3399
- package/dist/types/dist-dereferenced/order/payment.d.ts +0 -94
- package/dist/types/dist-dereferenced/order/shipment/index.d.ts +0 -253
- package/dist/types/dist-dereferenced/order/shipment/item/index.d.ts +0 -19
- package/dist/types/dist-dereferenced/order/shipment/item/itemMain.d.ts +0 -18
- package/dist/types/dist-dereferenced/order/shipment/item/returned.d.ts +0 -34
- package/dist/types/dist-dereferenced/order/shipment/pos/index.d.ts +0 -282
- package/dist/types/dist-dereferenced/order/shipment/pos/outbound.d.ts +0 -320
- package/dist/types/dist-dereferenced/order/shipment/pos/posMain.d.ts +0 -280
- package/dist/types/dist-dereferenced/order/shipment/pos/return.d.ts +0 -331
- package/dist/types/dist-dereferenced/order/shipment/shipmentMain.d.ts +0 -250
- package/dist/types/dist-dereferenced/order/shipment/shipped/index.d.ts +0 -288
- package/dist/types/dist-dereferenced/order/shipment/shipped/outbound.d.ts +0 -286
- package/dist/types/dist-dereferenced/order/shipment/shipped/return.d.ts +0 -287
- package/dist/types/dist-dereferenced/order/shipment/shipped/shippedMain.d.ts +0 -286
- package/dist/types/dist-dereferenced/price.d.ts +0 -58
- package/dist/types/dist-dereferenced/product-category.d.ts +0 -24
- package/dist/types/dist-dereferenced/product-draft.d.ts +0 -580
- package/dist/types/dist-dereferenced/product.d.ts +0 -619
- package/dist/types/dist-dereferenced/stock.d.ts +0 -74
- package/dist/types/dist-dereferenced/total.d.ts +0 -172
- package/dist/types/dist-types/asset.d.ts +0 -16
- package/dist/types/dist-types/category.d.ts +0 -20
- package/dist/types/dist-types/country.d.ts +0 -2
- package/dist/types/dist-types/currency.d.ts +0 -2
- package/dist/types/dist-types/customer-segment.d.ts +0 -6
- package/dist/types/dist-types/development-colour.d.ts +0 -31
- package/dist/types/dist-types/index.d.ts +0 -16
- package/dist/types/dist-types/marketing-preferences.d.ts +0 -9
- package/dist/types/dist-types/messages/ean-change.d.ts +0 -5
- package/dist/types/dist-types/messages/index.d.ts +0 -6
- package/dist/types/dist-types/messages/order/delivered.d.ts +0 -292
- package/dist/types/dist-types/messages/order/index.d.ts +0 -6
- package/dist/types/dist-types/messages/order/new.d.ts +0 -292
- package/dist/types/dist-types/messages/order/processed.d.ts +0 -292
- package/dist/types/dist-types/messages/order/return-initiated.d.ts +0 -292
- package/dist/types/dist-types/messages/order/returned.d.ts +0 -293
- package/dist/types/dist-types/messages/order/shipped.d.ts +0 -293
- package/dist/types/dist-types/messages/price-change.d.ts +0 -16
- package/dist/types/dist-types/messages/product-category.d.ts +0 -7
- package/dist/types/dist-types/messages/product-draft.d.ts +0 -136
- package/dist/types/dist-types/messages/product.d.ts +0 -144
- package/dist/types/dist-types/money.d.ts +0 -11
- package/dist/types/dist-types/order/address.d.ts +0 -27
- package/dist/types/dist-types/order/customer.d.ts +0 -81
- package/dist/types/dist-types/order/index.d.ts +0 -8
- package/dist/types/dist-types/order/item.d.ts +0 -85
- package/dist/types/dist-types/order/orderMain.d.ts +0 -289
- package/dist/types/dist-types/order/payment.d.ts +0 -26
- package/dist/types/dist-types/order/shipment/index.d.ts +0 -6
- package/dist/types/dist-types/order/shipment/item/index.d.ts +0 -4
- package/dist/types/dist-types/order/shipment/item/itemMain.d.ts +0 -6
- package/dist/types/dist-types/order/shipment/item/returned.d.ts +0 -11
- package/dist/types/dist-types/order/shipment/pos/index.d.ts +0 -5
- package/dist/types/dist-types/order/shipment/pos/outbound.d.ts +0 -76
- package/dist/types/dist-types/order/shipment/pos/posMain.d.ts +0 -71
- package/dist/types/dist-types/order/shipment/pos/return.d.ts +0 -75
- package/dist/types/dist-types/order/shipment/shipmentMain.d.ts +0 -62
- package/dist/types/dist-types/order/shipment/shipped/index.d.ts +0 -5
- package/dist/types/dist-types/order/shipment/shipped/outbound.d.ts +0 -68
- package/dist/types/dist-types/order/shipment/shipped/return.d.ts +0 -68
- package/dist/types/dist-types/order/shipment/shipped/shippedMain.d.ts +0 -69
- package/dist/types/dist-types/price.d.ts +0 -15
- package/dist/types/dist-types/product-category.d.ts +0 -6
- package/dist/types/dist-types/product-draft.d.ts +0 -135
- package/dist/types/dist-types/product.d.ts +0 -143
- package/dist/types/dist-types/stock.d.ts +0 -19
- package/dist/types/dist-types/total.d.ts +0 -44
- package/dist/types/index.d.ts +0 -3
- package/dist/types/src-public/airtable.d.ts +0 -220
- package/dist/types/src-public/bigquery.d.ts +0 -17
- package/dist/types/src-public/cloudtasks.d.ts +0 -74
- package/dist/types/src-public/dato.d.ts +0 -95
- package/dist/types/src-public/env.d.ts +0 -144
- package/dist/types/src-public/getEventTime.d.ts +0 -1
- package/dist/types/src-public/index.d.ts +0 -16
- package/dist/types/src-public/ipValidation.d.ts +0 -15
- package/dist/types/src-public/jwks.d.ts +0 -15
- package/dist/types/src-public/pubsub.d.ts +0 -95
- package/dist/types/src-public/rateLimit.d.ts +0 -21
- package/dist/types/src-public/redisClient.d.ts +0 -6
- package/dist/types/src-public/runtime.d.ts +0 -57
- package/dist/types/src-public/sanitize.d.ts +0 -4
- package/dist/types/src-public/scheduler.d.ts +0 -71
- package/dist/types/src-public/secret.d.ts +0 -6
- package/dist/types/src-public/setHeaders.d.ts +0 -13
- package/dist/types/src-public/types.d.ts +0 -264
- package/dist/types/src-public/utils.d.ts +0 -101
- package/dist/types/src-public/validate.d.ts +0 -9
|
@@ -1,454 +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
|
-
let existingV = 0;
|
|
249
|
-
if (options.root.state['_$hsRetryAfter_']) {
|
|
250
|
-
existingV = new Date(options.root.state['_$hsRetryAfter_']).getTime();
|
|
251
|
-
if (isNaN(existingV)) {
|
|
252
|
-
existingV = 0;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
if (normV > existingV) {
|
|
256
|
-
options.root.state['_$hsRetryAfter_'] = new Date(normV).toISOString();
|
|
257
|
-
return new Date(normV).toISOString();
|
|
258
|
-
}
|
|
259
|
-
return options.root.state['_$hsRetryAfter_'] ?? null;
|
|
260
|
-
}
|
|
261
|
-
global.functionsCache = global.functionsCache || {};
|
|
262
|
-
exports.FUNCTION_EXPR_ERROR = Symbol('function');
|
|
263
|
-
function createFunction(expression) {
|
|
264
|
-
if (!global.functionsCache[expression]) {
|
|
265
|
-
global.functionsCache[expression] = new Function('symbol', 'payload', 'try { return ' + expression + ' } catch (err) { return symbol; }');
|
|
266
|
-
}
|
|
267
|
-
return (payload) => global.functionsCache[expression](exports.FUNCTION_EXPR_ERROR, payload);
|
|
268
|
-
}
|
|
269
|
-
function createOnResponse(opts) {
|
|
270
|
-
return (config, options) => onResponse(config, options, opts.requiredFlag);
|
|
271
|
-
}
|
|
272
|
-
function onResponse(config, options, requiredFlag) {
|
|
273
|
-
const triggerOutput = options.root[options.triggerId || options.trigger?.id];
|
|
274
|
-
const flags = triggerOutput?.flags;
|
|
275
|
-
const numberOfInputMessages = triggerOutput?.body?.length ?? 0;
|
|
276
|
-
const outputBody = config.outputs?.body;
|
|
277
|
-
const outputStatus = config.outputs?.status;
|
|
278
|
-
requiredFlag = config.config?.requiredFlag || requiredFlag;
|
|
279
|
-
let headersToSet = {};
|
|
280
|
-
if (outputBody?.headersToSet) {
|
|
281
|
-
headersToSet = outputBody.headersToSet;
|
|
282
|
-
}
|
|
283
|
-
if (options.root?.state?.['_$hsRetryAfter_'] && !Object.keys(headersToSet).some(x => x.toLocaleLowerCase() === 'retry-after')) {
|
|
284
|
-
const retryAfter = options.root.state['_$hsRetryAfter_'];
|
|
285
|
-
headersToSet['retry-after'] = retryAfter;
|
|
286
|
-
}
|
|
287
|
-
if (headersToSet) {
|
|
288
|
-
for (const [key, value] of Object.entries(headersToSet)) {
|
|
289
|
-
options.request.headers[key] = value;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
if (!triggerOutput) {
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
let responsePayload;
|
|
296
|
-
if (outputBody?.headersToSet && outputBody?.responses) {
|
|
297
|
-
responsePayload = outputBody.responses;
|
|
298
|
-
}
|
|
299
|
-
else {
|
|
300
|
-
responsePayload = outputBody;
|
|
301
|
-
}
|
|
302
|
-
const redactedResponse = {
|
|
303
|
-
message: `<Redacted Response>. Client does not have required permission flag: ${requiredFlag}`,
|
|
304
|
-
error: false,
|
|
305
|
-
};
|
|
306
|
-
if (responsePayload && Array.isArray(responsePayload) && responsePayload.length === numberOfInputMessages) {
|
|
307
|
-
return {
|
|
308
|
-
status: headersToSet['retry-after'] ? 429 : (outputStatus ? outputStatus : ((responsePayload && responsePayload instanceof Error) ? 500 : 200)),
|
|
309
|
-
value: responsePayload.map(x => {
|
|
310
|
-
if (x && typeof x === 'object' && x.statusCode && x.body) {
|
|
311
|
-
if (requiredFlag && !flags?.includes(requiredFlag) && !(x.body instanceof Error)) {
|
|
312
|
-
return Object.assign({}, x, { body: redactedResponse });
|
|
313
|
-
}
|
|
314
|
-
if (x.body instanceof Error) {
|
|
315
|
-
return Object.assign({}, x, { body: { message: x.body.message, error: true } });
|
|
316
|
-
}
|
|
317
|
-
return x;
|
|
318
|
-
}
|
|
319
|
-
return {
|
|
320
|
-
statusCode: x instanceof Error ? (headersToSet['retry-after'] ? 429 : 500) : 200,
|
|
321
|
-
body: x instanceof Error ? ({
|
|
322
|
-
message: x.message,
|
|
323
|
-
error: true
|
|
324
|
-
}) : (requiredFlag && flags?.includes(requiredFlag) ? x : redactedResponse),
|
|
325
|
-
};
|
|
326
|
-
})
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
return {
|
|
330
|
-
status: headersToSet['retry-after'] ? 429 : (outputStatus ? outputStatus : ((responsePayload && responsePayload instanceof Error) ? 500 : 200)),
|
|
331
|
-
value: responsePayload instanceof Error ? ({
|
|
332
|
-
message: responsePayload.message,
|
|
333
|
-
error: true
|
|
334
|
-
}) : (requiredFlag && flags?.includes(requiredFlag) ? responsePayload : redactedResponse),
|
|
335
|
-
cacheMaxAge: 0,
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
function parsePrices(priceData, timeZone = 'UTC') {
|
|
339
|
-
const result = [];
|
|
340
|
-
const defaultStartDate = convertDateToDatetimeTZ(new Date(0).toISOString(), timeZone);
|
|
341
|
-
const defaultEndDate = convertDateToDatetimeTZ(new Date('2099-01-01T00:00:00Z').toISOString(), timeZone);
|
|
342
|
-
for (let i = 0; i < priceData.length; i += 1) {
|
|
343
|
-
const priceChanges = (priceData[i].price_changes || []).map(x => ({
|
|
344
|
-
effective_from: x.effective_from ? (!isNaN(new Date(x.effective_from).getTime()) ? convertDateToDatetimeTZ(x.effective_from, timeZone) : null) : defaultStartDate,
|
|
345
|
-
effective_until: x.effective_until ? (!isNaN(new Date(x.effective_until).getTime()) ? convertDateToDatetimeTZ(x.effective_until, timeZone) : null) : defaultEndDate,
|
|
346
|
-
price: x.price,
|
|
347
|
-
price_type: x.price_type,
|
|
348
|
-
}));
|
|
349
|
-
const rrpPriceTypes = parsePriceType(priceChanges.filter((x) => x.price_type === 'rrp'));
|
|
350
|
-
const permPriceTypes = parsePriceType(priceChanges.filter((x) => x.price_type === 'perm'));
|
|
351
|
-
const posPriceTypes = parsePriceType(priceChanges.filter((x) => x.price_type === 'pos'));
|
|
352
|
-
let currentPrice;
|
|
353
|
-
let currentPriceType;
|
|
354
|
-
if (rrpPriceTypes.current) {
|
|
355
|
-
currentPrice = rrpPriceTypes.current;
|
|
356
|
-
currentPriceType = 'rrp';
|
|
357
|
-
}
|
|
358
|
-
if (permPriceTypes.current) {
|
|
359
|
-
currentPrice = permPriceTypes.current;
|
|
360
|
-
currentPriceType = 'perm';
|
|
361
|
-
}
|
|
362
|
-
if (posPriceTypes.current) {
|
|
363
|
-
currentPrice = posPriceTypes.current;
|
|
364
|
-
currentPriceType = 'pos';
|
|
365
|
-
}
|
|
366
|
-
result.push({
|
|
367
|
-
...priceData[i],
|
|
368
|
-
current_price: currentPrice,
|
|
369
|
-
current_price_type: currentPriceType,
|
|
370
|
-
rrp: rrpPriceTypes,
|
|
371
|
-
perm: permPriceTypes,
|
|
372
|
-
pos: posPriceTypes
|
|
373
|
-
});
|
|
374
|
-
}
|
|
375
|
-
return result;
|
|
376
|
-
}
|
|
377
|
-
function parsePriceType(priceTypeData, now = new Date()) {
|
|
378
|
-
if (!priceTypeData) {
|
|
379
|
-
return {
|
|
380
|
-
current: undefined,
|
|
381
|
-
historical: [],
|
|
382
|
-
future: []
|
|
383
|
-
};
|
|
384
|
-
}
|
|
385
|
-
const historicalEntries = [];
|
|
386
|
-
const futureEntries = [];
|
|
387
|
-
const currentEntries = [];
|
|
388
|
-
for (let i = 0; i < priceTypeData.length; i += 1) {
|
|
389
|
-
const price = priceTypeData[i];
|
|
390
|
-
if (price.effective_from !== null && price.effective_until !== null) {
|
|
391
|
-
const priceWithoutNulls = price;
|
|
392
|
-
if (priceWithoutNulls.effective_from.getTime() > priceWithoutNulls.effective_until.getTime()) {
|
|
393
|
-
continue;
|
|
394
|
-
}
|
|
395
|
-
else if (priceWithoutNulls.effective_from.getTime() > now.getTime()) {
|
|
396
|
-
futureEntries.push(priceWithoutNulls);
|
|
397
|
-
}
|
|
398
|
-
else if (priceWithoutNulls.effective_until.getTime() < now.getTime()) {
|
|
399
|
-
historicalEntries.push(priceWithoutNulls);
|
|
400
|
-
}
|
|
401
|
-
else {
|
|
402
|
-
currentEntries.push(priceWithoutNulls);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
const [currentEntry, ...otherFutureEntries] = currentEntries.sort(createSortPriceTypes(false));
|
|
407
|
-
const sortedHistoricalEntries = historicalEntries.concat(otherFutureEntries).sort(createSortPriceTypes(true));
|
|
408
|
-
const sortedFutureEntries = futureEntries.sort(createSortPriceTypes(true));
|
|
409
|
-
return {
|
|
410
|
-
current: currentEntry,
|
|
411
|
-
historical: sortedHistoricalEntries,
|
|
412
|
-
future: sortedFutureEntries
|
|
413
|
-
};
|
|
414
|
-
}
|
|
415
|
-
function createSortPriceTypes(descending) {
|
|
416
|
-
return function (a, b) {
|
|
417
|
-
let effectiveFromSort;
|
|
418
|
-
if (descending) {
|
|
419
|
-
effectiveFromSort = b.effective_from.getTime() - a.effective_from.getTime();
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
effectiveFromSort = a.effective_from.getTime() - b.effective_from.getTime();
|
|
423
|
-
}
|
|
424
|
-
if (effectiveFromSort === 0) {
|
|
425
|
-
if (!descending) {
|
|
426
|
-
return b.effective_until.getTime() - a.effective_until.getTime();
|
|
427
|
-
}
|
|
428
|
-
return a.effective_until.getTime() - b.effective_until.getTime();
|
|
429
|
-
}
|
|
430
|
-
return effectiveFromSort;
|
|
431
|
-
};
|
|
432
|
-
}
|
|
433
|
-
function convertDateToDatetimeTZ(dateString, timeZone) {
|
|
434
|
-
let normDateString = '';
|
|
435
|
-
if (dateString.includes('T')) {
|
|
436
|
-
normDateString = dateString.slice(0, 19);
|
|
437
|
-
}
|
|
438
|
-
else {
|
|
439
|
-
normDateString = dateString + 'T00:00:00';
|
|
440
|
-
}
|
|
441
|
-
console.error(dateString, normDateString + getOffsetString(timeZone));
|
|
442
|
-
return new Date(normDateString + getOffsetString(timeZone));
|
|
443
|
-
}
|
|
444
|
-
function getOffsetString(timeZone) {
|
|
445
|
-
const today = new Date(`${new Date().toISOString().slice(0, 10)}T00:00:00Z`);
|
|
446
|
-
const locale = today.toLocaleString("sv-SE", { timeZone });
|
|
447
|
-
const tzDate = new Date(locale);
|
|
448
|
-
const offsetMinutes = Math.ceil(tzDate.getTime() - today.getTime()) / 60000;
|
|
449
|
-
const sign = offsetMinutes >= 0 ? "+" : "-";
|
|
450
|
-
const abs = Math.abs(offsetMinutes);
|
|
451
|
-
const hours = String(Math.floor(abs / 60)).padStart(2, "0");
|
|
452
|
-
const minutes = String(abs % 60).padStart(2, "0");
|
|
453
|
-
return `${sign}${hours}:${minutes}`;
|
|
454
|
-
}
|
|
@@ -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;
|