@adtrackify/at-service-common 4.0.9 → 4.0.11

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 (57) hide show
  1. package/dist/cjs/__tests__/identity-cache/helpers.spec.js +4 -4
  2. package/dist/cjs/__tests__/identity-cache/helpers.spec.js.map +1 -1
  3. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js +15 -15
  4. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js.map +1 -1
  5. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +1 -1
  6. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js.map +1 -1
  7. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js +4 -4
  8. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js.map +1 -1
  9. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.js +140 -141
  10. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.js.map +1 -1
  11. package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.js +79 -79
  12. package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.js.map +1 -1
  13. package/dist/cjs/helpers/index.d.ts +0 -1
  14. package/dist/cjs/helpers/index.js +0 -1
  15. package/dist/cjs/helpers/index.js.map +1 -1
  16. package/dist/cjs/services/db/identity-cache-db-service.js +4 -4
  17. package/dist/cjs/services/db/identity-cache-db-service.js.map +1 -1
  18. package/dist/cjs/services/db/identity-cache-dynamodb-service/helpers.d.ts +1 -2
  19. package/dist/cjs/services/db/identity-cache-dynamodb-service/helpers.js +5 -6
  20. package/dist/cjs/services/db/identity-cache-dynamodb-service/helpers.js.map +1 -1
  21. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +8 -8
  22. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js.map +1 -1
  23. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +20 -8
  24. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js.map +1 -1
  25. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.d.ts +1 -1
  26. package/dist/esm/__tests__/identity-cache/helpers.spec.js +1 -1
  27. package/dist/esm/__tests__/identity-cache/helpers.spec.js.map +1 -1
  28. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js +1 -1
  29. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js.map +1 -1
  30. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +1 -1
  31. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js.map +1 -1
  32. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js +1 -1
  33. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js.map +1 -1
  34. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js +1 -2
  35. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js.map +1 -1
  36. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.js +1 -1
  37. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.js.map +1 -1
  38. package/dist/esm/helpers/index.d.ts +0 -1
  39. package/dist/esm/helpers/index.js +0 -1
  40. package/dist/esm/helpers/index.js.map +1 -1
  41. package/dist/esm/services/db/identity-cache-db-service.js +1 -1
  42. package/dist/esm/services/db/identity-cache-db-service.js.map +1 -1
  43. package/dist/esm/services/db/identity-cache-dynamodb-service/helpers.d.ts +1 -2
  44. package/dist/esm/services/db/identity-cache-dynamodb-service/helpers.js +1 -2
  45. package/dist/esm/services/db/identity-cache-dynamodb-service/helpers.js.map +1 -1
  46. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +5 -5
  47. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js.map +1 -1
  48. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +17 -5
  49. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js.map +1 -1
  50. package/dist/esm/services/db/identity-cache-dynamodb-service/types.d.ts +1 -1
  51. package/package.json +2 -2
  52. package/dist/cjs/helpers/identity-cache-helper.d.ts +0 -39
  53. package/dist/cjs/helpers/identity-cache-helper.js +0 -307
  54. package/dist/cjs/helpers/identity-cache-helper.js.map +0 -1
  55. package/dist/esm/helpers/identity-cache-helper.d.ts +0 -39
  56. package/dist/esm/helpers/identity-cache-helper.js +0 -300
  57. package/dist/esm/helpers/identity-cache-helper.js.map +0 -1
