@adtrackify/at-service-common 4.0.13 → 4.0.15

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 (109) hide show
  1. package/dist/cjs/__tests__/identity-cache/helpers.spec.js +37 -38
  2. package/dist/cjs/__tests__/identity-cache/helpers.spec.js.map +1 -1
  3. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js +92 -349
  4. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js.map +1 -1
  5. package/dist/cjs/__tests__/identity-cache/identity-client.spec.js +360 -0
  6. package/dist/cjs/__tests__/identity-cache/identity-client.spec.js.map +1 -0
  7. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +138 -0
  8. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.js.map +1 -0
  9. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +153 -0
  10. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.js.map +1 -0
  11. package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.js +72 -0
  12. package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.js.map +1 -0
  13. package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +89 -0
  14. package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.js.map +1 -0
  15. package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +136 -0
  16. package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js.map +1 -0
  17. package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +224 -0
  18. package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.js.map +1 -0
  19. package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.d.ts +28 -0
  20. package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.js +90 -0
  21. package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.js.map +1 -0
  22. package/dist/cjs/clients/internal-api/identity-client.d.ts +12 -2
  23. package/dist/cjs/clients/internal-api/identity-client.js +59 -13
  24. package/dist/cjs/clients/internal-api/identity-client.js.map +1 -1
  25. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.d.ts +1 -7
  26. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +0 -305
  27. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js.map +1 -1
  28. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.d.ts +14 -14
  29. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +122 -330
  30. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js.map +1 -1
  31. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.d.ts +0 -1
  32. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.js +0 -1
  33. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.js.map +1 -1
  34. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.d.ts +8 -158
  35. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.js +1 -15
  36. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.js.map +1 -1
  37. package/dist/esm/__tests__/identity-cache/helpers.spec.js +26 -27
  38. package/dist/esm/__tests__/identity-cache/helpers.spec.js.map +1 -1
  39. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js +92 -349
  40. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js.map +1 -1
  41. package/dist/esm/__tests__/identity-cache/identity-client.spec.js +358 -0
  42. package/dist/esm/__tests__/identity-cache/identity-client.spec.js.map +1 -0
  43. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.d.ts +1 -0
  44. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +136 -0
  45. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.js.map +1 -0
  46. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.d.ts +1 -0
  47. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +151 -0
  48. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.js.map +1 -0
  49. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.d.ts +1 -0
  50. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.js +70 -0
  51. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.js.map +1 -0
  52. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.d.ts +1 -0
  53. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +87 -0
  54. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.js.map +1 -0
  55. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.d.ts +1 -0
  56. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +134 -0
  57. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js.map +1 -0
  58. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.d.ts +1 -0
  59. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +222 -0
  60. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.js.map +1 -0
  61. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.d.ts +28 -0
  62. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.js +83 -0
  63. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.js.map +1 -0
  64. package/dist/esm/clients/internal-api/identity-client.d.ts +12 -2
  65. package/dist/esm/clients/internal-api/identity-client.js +60 -14
  66. package/dist/esm/clients/internal-api/identity-client.js.map +1 -1
  67. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.d.ts +1 -7
  68. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +1 -303
  69. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js.map +1 -1
  70. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.d.ts +14 -14
  71. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +125 -330
  72. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js.map +1 -1
  73. package/dist/esm/services/db/identity-cache-dynamodb-service/index.d.ts +0 -1
  74. package/dist/esm/services/db/identity-cache-dynamodb-service/index.js +0 -1
  75. package/dist/esm/services/db/identity-cache-dynamodb-service/index.js.map +1 -1
  76. package/dist/esm/services/db/identity-cache-dynamodb-service/types.d.ts +8 -158
  77. package/dist/esm/services/db/identity-cache-dynamodb-service/types.js +0 -14
  78. package/dist/esm/services/db/identity-cache-dynamodb-service/types.js.map +1 -1
  79. package/package.json +2 -2
  80. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service-v2-comparison.spec.js +0 -646
  81. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service-v2-comparison.spec.js.map +0 -1
  82. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-service-v2-comparison.spec.js +0 -325
  83. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-service-v2-comparison.spec.js.map +0 -1
  84. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-service.spec.js +0 -1286
  85. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-service.spec.js.map +0 -1
  86. package/dist/cjs/__tests__/identity-cache/identity-gateway-service.spec.js +0 -2170
  87. package/dist/cjs/__tests__/identity-cache/identity-gateway-service.spec.js.map +0 -1
  88. package/dist/cjs/services/db/identity-cache-dynamodb-service/helpers.d.ts +0 -26
  89. package/dist/cjs/services/db/identity-cache-dynamodb-service/helpers.js +0 -252
  90. package/dist/cjs/services/db/identity-cache-dynamodb-service/helpers.js.map +0 -1
  91. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service-v2-comparison.spec.js +0 -644
  92. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service-v2-comparison.spec.js.map +0 -1
  93. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-service-v2-comparison.spec.js +0 -323
  94. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-service-v2-comparison.spec.js.map +0 -1
  95. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-service.spec.js +0 -1284
  96. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-service.spec.js.map +0 -1
  97. package/dist/esm/__tests__/identity-cache/identity-gateway-service.spec.js +0 -2168
  98. package/dist/esm/__tests__/identity-cache/identity-gateway-service.spec.js.map +0 -1
  99. package/dist/esm/services/db/identity-cache-dynamodb-service/helpers.d.ts +0 -26
  100. package/dist/esm/services/db/identity-cache-dynamodb-service/helpers.js +0 -235
  101. package/dist/esm/services/db/identity-cache-dynamodb-service/helpers.js.map +0 -1
  102. /package/dist/cjs/__tests__/identity-cache/{identity-cache-dynamodb-db-service-v2-comparison.spec.d.ts → identity-client.spec.d.ts} +0 -0
  103. /package/dist/cjs/__tests__/identity-cache/{identity-cache-dynamodb-service-v2-comparison.spec.d.ts → identity-gateway-cache-hit.spec.d.ts} +0 -0
  104. /package/dist/cjs/__tests__/identity-cache/{identity-cache-dynamodb-service.spec.d.ts → identity-gateway-cache-miss.spec.d.ts} +0 -0
  105. /package/dist/cjs/__tests__/identity-cache/{identity-gateway-service.spec.d.ts → identity-gateway-constructor.spec.d.ts} +0 -0
  106. /package/dist/{esm/__tests__/identity-cache/identity-cache-dynamodb-db-service-v2-comparison.spec.d.ts → cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.d.ts} +0 -0
  107. /package/dist/{esm/__tests__/identity-cache/identity-cache-dynamodb-service-v2-comparison.spec.d.ts → cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.d.ts} +0 -0
  108. /package/dist/{esm/__tests__/identity-cache/identity-cache-dynamodb-service.spec.d.ts → cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.d.ts} +0 -0
  109. /package/dist/esm/__tests__/identity-cache/{identity-gateway-service.spec.d.ts → identity-client.spec.d.ts} +0 -0
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const at_tracking_event_types_1 = require("@adtrackify/at-tracking-event-types");
4
- const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
5
- const identity_cache_dynamodb_service_1 = require("../../services/db/identity-cache-dynamodb-service");
6
- const mockInvokeFunction = jest.fn();
4
+ const mockLambdaInvoke = jest.fn();
7
5
  const mockBuildAndSendMessage = jest.fn();
