@adtrackify/at-service-common 3.19.3 → 3.19.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/dist/cjs/__tests__/clients/acuity-client.spec.js +0 -10
- package/dist/cjs/__tests__/clients/acuity-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js +131 -0
- package/dist/cjs/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js.map +1 -0
- package/dist/cjs/__tests__/services/acuity-api-service.spec.js +0 -20
- package/dist/cjs/__tests__/services/acuity-api-service.spec.js.map +1 -1
- package/dist/cjs/clients/third-party/acuity-client.d.ts +0 -1
- package/dist/cjs/clients/third-party/acuity-client.js +0 -6
- package/dist/cjs/clients/third-party/acuity-client.js.map +1 -1
- package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-types.d.ts +47 -0
- package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-types.js +26 -0
- package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-types.js.map +1 -0
- package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-utils.d.ts +6 -0
- package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-utils.js +196 -0
- package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-utils.js.map +1 -0
- package/dist/cjs/libs/custom-measure-formula/index.d.ts +2 -0
- package/dist/cjs/libs/custom-measure-formula/index.js +19 -0
- package/dist/cjs/libs/custom-measure-formula/index.js.map +1 -0
- package/dist/cjs/libs/index.d.ts +1 -0
- package/dist/cjs/libs/index.js +1 -0
- package/dist/cjs/libs/index.js.map +1 -1
- package/dist/cjs/services/acuity-api-service.d.ts +0 -1
- package/dist/cjs/services/acuity-api-service.js +0 -19
- package/dist/cjs/services/acuity-api-service.js.map +1 -1
- package/dist/cjs/services/db/custom-measures-db-service.d.ts +14 -0
- package/dist/cjs/services/db/custom-measures-db-service.js +49 -0
- package/dist/cjs/services/db/custom-measures-db-service.js.map +1 -0
- package/dist/cjs/services/db/index.d.ts +1 -1
- package/dist/cjs/services/db/index.js +1 -1
- package/dist/cjs/services/db/index.js.map +1 -1
- package/dist/cjs/services/db/purchased-contacts-db-service.d.ts +2 -16
- package/dist/cjs/services/db/purchased-contacts-db-service.js +1 -10
- package/dist/cjs/services/db/purchased-contacts-db-service.js.map +1 -1
- package/dist/esm/__tests__/clients/acuity-client.spec.js +0 -10
- package/dist/esm/__tests__/clients/acuity-client.spec.js.map +1 -1
- package/dist/esm/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js +129 -0
- package/dist/esm/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js.map +1 -0
- package/dist/esm/__tests__/services/acuity-api-service.spec.js +0 -20
- package/dist/esm/__tests__/services/acuity-api-service.spec.js.map +1 -1
- package/dist/esm/clients/third-party/acuity-client.d.ts +0 -1
- package/dist/esm/clients/third-party/acuity-client.js +0 -6
- package/dist/esm/clients/third-party/acuity-client.js.map +1 -1
- package/dist/esm/libs/custom-measure-formula/custom-measure-formula-types.d.ts +47 -0
- package/dist/esm/libs/custom-measure-formula/custom-measure-formula-types.js +23 -0
- package/dist/esm/libs/custom-measure-formula/custom-measure-formula-types.js.map +1 -0
- package/dist/esm/libs/custom-measure-formula/custom-measure-formula-utils.d.ts +6 -0
- package/dist/esm/libs/custom-measure-formula/custom-measure-formula-utils.js +188 -0
- package/dist/esm/libs/custom-measure-formula/custom-measure-formula-utils.js.map +1 -0
- package/dist/esm/libs/custom-measure-formula/index.d.ts +2 -0
- package/dist/esm/libs/custom-measure-formula/index.js +3 -0
- package/dist/esm/libs/custom-measure-formula/index.js.map +1 -0
- package/dist/esm/libs/index.d.ts +1 -0
- package/dist/esm/libs/index.js +1 -0
- package/dist/esm/libs/index.js.map +1 -1
- package/dist/esm/services/acuity-api-service.d.ts +0 -1
- package/dist/esm/services/acuity-api-service.js +0 -19
- package/dist/esm/services/acuity-api-service.js.map +1 -1
- package/dist/esm/services/db/custom-measures-db-service.d.ts +14 -0
- package/dist/esm/services/db/custom-measures-db-service.js +45 -0
- package/dist/esm/services/db/custom-measures-db-service.js.map +1 -0
- package/dist/esm/services/db/index.d.ts +1 -1
- package/dist/esm/services/db/index.js +1 -1
- package/dist/esm/services/db/index.js.map +1 -1
- package/dist/esm/services/db/purchased-contacts-db-service.d.ts +2 -16
- package/dist/esm/services/db/purchased-contacts-db-service.js +1 -10
- package/dist/esm/services/db/purchased-contacts-db-service.js.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js +0 -66
- package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js.map +0 -1
- package/dist/cjs/services/db/contact-enrichments-db-service.d.ts +0 -16
- package/dist/cjs/services/db/contact-enrichments-db-service.js +0 -71
- package/dist/cjs/services/db/contact-enrichments-db-service.js.map +0 -1
- package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js +0 -64
- package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js.map +0 -1
- package/dist/esm/services/db/contact-enrichments-db-service.d.ts +0 -16
- package/dist/esm/services/db/contact-enrichments-db-service.js +0 -67
- package/dist/esm/services/db/contact-enrichments-db-service.js.map +0 -1
- /package/dist/cjs/__tests__/{db/contact-enrichments-db-service.spec.d.ts → libs/custom-measure-formula/custom-measure-formula-utils.spec.d.ts} +0 -0
- /package/dist/esm/__tests__/{db/contact-enrichments-db-service.spec.d.ts → libs/custom-measure-formula/custom-measure-formula-utils.spec.d.ts} +0 -0
|
@@ -28,25 +28,6 @@ class AcuityApiService {
|
|
|
28
28
|
return null;
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
|
-
getAcuityContactsByEmail = async (pixelId, identityId, email, contactAcquisitionIntegration) => {
|
|
32
|
-
try {
|
|
33
|
-
const emailContactsResponse = await this.acuityClient.getContactsByEmail(email);
|
|
34
|
-
if (emailContactsResponse.status !== 200) {
|
|
35
|
-
helpers_1.Logger.error('Failed to get acuity contacts by email', {
|
|
36
|
-
pixelId,
|
|
37
|
-
identityId,
|
|
38
|
-
contactAcquisitionIntegration,
|
|
39
|
-
emailContactsResponse,
|
|
40
|
-
});
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
return emailContactsResponse.data;
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
helpers_1.Logger.error('Failed to get acuity contacts by email', { error, pixelId, identityId });
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
31
|
getAcuityContactsByMd5Batch = async (pixelId, identityId, md5Hashes, contactAcquisitionIntegration) => {
|
|
51
32
|
try {
|
|
52
33
|
const result = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acuity-api-service.js","sourceRoot":"","sources":["../../../src/services/acuity-api-service.ts"],"names":[],"mappings":";;;AAEA,wEAAoE;AACpE,wCAAoC;AAGpC,MAAa,gBAAgB;IACnB,YAAY,CAAe;IAEnC,YAAY,WAAmB,EAAE,YAAoB;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAEM,sBAAsB,GAAG,KAAK,EACnC,OAAe,EACf,UAAkB,EAClB,OAAe,EACf,6BAA0C,EACH,EAAE;QACzC,IAAI;YACF,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,mBAAmB,CAAC,MAAM,KAAK,GAAG,EAAE;gBACtC,gBAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE;oBACnD,OAAO;oBACP,UAAU;oBACV,OAAO;oBACP,6BAA6B;oBAC7B,mBAAmB;iBACpB,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;aACb;YACD,OAAO,mBAAmB,CAAC,IAAI,CAAC;SACjC;QAAC,OAAO,KAAK,EAAE;YACd,gBAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;SACb;IACH,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"acuity-api-service.js","sourceRoot":"","sources":["../../../src/services/acuity-api-service.ts"],"names":[],"mappings":";;;AAEA,wEAAoE;AACpE,wCAAoC;AAGpC,MAAa,gBAAgB;IACnB,YAAY,CAAe;IAEnC,YAAY,WAAmB,EAAE,YAAoB;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAEM,sBAAsB,GAAG,KAAK,EACnC,OAAe,EACf,UAAkB,EAClB,OAAe,EACf,6BAA0C,EACH,EAAE;QACzC,IAAI;YACF,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,mBAAmB,CAAC,MAAM,KAAK,GAAG,EAAE;gBACtC,gBAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE;oBACnD,OAAO;oBACP,UAAU;oBACV,OAAO;oBACP,6BAA6B;oBAC7B,mBAAmB;iBACpB,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;aACb;YACD,OAAO,mBAAmB,CAAC,IAAI,CAAC;SACjC;QAAC,OAAO,KAAK,EAAE;YACd,gBAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;SACb;IACH,CAAC,CAAC;IAEK,2BAA2B,GAAG,KAAK,EACxC,OAAe,EACf,UAAkB,EAClB,SAAmB,EACnB,6BAA0C,EACE,EAAE;QAC9C,IAAI;YACF,MAAM,MAAM,GAA+B,EAAE,CAAC;YAC9C,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;gBAC/B,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC9E,IAAI,mBAAmB,CAAC,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE;oBAC9E,MAAM,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACvD;aACF;YACD,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACd,gBAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE;gBACzD,KAAK;gBACL,OAAO;gBACP,UAAU;gBACV,cAAc,EAAE,SAAS,CAAC,MAAM;gBAChC,6BAA6B;aAC9B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACb;IACH,CAAC,CAAC;CACH;AA1DD,4CA0DC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type CustomMeasureRecord } from '@adtrackify/at-tracking-event-types';
|
|
2
|
+
export declare class CustomMeasuresDbService {
|
|
3
|
+
TABLE_NAME: string;
|
|
4
|
+
TABLE_KEY: string;
|
|
5
|
+
constructor(tableName: string, tableKey?: string);
|
|
6
|
+
listByPixelId: (gsiName: string, pixelId: string) => Promise<CustomMeasureRecord[]>;
|
|
7
|
+
listPageByPixelId: (gsiName: string, pixelId: string, limit: number, exclusiveStartKey?: Record<string, any>) => Promise<{
|
|
8
|
+
items: CustomMeasureRecord[];
|
|
9
|
+
lastEvaluatedKey?: Record<string, any>;
|
|
10
|
+
}>;
|
|
11
|
+
getById: (id: string) => Promise<CustomMeasureRecord | null>;
|
|
12
|
+
putMeasure: (record: CustomMeasureRecord) => Promise<CustomMeasureRecord>;
|
|
13
|
+
deleteMeasure: (id: string) => Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomMeasuresDbService = void 0;
|
|
4
|
+
const dynamodb_client_js_1 = require("../../clients/generic/dynamodb-client.js");
|
|
5
|
+
const http_error_js_1 = require("../../libs/http-error.js");
|
|
6
|
+
const logging_helper_js_1 = require("../../helpers/logging-helper.js");
|
|
7
|
+
class CustomMeasuresDbService {
|
|
8
|
+
TABLE_NAME;
|
|
9
|
+
TABLE_KEY;
|
|
10
|
+
constructor(tableName, tableKey = 'id') {
|
|
11
|
+
this.TABLE_NAME = tableName;
|
|
12
|
+
this.TABLE_KEY = tableKey;
|
|
13
|
+
}
|
|
14
|
+
listByPixelId = async (gsiName, pixelId) => {
|
|
15
|
+
const records = await dynamodb_client_js_1.DynamoDbClient.safeQueryByGSI(this.TABLE_NAME, gsiName, 'pixelId', pixelId);
|
|
16
|
+
return records || [];
|
|
17
|
+
};
|
|
18
|
+
listPageByPixelId = async (gsiName, pixelId, limit, exclusiveStartKey) => {
|
|
19
|
+
const result = await dynamodb_client_js_1.DynamoDbClient.query({
|
|
20
|
+
TableName: this.TABLE_NAME,
|
|
21
|
+
IndexName: gsiName,
|
|
22
|
+
KeyConditionExpression: 'pixelId = :pixelId',
|
|
23
|
+
ExpressionAttributeValues: { ':pixelId': pixelId },
|
|
24
|
+
Limit: limit,
|
|
25
|
+
ExclusiveStartKey: exclusiveStartKey,
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
items: result.Items || [],
|
|
29
|
+
lastEvaluatedKey: result.LastEvaluatedKey,
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
getById = async (id) => {
|
|
33
|
+
const result = await dynamodb_client_js_1.DynamoDbClient.safeGet(this.TABLE_NAME, this.TABLE_KEY, id);
|
|
34
|
+
return result ?? null;
|
|
35
|
+
};
|
|
36
|
+
putMeasure = async (record) => {
|
|
37
|
+
const res = await dynamodb_client_js_1.DynamoDbClient.safePut(this.TABLE_NAME, record);
|
|
38
|
+
if (!res) {
|
|
39
|
+
logging_helper_js_1.Logger.error('CustomMeasuresDbService: putMeasure failed', { record });
|
|
40
|
+
throw http_error_js_1.HttpError.internal();
|
|
41
|
+
}
|
|
42
|
+
return record;
|
|
43
|
+
};
|
|
44
|
+
deleteMeasure = async (id) => {
|
|
45
|
+
await dynamodb_client_js_1.DynamoDbClient.safeDelete(this.TABLE_NAME, this.TABLE_KEY, id);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.CustomMeasuresDbService = CustomMeasuresDbService;
|
|
49
|
+
//# sourceMappingURL=custom-measures-db-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-measures-db-service.js","sourceRoot":"","sources":["../../../../src/services/db/custom-measures-db-service.ts"],"names":[],"mappings":";;;AACA,iFAA0E;AAC1E,4DAAqD;AACrD,uEAAyD;AAQzD,MAAa,uBAAuB;IAC3B,UAAU,CAAS;IACnB,SAAS,CAAS;IAEzB,YAAY,SAAiB,EAAE,QAAQ,GAAG,IAAI;QAC5C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAGM,aAAa,GAAG,KAAK,EAAE,OAAe,EAAE,OAAe,EAAkC,EAAE;QAChG,MAAM,OAAO,GAAG,MAAM,mCAAc,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAClG,OAAQ,OAAiC,IAAI,EAAE,CAAC;IAClD,CAAC,CAAC;IAGK,iBAAiB,GAAG,KAAK,EAC9B,OAAe,EACf,OAAe,EACf,KAAa,EACb,iBAAuC,EAC4C,EAAE;QACrF,MAAM,MAAM,GAAG,MAAM,mCAAc,CAAC,KAAK,CAAC;YACxC,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,OAAO;YAClB,sBAAsB,EAAE,oBAAoB;YAC5C,yBAAyB,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE;YAClD,KAAK,EAAE,KAAK;YACZ,iBAAiB,EAAE,iBAAiB;SACrC,CAAC,CAAC;QACH,OAAO;YACL,KAAK,EAAG,MAAM,CAAC,KAA+B,IAAI,EAAE;YACpD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;SAC1C,CAAC;IACJ,CAAC,CAAC;IAEK,OAAO,GAAG,KAAK,EAAE,EAAU,EAAuC,EAAE;QACzE,MAAM,MAAM,GAAG,MAAM,mCAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACjF,OAAQ,MAA8B,IAAI,IAAI,CAAC;IACjD,CAAC,CAAC;IAEK,UAAU,GAAG,KAAK,EAAE,MAA2B,EAAgC,EAAE;QACtF,MAAM,GAAG,GAAG,MAAM,mCAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG,EAAE;YACR,0BAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,MAAM,yBAAS,CAAC,QAAQ,EAAE,CAAC;SAC5B;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEK,aAAa,GAAG,KAAK,EAAE,EAAU,EAAiB,EAAE;QACzD,MAAM,mCAAc,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;CACH;AArDD,0DAqDC"}
|
|
@@ -3,7 +3,6 @@ export * from './log-events-db-service.js';
|
|
|
3
3
|
export * from './pixels-db-service.js';
|
|
4
4
|
export * from './purchasable-contacts-db-service.js';
|
|
5
5
|
export * from './purchased-contacts-db-service.js';
|
|
6
|
-
export * from './contact-enrichments-db-service.js';
|
|
7
6
|
export * from './tracking-events-db-service.js';
|
|
8
7
|
export * from './shopify-products-cache-db-service.js';
|
|
9
8
|
export * from './shopify-app-installs-db-service.js';
|
|
@@ -12,3 +11,4 @@ export * from './currency-exchange-rates-db-service.js';
|
|
|
12
11
|
export * from './accounts-db-service.js';
|
|
13
12
|
export * from './subscriptions-db-service.js';
|
|
14
13
|
export * from './api-keys-db-service.js';
|
|
14
|
+
export * from './custom-measures-db-service.js';
|
|
@@ -19,7 +19,6 @@ __exportStar(require("./log-events-db-service.js"), exports);
|
|
|
19
19
|
__exportStar(require("./pixels-db-service.js"), exports);
|
|
20
20
|
__exportStar(require("./purchasable-contacts-db-service.js"), exports);
|
|
21
21
|
__exportStar(require("./purchased-contacts-db-service.js"), exports);
|
|
22
|
-
__exportStar(require("./contact-enrichments-db-service.js"), exports);
|
|
23
22
|
__exportStar(require("./tracking-events-db-service.js"), exports);
|
|
24
23
|
__exportStar(require("./shopify-products-cache-db-service.js"), exports);
|
|
25
24
|
__exportStar(require("./shopify-app-installs-db-service.js"), exports);
|
|
@@ -28,4 +27,5 @@ __exportStar(require("./currency-exchange-rates-db-service.js"), exports);
|
|
|
28
27
|
__exportStar(require("./accounts-db-service.js"), exports);
|
|
29
28
|
__exportStar(require("./subscriptions-db-service.js"), exports);
|
|
30
29
|
__exportStar(require("./api-keys-db-service.js"), exports);
|
|
30
|
+
__exportStar(require("./custom-measures-db-service.js"), exports);
|
|
31
31
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/db/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,6DAA2C;AAC3C,yDAAuC;AACvC,uEAAqD;AACrD,qEAAmD;AACnD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/db/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,6DAA2C;AAC3C,yDAAuC;AACvC,uEAAqD;AACrD,qEAAmD;AACnD,kEAAgD;AAChD,yEAAuD;AACvD,uEAAqD;AACrD,iEAA+C;AAC/C,0EAAwD;AACxD,2DAAyC;AACzC,gEAA8C;AAC9C,2DAAyC;AACzC,kEAAgD"}
|
|
@@ -1,18 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export interface BuildPurchasedContactInput {
|
|
3
|
-
accountId: string;
|
|
4
|
-
primaryContact: ThirdPartyContact;
|
|
5
|
-
contacts: ThirdPartyContact[];
|
|
6
|
-
deliverableContacts: ThirdPartyContact[];
|
|
7
|
-
contactEnrichmentId?: string;
|
|
8
|
-
lookupType?: CONTACT_ENRICHMENT_LOOKUP_TYPE;
|
|
9
|
-
email?: string;
|
|
10
|
-
md5?: string;
|
|
11
|
-
sha2?: string;
|
|
12
|
-
userAgent?: string;
|
|
13
|
-
ipAddress?: string;
|
|
14
|
-
ipAddressEnrichment?: IPDataResponse;
|
|
15
|
-
}
|
|
1
|
+
import { PurchasedContact, ThirdPartyContact } from '@adtrackify/at-tracking-event-types';
|
|
16
2
|
export declare class PurchasedContactsDbService {
|
|
17
3
|
TABLE_NAME: string;
|
|
18
4
|
TABLE_KEY: string;
|
|
@@ -20,7 +6,7 @@ export declare class PurchasedContactsDbService {
|
|
|
20
6
|
IP_ADDRESS_PIXEL_ID_INDEX_NAME: string;
|
|
21
7
|
EMAIL_PIXEL_ID_INDEX_NAME: string;
|
|
22
8
|
constructor(tableName: string, purchasedContactsKey: string, STAGE: string);
|
|
23
|
-
buildPurchasedContact: (
|
|
9
|
+
buildPurchasedContact: (accountId: string, primaryContact: ThirdPartyContact, contacts: ThirdPartyContact[], deliverableContacts: ThirdPartyContact[]) => PurchasedContact;
|
|
24
10
|
getPurchasedContact: (id: string) => Promise<PurchasedContact>;
|
|
25
11
|
getPurchasedContactByIdentityIdPixelId: (identityId: string, pixelId: string) => Promise<PurchasedContact[]>;
|
|
26
12
|
getPurchasedContactByEmailPixelId: (email: string, pixelId: string) => Promise<PurchasedContact[]>;
|
|
@@ -19,8 +19,7 @@ class PurchasedContactsDbService {
|
|
|
19
19
|
this.IP_ADDRESS_PIXEL_ID_INDEX_NAME = `${STAGE}-purchased-contacts-gsi-ip-address-pixel-id`;
|
|
20
20
|
this.EMAIL_PIXEL_ID_INDEX_NAME = `${STAGE}-purchased-contacts-gsi-email-pixel-id`;
|
|
21
21
|
}
|
|
22
|
-
buildPurchasedContact = (
|
|
23
|
-
const { accountId, primaryContact, contacts, deliverableContacts, contactEnrichmentId, lookupType, email, md5, sha2, userAgent, ipAddress, ipAddressEnrichment, } = input;
|
|
22
|
+
buildPurchasedContact = (accountId, primaryContact, contacts, deliverableContacts) => {
|
|
24
23
|
const currentTimestamp = (0, libs_1.getCurrentTimestamp)();
|
|
25
24
|
const purchasedContact = {
|
|
26
25
|
...primaryContact,
|
|
@@ -37,14 +36,6 @@ class PurchasedContactsDbService {
|
|
|
37
36
|
purchasedAt: currentTimestamp,
|
|
38
37
|
createdAt: currentTimestamp,
|
|
39
38
|
updatedAt: currentTimestamp,
|
|
40
|
-
contactEnrichmentId,
|
|
41
|
-
lookupType,
|
|
42
|
-
email,
|
|
43
|
-
md5,
|
|
44
|
-
sha2,
|
|
45
|
-
userAgent,
|
|
46
|
-
ipAddress: ipAddress ?? primaryContact.ipAddress,
|
|
47
|
-
ipAddressEnrichment: ipAddressEnrichment ?? primaryContact.ipAddressEnrichment,
|
|
48
39
|
};
|
|
49
40
|
return purchasedContact;
|
|
50
41
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purchased-contacts-db-service.js","sourceRoot":"","sources":["../../../../src/services/db/purchased-contacts-db-service.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"purchased-contacts-db-service.js","sourceRoot":"","sources":["../../../../src/services/db/purchased-contacts-db-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,16 +22,6 @@ describe('AcuityClient', () => {
|
|
|
22
22
|
expect(config.headers.Authorization).toContain('MD5HASH');
|
|
23
23
|
expect(response).toEqual({ status: 200, data: { identities: [{ id: 1 }] } });
|
|
24
24
|
});
|
|
25
|
-
it('requests byEmail with the template id, a url-encoded email, and a bearer auth header', async () => {
|
|
26
|
-
mockGet.mockResolvedValue({ status: 200, data: { identities: [{ id: 1 }] } });
|
|
27
|
-
const client = new AcuityClient('KEY_ID', 'SECRET');
|
|
28
|
-
const response = await client.getContactsByEmail('a+b@x.com');
|
|
29
|
-
expect(mockGet).toHaveBeenCalledTimes(1);
|
|
30
|
-
const [url, config] = mockGet.mock.calls[0];
|
|
31
|
-
expect(url).toBe('/v2/identities/byEmail?email=a%2Bb%40x.com&template=1701523581');
|
|
32
|
-
expect(config.headers.Authorization).toMatch(/^Bearer KEY_ID/);
|
|
33
|
-
expect(response).toEqual({ status: 200, data: { identities: [{ id: 1 }] } });
|
|
34
|
-
});
|
|
35
25
|
it('passes a non-200 response through without throwing', async () => {
|
|
36
26
|
mockGet.mockResolvedValue({ status: 500, data: undefined });
|
|
37
27
|
const client = new AcuityClient('KEY_ID', 'SECRET');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acuity-client.spec.js","sourceRoot":"","sources":["../../../../src/__tests__/clients/acuity-client.spec.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CACtD,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;CAC1C,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGvE,MAAM,OAAO,GAAI,gBAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAgB,CAAC;AAEvF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,OAAO,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"acuity-client.spec.js","sourceRoot":"","sources":["../../../../src/__tests__/clients/acuity-client.spec.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CACtD,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;CAC1C,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGvE,MAAM,OAAO,GAAI,gBAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAgB,CAAC;AAEvF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,OAAO,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,OAAO,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEzD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { tokenizeFormula, parseFormula, collectFormulaMeasures, evaluateFormulaAst, validateFormula, } from '../../../libs/custom-measure-formula/index.js';
|
|
2
|
+
describe('custom measure formula utils', () => {
|
|
3
|
+
describe('tokenizeFormula', () => {
|
|
4
|
+
it('should tokenize measures, numbers, operators and parens', () => {
|
|
5
|
+
const tokens = tokenizeFormula('(orders.net_revenue - channel.spend) / channel.spend * 100');
|
|
6
|
+
expect(tokens.map((t) => t.type)).toEqual([
|
|
7
|
+
'lparen',
|
|
8
|
+
'measure',
|
|
9
|
+
'operator',
|
|
10
|
+
'measure',
|
|
11
|
+
'rparen',
|
|
12
|
+
'operator',
|
|
13
|
+
'measure',
|
|
14
|
+
'operator',
|
|
15
|
+
'number',
|
|
16
|
+
]);
|
|
17
|
+
expect(tokens[1].value).toBe('orders.net_revenue');
|
|
18
|
+
expect(tokens[8].value).toBe('100');
|
|
19
|
+
});
|
|
20
|
+
it('should tokenize decimal numbers and dotted measures ending in digits', () => {
|
|
21
|
+
const tokens = tokenizeFormula('orders.cm3 * 0.3');
|
|
22
|
+
expect(tokens.map((t) => t.value)).toEqual(['orders.cm3', '*', '0.3']);
|
|
23
|
+
});
|
|
24
|
+
it('should reject invalid characters', () => {
|
|
25
|
+
expect(() => tokenizeFormula('orders.revenue & 2')).toThrow(/Invalid character/);
|
|
26
|
+
});
|
|
27
|
+
it('should reject non-dotted identifiers', () => {
|
|
28
|
+
expect(() => tokenizeFormula('revenue + 1')).toThrow(/Invalid measure reference/);
|
|
29
|
+
});
|
|
30
|
+
it('should reject malformed numbers', () => {
|
|
31
|
+
expect(() => tokenizeFormula('1.2.3 + orders.count')).toThrow(/Invalid number/);
|
|
32
|
+
});
|
|
33
|
+
it('should reject an empty formula', () => {
|
|
34
|
+
expect(() => tokenizeFormula(' ')).toThrow(/empty/);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('parseFormula', () => {
|
|
38
|
+
it('should honour operator precedence', () => {
|
|
39
|
+
const ast = parseFormula('orders.a + orders.b * orders.c');
|
|
40
|
+
expect(ast).toEqual({
|
|
41
|
+
type: 'binary',
|
|
42
|
+
operator: '+',
|
|
43
|
+
left: { type: 'measure', measure: 'orders.a' },
|
|
44
|
+
right: {
|
|
45
|
+
type: 'binary',
|
|
46
|
+
operator: '*',
|
|
47
|
+
left: { type: 'measure', measure: 'orders.b' },
|
|
48
|
+
right: { type: 'measure', measure: 'orders.c' },
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
it('should honour parentheses and unary minus', () => {
|
|
53
|
+
const ast = parseFormula('-(orders.a - orders.b)');
|
|
54
|
+
expect(ast).toEqual({
|
|
55
|
+
type: 'unary',
|
|
56
|
+
operator: '-',
|
|
57
|
+
operand: {
|
|
58
|
+
type: 'binary',
|
|
59
|
+
operator: '-',
|
|
60
|
+
left: { type: 'measure', measure: 'orders.a' },
|
|
61
|
+
right: { type: 'measure', measure: 'orders.b' },
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
it('should reject unbalanced parentheses', () => {
|
|
66
|
+
expect(() => parseFormula('(orders.a + orders.b')).toThrow(/Unbalanced parentheses/);
|
|
67
|
+
});
|
|
68
|
+
it('should reject trailing operators', () => {
|
|
69
|
+
expect(() => parseFormula('orders.a +')).toThrow(/Unexpected end of formula/);
|
|
70
|
+
});
|
|
71
|
+
it('should reject dangling tokens', () => {
|
|
72
|
+
expect(() => parseFormula('orders.a orders.b')).toThrow(/Unexpected token/);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('collectFormulaMeasures', () => {
|
|
76
|
+
it('should return unique measures in order', () => {
|
|
77
|
+
const ast = parseFormula('(orders.net_revenue - channel.spend) / channel.spend');
|
|
78
|
+
expect(collectFormulaMeasures(ast)).toEqual(['orders.net_revenue', 'channel.spend']);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('evaluateFormulaAst', () => {
|
|
82
|
+
const values = new Map([
|
|
83
|
+
['orders.net_revenue', 1000],
|
|
84
|
+
['channel.spend', 250],
|
|
85
|
+
['orders.count', 0],
|
|
86
|
+
]);
|
|
87
|
+
it('should evaluate a ratio with percentage scaling', () => {
|
|
88
|
+
const ast = parseFormula('(orders.net_revenue - channel.spend) / channel.spend * 100');
|
|
89
|
+
expect(evaluateFormulaAst(ast, values)).toBe(300);
|
|
90
|
+
});
|
|
91
|
+
it('should return 0 on division by zero (matches SQL nullif semantics)', () => {
|
|
92
|
+
const ast = parseFormula('orders.net_revenue / orders.count');
|
|
93
|
+
expect(evaluateFormulaAst(ast, values)).toBe(0);
|
|
94
|
+
});
|
|
95
|
+
it('should treat a missing operand as 0 (matches SQL COALESCE semantics)', () => {
|
|
96
|
+
const ast = parseFormula('orders.net_revenue - orders.unknown');
|
|
97
|
+
expect(evaluateFormulaAst(ast, values)).toBe(1000);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('validateFormula', () => {
|
|
101
|
+
const knownOperands = new Set(['orders.net_revenue', 'channel.spend', 'orders.count']);
|
|
102
|
+
it('should accept a valid formula', () => {
|
|
103
|
+
const result = validateFormula('(orders.net_revenue - channel.spend) / channel.spend * 100', { knownOperands });
|
|
104
|
+
expect(result.valid).toBe(true);
|
|
105
|
+
expect(result.errors).toEqual([]);
|
|
106
|
+
expect(result.ast).toBeDefined();
|
|
107
|
+
});
|
|
108
|
+
it('should reject an unknown operand', () => {
|
|
109
|
+
const result = validateFormula('orders.net_revenue / orders.mystery', { knownOperands });
|
|
110
|
+
expect(result.valid).toBe(false);
|
|
111
|
+
expect(result.errors[0]).toMatch(/Unknown or unsupported measure/);
|
|
112
|
+
});
|
|
113
|
+
it('should reject a pure-constant formula', () => {
|
|
114
|
+
const result = validateFormula('1 + 2', { knownOperands });
|
|
115
|
+
expect(result.valid).toBe(false);
|
|
116
|
+
expect(result.errors[0]).toMatch(/at least one measure/);
|
|
117
|
+
});
|
|
118
|
+
it('should surface syntax errors', () => {
|
|
119
|
+
const result = validateFormula('(orders.count + ', { knownOperands });
|
|
120
|
+
expect(result.valid).toBe(false);
|
|
121
|
+
expect(result.errors.length).toBe(1);
|
|
122
|
+
});
|
|
123
|
+
it('should run syntactic-only when no operand predicate is supplied', () => {
|
|
124
|
+
const result = validateFormula('orders.net_revenue / channel.spend');
|
|
125
|
+
expect(result.valid).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=custom-measure-formula-utils.spec.js.map
|
package/dist/esm/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-measure-formula-utils.spec.js","sourceRoot":"","sources":["../../../../../src/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
const mockGetContactsByMd5 = jest.fn();
|
|
2
|
-
const mockGetContactsByEmail = jest.fn();
|
|
3
2
|
jest.mock('../../clients/third-party/acuity-client', () => ({
|
|
4
3
|
AcuityClient: jest.fn().mockImplementation(() => ({
|
|
5
4
|
getContactsByMd5: mockGetContactsByMd5,
|
|
6
|
-
getContactsByEmail: mockGetContactsByEmail,
|
|
7
5
|
})),
|
|
8
6
|
}));
|
|
9
7
|
jest.mock('../../helpers/logging-helper', () => ({
|
|
@@ -34,24 +32,6 @@ describe('AcuityApiService', () => {
|
|
|
34
32
|
expect(result).toBeNull();
|
|
35
33
|
});
|
|
36
34
|
});
|
|
37
|
-
describe('getAcuityContactsByEmail', () => {
|
|
38
|
-
it('returns the response data on a 200', async () => {
|
|
39
|
-
mockGetContactsByEmail.mockResolvedValue({ status: 200, data: { identities: [{ id: 1 }] } });
|
|
40
|
-
const result = await service.getAcuityContactsByEmail('pixel', 'identity', 'a@x.com', DESTINATION);
|
|
41
|
-
expect(mockGetContactsByEmail).toHaveBeenCalledWith('a@x.com');
|
|
42
|
-
expect(result).toEqual({ identities: [{ id: 1 }] });
|
|
43
|
-
});
|
|
44
|
-
it('returns null on a non-200 response', async () => {
|
|
45
|
-
mockGetContactsByEmail.mockResolvedValue({ status: 404, data: undefined });
|
|
46
|
-
const result = await service.getAcuityContactsByEmail('pixel', 'identity', 'a@x.com', DESTINATION);
|
|
47
|
-
expect(result).toBeNull();
|
|
48
|
-
});
|
|
49
|
-
it('returns null when the client throws', async () => {
|
|
50
|
-
mockGetContactsByEmail.mockRejectedValue(new Error('network'));
|
|
51
|
-
const result = await service.getAcuityContactsByEmail('pixel', 'identity', 'a@x.com', DESTINATION);
|
|
52
|
-
expect(result).toBeNull();
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
35
|
describe('getAcuityContactsByMd5Batch', () => {
|
|
56
36
|
it('aggregates 200 identities keyed by md5 and skips non-200 hashes', async () => {
|
|
57
37
|
mockGetContactsByMd5
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acuity-api-service.spec.js","sourceRoot":"","sources":["../../../../src/__tests__/services/acuity-api-service.spec.ts"],"names":[],"mappings":"AAKA,MAAM,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"acuity-api-service.spec.js","sourceRoot":"","sources":["../../../../src/__tests__/services/acuity-api-service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,5 @@ export declare class AcuityClient {
|
|
|
5
5
|
private AA_SECRET;
|
|
6
6
|
constructor(acuityKeyId: string, acuitySecret: string);
|
|
7
7
|
getContactsByMd5: (md5Hash: string) => Promise<ApiResponse<AcuityContactResponse>>;
|
|
8
|
-
getContactsByEmail: (email: string) => Promise<ApiResponse<AcuityContactResponse>>;
|
|
9
8
|
private generateAuthorization;
|
|
10
9
|
}
|
|
@@ -22,12 +22,6 @@ export class AcuityClient {
|
|
|
22
22
|
});
|
|
23
23
|
return response;
|
|
24
24
|
};
|
|
25
|
-
getContactsByEmail = async (email) => {
|
|
26
|
-
const response = await client.get(`/v2/identities/byEmail?email=${encodeURIComponent(email)}&template=${AA_TEMPLATE_ID}`, {
|
|
27
|
-
headers: { Authorization: this.generateAuthorization() },
|
|
28
|
-
});
|
|
29
|
-
return response;
|
|
30
|
-
};
|
|
31
25
|
generateAuthorization = () => {
|
|
32
26
|
const now = Date.now().toString(36);
|
|
33
27
|
const hash = generateMd5Hash(`${now}${this.AA_SECRET}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acuity-client.js","sourceRoot":"","sources":["../../../../src/clients/third-party/acuity-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,UAAU,GAAG,gCAAgC,CAAC;AACpD,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,MAAM,GAAG,gBAAgB,CAAC;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE;QACP,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,YAAY;IACf,SAAS,CAAS;IAClB,SAAS,CAAS;IAE1B,YAAY,WAAmB,EAAE,YAAoB;QACnD,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;IAChC,CAAC;IAEM,gBAAgB,GAAG,KAAK,EAAE,OAAe,EAA+C,EAAE;QAC/F,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,4BAA4B,OAAO,aAAa,cAAc,EAAE,EAAE;YAClG,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE;SACzD,CAAC,CAAC;QACH,OAAO,QAA8C,CAAC;IACxD,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"acuity-client.js","sourceRoot":"","sources":["../../../../src/clients/third-party/acuity-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,UAAU,GAAG,gCAAgC,CAAC;AACpD,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,MAAM,GAAG,gBAAgB,CAAC;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE;QACP,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,YAAY;IACf,SAAS,CAAS;IAClB,SAAS,CAAS;IAE1B,YAAY,WAAmB,EAAE,YAAoB;QACnD,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;IAChC,CAAC;IAEM,gBAAgB,GAAG,KAAK,EAAE,OAAe,EAA+C,EAAE;QAC/F,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,4BAA4B,OAAO,aAAa,cAAc,EAAE,EAAE;YAClG,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE;SACzD,CAAC,CAAC;QACH,OAAO,QAA8C,CAAC;IACxD,CAAC,CAAC;IAEM,qBAAqB,GAAG,GAAW,EAAE;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACxD,OAAO,UAAU,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;IACjD,CAAC,CAAC;CACH"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare enum FORMULA_OPERATOR {
|
|
2
|
+
ADD = "+",
|
|
3
|
+
SUBTRACT = "-",
|
|
4
|
+
MULTIPLY = "*",
|
|
5
|
+
DIVIDE = "/"
|
|
6
|
+
}
|
|
7
|
+
export declare enum FORMULA_TOKEN_TYPE {
|
|
8
|
+
NUMBER = "number",
|
|
9
|
+
MEASURE = "measure",
|
|
10
|
+
OPERATOR = "operator",
|
|
11
|
+
LPAREN = "lparen",
|
|
12
|
+
RPAREN = "rparen"
|
|
13
|
+
}
|
|
14
|
+
export declare enum FORMULA_NODE_TYPE {
|
|
15
|
+
NUMBER = "number",
|
|
16
|
+
MEASURE = "measure",
|
|
17
|
+
UNARY = "unary",
|
|
18
|
+
BINARY = "binary"
|
|
19
|
+
}
|
|
20
|
+
export interface FormulaToken {
|
|
21
|
+
type: FORMULA_TOKEN_TYPE;
|
|
22
|
+
value: string;
|
|
23
|
+
}
|
|
24
|
+
export type FormulaAst = {
|
|
25
|
+
type: FORMULA_NODE_TYPE.NUMBER;
|
|
26
|
+
value: number;
|
|
27
|
+
} | {
|
|
28
|
+
type: FORMULA_NODE_TYPE.MEASURE;
|
|
29
|
+
measure: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: FORMULA_NODE_TYPE.UNARY;
|
|
32
|
+
operator: FORMULA_OPERATOR.SUBTRACT;
|
|
33
|
+
operand: FormulaAst;
|
|
34
|
+
} | {
|
|
35
|
+
type: FORMULA_NODE_TYPE.BINARY;
|
|
36
|
+
operator: FORMULA_OPERATOR;
|
|
37
|
+
left: FormulaAst;
|
|
38
|
+
right: FormulaAst;
|
|
39
|
+
};
|
|
40
|
+
export interface FormulaValidationOptions {
|
|
41
|
+
knownOperands?: ReadonlySet<string>;
|
|
42
|
+
}
|
|
43
|
+
export interface FormulaValidationResult {
|
|
44
|
+
valid: boolean;
|
|
45
|
+
errors: string[];
|
|
46
|
+
ast?: FormulaAst;
|
|
47
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export var FORMULA_OPERATOR;
|
|
2
|
+
(function (FORMULA_OPERATOR) {
|
|
3
|
+
FORMULA_OPERATOR["ADD"] = "+";
|
|
4
|
+
FORMULA_OPERATOR["SUBTRACT"] = "-";
|
|
5
|
+
FORMULA_OPERATOR["MULTIPLY"] = "*";
|
|
6
|
+
FORMULA_OPERATOR["DIVIDE"] = "/";
|
|
7
|
+
})(FORMULA_OPERATOR || (FORMULA_OPERATOR = {}));
|
|
8
|
+
export var FORMULA_TOKEN_TYPE;
|
|
9
|
+
(function (FORMULA_TOKEN_TYPE) {
|
|
10
|
+
FORMULA_TOKEN_TYPE["NUMBER"] = "number";
|
|
11
|
+
FORMULA_TOKEN_TYPE["MEASURE"] = "measure";
|
|
12
|
+
FORMULA_TOKEN_TYPE["OPERATOR"] = "operator";
|
|
13
|
+
FORMULA_TOKEN_TYPE["LPAREN"] = "lparen";
|
|
14
|
+
FORMULA_TOKEN_TYPE["RPAREN"] = "rparen";
|
|
15
|
+
})(FORMULA_TOKEN_TYPE || (FORMULA_TOKEN_TYPE = {}));
|
|
16
|
+
export var FORMULA_NODE_TYPE;
|
|
17
|
+
(function (FORMULA_NODE_TYPE) {
|
|
18
|
+
FORMULA_NODE_TYPE["NUMBER"] = "number";
|
|
19
|
+
FORMULA_NODE_TYPE["MEASURE"] = "measure";
|
|
20
|
+
FORMULA_NODE_TYPE["UNARY"] = "unary";
|
|
21
|
+
FORMULA_NODE_TYPE["BINARY"] = "binary";
|
|
22
|
+
})(FORMULA_NODE_TYPE || (FORMULA_NODE_TYPE = {}));
|
|
23
|
+
//# sourceMappingURL=custom-measure-formula-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-measure-formula-types.js","sourceRoot":"","sources":["../../../../src/libs/custom-measure-formula/custom-measure-formula-types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,6BAAS,CAAA;IACT,kCAAc,CAAA;IACd,kCAAc,CAAA;IACd,gCAAY,CAAA;AACd,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,uCAAiB,CAAA;IACjB,yCAAmB,CAAA;IACnB,2CAAqB,CAAA;IACrB,uCAAiB,CAAA;IACjB,uCAAiB,CAAA;AACnB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B;AAED,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,sCAAiB,CAAA;IACjB,wCAAmB,CAAA;IACnB,oCAAe,CAAA;IACf,sCAAiB,CAAA;AACnB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FormulaAst, FormulaToken, FormulaValidationOptions, FormulaValidationResult } from './custom-measure-formula-types.js';
|
|
2
|
+
export declare const tokenizeFormula: (formula: string) => FormulaToken[];
|
|
3
|
+
export declare const parseFormula: (formula: string) => FormulaAst;
|
|
4
|
+
export declare const collectFormulaMeasures: (ast: FormulaAst) => string[];
|
|
5
|
+
export declare const evaluateFormulaAst: (ast: FormulaAst, operandValues: ReadonlyMap<string, number | null | undefined>) => number;
|
|
6
|
+
export declare const validateFormula: (formula: string, options?: FormulaValidationOptions) => FormulaValidationResult;
|