@adtrackify/at-service-common 3.19.3 → 3.19.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/cjs/__tests__/clients/acuity-client.spec.js +0 -10
  2. package/dist/cjs/__tests__/clients/acuity-client.spec.js.map +1 -1
  3. package/dist/cjs/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js +143 -0
  4. package/dist/cjs/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js.map +1 -0
  5. package/dist/cjs/__tests__/services/acuity-api-service.spec.js +0 -20
  6. package/dist/cjs/__tests__/services/acuity-api-service.spec.js.map +1 -1
  7. package/dist/cjs/clients/third-party/acuity-client.d.ts +0 -1
  8. package/dist/cjs/clients/third-party/acuity-client.js +0 -6
  9. package/dist/cjs/clients/third-party/acuity-client.js.map +1 -1
  10. package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-types.d.ts +47 -0
  11. package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-types.js +26 -0
  12. package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-types.js.map +1 -0
  13. package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-utils.d.ts +7 -0
  14. package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-utils.js +200 -0
  15. package/dist/cjs/libs/custom-measure-formula/custom-measure-formula-utils.js.map +1 -0
  16. package/dist/cjs/libs/custom-measure-formula/index.d.ts +2 -0
  17. package/dist/cjs/libs/custom-measure-formula/index.js +19 -0
  18. package/dist/cjs/libs/custom-measure-formula/index.js.map +1 -0
  19. package/dist/cjs/libs/index.d.ts +1 -0
  20. package/dist/cjs/libs/index.js +1 -0
  21. package/dist/cjs/libs/index.js.map +1 -1
  22. package/dist/cjs/services/acuity-api-service.d.ts +0 -1
  23. package/dist/cjs/services/acuity-api-service.js +0 -19
  24. package/dist/cjs/services/acuity-api-service.js.map +1 -1
  25. package/dist/cjs/services/db/custom-measures-db-service.d.ts +14 -0
  26. package/dist/cjs/services/db/custom-measures-db-service.js +49 -0
  27. package/dist/cjs/services/db/custom-measures-db-service.js.map +1 -0
  28. package/dist/cjs/services/db/index.d.ts +1 -1
  29. package/dist/cjs/services/db/index.js +1 -1
  30. package/dist/cjs/services/db/index.js.map +1 -1
  31. package/dist/cjs/services/db/purchased-contacts-db-service.d.ts +2 -16
  32. package/dist/cjs/services/db/purchased-contacts-db-service.js +1 -10
  33. package/dist/cjs/services/db/purchased-contacts-db-service.js.map +1 -1
  34. package/dist/esm/__tests__/clients/acuity-client.spec.js +0 -10
  35. package/dist/esm/__tests__/clients/acuity-client.spec.js.map +1 -1
  36. package/dist/esm/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js +141 -0
  37. package/dist/esm/__tests__/libs/custom-measure-formula/custom-measure-formula-utils.spec.js.map +1 -0
  38. package/dist/esm/__tests__/services/acuity-api-service.spec.js +0 -20
  39. package/dist/esm/__tests__/services/acuity-api-service.spec.js.map +1 -1
  40. package/dist/esm/clients/third-party/acuity-client.d.ts +0 -1
  41. package/dist/esm/clients/third-party/acuity-client.js +0 -6
  42. package/dist/esm/clients/third-party/acuity-client.js.map +1 -1
  43. package/dist/esm/libs/custom-measure-formula/custom-measure-formula-types.d.ts +47 -0
  44. package/dist/esm/libs/custom-measure-formula/custom-measure-formula-types.js +23 -0
  45. package/dist/esm/libs/custom-measure-formula/custom-measure-formula-types.js.map +1 -0
  46. package/dist/esm/libs/custom-measure-formula/custom-measure-formula-utils.d.ts +7 -0
  47. package/dist/esm/libs/custom-measure-formula/custom-measure-formula-utils.js +191 -0
  48. package/dist/esm/libs/custom-measure-formula/custom-measure-formula-utils.js.map +1 -0
  49. package/dist/esm/libs/custom-measure-formula/index.d.ts +2 -0
  50. package/dist/esm/libs/custom-measure-formula/index.js +3 -0
  51. package/dist/esm/libs/custom-measure-formula/index.js.map +1 -0
  52. package/dist/esm/libs/index.d.ts +1 -0
  53. package/dist/esm/libs/index.js +1 -0
  54. package/dist/esm/libs/index.js.map +1 -1
  55. package/dist/esm/services/acuity-api-service.d.ts +0 -1
  56. package/dist/esm/services/acuity-api-service.js +0 -19
  57. package/dist/esm/services/acuity-api-service.js.map +1 -1
  58. package/dist/esm/services/db/custom-measures-db-service.d.ts +14 -0
  59. package/dist/esm/services/db/custom-measures-db-service.js +45 -0
  60. package/dist/esm/services/db/custom-measures-db-service.js.map +1 -0
  61. package/dist/esm/services/db/index.d.ts +1 -1
  62. package/dist/esm/services/db/index.js +1 -1
  63. package/dist/esm/services/db/index.js.map +1 -1
  64. package/dist/esm/services/db/purchased-contacts-db-service.d.ts +2 -16
  65. package/dist/esm/services/db/purchased-contacts-db-service.js +1 -10
  66. package/dist/esm/services/db/purchased-contacts-db-service.js.map +1 -1
  67. package/package.json +2 -2
  68. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js +0 -66
  69. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js.map +0 -1
  70. package/dist/cjs/services/db/contact-enrichments-db-service.d.ts +0 -16
  71. package/dist/cjs/services/db/contact-enrichments-db-service.js +0 -71
  72. package/dist/cjs/services/db/contact-enrichments-db-service.js.map +0 -1
  73. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js +0 -64
  74. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js.map +0 -1
  75. package/dist/esm/services/db/contact-enrichments-db-service.d.ts +0 -16
  76. package/dist/esm/services/db/contact-enrichments-db-service.js +0 -67
  77. package/dist/esm/services/db/contact-enrichments-db-service.js.map +0 -1
  78. /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
  79. /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