8
6
  const mockSQSClientConstructor = jest.fn();
9
7
  jest.mock('../../clients/index.js', () => ({
@@ -17,7 +15,7 @@ jest.mock('../../clients/index.js', () => ({
17
15
  batchWrite: jest.fn(),
18
16
  },
19
17
  LambdaInvokeClient: jest.fn().mockImplementation(() => ({
20
- invokeFunction: mockInvokeFunction,
18
+ invokeFunction: mockLambdaInvoke,
21
19
  })),
22
20
  SQSClient: jest.fn().mockImplementation((_region, _accountId, _queueName) => {
23
21
  mockSQSClientConstructor(_region, _accountId, _queueName);
@@ -35,15 +33,23 @@ jest.mock('../../helpers/index.js', () => ({
35
33
  error: jest.fn(),
36
34
  },
37
35
  }));
36
+ const mockGetIdentity = jest.fn();
37
+ jest.mock('../../clients/internal-api/identity-client.js', () => ({
38
+ IdentityClient: jest.fn().mockImplementation(() => ({
39
+ getIdentity: mockGetIdentity,
40
+ })),
41
+ }));
38
42
  const identity_gateway_service_js_1 = require("../../services/db/identity-cache-dynamodb-service/identity-gateway-service.js");
39
43
  const types_js_1 = require("../../services/db/identity-cache-dynamodb-service/types.js");
40
- const identity_cache_dynamodb_db_service_js_1 = require("../../services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js");
41
44
  const index_js_1 = require("../../clients/index.js");
42
45
  const mockedDynamoDbClient = index_js_1.DynamoDbClient;
43
46
  const _mockedSQSClient = index_js_1.SQSClient;
47
+ const createService = (options = { identifyPrivateLambdaArn: 'arn:aws:lambda:us-east-1:123456789:function:identity-private' }) => {
48
+ return new identity_gateway_service_js_1.IdentityGatewayService(options);
49
+ };
44
50
  describe('Identity Cache Three-Tier Routing', () => {
45
51
  const pixelId = 'pixel123';
46
- const lambdaArn = 'arn:aws:lambda:us-east-1:123456789:function:identity-private';
52
+ let service;
47
53
  beforeEach(() => {
48
54
  jest.clearAllMocks();
49
55
  mockedDynamoDbClient.safeGet.mockReset();
@@ -53,13 +59,11 @@ describe('Identity Cache Three-Tier Routing', () => {
53
59
  mockedDynamoDbClient.safeBatchWrite.mockReset();
54
60
  mockedDynamoDbClient.safeQueryByGSI.mockReset();
55
61
  mockedDynamoDbClient.batchWrite.mockReset();
56
- mockInvokeFunction.mockReset();
62
+ mockGetIdentity.mockReset();
57
63
  mockBuildAndSendMessage.mockReset();
58
64
  mockSQSClientConstructor.mockReset();
59
65
  _mockedSQSClient.mockClear();
60
- identity_gateway_service_js_1.IdentityGatewayService.lambdaInvokeClient = undefined;
61
- identity_gateway_service_js_1.IdentityGatewayService.sqsClient = undefined;
62
- identity_gateway_service_js_1.IdentityGatewayService.sqsQueueUrl = undefined;
66
+ service = createService();
63
67
  });
64
68
  describe('TIER: VOLATILE_ONLY — Returns merged identity, NO Neptune, NO cache write', () => {
65
69
  it('should return merged identity without Neptune call when only ipAddress is stale', async () => {
@@ -84,10 +88,10 @@ describe('Identity Cache Three-Tier Routing', () => {
84
88
  updatedAt: new Date().toISOString(),
85
89
  };
86
90
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
87
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
91
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
88
92
  expect(result.identity).toBeDefined();
89
93
  expect(result.identity?.identityId).toBe('identity456');
90
- expect(mockInvokeFunction).not.toHaveBeenCalled();
94
+ expect(mockGetIdentity).not.toHaveBeenCalled();
91
95
  expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
92
96
  });
93
97
  it('should return merged identity without Neptune call when only userAgent is stale', async () => {
@@ -112,9 +116,9 @@ describe('Identity Cache Three-Tier Routing', () => {
112
116
  updatedAt: new Date().toISOString(),
113
117
  };
114
118
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
115
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
119
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
116
120
  expect(result.identity).toBeDefined();
117
- expect(mockInvokeFunction).not.toHaveBeenCalled();
121
+ expect(mockGetIdentity).not.toHaveBeenCalled();
118
122
  expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
119
123
  });
120
124
  it('should return merged identity without Neptune call when only IP-sourced addresses are stale', async () => {
@@ -139,115 +143,10 @@ describe('Identity Cache Three-Tier Routing', () => {
139
143
  updatedAt: new Date().toISOString(),
140
144
  };
141
145
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
142
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
143
- expect(result.identity).toBeDefined();
144
- expect(mockInvokeFunction).not.toHaveBeenCalled();
145
- expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
146
- });
147
- });
148
- describe('TIER: ADDRESS_UPDATE — Enqueues async update, NO Neptune call, NO sync cache write', () => {
149
- it('should enqueue async update but skip Neptune when new non-IP address is added', async () => {
150
- identity_gateway_service_js_1.IdentityGatewayService.configure({
151
- awsRegion: 'us-east-1',
152
- awsAccountId: '123456789',
153
- asyncUpdateQueueName: 'test-queue',
154
- });
155
- mockBuildAndSendMessage.mockResolvedValueOnce({ MessageId: 'test-msg-id' });
156
- const incomingIdentity = {
157
- identityId: 'identity456',
158
- traits: {
159
- emails: ['test@email.com'],
160
- addresses: [{ city: 'Boston', firstName: 'John', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT }],
161
- },
162
- };
163
- const cachedResponse = {
164
- pk: `identity#${pixelId}#identity456`,
165
- pixelId,
166
- identityId: 'identity456',
167
- response: {
168
- identityId: 'identity456',
169
- traits: {
170
- emails: ['test@email.com'],
171
- addresses: [],
172
- },
173
- },
174
- updatedAt: new Date().toISOString(),
175
- };
176
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
177
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
178
- expect(result.identity).toBeDefined();
179
- expect(result.identity?.traits?.addresses).toHaveLength(1);
180
- expect(mockInvokeFunction).not.toHaveBeenCalled();
181
- expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
182
- expect(mockBuildAndSendMessage).toHaveBeenCalled();
183
- });
184
- it('should enqueue async update and skip Neptune when address with PII but no source is added', async () => {
185
- identity_gateway_service_js_1.IdentityGatewayService.configure({
186
- awsRegion: 'us-east-1',
187
- awsAccountId: '123456789',
188
- asyncUpdateQueueName: 'test-queue',
189
- });
190
- mockBuildAndSendMessage.mockResolvedValueOnce({ MessageId: 'test-msg-id' });
191
- const incomingIdentity = {
192
- identityId: 'identity456',
193
- traits: {
194
- emails: ['test@email.com'],
195
- addresses: [{ city: 'Miami', lastName: 'Smith' }],
196
- },
197
- };
198
- const cachedResponse = {
199
- pk: `identity#${pixelId}#identity456`,
200
- pixelId,
201
- identityId: 'identity456',
202
- response: {
203
- identityId: 'identity456',
204
- traits: {
205
- emails: ['test@email.com'],
206
- addresses: [],
207
- },
208
- },
209
- updatedAt: new Date().toISOString(),
210
- };
211
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
212
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
146
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
213
147
  expect(result.identity).toBeDefined();
214
- expect(mockInvokeFunction).not.toHaveBeenCalled();
148
+ expect(mockGetIdentity).not.toHaveBeenCalled();
215
149
  expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
216
- expect(mockBuildAndSendMessage).toHaveBeenCalled();
217
- });
218
- it('should return ADDRESS_UPDATE_ASYNC outcome in summary', async () => {
219
- identity_gateway_service_js_1.IdentityGatewayService.configure({
220
- awsRegion: 'us-east-1',
221
- awsAccountId: '123456789',
222
- asyncUpdateQueueName: 'test-queue',
223
- });
224
- mockBuildAndSendMessage.mockResolvedValueOnce({ MessageId: 'test-msg-id' });
225
- const incomingIdentity = {
226
- identityId: 'identity456',
227
- traits: {
228
- emails: ['test@email.com'],
229
- addresses: [{ city: 'Seattle', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT }],
230
- },
231
- };
232
- const cachedResponse = {
233
- pk: `identity#${pixelId}#identity456`,
234
- pixelId,
235
- identityId: 'identity456',
236
- response: {
237
- identityId: 'identity456',
238
- traits: {
239
- emails: ['test@email.com'],
240
- addresses: [],
241
- },
242
- },
243
- updatedAt: new Date().toISOString(),
244
- };
245
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
246
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
247
- expect(result.summary.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.ADDRESS_UPDATE_ASYNC);
248
- expect(result.summary.didSkipNeptune).toBe(true);
249
- expect(result.summary.didWriteCache).toBe(false);
250
- expect(result.summary.didEnqueueAsync).toBe(true);
251
150
  });
252
151
  });
253
152
  describe('TIER: IDENTITY_STALE — Calls Neptune AND writes to cache', () => {
@@ -271,18 +170,13 @@ describe('Identity Cache Three-Tier Routing', () => {
271
170
  updatedAt: new Date().toISOString(),
272
171
  };
273
172
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
274
- mockInvokeFunction.mockResolvedValueOnce({
275
- statusCode: 200,
276
- body: JSON.stringify({
277
- identity: {
278
- identityId: 'identity456',
279
- traits: { emails: ['old@email.com', 'new@email.com', 'resolved@email.com'] },
280
- },
281
- }),
173
+ mockGetIdentity.mockResolvedValueOnce({
174
+ identityId: 'identity456',
175
+ traits: { emails: ['old@email.com', 'new@email.com', 'resolved@email.com'] },
282
176
  });
283
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
177
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
284
178
  expect(result.identity).toBeDefined();
285
- expect(mockInvokeFunction).toHaveBeenCalled();
179
+ expect(mockGetIdentity).toHaveBeenCalled();
286
180
  expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
287
181
  });
288
182
  it('should call Neptune and write to cache when phones are stale', async () => {
@@ -305,18 +199,13 @@ describe('Identity Cache Three-Tier Routing', () => {
305
199
  updatedAt: new Date().toISOString(),
306
200
  };
307
201
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
308
- mockInvokeFunction.mockResolvedValueOnce({
309
- statusCode: 200,
310
- body: JSON.stringify({
311
- identity: {
312
- identityId: 'identity456',
313
- traits: { phones: ['+1234567890', '+9876543210'] },
314
- },
315
- }),
202
+ mockGetIdentity.mockResolvedValueOnce({
203
+ identityId: 'identity456',
204
+ traits: { phones: ['+1234567890', '+9876543210'] },
316
205
  });
317
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
206
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
318
207
  expect(result.identity).toBeDefined();
319
- expect(mockInvokeFunction).toHaveBeenCalled();
208
+ expect(mockGetIdentity).toHaveBeenCalled();
320
209
  expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
321
210
  });
322
211
  it('should return NEPTUNE_WRITE_BACK outcome with staleTraits in summary', async () => {
@@ -337,20 +226,15 @@ describe('Identity Cache Three-Tier Routing', () => {
337
226
  updatedAt: new Date().toISOString(),
338
227
  };
339
228
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
340
- mockInvokeFunction.mockResolvedValueOnce({
341
- statusCode: 200,
342
- body: JSON.stringify({
343
- identity: {
344
- identityId: 'identity456',
345
- traits: { emails: ['old@email.com', 'new@email.com'] },
346
- },
347
- }),
229
+ mockGetIdentity.mockResolvedValueOnce({
230
+ identityId: 'identity456',
231
+ traits: { emails: ['old@email.com', 'new@email.com'] },
348
232
  });
349
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
350
- expect(result.summary.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.NEPTUNE_RESOLVED);
351
- expect(result.summary.staleTraits).toContain('emails');
352
- expect(result.summary.didCallNeptune).toBe(true);
353
- expect(result.summary.didWriteCache).toBe(false);
233
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
234
+ expect(result.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.NEPTUNE_RESOLVED);
235
+ expect(result.stalenessResult?.staleTraits).toContain('emails');
236
+ expect(result.didCallNeptune).toBe(true);
237
+ expect(result.didWriteCache).toBe(false);
354
238
  });
355
239
  });
356
240
  describe('CACHE_MISS — Calls Neptune AND writes to cache', () => {
@@ -360,18 +244,13 @@ describe('Identity Cache Three-Tier Routing', () => {
360
244
  traits: { emails: ['test@email.com'] },
361
245
  };
362
246
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
363
- mockInvokeFunction.mockResolvedValueOnce({
364
- statusCode: 200,
365
- body: JSON.stringify({
366
- identity: {
367
- identityId: 'identity456',
368
- traits: { emails: ['test@email.com'] },
369
- },
370
- }),
247
+ mockGetIdentity.mockResolvedValueOnce({
248
+ identityId: 'identity456',
249
+ traits: { emails: ['test@email.com'] },
371
250
  });
372
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
251
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
373
252
  expect(result.identity).toBeDefined();
374
- expect(mockInvokeFunction).toHaveBeenCalled();
253
+ expect(mockGetIdentity).toHaveBeenCalled();
375
254
  expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
376
255
  });
377
256
  it('should return NEPTUNE_WRITE_BACK outcome for cache miss', async () => {
@@ -380,19 +259,14 @@ describe('Identity Cache Three-Tier Routing', () => {
380
259
  traits: { emails: ['test@email.com'] },
381
260
  };
382
261
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
383
- mockInvokeFunction.mockResolvedValueOnce({
384
- statusCode: 200,
385
- body: JSON.stringify({
386
- identity: {
387
- identityId: 'identity456',
388
- traits: { emails: ['test@email.com'] },
389
- },
390
- }),
262
+ mockGetIdentity.mockResolvedValueOnce({
263
+ identityId: 'identity456',
264
+ traits: { emails: ['test@email.com'] },
391
265
  });
392
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
393
- expect(result.summary.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.NEPTUNE_RESOLVED);
394
- expect(result.summary.didCallNeptune).toBe(true);
395
- expect(result.summary.didWriteCache).toBe(false);
266
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
267
+ expect(result.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.NEPTUNE_RESOLVED);
268
+ expect(result.didCallNeptune).toBe(true);
269
+ expect(result.didWriteCache).toBe(false);
396
270
  });
397
271
  });
398
272
  describe('EMAIL_POINTER_DISCOVERY — Calls Neptune with discovered identityId', () => {
@@ -408,36 +282,30 @@ describe('Identity Cache Three-Tier Routing', () => {
408
282
  updatedAt: new Date().toISOString(),
409
283
  };
410
284
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(pointerRecord);
411
- mockInvokeFunction.mockResolvedValueOnce({
412
- statusCode: 200,
413
- body: JSON.stringify({
414
- identity: {
415
- identityId: 'discovered-id',
416
- traits: { emails: ['test@email.com', 'other@email.com'] },
417
- },
418
- }),
285
+ mockGetIdentity.mockResolvedValueOnce({
286
+ identityId: 'discovered-id',
287
+ traits: { emails: ['test@email.com', 'other@email.com'] },
419
288
  });
420
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
289
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
421
290
  expect(result.identity?.identityId).toBe('discovered-id');
422
- expect(mockInvokeFunction).toHaveBeenCalledWith(lambdaArn, expect.objectContaining({
423
- context: {
424
- identity: expect.objectContaining({
425
- traits: { emails: ['test@email.com'] },
426
- }),
427
- },
291
+ expect(mockGetIdentity).toHaveBeenCalledWith(pixelId, expect.objectContaining({
292
+ identity: expect.objectContaining({
293
+ identityId: 'discovered-id',
294
+ traits: expect.objectContaining({ emails: ['test@email.com'] }),
295
+ }),
428
296
  }));
429
297
  });
430
298
  });
431
299
  });
432
300
  describe('Identity Cache stripAddressTimestamps', () => {
433
301
  const pixelId = 'pixel123';
434
- const lambdaArn = 'arn:aws:lambda:us-east-1:123456789:function:identity-private';
302
+ let service;
435
303
  beforeEach(() => {
436
304
  jest.clearAllMocks();
437
305
  mockedDynamoDbClient.safeGet.mockReset();
438
306
  mockedDynamoDbClient.safeBatchWrite.mockReset();
439
- mockInvokeFunction.mockReset();
440
- identity_gateway_service_js_1.IdentityGatewayService.lambdaInvokeClient = undefined;
307
+ mockGetIdentity.mockReset();
308
+ service = createService();
441
309
  });
442
310
  it('should strip cra and upa from addresses during comparison', async () => {
443
311
  const incomingIdentity = {
@@ -475,9 +343,9 @@ describe('Identity Cache stripAddressTimestamps', () => {
475
343
  updatedAt: new Date().toISOString(),
476
344
  };
477
345
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
478
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
346
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
479
347
  expect(result.identity).toBeDefined();
480
- expect(mockInvokeFunction).not.toHaveBeenCalled();
348
+ expect(mockGetIdentity).not.toHaveBeenCalled();
481
349
  });
482
350
  it('should NOT mutate the original object when stripping timestamps', async () => {
483
351
  const originalAddress = {
@@ -514,7 +382,7 @@ describe('Identity Cache stripAddressTimestamps', () => {
514
382
  updatedAt: new Date().toISOString(),
515
383
  };
516
384
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
517
- await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
385
+ await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
518
386
  expect(incomingIdentity.traits?.addresses?.[0]).toHaveProperty('cra');
519
387
  expect(incomingIdentity.traits?.addresses?.[0]).toHaveProperty('upa');
520
388
  expect(cachedResponse.response.traits?.addresses?.[0]).toHaveProperty('cra');
@@ -540,9 +408,9 @@ describe('Identity Cache stripAddressTimestamps', () => {
540
408
  updatedAt: new Date().toISOString(),
541
409
  };
542
410
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
543
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
411
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
544
412
  expect(result.identity).toBeDefined();
545
- expect(mockInvokeFunction).not.toHaveBeenCalled();
413
+ expect(mockGetIdentity).not.toHaveBeenCalled();
546
414
  });
547
415
  it('should handle identity with empty addresses array', async () => {
548
416
  const incomingIdentity = {
@@ -566,9 +434,9 @@ describe('Identity Cache stripAddressTimestamps', () => {
566
434
  updatedAt: new Date().toISOString(),
567
435
  };
568
436
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
569
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
437
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
570
438
  expect(result.identity).toBeDefined();
571
- expect(mockInvokeFunction).not.toHaveBeenCalled();
439
+ expect(mockGetIdentity).not.toHaveBeenCalled();
572
440
  });
573
441
  it('should handle addresses without cra/upa (no-op)', async () => {
574
442
  const incomingIdentity = {
@@ -592,20 +460,20 @@ describe('Identity Cache stripAddressTimestamps', () => {
592
460
  updatedAt: new Date().toISOString(),
593
461
  };
594
462
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
595
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
463
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
596
464
  expect(result.identity).toBeDefined();
597
- expect(mockInvokeFunction).not.toHaveBeenCalled();
465
+ expect(mockGetIdentity).not.toHaveBeenCalled();
598
466
  });
599
467
  });
600
468
  describe('Identity Cache fastDeepEqual with Timestamp Stripping', () => {
601
469
  const pixelId = 'pixel123';
602
- const lambdaArn = 'arn:aws:lambda:us-east-1:123456789:function:identity-private';
470
+ let service;
603
471
  beforeEach(() => {
604
472
  jest.clearAllMocks();
605
473
  mockedDynamoDbClient.safeGet.mockReset();
606
474
  mockedDynamoDbClient.safeBatchWrite.mockReset();
607
- mockInvokeFunction.mockReset();
608
- identity_gateway_service_js_1.IdentityGatewayService.lambdaInvokeClient = undefined;
475
+ mockGetIdentity.mockReset();
476
+ service = createService();
609
477
  });
610
478
  it('should treat cached and merged as equal when they differ ONLY in cra/upa', async () => {
611
479
  const incomingIdentity = {
@@ -647,9 +515,9 @@ describe('Identity Cache fastDeepEqual with Timestamp Stripping', () => {
647
515
  updatedAt: new Date().toISOString(),
648
516
  };
649
517
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
650
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
518
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
651
519
  expect(result.identity).toBeDefined();
652
- expect(mockInvokeFunction).not.toHaveBeenCalled();
520
+ expect(mockGetIdentity).not.toHaveBeenCalled();
653
521
  expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
654
522
  });
655
523
  it('should treat cached and merged as NOT equal when address content differs (plus cra/upa)', async () => {
@@ -690,19 +558,19 @@ describe('Identity Cache fastDeepEqual with Timestamp Stripping', () => {
690
558
  updatedAt: new Date().toISOString(),
691
559
  };
692
560
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
693
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
561
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
694
562
  expect(result.identity).toBeDefined();
695
563
  });
696
564
  });
697
565
  describe('Identity Cache Logging Levels', () => {
698
566
  const pixelId = 'pixel123';
699
- const lambdaArn = 'arn:aws:lambda:us-east-1:123456789:function:identity-private';
567
+ let service;
700
568
  beforeEach(() => {
701
569
  jest.clearAllMocks();
702
570
  mockedDynamoDbClient.safeGet.mockReset();
703
571
  mockedDynamoDbClient.safeBatchWrite.mockReset();
704
- mockInvokeFunction.mockReset();
705
- identity_gateway_service_js_1.IdentityGatewayService.lambdaInvokeClient = undefined;
572
+ mockGetIdentity.mockReset();
573
+ service = createService();
706
574
  });
707
575
  it('should return fresh cache hit without calling Neptune or writing cache', async () => {
708
576
  const incomingIdentity = {
@@ -724,45 +592,11 @@ describe('Identity Cache Logging Levels', () => {
724
592
  updatedAt: new Date().toISOString(),
725
593
  };
726
594
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
727
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
728
- expect(result.summary.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.FRESH_CACHE_HIT);
729
- expect(mockInvokeFunction).not.toHaveBeenCalled();
595
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
596
+ expect(result.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.FRESH_CACHE_HIT);
597
+ expect(mockGetIdentity).not.toHaveBeenCalled();
730
598
  expect(mockedDynamoDbClient.safeBatchWrite).not.toHaveBeenCalled();
731
599
  });
732
- it('should return ADDRESS_UPDATE_ASYNC outcome for address update path', async () => {
733
- identity_gateway_service_js_1.IdentityGatewayService.configure({
734
- awsRegion: 'us-east-1',
735
- awsAccountId: '123456789',
736
- asyncUpdateQueueName: 'test-queue',
737
- });
738
- mockBuildAndSendMessage.mockResolvedValueOnce({ MessageId: 'test-msg-id' });
739
- const incomingIdentity = {
740
- identityId: 'identity456',
741
- traits: {
742
- emails: ['test@email.com'],
743
- addresses: [{ city: 'New City', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT }],
744
- },
745
- };
746
- const cachedResponse = {
747
- pk: `identity#${pixelId}#identity456`,
748
- pixelId,
749
- identityId: 'identity456',
750
- response: {
751
- identityId: 'identity456',
752
- traits: {
753
- emails: ['test@email.com'],
754
- addresses: [],
755
- },
756
- },
757
- updatedAt: new Date().toISOString(),
758
- };
759
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
760
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
761
- expect(result.summary.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.ADDRESS_UPDATE_ASYNC);
762
- expect(result.summary.didSkipNeptune).toBe(true);
763
- expect(result.summary.didWriteCache).toBe(false);
764
- expect(result.summary.didEnqueueAsync).toBe(true);
765
- });
766
600
  it('should return NEPTUNE_WRITE_BACK outcome with traitChanges for stale traits', async () => {
767
601
  const incomingIdentity = {
768
602
  identityId: 'identity456',
@@ -783,107 +617,16 @@ describe('Identity Cache Logging Levels', () => {
783
617
  updatedAt: new Date().toISOString(),
784
618
  };
785
619
  mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
786
- mockInvokeFunction.mockResolvedValueOnce({
787
- statusCode: 200,
788
- body: JSON.stringify({
789
- identity: {
790
- identityId: 'identity456',
791
- traits: { emails: ['old@email.com', 'new@email.com'] },
792
- },
793
- }),
794
- });
795
- const result = await identity_gateway_service_js_1.IdentityGatewayService.getIdentityWithCachingV2(pixelId, incomingIdentity, lambdaArn);
796
- expect(result.summary.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.NEPTUNE_RESOLVED);
797
- expect(result.summary.staleTraits).toContain('emails');
798
- expect(result.summary.traitChanges).toBeDefined();
799
- expect(result.summary.didCallNeptune).toBe(true);
800
- expect(result.summary.didWriteCache).toBe(false);
801
- });
802
- });
803
- describe('getIdentityFromCache staleness tier results', () => {
804
- const pixelId = 'pixel123';
805
- beforeEach(() => {
806
- jest.clearAllMocks();
807
- mockedDynamoDbClient.safeGet.mockReset();
808
- });
809
- it('should return staleTier NONE when cached and incoming are deep equal', async () => {
810
- const incomingIdentity = {
811
- identityId: 'identity456',
812
- traits: {
813
- emails: ['test@email.com'],
814
- },
815
- };
816
- const cachedResponse = {
817
- pk: `identity#${pixelId}#identity456`,
818
- pixelId,
819
- identityId: 'identity456',
820
- response: {
821
- identityId: 'identity456',
822
- traits: {
823
- emails: ['test@email.com'],
824
- },
825
- },
826
- updatedAt: new Date().toISOString(),
827
- };
828
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
829
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCache(pixelId, incomingIdentity);
830
- expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
831
- expect(result.isCacheStale).toBe(false);
832
- expect(result.skipNeptune).toBeUndefined();
833
- });
834
- it('should return staleTier ADDRESS_UPDATE and skipNeptune=true for new non-IP address', async () => {
835
- const incomingIdentity = {
836
- identityId: 'identity456',
837
- traits: {
838
- emails: ['test@email.com'],
839
- addresses: [{ city: 'New City', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT }],
840
- },
841
- };
842
- const cachedResponse = {
843
- pk: `identity#${pixelId}#identity456`,
844
- pixelId,
845
- identityId: 'identity456',
846
- response: {
847
- identityId: 'identity456',
848
- traits: {
849
- emails: ['test@email.com'],
850
- addresses: [],
851
- },
852
- },
853
- updatedAt: new Date().toISOString(),
854
- };
855
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
856
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCache(pixelId, incomingIdentity);
857
- expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
858
- expect(result.isCacheStale).toBe(true);
859
- expect(result.skipNeptune).toBe(true);
860
- expect(result.writeReason).toBe(identity_cache_dynamodb_service_1.CACHE_WRITE_REASON.ADDRESS_UPDATE);
861
- });
862
- it('should return staleTier IDENTITY_STALE and skipNeptune=false for new email', async () => {
863
- const incomingIdentity = {
620
+ mockGetIdentity.mockResolvedValueOnce({
864
621
  identityId: 'identity456',
865
- traits: {
866
- emails: ['old@email.com', 'new@email.com'],
867
- },
868
- };
869
- const cachedResponse = {
870
- pk: `identity#${pixelId}#identity456`,
871
- pixelId,
872
- identityId: 'identity456',
873
- response: {
874
- identityId: 'identity456',
875
- traits: {
876
- emails: ['old@email.com'],
877
- },
878
- },
879
- updatedAt: new Date().toISOString(),
880
- };
881
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedResponse);
882
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCache(pixelId, incomingIdentity);
883
- expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
884
- expect(result.isCacheStale).toBe(true);
885
- expect(result.skipNeptune).toBe(false);
886
- expect(result.writeReason).toBe(identity_cache_dynamodb_service_1.CACHE_WRITE_REASON.STALE_TRAITS);
622
+ traits: { emails: ['old@email.com', 'new@email.com'] },
623
+ });
624
+ const result = await service.resolveIdentityWithCaching(pixelId, incomingIdentity);
625
+ expect(result.outcome).toBe(types_js_1.IDENTITY_CACHE_WITH_CACHING_OUTCOME.NEPTUNE_RESOLVED);
626
+ expect(result.stalenessResult?.staleTraits).toContain('emails');
627
+ expect(result.traitChanges).toBeDefined();
628
+ expect(result.didCallNeptune).toBe(true);
629
+ expect(result.didWriteCache).toBe(false);
887
630
  });
888
631
  });
889
632
  //# sourceMappingURL=identity-cache-tier-routing.spec.js.map