@@ -1,300 +0,0 @@
1
- import { hasNewTrait, hasNewAddress, removeEmptyFields, mergeIdentityTraits, hasNewThirdPartyContact } from '@adtrackify/at-shared-utils';
2
- import { ADDRESS_INFO_SOURCE, } from '@adtrackify/at-tracking-event-types';
3
- import { Logger } from './logging-helper';
4
- export var IDENTITY_CACHE_STALENESS_TIER;
5
- (function (IDENTITY_CACHE_STALENESS_TIER) {
6
- IDENTITY_CACHE_STALENESS_TIER["NONE"] = "none";
7
- IDENTITY_CACHE_STALENESS_TIER["VOLATILE_ONLY"] = "volatile_only";
8
- IDENTITY_CACHE_STALENESS_TIER["ADDRESS_UPDATE"] = "address_update";
9
- IDENTITY_CACHE_STALENESS_TIER["IDENTITY_STALE"] = "identity_stale";
10
- })(IDENTITY_CACHE_STALENESS_TIER || (IDENTITY_CACHE_STALENESS_TIER = {}));
11
- const createInitialTracker = (cachedTraits, incomingTraits) => ({
12
- cachedTraits,
13
- incomingTraits,
14
- isIdentityIdStale: false,
15
- isUserIdsStale: false,
16
- isIdsStale: false,
17
- isEmailsStale: false,
18
- isPhonesStale: false,
19
- isShopifyYIdsStale: false,
20
- isGendersStale: false,
21
- isDobsStale: false,
22
- isAddressesStale: false,
23
- isIpAddressesStale: false,
24
- isNonIpAddressesStale: false,
25
- isClickInfosStale: false,
26
- isIpAddressStale: false,
27
- isUserAgentStale: false,
28
- isThirdPartyContactsStale: false,
29
- isCacheStale: false,
30
- staleTier: IDENTITY_CACHE_STALENESS_TIER.NONE,
31
- });
32
- const markStaleTraitOnly = (tracker, trackerKey, logMessage) => {
33
- Logger.debug(`IdentityCache - identity cache check - ${logMessage}`, {
34
- cachedTraits: tracker.cachedTraits,
35
- incomingTraits: tracker.incomingTraits,
36
- });
37
- tracker[trackerKey] = true;
38
- };
39
- const isAddressIpSourced = (addr) => {
40
- if (addr?.s !== undefined) {
41
- return addr.s === ADDRESS_INFO_SOURCE.IP_ADDRESS;
42
- }
43
- const hasPii = Boolean(addr?.firstName || addr?.lastName || addr?.email || addr?.phone);
44
- return !hasPii;
45
- };
46
- const filterAddressesBySource = (addresses, isIpSource) => {
47
- return addresses.filter((addr) => {
48
- const addressIsIp = isAddressIpSourced(addr);
49
- return isIpSource ? addressIsIp : !addressIsIp;
50
- });
51
- };
52
- const hasNewNonIpAddress = (cachedAddresses, incomingAddresses) => {
53
- const cachedNonIp = filterAddressesBySource(cachedAddresses, false);
54
- const incomingNonIp = filterAddressesBySource(incomingAddresses, false);
55
- return hasNewAddress(cachedNonIp, incomingNonIp);
56
- };
57
- const hasNewIpAddress = (cachedAddresses, incomingAddresses) => {
58
- const cachedIp = filterAddressesBySource(cachedAddresses, true);
59
- const incomingIp = filterAddressesBySource(incomingAddresses, true);
60
- return hasNewAddress(cachedIp, incomingIp);
61
- };
62
- const checkScalarTraitChanged = (cachedValue, incomingValue) => Boolean(incomingValue && cachedValue !== incomingValue);
63
- const computeStaleTier = (tracker) => {
64
- const hasIdentityStale = tracker.isIdentityIdStale ||
65
- tracker.isUserIdsStale ||
66
- tracker.isIdsStale ||
67
- tracker.isEmailsStale ||
68
- tracker.isPhonesStale ||
69
- tracker.isShopifyYIdsStale ||
70
- tracker.isGendersStale ||
71
- tracker.isDobsStale ||
72
- tracker.isClickInfosStale ||
73
- tracker.isThirdPartyContactsStale;
74
- if (hasIdentityStale) {
75
- return IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE;
76
- }
77
- if (tracker.isNonIpAddressesStale) {
78
- return IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE;
79
- }
80
- const hasVolatileStale = tracker.isIpAddressStale || tracker.isUserAgentStale || tracker.isIpAddressesStale;
81
- if (hasVolatileStale) {
82
- return IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY;
83
- }
84
- return IDENTITY_CACHE_STALENESS_TIER.NONE;
85
- };
86
- export const isIdentityCacheStale = (identityCache, incomingIdentity) => {
87
- try {
88
- const cachedTraits = identityCache?.traits ?? {};
89
- const incomingTraits = incomingIdentity?.traits ?? {};
90
- const tracker = createInitialTracker(cachedTraits, incomingTraits);
91
- const cachedAddresses = cachedTraits?.addresses ?? [];
92
- const incomingAddresses = incomingTraits?.addresses ?? [];
93
- const identityChecks = [
94
- {
95
- trackerKey: 'isIdentityIdStale',
96
- logMessage: 'identityId changed',
97
- isStale: () => identityCache?.identityId !== incomingIdentity?.identityId,
98
- },
99
- {
100
- trackerKey: 'isUserIdsStale',
101
- logMessage: 'userIds changed',
102
- isStale: () => hasNewTrait(cachedTraits?.userIds ?? [], incomingTraits?.userIds ?? []),
103
- },
104
- {
105
- trackerKey: 'isIdsStale',
106
- logMessage: 'ids changed',
107
- isStale: () => hasNewTrait(cachedTraits?.ids ?? [], incomingTraits?.ids ?? []),
108
- },
109
- {
110
- trackerKey: 'isEmailsStale',
111
- logMessage: 'emails changed',
112
- isStale: () => hasNewTrait(cachedTraits?.emails ?? [], incomingTraits?.emails ?? []),
113
- },
114
- {
115
- trackerKey: 'isPhonesStale',
116
- logMessage: 'phones changed',
117
- isStale: () => hasNewTrait(cachedTraits?.phones ?? [], incomingTraits?.phones ?? []),
118
- },
119
- {
120
- trackerKey: 'isShopifyYIdsStale',
121
- logMessage: 'shopify Y ids changed',
122
- isStale: () => hasNewTrait(cachedTraits?.shopifyYIds ?? [], incomingTraits?.shopifyYIds ?? []),
123
- },
124
- {
125
- trackerKey: 'isGendersStale',
126
- logMessage: 'genders changed',
127
- isStale: () => hasNewTrait(cachedTraits?.genders ?? [], incomingTraits?.genders ?? []),
128
- },
129
- {
130
- trackerKey: 'isDobsStale',
131
- logMessage: 'dobs changed',
132
- isStale: () => hasNewTrait(cachedTraits?.dobs ?? [], incomingTraits?.dobs ?? []),
133
- },
134
- {
135
- trackerKey: 'isClickInfosStale',
136
- logMessage: 'clickInfos changed',
137
- isStale: () => isClickInfosStale(cachedTraits?.click ?? {}, incomingTraits?.click ?? {}),
138
- },
139
- {
140
- trackerKey: 'isThirdPartyContactsStale',
141
- logMessage: 'thirdPartyContacts changed',
142
- isStale: () => hasNewThirdPartyContact(cachedTraits?.tpc ?? [], incomingTraits?.tpc ?? []),
143
- },
144
- ];
145
- const addressChecks = [
146
- {
147
- trackerKey: 'isNonIpAddressesStale',
148
- logMessage: 'non-IP address changed',
149
- isStale: () => hasNewNonIpAddress(cachedAddresses, incomingAddresses),
150
- isAddressUpdate: true,
151
- },
152
- {
153
- trackerKey: 'isIpAddressesStale',
154
- logMessage: 'IP-sourced address changed',
155
- isStale: () => hasNewIpAddress(cachedAddresses, incomingAddresses),
156
- isVolatile: true,
157
- },
158
- ];
159
- const volatileChecks = [
160
- {
161
- trackerKey: 'isIpAddressStale',
162
- logMessage: 'ipAddress changed',
163
- isStale: () => checkScalarTraitChanged(cachedTraits?.ipAddress, incomingTraits?.ipAddress),
164
- isVolatile: true,
165
- },
166
- {
167
- trackerKey: 'isUserAgentStale',
168
- logMessage: 'userAgent changed',
169
- isStale: () => checkScalarTraitChanged(cachedTraits?.userAgent, incomingTraits?.userAgent),
170
- isVolatile: true,
171
- },
172
- ];
173
- const allChecks = [...identityChecks, ...addressChecks, ...volatileChecks];
174
- for (const check of allChecks) {
175
- if (check.isStale()) {
176
- markStaleTraitOnly(tracker, check.trackerKey, check.logMessage);
177
- }
178
- }
179
- tracker.isAddressesStale = tracker.isIpAddressesStale || tracker.isNonIpAddressesStale;
180
- tracker.staleTier = computeStaleTier(tracker);
181
- tracker.isCacheStale =
182
- tracker.staleTier === IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE ||
183
- tracker.staleTier === IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE;
184
- if (tracker.staleTier !== IDENTITY_CACHE_STALENESS_TIER.NONE) {
185
- Logger.debug('IdentityCache - identity cache staleness check complete', {
186
- staleTier: tracker.staleTier,
187
- isCacheStale: tracker.isCacheStale,
188
- identityCacheStaleTracker: tracker,
189
- });
190
- }
191
- return tracker;
192
- }
193
- catch (error) {
194
- Logger.error('IdentityCache - error checking if identity cache is stale', {
195
- error,
196
- errorMessage: error instanceof Error ? error.message : String(error),
197
- });
198
- const errorTracker = createInitialTracker({}, {});
199
- errorTracker.isCacheStale = true;
200
- errorTracker.staleTier = IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE;
201
- return errorTracker;
202
- }
203
- };
204
- const shouldSkipClickKey = (key) => key === 'googleClientInfos' || key.includes('CollectedAt');
205
- const extractFbclid = (fbc) => fbc?.split('.')?.[3];
206
- const isFbcStale = (cachedFbc, incomingFbc) => {
207
- if (incomingFbc && !cachedFbc) {
208
- return true;
209
- }
210
- if (!incomingFbc || !cachedFbc || incomingFbc === cachedFbc) {
211
- return false;
212
- }
213
- const incomingFbclid = extractFbclid(incomingFbc);
214
- const cachedFbclid = extractFbclid(cachedFbc);
215
- return !incomingFbclid || !cachedFbclid || incomingFbclid !== cachedFbclid;
216
- };
217
- const isGenericClickKeyStale = (cachedValue, incomingValue) => (Boolean(incomingValue) && !cachedValue) || incomingValue !== cachedValue;
218
- export const isClickInfosStale = (cachedClick, incomingClick) => {
219
- try {
220
- const cleanedCachedClick = removeEmptyFields(cachedClick);
221
- const cleanedIncomingClick = removeEmptyFields(incomingClick);
222
- const incomingKeys = Object.keys(cleanedIncomingClick);
223
- const staleKeys = [];
224
- for (const key of incomingKeys) {
225
- if (shouldSkipClickKey(key)) {
226
- continue;
227
- }
228
- const cachedValue = cleanedCachedClick?.[key];
229
- const incomingValue = cleanedIncomingClick?.[key];
230
- const isStale = key === 'fbc'
231
- ? isFbcStale(cachedValue, incomingValue)
232
- : isGenericClickKeyStale(cachedValue, incomingValue);
233
- if (isStale) {
234
- staleKeys.push(key);
235
- }
236
- }
237
- if (staleKeys.length > 0) {
238
- Logger.debug('IdentityCache - identity cache miss - clickInfos changed', {
239
- cleanedCachedClick,
240
- cleanedIncomingClick,
241
- staleKeys,
242
- });
243
- }
244
- return staleKeys.length > 0;
245
- }
246
- catch (error) {
247
- Logger.error('IdentityCache - error checking if click infos are stale - assuming stale', {
248
- error,
249
- errorMessage: error instanceof Error ? error.message : String(error),
250
- });
251
- return true;
252
- }
253
- };
254
- export function extractStaleTraitNames(tracker) {
255
- const staleTraits = [];
256
- if (tracker.isIdentityIdStale)
257
- staleTraits.push('identityId');
258
- if (tracker.isUserIdsStale)
259
- staleTraits.push('userIds');
260
- if (tracker.isIdsStale)
261
- staleTraits.push('ids');
262
- if (tracker.isEmailsStale)
263
- staleTraits.push('emails');
264
- if (tracker.isPhonesStale)
265
- staleTraits.push('phones');
266
- if (tracker.isShopifyYIdsStale)
267
- staleTraits.push('shopifyYIds');
268
- if (tracker.isGendersStale)
269
- staleTraits.push('genders');
270
- if (tracker.isDobsStale)
271
- staleTraits.push('dobs');
272
- if (tracker.isAddressesStale)
273
- staleTraits.push('addresses');
274
- if (tracker.isClickInfosStale)
275
- staleTraits.push('clickInfos');
276
- if (tracker.isIpAddressStale)
277
- staleTraits.push('ipAddress');
278
- if (tracker.isUserAgentStale)
279
- staleTraits.push('userAgent');
280
- if (tracker.isThirdPartyContactsStale)
281
- staleTraits.push('thirdPartyContacts');
282
- return staleTraits;
283
- }
284
- export function mergeAndComputeIdentityStaleness(incomingIdentity, cachedOrResolvedIdentity) {
285
- const mergedTraits = mergeIdentityTraits(incomingIdentity.traits, cachedOrResolvedIdentity.traits);
286
- const mergedIdentity = { ...incomingIdentity, traits: mergedTraits };
287
- const staleTracker = isIdentityCacheStale(cachedOrResolvedIdentity, incomingIdentity);
288
- const staleTier = staleTracker.staleTier;
289
- const isCacheStale = staleTier !== IDENTITY_CACHE_STALENESS_TIER.NONE &&
290
- staleTier !== IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY;
291
- const staleTraits = extractStaleTraitNames(staleTracker);
292
- return {
293
- mergedIdentity,
294
- staleTracker,
295
- staleTier,
296
- isCacheStale,
297
- staleTraits,
298
- };
299
- }
300
- //# sourceMappingURL=identity-cache-helper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity-cache-helper.js","sourceRoot":"","sources":["../../../src/helpers/identity-cache-helper.ts"],"names":[],"mappings":"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"}