@@ -24,16 +24,6 @@ describe('AcuityClient', () => {
24
24
  expect(config.headers.Authorization).toContain('MD5HASH');
25
25
  expect(response).toEqual({ status: 200, data: { identities: [{ id: 1 }] } });
26
26
  });
27
- it('requests byEmail with the template id, a url-encoded email, and a bearer auth header', async () => {
28
- mockGet.mockResolvedValue({ status: 200, data: { identities: [{ id: 1 }] } });
29
- const client = new acuity_client_1.AcuityClient('KEY_ID', 'SECRET');
30
- const response = await client.getContactsByEmail('a+b@x.com');
31
- expect(mockGet).toHaveBeenCalledTimes(1);
32
- const [url, config] = mockGet.mock.calls[0];
33
- expect(url).toBe('/v2/identities/byEmail?email=a%2Bb%40x.com&template=1701523581');
34
- expect(config.headers.Authorization).toMatch(/^Bearer KEY_ID/);
35
- expect(response).toEqual({ status: 200, data: { identities: [{ id: 1 }] } });
36
- });
37
27
  it('passes a non-200 response through without throwing', async () => {
38
28
  mockGet.mockResolvedValue({ status: 500, data: undefined });
39
29
  const client = new acuity_client_1.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":"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"}
1
+ {"version":3,"file":"acuity-client.spec.js","sourceRoot":"","sources":["../../../../src/__tests__/clients/acuity-client.spec.ts"],"names":[],"mappings":";;AAGA,mDAAyD;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,2EAAuE;AAGvE,MAAM,OAAO,GAAI,0BAA8B,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,4BAAY,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,4BAAY,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,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_js_1 = require("../../../libs/custom-measure-formula/index.js");
4
+ const SAMPLE_ULID = '01ARZ3NDEKTSV4RRFFQ69G5FAV';
5
+ describe('custom measure formula utils', () => {
6
+ describe('isCustomMeasureId', () => {
7
+ it('should detect bare-ULID custom measure ids and reject native dotted ids', () => {
8
+ expect((0, index_js_1.isCustomMeasureId)(SAMPLE_ULID)).toBe(true);
9
+ expect((0, index_js_1.isCustomMeasureId)('orders.net_revenue')).toBe(false);
10
+ expect((0, index_js_1.isCustomMeasureId)('channel.spend')).toBe(false);
11
+ expect((0, index_js_1.isCustomMeasureId)('custom.1234')).toBe(false);
12
+ expect((0, index_js_1.isCustomMeasureId)(SAMPLE_ULID.toLowerCase())).toBe(false);
13
+ expect((0, index_js_1.isCustomMeasureId)(undefined)).toBe(false);
14
+ expect((0, index_js_1.isCustomMeasureId)('')).toBe(false);
15
+ });
16
+ });
17
+ describe('tokenizeFormula', () => {
18
+ it('should tokenize measures, numbers, operators and parens', () => {
19
+ const tokens = (0, index_js_1.tokenizeFormula)('(orders.net_revenue - channel.spend) / channel.spend * 100');
20
+ expect(tokens.map((t) => t.type)).toEqual([
21
+ 'lparen',
22
+ 'measure',
23
+ 'operator',
24
+ 'measure',
25
+ 'rparen',
26
+ 'operator',
27
+ 'measure',
28
+ 'operator',
29
+ 'number',
30
+ ]);
31
+ expect(tokens[1].value).toBe('orders.net_revenue');
32
+ expect(tokens[8].value).toBe('100');
33
+ });
34
+ it('should tokenize decimal numbers and dotted measures ending in digits', () => {
35
+ const tokens = (0, index_js_1.tokenizeFormula)('orders.cm3 * 0.3');
36
+ expect(tokens.map((t) => t.value)).toEqual(['orders.cm3', '*', '0.3']);
37
+ });
38
+ it('should reject invalid characters', () => {
39
+ expect(() => (0, index_js_1.tokenizeFormula)('orders.revenue & 2')).toThrow(/Invalid character/);
40
+ });
41
+ it('should reject non-dotted identifiers', () => {
42
+ expect(() => (0, index_js_1.tokenizeFormula)('revenue + 1')).toThrow(/Invalid measure reference/);
43
+ });
44
+ it('should reject malformed numbers', () => {
45
+ expect(() => (0, index_js_1.tokenizeFormula)('1.2.3 + orders.count')).toThrow(/Invalid number/);
46
+ });
47
+ it('should reject an empty formula', () => {
48
+ expect(() => (0, index_js_1.tokenizeFormula)(' ')).toThrow(/empty/);
49
+ });
50
+ });
51
+ describe('parseFormula', () => {
52
+ it('should honour operator precedence', () => {
53
+ const ast = (0, index_js_1.parseFormula)('orders.a + orders.b * orders.c');
54
+ expect(ast).toEqual({
55
+ type: 'binary',
56
+ operator: '+',
57
+ left: { type: 'measure', measure: 'orders.a' },
58
+ right: {
59
+ type: 'binary',
60
+ operator: '*',
61
+ left: { type: 'measure', measure: 'orders.b' },
62
+ right: { type: 'measure', measure: 'orders.c' },
63
+ },
64
+ });
65
+ });
66
+ it('should honour parentheses and unary minus', () => {
67
+ const ast = (0, index_js_1.parseFormula)('-(orders.a - orders.b)');
68
+ expect(ast).toEqual({
69
+ type: 'unary',
70
+ operator: '-',
71
+ operand: {
72
+ type: 'binary',
73
+ operator: '-',
74
+ left: { type: 'measure', measure: 'orders.a' },
75
+ right: { type: 'measure', measure: 'orders.b' },
76
+ },
77
+ });
78
+ });
79
+ it('should reject unbalanced parentheses', () => {
80
+ expect(() => (0, index_js_1.parseFormula)('(orders.a + orders.b')).toThrow(/Unbalanced parentheses/);
81
+ });
82
+ it('should reject trailing operators', () => {
83
+ expect(() => (0, index_js_1.parseFormula)('orders.a +')).toThrow(/Unexpected end of formula/);
84
+ });
85
+ it('should reject dangling tokens', () => {
86
+ expect(() => (0, index_js_1.parseFormula)('orders.a orders.b')).toThrow(/Unexpected token/);
87
+ });
88
+ });
89
+ describe('collectFormulaMeasures', () => {
90
+ it('should return unique measures in order', () => {
91
+ const ast = (0, index_js_1.parseFormula)('(orders.net_revenue - channel.spend) / channel.spend');
92
+ expect((0, index_js_1.collectFormulaMeasures)(ast)).toEqual(['orders.net_revenue', 'channel.spend']);
93
+ });
94
+ });
95
+ describe('evaluateFormulaAst', () => {
96
+ const values = new Map([
97
+ ['orders.net_revenue', 1000],
98
+ ['channel.spend', 250],
99
+ ['orders.count', 0],
100
+ ]);
101
+ it('should evaluate a ratio with percentage scaling', () => {
102
+ const ast = (0, index_js_1.parseFormula)('(orders.net_revenue - channel.spend) / channel.spend * 100');
103
+ expect((0, index_js_1.evaluateFormulaAst)(ast, values)).toBe(300);
104
+ });
105
+ it('should return 0 on division by zero (matches SQL nullif semantics)', () => {
106
+ const ast = (0, index_js_1.parseFormula)('orders.net_revenue / orders.count');
107
+ expect((0, index_js_1.evaluateFormulaAst)(ast, values)).toBe(0);
108
+ });
109
+ it('should treat a missing operand as 0 (matches SQL COALESCE semantics)', () => {
110
+ const ast = (0, index_js_1.parseFormula)('orders.net_revenue - orders.unknown');
111
+ expect((0, index_js_1.evaluateFormulaAst)(ast, values)).toBe(1000);
112
+ });
113
+ });
114
+ describe('validateFormula', () => {
115
+ const knownOperands = new Set(['orders.net_revenue', 'channel.spend', 'orders.count']);
116
+ it('should accept a valid formula', () => {
117
+ const result = (0, index_js_1.validateFormula)('(orders.net_revenue - channel.spend) / channel.spend * 100', { knownOperands });
118
+ expect(result.valid).toBe(true);
119
+ expect(result.errors).toEqual([]);
120
+ expect(result.ast).toBeDefined();
121
+ });
122
+ it('should reject an unknown operand', () => {
123
+ const result = (0, index_js_1.validateFormula)('orders.net_revenue / orders.mystery', { knownOperands });
124
+ expect(result.valid).toBe(false);
125
+ expect(result.errors[0]).toMatch(/Unknown or unsupported measure/);
126
+ });
127
+ it('should reject a pure-constant formula', () => {
128
+ const result = (0, index_js_1.validateFormula)('1 + 2', { knownOperands });
129
+ expect(result.valid).toBe(false);
130
+ expect(result.errors[0]).toMatch(/at least one measure/);
131
+ });
132
+ it('should surface syntax errors', () => {
133
+ const result = (0, index_js_1.validateFormula)('(orders.count + ', { knownOperands });
134
+ expect(result.valid).toBe(false);
135
+ expect(result.errors.length).toBe(1);
136
+ });
137
+ it('should run syntactic-only when no operand predicate is supplied', () => {
138
+ const result = (0, index_js_1.validateFormula)('orders.net_revenue / channel.spend');
139
+ expect(result.valid).toBe(true);
140
+ });
141
+ });
142
+ });
143
+ //# sourceMappingURL=custom-measure-formula-utils.spec.js.map
@@ -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":";;AAIA,4EAOuD;AAEvD,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,MAAM,CAAC,IAAA,4BAAiB,EAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,CAAC,IAAA,4BAAiB,EAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAA,4BAAiB,EAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,CAAC,IAAA,4BAAiB,EAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,CAAC,IAAA,4BAAiB,EAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,CAAC,IAAA,4BAAiB,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,IAAA,4BAAiB,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,4DAA4D,CAAC,CAAC;YAC7F,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxC,QAAQ;gBACR,SAAS;gBACT,UAAU;gBACV,SAAS;gBACT,QAAQ;gBACR,UAAU;gBACV,SAAS;gBACT,UAAU;gBACV,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,kBAAkB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAe,EAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAe,EAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAe,EAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAe,EAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAA,uBAAY,EAAC,gCAAgC,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBAClB,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,GAAG;gBACb,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;gBAC9C,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,GAAG;oBACb,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;oBAC9C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChD;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,GAAG,GAAG,IAAA,uBAAY,EAAC,wBAAwB,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBAClB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,GAAG;gBACb,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,GAAG;oBACb,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;oBAC9C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChD;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,GAAG,GAAG,IAAA,uBAAY,EAAC,sDAAsD,CAAC,CAAC;YACjF,MAAM,CAAC,IAAA,iCAAsB,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAiB;YACrC,CAAC,oBAAoB,EAAE,IAAI,CAAC;YAC5B,CAAC,eAAe,EAAE,GAAG,CAAC;YACtB,CAAC,cAAc,EAAE,CAAC,CAAC;SACpB,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,GAAG,GAAG,IAAA,uBAAY,EAAC,4DAA4D,CAAC,CAAC;YACvF,MAAM,CAAC,IAAA,6BAAkB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,GAAG,GAAG,IAAA,uBAAY,EAAC,mCAAmC,CAAC,CAAC;YAC9D,MAAM,CAAC,IAAA,6BAAkB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,GAAG,GAAG,IAAA,uBAAY,EAAC,qCAAqC,CAAC,CAAC;YAChE,MAAM,CAAC,IAAA,6BAAkB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,oBAAoB,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;QAEvF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,4DAA4D,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAChH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,qCAAqC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YACzF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,oCAAoC,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const mockGetContactsByMd5 = jest.fn();
4
- const mockGetContactsByEmail = jest.fn();
5
4
  jest.mock('../../clients/third-party/acuity-client', () => ({
6
5
  AcuityClient: jest.fn().mockImplementation(() => ({
7
6
  getContactsByMd5: mockGetContactsByMd5,
8
- getContactsByEmail: mockGetContactsByEmail,
9
7
  })),
10
8
  }));
11
9
  jest.mock('../../helpers/logging-helper', () => ({
@@ -36,24 +34,6 @@ describe('AcuityApiService', () => {
36
34
  expect(result).toBeNull();
37
35
  });
38
36
  });
39
- describe('getAcuityContactsByEmail', () => {
40
- it('returns the response data on a 200', async () => {
41
- mockGetContactsByEmail.mockResolvedValue({ status: 200, data: { identities: [{ id: 1 }] } });
42
- const result = await service.getAcuityContactsByEmail('pixel', 'identity', 'a@x.com', DESTINATION);
43
- expect(mockGetContactsByEmail).toHaveBeenCalledWith('a@x.com');
44
- expect(result).toEqual({ identities: [{ id: 1 }] });
45
- });
46
- it('returns null on a non-200 response', async () => {
47
- mockGetContactsByEmail.mockResolvedValue({ status: 404, data: undefined });
48
- const result = await service.getAcuityContactsByEmail('pixel', 'identity', 'a@x.com', DESTINATION);
49
- expect(result).toBeNull();
50
- });
51
- it('returns null when the client throws', async () => {
52
- mockGetContactsByEmail.mockRejectedValue(new Error('network'));
53
- const result = await service.getAcuityContactsByEmail('pixel', 'identity', 'a@x.com', DESTINATION);
54
- expect(result).toBeNull();
55
- });
56
- });
57
37
  describe('getAcuityContactsByMd5Batch', () => {
58
38
  it('aggregates 200 identities keyed by md5 and skips non-200 hashes', async () => {
59
39
  mockGetContactsByMd5
@@ -1 +1 @@
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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"}
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
  }
@@ -25,12 +25,6 @@ class AcuityClient {
25
25
  });
26
26
  return response;
27
27
  };
28
- getContactsByEmail = async (email) => {
29
- const response = await client.get(`/v2/identities/byEmail?email=${encodeURIComponent(email)}&template=${AA_TEMPLATE_ID}`, {
30
- headers: { Authorization: this.generateAuthorization() },
31
- });
32
- return response;
33
- };
34
28
  generateAuthorization = () => {
35
29
  const now = Date.now().toString(36);
36
30
  const hash = (0, crypto_1.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,wCAA8C;AAE9C,8CAAoD;AAGpD,MAAM,UAAU,GAAG,gCAAgC,CAAC;AACpD,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,MAAM,GAAG,IAAA,0BAAgB,EAAC;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE;QACP,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAC;AAEH,MAAa,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;IAEK,kBAAkB,GAAG,KAAK,EAAE,KAAa,EAA+C,EAAE;QAC/F,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,gCAAgC,kBAAkB,CAAC,KAAK,CAAC,aAAa,cAAc,EAAE,EAAE;YACxH,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,IAAA,wBAAe,EAAC,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;AA5BD,oCA4BC"}
1
+ {"version":3,"file":"acuity-client.js","sourceRoot":"","sources":["../../../../src/clients/third-party/acuity-client.ts"],"names":[],"mappings":";;;AAAA,wCAA8C;AAE9C,8CAAoD;AAGpD,MAAM,UAAU,GAAG,gCAAgC,CAAC;AACpD,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,MAAM,GAAG,IAAA,0BAAgB,EAAC;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE;QACP,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAC;AAEH,MAAa,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,IAAA,wBAAe,EAAC,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;AArBD,oCAqBC"}
@@ -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,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FORMULA_NODE_TYPE = exports.FORMULA_TOKEN_TYPE = exports.FORMULA_OPERATOR = void 0;
4
+ var FORMULA_OPERATOR;
5
+ (function (FORMULA_OPERATOR) {
6
+ FORMULA_OPERATOR["ADD"] = "+";
7
+ FORMULA_OPERATOR["SUBTRACT"] = "-";
8
+ FORMULA_OPERATOR["MULTIPLY"] = "*";
9
+ FORMULA_OPERATOR["DIVIDE"] = "/";
10
+ })(FORMULA_OPERATOR = exports.FORMULA_OPERATOR || (exports.FORMULA_OPERATOR = {}));
11
+ var FORMULA_TOKEN_TYPE;
12
+ (function (FORMULA_TOKEN_TYPE) {
13
+ FORMULA_TOKEN_TYPE["NUMBER"] = "number";
14
+ FORMULA_TOKEN_TYPE["MEASURE"] = "measure";
15
+ FORMULA_TOKEN_TYPE["OPERATOR"] = "operator";
16
+ FORMULA_TOKEN_TYPE["LPAREN"] = "lparen";
17
+ FORMULA_TOKEN_TYPE["RPAREN"] = "rparen";
18
+ })(FORMULA_TOKEN_TYPE = exports.FORMULA_TOKEN_TYPE || (exports.FORMULA_TOKEN_TYPE = {}));
19
+ var FORMULA_NODE_TYPE;
20
+ (function (FORMULA_NODE_TYPE) {
21
+ FORMULA_NODE_TYPE["NUMBER"] = "number";
22
+ FORMULA_NODE_TYPE["MEASURE"] = "measure";
23
+ FORMULA_NODE_TYPE["UNARY"] = "unary";
24
+ FORMULA_NODE_TYPE["BINARY"] = "binary";
25
+ })(FORMULA_NODE_TYPE = exports.FORMULA_NODE_TYPE || (exports.FORMULA_NODE_TYPE = {}));
26
+ //# 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,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,6BAAS,CAAA;IACT,kCAAc,CAAA;IACd,kCAAc,CAAA;IACd,gCAAY,CAAA;AACd,CAAC,EALW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAK3B;AAED,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,uCAAiB,CAAA;IACjB,yCAAmB,CAAA;IACnB,2CAAqB,CAAA;IACrB,uCAAiB,CAAA;IACjB,uCAAiB,CAAA;AACnB,CAAC,EANW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAM7B;AAED,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,sCAAiB,CAAA;IACjB,wCAAmB,CAAA;IACnB,oCAAe,CAAA;IACf,sCAAiB,CAAA;AACnB,CAAC,EALW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAK5B"}
@@ -0,0 +1,7 @@
1
+ import { FormulaAst, FormulaToken, FormulaValidationOptions, FormulaValidationResult } from './custom-measure-formula-types.js';
2
+ export declare const isCustomMeasureId: (id?: string) => boolean;
3
+ export declare const tokenizeFormula: (formula: string) => FormulaToken[];
4
+ export declare const parseFormula: (formula: string) => FormulaAst;
5
+ export declare const collectFormulaMeasures: (ast: FormulaAst) => string[];
6
+ export declare const evaluateFormulaAst: (ast: FormulaAst, operandValues: ReadonlyMap<string, number | null | undefined>) => number;
7
+ export declare const validateFormula: (formula: string, options?: FormulaValidationOptions) => FormulaValidationResult;
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateFormula = exports.evaluateFormulaAst = exports.collectFormulaMeasures = exports.parseFormula = exports.tokenizeFormula = exports.isCustomMeasureId = void 0;
4
+ const custom_measure_formula_types_js_1 = require("./custom-measure-formula-types.js");
5
+ const ULID_PATTERN = /^[0-9A-HJKMNP-TV-Z]{26}$/;
6
+ const NUMBER_PATTERN = /^[0-9]+(\.[0-9]+)?$/;
7
+ const MEASURE_PATTERN = /^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+$/;
8
+ const ALLOWED_CHARS_PATTERN = /[^a-z0-9_.+\-*/()\s]/;
9
+ const isCustomMeasureId = (id) => {
10
+ return !!id && ULID_PATTERN.test(id);
11
+ };
12
+ exports.isCustomMeasureId = isCustomMeasureId;
13
+ const tokenizeFormula = (formula) => {
14
+ if (!formula || formula.trim().length === 0) {
15
+ throw new Error('Formula is empty');
16
+ }
17
+ const invalidChar = formula.match(ALLOWED_CHARS_PATTERN);
18
+ if (invalidChar) {
19
+ throw new Error(`Invalid character in formula: '${invalidChar[0]}'`);
20
+ }
21
+ const tokens = [];
22
+ let i = 0;
23
+ while (i < formula.length) {
24
+ const char = formula[i];
25
+ if (/\s/.test(char)) {
26
+ i += 1;
27
+ continue;
28
+ }
29
+ if (char === '(' || char === ')') {
30
+ tokens.push({ type: char === '(' ? custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.LPAREN : custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.RPAREN, value: char });
31
+ i += 1;
32
+ continue;
33
+ }
34
+ if (char === '+' || char === '-' || char === '*' || char === '/') {
35
+ tokens.push({ type: custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.OPERATOR, value: char });
36
+ i += 1;
37
+ continue;
38
+ }
39
+ if (char >= '0' && char <= '9') {
40
+ let value = '';
41
+ while (i < formula.length && /[0-9.]/.test(formula[i])) {
42
+ value += formula[i];
43
+ i += 1;
44
+ }
45
+ if (!NUMBER_PATTERN.test(value)) {
46
+ throw new Error(`Invalid number in formula: '${value}'`);
47
+ }
48
+ tokens.push({ type: custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.NUMBER, value });
49
+ continue;
50
+ }
51
+ if (char >= 'a' && char <= 'z') {
52
+ let value = '';
53
+ while (i < formula.length && /[a-z0-9_.]/.test(formula[i])) {
54
+ value += formula[i];
55
+ i += 1;
56
+ }
57
+ if (!MEASURE_PATTERN.test(value)) {
58
+ throw new Error(`Invalid measure reference in formula: '${value}'`);
59
+ }
60
+ tokens.push({ type: custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.MEASURE, value });
61
+ continue;
62
+ }
63
+ throw new Error(`Invalid character in formula: '${char}'`);
64
+ }
65
+ return tokens;
66
+ };
67
+ exports.tokenizeFormula = tokenizeFormula;
68
+ const parseFormula = (formula) => {
69
+ const tokens = (0, exports.tokenizeFormula)(formula);
70
+ let pos = 0;
71
+ const peek = () => tokens[pos];
72
+ const parseExpression = () => {
73
+ let left = parseTerm();
74
+ while (peek()?.type === custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.OPERATOR && (peek()?.value === '+' || peek()?.value === '-')) {
75
+ const operator = tokens[pos].value;
76
+ pos += 1;
77
+ const right = parseTerm();
78
+ left = { type: custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.BINARY, operator, left, right };
79
+ }
80
+ return left;
81
+ };
82
+ const parseTerm = () => {
83
+ let left = parseFactor();
84
+ while (peek()?.type === custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.OPERATOR && (peek()?.value === '*' || peek()?.value === '/')) {
85
+ const operator = tokens[pos].value;
86
+ pos += 1;
87
+ const right = parseFactor();
88
+ left = { type: custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.BINARY, operator, left, right };
89
+ }
90
+ return left;
91
+ };
92
+ const parseFactor = () => {
93
+ const token = peek();
94
+ if (!token) {
95
+ throw new Error('Unexpected end of formula');
96
+ }
97
+ if (token.type === custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.OPERATOR && token.value === '-') {
98
+ pos += 1;
99
+ return { type: custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.UNARY, operator: custom_measure_formula_types_js_1.FORMULA_OPERATOR.SUBTRACT, operand: parseFactor() };
100
+ }
101
+ if (token.type === custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.NUMBER) {
102
+ pos += 1;
103
+ return { type: custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.NUMBER, value: Number(token.value) };
104
+ }
105
+ if (token.type === custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.MEASURE) {
106
+ pos += 1;
107
+ return { type: custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.MEASURE, measure: token.value };
108
+ }
109
+ if (token.type === custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.LPAREN) {
110
+ pos += 1;
111
+ const expression = parseExpression();
112
+ if (peek()?.type !== custom_measure_formula_types_js_1.FORMULA_TOKEN_TYPE.RPAREN) {
113
+ throw new Error('Unbalanced parentheses in formula');
114
+ }
115
+ pos += 1;
116
+ return expression;
117
+ }
118
+ throw new Error(`Unexpected token in formula: '${token.value}'`);
119
+ };
120
+ const ast = parseExpression();
121
+ if (pos !== tokens.length) {
122
+ throw new Error(`Unexpected token in formula: '${tokens[pos].value}'`);
123
+ }
124
+ return ast;
125
+ };
126
+ exports.parseFormula = parseFormula;
127
+ const collectFormulaMeasures = (ast) => {
128
+ const measures = [];
129
+ const walk = (node) => {
130
+ switch (node.type) {
131
+ case custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.MEASURE:
132
+ if (!measures.includes(node.measure)) {
133
+ measures.push(node.measure);
134
+ }
135
+ break;
136
+ case custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.UNARY:
137
+ walk(node.operand);
138
+ break;
139
+ case custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.BINARY:
140
+ walk(node.left);
141
+ walk(node.right);
142
+ break;
143
+ }
144
+ };
145
+ walk(ast);
146
+ return measures;
147
+ };
148
+ exports.collectFormulaMeasures = collectFormulaMeasures;
149
+ const evaluateFormulaAst = (ast, operandValues) => {
150
+ switch (ast.type) {
151
+ case custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.NUMBER:
152
+ return ast.value;
153
+ case custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.MEASURE: {
154
+ const value = Number(operandValues.get(ast.measure));
155
+ return Number.isFinite(value) ? value : 0;
156
+ }
157
+ case custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.UNARY:
158
+ return -(0, exports.evaluateFormulaAst)(ast.operand, operandValues);
159
+ case custom_measure_formula_types_js_1.FORMULA_NODE_TYPE.BINARY: {
160
+ const left = (0, exports.evaluateFormulaAst)(ast.left, operandValues);
161
+ const right = (0, exports.evaluateFormulaAst)(ast.right, operandValues);
162
+ switch (ast.operator) {
163
+ case custom_measure_formula_types_js_1.FORMULA_OPERATOR.ADD:
164
+ return left + right;
165
+ case custom_measure_formula_types_js_1.FORMULA_OPERATOR.SUBTRACT:
166
+ return left - right;
167
+ case custom_measure_formula_types_js_1.FORMULA_OPERATOR.MULTIPLY:
168
+ return left * right;
169
+ case custom_measure_formula_types_js_1.FORMULA_OPERATOR.DIVIDE:
170
+ return right === 0 ? 0 : left / right;
171
+ }
172
+ }
173
+ }
174
+ };
175
+ exports.evaluateFormulaAst = evaluateFormulaAst;
176
+ const validateFormula = (formula, options) => {
177
+ let ast;
178
+ try {
179
+ ast = (0, exports.parseFormula)(formula);
180
+ }
181
+ catch (error) {
182
+ return { valid: false, errors: [error.message] };
183
+ }
184
+ const errors = [];
185
+ const measures = (0, exports.collectFormulaMeasures)(ast);
186
+ if (measures.length === 0) {
187
+ errors.push('Formula must reference at least one measure');
188
+ }
189
+ measures.forEach((measure) => {
190
+ if ((0, exports.isCustomMeasureId)(measure)) {
191
+ errors.push(`Custom measures cannot reference another custom measure: '${measure}'`);
192
+ }
193
+ else if (options?.knownOperands && !options.knownOperands.has(measure)) {
194
+ errors.push(`Unknown or unsupported measure: '${measure}'`);
195
+ }
196
+ });
197
+ return errors.length > 0 ? { valid: false, errors } : { valid: true, errors: [], ast };
198
+ };
199
+ exports.validateFormula = validateFormula;
200
+ //# sourceMappingURL=custom-measure-formula-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-measure-formula-utils.js","sourceRoot":"","sources":["../../../../src/libs/custom-measure-formula/custom-measure-formula-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './custom-measure-formula-types.js';
2
+ export * from './custom-measure-formula-utils.js';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./custom-measure-formula-types.js"), exports);
18
+ __exportStar(require("./custom-measure-formula-utils.js"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/libs/custom-measure-formula/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oEAAkD;AAClD,oEAAkD"}
@@ -17,3 +17,4 @@ export * from './domain.js';
17
17
  export * from './emails.js';
18
18
  export * from './contacts.js';
19
19
  export * from './api-router/index.js';
20
+ export * from './custom-measure-formula/index.js';
@@ -33,4 +33,5 @@ __exportStar(require("./domain.js"), exports);
33
33
  __exportStar(require("./emails.js"), exports);
34
34
  __exportStar(require("./contacts.js"), exports);
35
35
  __exportStar(require("./api-router/index.js"), exports);
36
+ __exportStar(require("./custom-measure-formula/index.js"), exports);
36
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/libs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,8CAA4B;AAC5B,6CAA2B;AAC3B,kDAAgC;AAChC,yDAAuC;AACvC,2CAAyB;AACzB,6DAA2C;AAC3C,uDAAqC;AACrC,mDAAiC;AACjC,2CAAyB;AACzB,8CAA4B;AAC5B,gDAA8B;AAC9B,+CAA6B;AAC7B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,gDAA8B;AAC9B,wDAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/libs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,8CAA4B;AAC5B,6CAA2B;AAC3B,kDAAgC;AAChC,yDAAuC;AACvC,2CAAyB;AACzB,6DAA2C;AAC3C,uDAAqC;AACrC,mDAAiC;AACjC,2CAAyB;AACzB,8CAA4B;AAC5B,gDAA8B;AAC9B,+CAA6B;AAC7B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,gDAA8B;AAC9B,wDAAsC;AACtC,oEAAkD"}
@@ -4,6 +4,5 @@ export declare class AcuityApiService {
4
4
  private acuityClient;
5
5
  constructor(acuityKeyId: string, acuitySecret: string);
6
6
  getAcuityContactsByMd5: (pixelId: string, identityId: string, md5Hash: string, contactAcquisitionIntegration: Destination) => Promise<AcuityContactResponse | null>;
7
- getAcuityContactsByEmail: (pixelId: string, identityId: string, email: string, contactAcquisitionIntegration: Destination) => Promise<AcuityContactResponse | null>;
8
7
  getAcuityContactsByMd5Batch: (pixelId: string, identityId: string, md5Hashes: string[], contactAcquisitionIntegration: Destination) => Promise<AcuityBatchContactResponse | null>;
9
8
  }