@varius.io/framework 12.3.4 → 12.3.5
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/build/integrations/http/auth.js +8 -17
- package/build/integrations/http/auth.js.map +1 -1
- package/build/integrations/http/express.js +8 -18
- package/build/integrations/http/express.js.map +1 -1
- package/build/integrations/http/lambda.js +7 -16
- package/build/integrations/http/lambda.js.map +1 -1
- package/build/integrations/http/responses.d.ts +1 -0
- package/build/integrations/http/responses.d.ts.map +1 -1
- package/build/integrations/http/responses.js +16 -3
- package/build/integrations/http/responses.js.map +1 -1
- package/build/integrations/http/validate.js +59 -76
- package/build/integrations/http/validate.js.map +1 -1
- package/build/integrations/sqs/lambda.js +7 -18
- package/build/integrations/sqs/lambda.js.map +1 -1
- package/build/integrations/sqs/sqs-lambda.js +49 -62
- package/build/integrations/sqs/sqs-lambda.js.map +1 -1
- package/build/integrations/sqs/validate-param.js +22 -35
- package/build/integrations/sqs/validate-param.js.map +1 -1
- package/build/services/analytics.js +19 -34
- package/build/services/analytics.js.map +1 -1
- package/build/services/api.js +75 -90
- package/build/services/api.js.map +1 -1
- package/build/services/atomic-counter.js +68 -85
- package/build/services/atomic-counter.js.map +1 -1
- package/build/services/billing.js +50 -75
- package/build/services/billing.js.map +1 -1
- package/build/services/blockv/actions.js +26 -41
- package/build/services/blockv/actions.js.map +1 -1
- package/build/services/blockv/apps.js +5 -16
- package/build/services/blockv/apps.js.map +1 -1
- package/build/services/blockv/auth.js +14 -25
- package/build/services/blockv/auth.js.map +1 -1
- package/build/services/blockv/captcha.js +5 -16
- package/build/services/blockv/captcha.js.map +1 -1
- package/build/services/blockv/faces.js +13 -28
- package/build/services/blockv/faces.js.map +1 -1
- package/build/services/blockv/index.js +17 -28
- package/build/services/blockv/index.js.map +1 -1
- package/build/services/blockv/user.js +15 -30
- package/build/services/blockv/user.js.map +1 -1
- package/build/services/blockv/variations.js +9 -22
- package/build/services/blockv/variations.js.map +1 -1
- package/build/services/blockv/vatoms.js +239 -278
- package/build/services/blockv/vatoms.js.map +1 -1
- package/build/services/businesses.js +39 -62
- package/build/services/businesses.js.map +1 -1
- package/build/services/distribution.js +6 -19
- package/build/services/distribution.js.map +1 -1
- package/build/services/events.js +29 -35
- package/build/services/events.js.map +1 -1
- package/build/services/iot.js +31 -42
- package/build/services/iot.js.map +1 -1
- package/build/services/kinesis.js +8 -19
- package/build/services/kinesis.js.map +1 -1
- package/build/services/kong.js +159 -184
- package/build/services/kong.js.map +1 -1
- package/build/services/loyalty.js +14 -27
- package/build/services/loyalty.js.map +1 -1
- package/build/services/merchants.js +14 -26
- package/build/services/merchants.js.map +1 -1
- package/build/services/nonce.js +24 -39
- package/build/services/nonce.js.map +1 -1
- package/build/services/old_blockv.js +129 -166
- package/build/services/old_blockv.js.map +1 -1
- package/build/services/points.js +113 -147
- package/build/services/points.js.map +1 -1
- package/build/services/postgres.d.ts +1 -1
- package/build/services/postgres.d.ts.map +1 -1
- package/build/services/postgres.js +127 -161
- package/build/services/postgres.js.map +1 -1
- package/build/services/prizes.js +12 -27
- package/build/services/prizes.js.map +1 -1
- package/build/services/providers.js +33 -48
- package/build/services/providers.js.map +1 -1
- package/build/services/resources.js +21 -32
- package/build/services/resources.js.map +1 -1
- package/build/services/scheduler.js +14 -33
- package/build/services/scheduler.js.map +1 -1
- package/build/services/secret.js +12 -23
- package/build/services/secret.js.map +1 -1
- package/build/services/studio.js +95 -134
- package/build/services/studio.js.map +1 -1
- package/build/services/user.js +136 -156
- package/build/services/user.js.map +1 -1
- package/build/services/viewers.js +23 -36
- package/build/services/viewers.js.map +1 -1
- package/build/services/workers.js +54 -71
- package/build/services/workers.js.map +1 -1
- package/build/services/ws.js +8 -19
- package/build/services/ws.js.map +1 -1
- package/build/utils/analytics.js +15 -26
- package/build/utils/analytics.js.map +1 -1
- package/build/utils/emitter.js +9 -20
- package/build/utils/emitter.js.map +1 -1
- package/build/utils/logger.js +6 -7
- package/build/utils/logger.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.makeEvent = void 0;
|
|
13
4
|
const lambda_1 = require("./lambda");
|
|
@@ -21,32 +12,30 @@ const documentClient = new AWS.DynamoDB.DocumentClient();
|
|
|
21
12
|
function calcTtl(now) {
|
|
22
13
|
return (0, date_fns_1.addDays)(now, 4);
|
|
23
14
|
}
|
|
24
|
-
function withEnsuredOnlyOnce(eventBody, next) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
15
|
+
async function withEnsuredOnlyOnce(eventBody, next) {
|
|
16
|
+
utils_1.logger.debug("withEnsuredOnlyOnce", eventBody);
|
|
17
|
+
const { messageId } = eventBody;
|
|
18
|
+
// we can only dedup message with an id
|
|
19
|
+
if (messageId === undefined) {
|
|
20
|
+
return next();
|
|
21
|
+
}
|
|
22
|
+
const dbOp = documentClient.get({
|
|
23
|
+
TableName: `workers-${stage}-sqs-messages`,
|
|
24
|
+
Key: { id: messageId },
|
|
25
|
+
});
|
|
26
|
+
const res = await dbOp.promise();
|
|
27
|
+
const item = res.Item;
|
|
28
|
+
if (item === undefined) {
|
|
29
|
+
const putDbOp = documentClient.put({
|
|
33
30
|
TableName: `workers-${stage}-sqs-messages`,
|
|
34
|
-
|
|
31
|
+
Item: {
|
|
32
|
+
id: messageId,
|
|
33
|
+
ttl: Math.ceil(calcTtl(new Date()).getTime() / 1000),
|
|
34
|
+
},
|
|
35
35
|
});
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const putDbOp = documentClient.put({
|
|
40
|
-
TableName: `workers-${stage}-sqs-messages`,
|
|
41
|
-
Item: {
|
|
42
|
-
id: messageId,
|
|
43
|
-
ttl: Math.ceil(calcTtl(new Date()).getTime() / 1000),
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
yield putDbOp.promise();
|
|
47
|
-
return next();
|
|
48
|
-
}
|
|
49
|
-
});
|
|
36
|
+
await putDbOp.promise();
|
|
37
|
+
return next();
|
|
38
|
+
}
|
|
50
39
|
}
|
|
51
40
|
function makeEvent(body, messageId) {
|
|
52
41
|
const emitter = new emitter_1.default();
|
|
@@ -58,38 +47,36 @@ function makeEvent(body, messageId) {
|
|
|
58
47
|
return event;
|
|
59
48
|
}
|
|
60
49
|
exports.makeEvent = makeEvent;
|
|
61
|
-
function sqsLambda(handler, options, rawEvent, context) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}));
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
yield (0, lambda_1.startHandler)(event, options, handler);
|
|
80
|
-
}
|
|
81
|
-
yield emitter.emit(lambda_2.EmitterEventType.PostResponse);
|
|
82
|
-
yield emitter.emit(lambda_2.EmitterEventType.PostResponseCleanup);
|
|
50
|
+
async function sqsLambda(handler, options, rawEvent, context) {
|
|
51
|
+
// note: we will treat each record as a different lambda function invocation
|
|
52
|
+
// note: scheduled warmup does not provide a "Records" array
|
|
53
|
+
const records = rawEvent.Records || [];
|
|
54
|
+
const events = records.map((record) => {
|
|
55
|
+
const { body, messageId } = record;
|
|
56
|
+
return makeEvent(typeof body === "object" ? body : JSON.parse(body), messageId);
|
|
57
|
+
});
|
|
58
|
+
for (const event of events) {
|
|
59
|
+
const { messageId, body, emitter } = event;
|
|
60
|
+
try {
|
|
61
|
+
if (messageId !== undefined && process.env.SQS_DEDUPE !== "false") {
|
|
62
|
+
await withEnsuredOnlyOnce(body, async () => {
|
|
63
|
+
await (0, lambda_1.startHandler)(event, options, handler);
|
|
64
|
+
});
|
|
83
65
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
utils_1.logger.error(`Error occurred in lambda function: ${err.message}:\n${err.stack} ${JSON.stringify(event)}`);
|
|
87
|
-
else
|
|
88
|
-
utils_1.logger.error('Error occurred in lambda function:', err);
|
|
89
|
-
yield emitter.emit(lambda_2.EmitterEventType.UncaughtHandlerError);
|
|
66
|
+
else {
|
|
67
|
+
await (0, lambda_1.startHandler)(event, options, handler);
|
|
90
68
|
}
|
|
69
|
+
await emitter.emit(lambda_2.EmitterEventType.PostResponse);
|
|
70
|
+
await emitter.emit(lambda_2.EmitterEventType.PostResponseCleanup);
|
|
91
71
|
}
|
|
92
|
-
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (err instanceof Error)
|
|
74
|
+
utils_1.logger.error(`Error occurred in lambda function: ${err.message}:\n${err.stack} ${JSON.stringify(event)}`);
|
|
75
|
+
else
|
|
76
|
+
utils_1.logger.error('Error occurred in lambda function:', err);
|
|
77
|
+
await emitter.emit(lambda_2.EmitterEventType.UncaughtHandlerError);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
93
80
|
}
|
|
94
81
|
exports.default = sqsLambda;
|
|
95
82
|
//# sourceMappingURL=sqs-lambda.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqs-lambda.js","sourceRoot":"","sources":["../../../src/integrations/sqs/sqs-lambda.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqs-lambda.js","sourceRoot":"","sources":["../../../src/integrations/sqs/sqs-lambda.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const Ajv = require("ajv");
|
|
13
4
|
const axios_1 = require("axios");
|
|
14
5
|
const cachedSchemas = {};
|
|
15
|
-
function loadSchema(url) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return data;
|
|
23
|
-
});
|
|
6
|
+
async function loadSchema(url) {
|
|
7
|
+
const cachedSchema = cachedSchemas[url];
|
|
8
|
+
if (cachedSchema)
|
|
9
|
+
return cachedSchema;
|
|
10
|
+
const { data } = await axios_1.default.get(url);
|
|
11
|
+
cachedSchemas[url] = data;
|
|
12
|
+
return data;
|
|
24
13
|
}
|
|
25
14
|
/**
|
|
26
15
|
* Validate the event body payload against a JSON Schema.
|
|
27
16
|
* @param event The lambda event.
|
|
28
17
|
* @param bodySchema The JSON Schema.
|
|
29
18
|
*/
|
|
30
|
-
function validateBody(event, bodySchema) {
|
|
31
|
-
|
|
32
|
-
if (typeof event.body !== "object") {
|
|
33
|
-
return {
|
|
34
|
-
isValid: false,
|
|
35
|
-
body: undefined,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
const body = JSON.parse(JSON.stringify(event.body));
|
|
39
|
-
const ajv = new Ajv({
|
|
40
|
-
useDefaults: true,
|
|
41
|
-
loadSchema,
|
|
42
|
-
});
|
|
43
|
-
const validate = yield ajv.compileAsync(bodySchema);
|
|
44
|
-
const isValid = yield validate(body);
|
|
19
|
+
async function validateBody(event, bodySchema) {
|
|
20
|
+
if (typeof event.body !== "object") {
|
|
45
21
|
return {
|
|
46
|
-
isValid,
|
|
47
|
-
body:
|
|
22
|
+
isValid: false,
|
|
23
|
+
body: undefined,
|
|
48
24
|
};
|
|
25
|
+
}
|
|
26
|
+
const body = JSON.parse(JSON.stringify(event.body));
|
|
27
|
+
const ajv = new Ajv({
|
|
28
|
+
useDefaults: true,
|
|
29
|
+
loadSchema,
|
|
49
30
|
});
|
|
31
|
+
const validate = await ajv.compileAsync(bodySchema);
|
|
32
|
+
const isValid = await validate(body);
|
|
33
|
+
return {
|
|
34
|
+
isValid,
|
|
35
|
+
body: isValid ? body : undefined,
|
|
36
|
+
};
|
|
50
37
|
}
|
|
51
38
|
exports.default = validateBody;
|
|
52
39
|
//# sourceMappingURL=validate-param.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-param.js","sourceRoot":"","sources":["../../../src/integrations/sqs/validate-param.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-param.js","sourceRoot":"","sources":["../../../src/integrations/sqs/validate-param.ts"],"names":[],"mappings":";;AAAA,2BAA2B;AAC3B,iCAA0B;AAS1B,MAAM,aAAa,GAA8B,EAAE,CAAC;AAEpD,KAAK,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;GAIG;AACY,KAAK,UAAU,YAAY,CACzC,KAAkB,EAClB,UAAe;IAEf,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;QACnC,OAAO;YACN,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;SACf,CAAC;KACF;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QACnB,WAAW,EAAE,IAAI;QACjB,UAAU;KACV,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO;QACN,OAAO;QACP,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KAChC,CAAC;AACH,CAAC;AAzBD,+BAyBC"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.deleteUserPublicData = exports.upsertUserPublicData = exports.addCampaignUser = exports.addDistributionUser = exports.getCampaignParticipants = void 0;
|
|
13
4
|
const axios_1 = require("axios");
|
|
@@ -17,40 +8,34 @@ const ax = axios_1.default.create({
|
|
|
17
8
|
"x-api-key": process.env.ANALYTICS_API_KEY,
|
|
18
9
|
},
|
|
19
10
|
});
|
|
20
|
-
function getCampaignParticipants(businessId, groupCampaignId, page = 0, returnGuest = false) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return data.items;
|
|
26
|
-
});
|
|
11
|
+
async function getCampaignParticipants(businessId, groupCampaignId, page = 0, returnGuest = false) {
|
|
12
|
+
const pageSize = 500;
|
|
13
|
+
let offset = pageSize * page;
|
|
14
|
+
const { data } = await ax.get(`/b/${businessId}/campaigns/${groupCampaignId}/users?returnGuest=${returnGuest}&pageSize=${pageSize}&offset=${offset}`);
|
|
15
|
+
return data.items;
|
|
27
16
|
}
|
|
28
17
|
exports.getCampaignParticipants = getCampaignParticipants;
|
|
29
|
-
function addDistributionUser(businessId, distributionId, userId) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return data;
|
|
33
|
-
});
|
|
18
|
+
async function addDistributionUser(businessId, distributionId, userId) {
|
|
19
|
+
const { data } = await ax.post(`/b/${businessId}/distributions/${distributionId}/users/${userId}`, {});
|
|
20
|
+
return data;
|
|
34
21
|
}
|
|
35
22
|
exports.addDistributionUser = addDistributionUser;
|
|
36
|
-
function addCampaignUser(businessId, campaignId, userRef, viewerId, referrer, context) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
23
|
+
async function addCampaignUser(businessId, campaignId, userRef, viewerId, referrer, context) {
|
|
24
|
+
await ax.post(`/b/${businessId}/campaigns/${campaignId}/users`, {
|
|
25
|
+
userRef,
|
|
26
|
+
viewerId,
|
|
27
|
+
referrer,
|
|
28
|
+
...context,
|
|
29
|
+
// scoreIncrements
|
|
41
30
|
});
|
|
42
31
|
}
|
|
43
32
|
exports.addCampaignUser = addCampaignUser;
|
|
44
|
-
function upsertUserPublicData(user) {
|
|
45
|
-
|
|
46
|
-
yield ax.post(`/u/public-data`, user);
|
|
47
|
-
});
|
|
33
|
+
async function upsertUserPublicData(user) {
|
|
34
|
+
await ax.post(`/u/public-data`, user);
|
|
48
35
|
}
|
|
49
36
|
exports.upsertUserPublicData = upsertUserPublicData;
|
|
50
|
-
function deleteUserPublicData(userId) {
|
|
51
|
-
|
|
52
|
-
yield ax.delete(`/u/${userId}/public-data`);
|
|
53
|
-
});
|
|
37
|
+
async function deleteUserPublicData(userId) {
|
|
38
|
+
await ax.delete(`/u/${userId}/public-data`);
|
|
54
39
|
}
|
|
55
40
|
exports.deleteUserPublicData = deleteUserPublicData;
|
|
56
41
|
//# sourceMappingURL=analytics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/services/analytics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/services/analytics.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAG1B,MAAM,EAAE,GAAG,eAAK,CAAC,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAmB;IACxC,OAAO,EAAE;QACR,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAkB;KAC3C;CACD,CAAC,CAAC;AAQI,KAAK,UAAU,uBAAuB,CAC5C,UAAkB,EAClB,eAAuB,EACpB,IAAI,GAAG,CAAC,EACX,WAAW,GAAG,KAAK;IAEnB,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,IAAI,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAA;IAE5B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,UAAU,cAAc,eAAe,sBAAsB,WAAW,aAAa,QAAQ,WAAW,MAAM,EAAE,CAAC,CAAC;IAEtJ,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,CAAC;AAZD,0DAYC;AAMM,KAAK,UAAU,mBAAmB,CACxC,UAAkB,EAClB,cAAsB,EACtB,MAAc;IAEd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,UAAU,kBAAkB,cAAc,UAAU,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACvG,OAAO,IAAI,CAAC;AACb,CAAC;AAPD,kDAOC;AAEM,KAAK,UAAU,eAAe,CACpC,UAAkB,EAClB,UAAkB,EAClB,OAAgB,EAChB,QAAgB,EAChB,QAAgB,EAChB,OAAY;IAGZ,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,UAAU,cAAc,UAAU,QAAQ,EAAE;QAC/D,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,GAAG,OAAO;QACV,kBAAkB;KAClB,CAAC,CAAC;AACJ,CAAC;AAhBD,0CAgBC;AAEM,KAAK,UAAU,oBAAoB,CACzC,IAAS;IAET,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAJD,oDAIC;AAEM,KAAK,UAAU,oBAAoB,CACzC,MAAc;IAEd,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,MAAM,cAAc,CAAC,CAAC;AAC7C,CAAC;AAJD,oDAIC"}
|
package/build/services/api.js
CHANGED
|
@@ -1,107 +1,92 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.apiFetchWithToken = exports.apiFetch = void 0;
|
|
13
4
|
const node_fetch_1 = require("node-fetch");
|
|
14
5
|
const __1 = require("..");
|
|
15
|
-
function apiFetch(endpoint, opts) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
6
|
+
async function apiFetch(endpoint, opts) {
|
|
7
|
+
const reqBody = typeof opts.body === "object" ? JSON.stringify(opts.body) : opts.body;
|
|
8
|
+
const reqHeaders = {
|
|
9
|
+
"x-api-key": opts.apiKey,
|
|
10
|
+
};
|
|
11
|
+
if (opts.method.toLowerCase() !== "get" && opts.method.toLowerCase() !== "delete") {
|
|
12
|
+
reqHeaders["content-type"] = "application/json";
|
|
13
|
+
}
|
|
14
|
+
const req = {
|
|
15
|
+
method: opts.method,
|
|
16
|
+
url: `${opts.apiBase}${endpoint}`,
|
|
17
|
+
body: reqBody,
|
|
18
|
+
headers: reqHeaders,
|
|
19
|
+
};
|
|
20
|
+
let res;
|
|
21
|
+
if (opts.cache && req.method === "get") {
|
|
22
|
+
res = opts.cache.get(req.url);
|
|
23
|
+
__1.utils.logger.debug("Cache hit:", endpoint, res);
|
|
24
|
+
}
|
|
25
|
+
if (res === null || res === undefined) {
|
|
26
|
+
__1.utils.logger.debug("Cache miss:", endpoint);
|
|
27
|
+
const fetchRes = await (0, node_fetch_1.default)(req.url, {
|
|
28
|
+
method: req.method,
|
|
29
|
+
headers: req.headers,
|
|
30
|
+
body: req.body,
|
|
31
|
+
});
|
|
32
|
+
let resBody;
|
|
33
|
+
if ((fetchRes.headers.get("content-type") ?? "").startsWith("application/json")) {
|
|
34
|
+
resBody = await fetchRes.json();
|
|
24
35
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
body:
|
|
29
|
-
headers: reqHeaders,
|
|
36
|
+
res = {
|
|
37
|
+
status: fetchRes.status,
|
|
38
|
+
headers: fetchRes.headers,
|
|
39
|
+
body: resBody,
|
|
30
40
|
};
|
|
31
|
-
let res;
|
|
32
41
|
if (opts.cache && req.method === "get") {
|
|
33
|
-
|
|
34
|
-
__1.utils.logger.debug("Cache hit:", endpoint, res);
|
|
35
|
-
}
|
|
36
|
-
if (res === null || res === undefined) {
|
|
37
|
-
__1.utils.logger.debug("Cache miss:", endpoint);
|
|
38
|
-
const fetchRes = yield (0, node_fetch_1.default)(req.url, {
|
|
39
|
-
method: req.method,
|
|
40
|
-
headers: req.headers,
|
|
41
|
-
body: req.body,
|
|
42
|
-
});
|
|
43
|
-
let resBody;
|
|
44
|
-
if (((_a = fetchRes.headers.get("content-type")) !== null && _a !== void 0 ? _a : "").startsWith("application/json")) {
|
|
45
|
-
resBody = yield fetchRes.json();
|
|
46
|
-
}
|
|
47
|
-
res = {
|
|
48
|
-
status: fetchRes.status,
|
|
49
|
-
headers: fetchRes.headers,
|
|
50
|
-
body: resBody,
|
|
51
|
-
};
|
|
52
|
-
if (opts.cache && req.method === "get") {
|
|
53
|
-
opts.cache.set(req.url, res);
|
|
54
|
-
}
|
|
42
|
+
opts.cache.set(req.url, res);
|
|
55
43
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
44
|
+
}
|
|
45
|
+
__1.utils.logger.debug("API request", JSON.stringify({ req, res }));
|
|
46
|
+
return res;
|
|
59
47
|
}
|
|
60
48
|
exports.apiFetch = apiFetch;
|
|
61
|
-
function apiFetchWithToken(endpoint, opts) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
49
|
+
async function apiFetchWithToken(endpoint, opts) {
|
|
50
|
+
const reqBody = typeof opts.body === "object" ? JSON.stringify(opts.body) : opts.body;
|
|
51
|
+
const reqHeaders = {
|
|
52
|
+
"authorization": `Bearer ${opts.token}`,
|
|
53
|
+
};
|
|
54
|
+
if (opts.method !== "get") {
|
|
55
|
+
reqHeaders["content-type"] = "application/json";
|
|
56
|
+
}
|
|
57
|
+
const req = {
|
|
58
|
+
method: opts.method,
|
|
59
|
+
url: `${opts.apiBase}${endpoint}`,
|
|
60
|
+
body: reqBody,
|
|
61
|
+
headers: reqHeaders,
|
|
62
|
+
};
|
|
63
|
+
let res;
|
|
64
|
+
if (opts.cache && req.method === "get") {
|
|
65
|
+
res = opts.cache.get(opts.key || req.url);
|
|
66
|
+
__1.utils.logger.debug("Cached Info:", res);
|
|
67
|
+
}
|
|
68
|
+
if (res === null || res === undefined) {
|
|
69
|
+
const fetchRes = await (0, node_fetch_1.default)(req.url, {
|
|
70
|
+
method: req.method,
|
|
71
|
+
headers: req.headers,
|
|
72
|
+
body: req.body,
|
|
73
|
+
});
|
|
74
|
+
let resBody;
|
|
75
|
+
if ((fetchRes.headers.get("content-type") ?? "").startsWith("application/json")) {
|
|
76
|
+
resBody = await fetchRes.json();
|
|
70
77
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
body:
|
|
75
|
-
headers: reqHeaders,
|
|
78
|
+
res = {
|
|
79
|
+
status: fetchRes.status,
|
|
80
|
+
headers: fetchRes.headers,
|
|
81
|
+
body: resBody,
|
|
76
82
|
};
|
|
77
|
-
|
|
78
|
-
if (opts.cache && req.method === "get") {
|
|
79
|
-
|
|
80
|
-
__1.utils.logger.debug("Cached Info:", res);
|
|
81
|
-
}
|
|
82
|
-
if (res === null || res === undefined) {
|
|
83
|
-
const fetchRes = yield (0, node_fetch_1.default)(req.url, {
|
|
84
|
-
method: req.method,
|
|
85
|
-
headers: req.headers,
|
|
86
|
-
body: req.body,
|
|
87
|
-
});
|
|
88
|
-
let resBody;
|
|
89
|
-
if (((_a = fetchRes.headers.get("content-type")) !== null && _a !== void 0 ? _a : "").startsWith("application/json")) {
|
|
90
|
-
resBody = yield fetchRes.json();
|
|
91
|
-
}
|
|
92
|
-
res = {
|
|
93
|
-
status: fetchRes.status,
|
|
94
|
-
headers: fetchRes.headers,
|
|
95
|
-
body: resBody,
|
|
96
|
-
};
|
|
97
|
-
const isEmptyArray = Array.isArray(resBody) && resBody.length === 0;
|
|
98
|
-
if (opts.cache && req.method === "get" && !isEmptyArray) {
|
|
99
|
-
opts.cache.set(req.url, res);
|
|
100
|
-
}
|
|
83
|
+
const isEmptyArray = Array.isArray(resBody) && resBody.length === 0;
|
|
84
|
+
if (opts.cache && req.method === "get" && !isEmptyArray) {
|
|
85
|
+
opts.cache.set(req.url, res);
|
|
101
86
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
87
|
+
}
|
|
88
|
+
__1.utils.logger.debug("API request", JSON.stringify({ req, res }));
|
|
89
|
+
return res;
|
|
105
90
|
}
|
|
106
91
|
exports.apiFetchWithToken = apiFetchWithToken;
|
|
107
92
|
//# sourceMappingURL=api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
|