@croct/sdk 0.17.7 → 0.17.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/activeRecord.cjs.map +1 -0
- package/activeRecord.d.ts +8 -4
- package/activeRecord.js +115 -106
- package/activeRecord.js.map +1 -1
- package/apiKey.cjs.map +1 -0
- package/apiKey.d.ts +4 -2
- package/apiKey.js +152 -141
- package/apiKey.js.map +1 -1
- package/base64Url.cjs.map +1 -0
- package/base64Url.d.ts +4 -2
- package/base64Url.js +8 -15
- package/base64Url.js.map +1 -1
- package/cache/cache.cjs.map +1 -0
- package/cache/cache.d.ts +6 -4
- package/cache/cache.js +9 -10
- package/cache/cache.js.map +1 -1
- package/cache/cookieCache.cjs.map +1 -0
- package/cache/cookieCache.d.ts +6 -3
- package/cache/cookieCache.js +52 -54
- package/cache/cookieCache.js.map +1 -1
- package/cache/fallbackCache.cjs.map +1 -0
- package/cache/fallbackCache.d.ts +5 -2
- package/cache/fallbackCache.js +20 -21
- package/cache/fallbackCache.js.map +1 -1
- package/cache/inMemoryCache.cjs.map +1 -0
- package/cache/inMemoryCache.d.ts +5 -2
- package/cache/inMemoryCache.js +15 -17
- package/cache/inMemoryCache.js.map +1 -1
- package/cache/index.cjs.map +1 -0
- package/cache/index.d.ts +4 -4
- package/cache/index.js +9 -11
- package/cache/index.js.map +1 -1
- package/cache/localStorageCache.cjs.map +1 -0
- package/cache/localStorageCache.d.ts +5 -2
- package/cache/localStorageCache.js +55 -63
- package/cache/localStorageCache.js.map +1 -1
- package/channel/channel.cjs.map +1 -0
- package/channel/channel.d.ts +8 -6
- package/channel/channel.js +21 -22
- package/channel/channel.js.map +1 -1
- package/channel/encodedChannel.cjs.map +1 -0
- package/channel/encodedChannel.d.ts +6 -3
- package/channel/encodedChannel.js +13 -14
- package/channel/encodedChannel.js.map +1 -1
- package/channel/guaranteedChannel.cjs.map +1 -0
- package/channel/guaranteedChannel.d.ts +9 -7
- package/channel/guaranteedChannel.js +74 -73
- package/channel/guaranteedChannel.js.map +1 -1
- package/channel/httpBeaconChannel.cjs.map +1 -0
- package/channel/httpBeaconChannel.d.ts +9 -6
- package/channel/httpBeaconChannel.js +82 -83
- package/channel/httpBeaconChannel.js.map +1 -1
- package/channel/index.cjs.map +1 -0
- package/channel/index.d.ts +12 -7
- package/channel/index.js +15 -17
- package/channel/index.js.map +1 -1
- package/channel/queuedChannel.cjs.map +1 -0
- package/channel/queuedChannel.d.ts +7 -4
- package/channel/queuedChannel.js +87 -97
- package/channel/queuedChannel.js.map +1 -1
- package/channel/retryChannel.cjs.map +1 -0
- package/channel/retryChannel.d.ts +7 -5
- package/channel/retryChannel.js +58 -57
- package/channel/retryChannel.js.map +1 -1
- package/channel/sandboxChannel.cjs.map +1 -0
- package/channel/sandboxChannel.d.ts +5 -2
- package/channel/sandboxChannel.js +34 -35
- package/channel/sandboxChannel.js.map +1 -1
- package/cid/assigner.cjs.map +1 -0
- package/cid/assigner.d.ts +3 -1
- package/cid/assigner.js +0 -2
- package/cid/assigner.js.map +1 -1
- package/cid/cachedAssigner.cjs.map +1 -0
- package/cid/cachedAssigner.d.ts +7 -5
- package/cid/cachedAssigner.js +37 -43
- package/cid/cachedAssigner.js.map +1 -1
- package/cid/fixedAssigner.cjs.map +1 -0
- package/cid/fixedAssigner.d.ts +5 -2
- package/cid/fixedAssigner.js +9 -10
- package/cid/fixedAssigner.js.map +1 -1
- package/cid/index.cjs.map +1 -0
- package/cid/index.d.ts +6 -4
- package/cid/index.js +9 -11
- package/cid/index.js.map +1 -1
- package/cid/remoteAssigner.cjs.map +1 -0
- package/cid/remoteAssigner.d.ts +6 -3
- package/cid/remoteAssigner.js +36 -37
- package/cid/remoteAssigner.js.map +1 -1
- package/constants.cjs.map +1 -0
- package/constants.d.ts +6 -4
- package/constants.js +10 -7
- package/constants.js.map +1 -1
- package/container.cjs.map +1 -0
- package/container.d.ts +28 -15
- package/container.js +269 -252
- package/container.js.map +1 -1
- package/contentFetcher.cjs.map +1 -0
- package/contentFetcher.d.ts +17 -14
- package/contentFetcher.js +156 -163
- package/contentFetcher.js.map +1 -1
- package/context.cjs.map +1 -0
- package/context.d.ts +13 -9
- package/context.js +80 -81
- package/context.js.map +1 -1
- package/error.cjs.map +1 -0
- package/error.d.ts +4 -2
- package/error.js +21 -21
- package/error.js.map +1 -1
- package/evaluator.cjs.map +1 -0
- package/evaluator.d.ts +18 -16
- package/evaluator.js +179 -179
- package/evaluator.js.map +1 -1
- package/eventManager.cjs.map +1 -0
- package/eventManager.d.ts +8 -6
- package/eventManager.js +24 -26
- package/eventManager.js.map +1 -1
- package/eventSubjectProcessor.cjs.map +1 -0
- package/eventSubjectProcessor.d.ts +16 -3
- package/eventSubjectProcessor.js +53 -59
- package/eventSubjectProcessor.js.map +1 -1
- package/facade/contentFetcherFacade.cjs.map +1 -0
- package/facade/contentFetcherFacade.d.ts +16 -7
- package/facade/contentFetcherFacade.js +32 -35
- package/facade/contentFetcherFacade.js.map +1 -1
- package/facade/evaluatorFacade.cjs.map +1 -0
- package/facade/evaluatorFacade.d.ts +17 -10
- package/facade/evaluatorFacade.js +56 -60
- package/facade/evaluatorFacade.js.map +1 -1
- package/facade/index.cjs.map +1 -0
- package/facade/index.d.ts +29 -7
- package/facade/index.js +19 -19
- package/facade/index.js.map +1 -1
- package/facade/sdkFacade.cjs.map +1 -0
- package/facade/sdkFacade.d.ts +33 -15
- package/facade/sdkFacade.js +201 -214
- package/facade/sdkFacade.js.map +1 -1
- package/facade/sessionFacade.cjs.map +1 -0
- package/facade/sessionFacade.d.ts +18 -3
- package/facade/sessionFacade.js +10 -11
- package/facade/sessionFacade.js.map +1 -1
- package/facade/sessionPatch.cjs.map +1 -0
- package/facade/sessionPatch.d.ts +17 -4
- package/facade/sessionPatch.js +22 -24
- package/facade/sessionPatch.js.map +1 -1
- package/facade/trackerFacade.cjs.map +1 -0
- package/facade/trackerFacade.d.ts +17 -4
- package/facade/trackerFacade.js +67 -57
- package/facade/trackerFacade.js.map +1 -1
- package/facade/userFacade.cjs.map +1 -0
- package/facade/userFacade.d.ts +21 -4
- package/facade/userFacade.js +17 -18
- package/facade/userFacade.js.map +1 -1
- package/facade/userPatch.cjs.map +1 -0
- package/facade/userPatch.d.ts +17 -4
- package/facade/userPatch.js +22 -24
- package/facade/userPatch.js.map +1 -1
- package/help.cjs.map +1 -0
- package/help.d.ts +3 -1
- package/help.js +19 -23
- package/help.js.map +1 -1
- package/index.cjs.map +1 -0
- package/index.d.ts +25 -3
- package/index.js +7 -7
- package/index.js.map +1 -1
- package/logging/consoleLogger.cjs.map +1 -0
- package/logging/consoleLogger.d.ts +5 -2
- package/logging/consoleLogger.js +23 -24
- package/logging/consoleLogger.js.map +1 -1
- package/logging/filteredLogger.cjs.map +1 -0
- package/logging/filteredLogger.d.ts +8 -5
- package/logging/filteredLogger.js +36 -37
- package/logging/filteredLogger.js.map +1 -1
- package/logging/index.cjs.map +1 -0
- package/logging/index.d.ts +5 -5
- package/logging/index.js +11 -13
- package/logging/index.js.map +1 -1
- package/logging/logger.cjs.map +1 -0
- package/logging/logger.d.ts +4 -2
- package/logging/logger.js +0 -2
- package/logging/logger.js.map +1 -1
- package/logging/namespacedLogger.cjs.map +1 -0
- package/logging/namespacedLogger.d.ts +5 -2
- package/logging/namespacedLogger.js +22 -23
- package/logging/namespacedLogger.js.map +1 -1
- package/logging/nullLogger.cjs.map +1 -0
- package/logging/nullLogger.d.ts +5 -2
- package/logging/nullLogger.js +11 -16
- package/logging/nullLogger.js.map +1 -1
- package/namespacedStorage.cjs.map +1 -0
- package/namespacedStorage.d.ts +3 -1
- package/namespacedStorage.js +51 -52
- package/namespacedStorage.js.map +1 -1
- package/package.json +60 -6
- package/patch.cjs.map +1 -0
- package/patch.d.ts +6 -4
- package/patch.js +0 -2
- package/patch.js.map +1 -1
- package/queue/capacityRestrictedQueue.cjs.map +1 -0
- package/queue/capacityRestrictedQueue.d.ts +5 -2
- package/queue/capacityRestrictedQueue.js +31 -32
- package/queue/capacityRestrictedQueue.js.map +1 -1
- package/queue/inMemoryQueue.cjs.map +1 -0
- package/queue/inMemoryQueue.d.ts +5 -2
- package/queue/inMemoryQueue.js +32 -34
- package/queue/inMemoryQueue.js.map +1 -1
- package/queue/index.cjs.map +1 -0
- package/queue/index.d.ts +6 -5
- package/queue/index.js +11 -13
- package/queue/index.js.map +1 -1
- package/queue/monitoredQueue.cjs.map +1 -0
- package/queue/monitoredQueue.d.ts +8 -5
- package/queue/monitoredQueue.js +104 -110
- package/queue/monitoredQueue.js.map +1 -1
- package/queue/persistentQueue.cjs.map +1 -0
- package/queue/persistentQueue.d.ts +5 -2
- package/queue/persistentQueue.js +52 -54
- package/queue/persistentQueue.js.map +1 -1
- package/queue/queue.cjs.map +1 -0
- package/queue/queue.d.ts +3 -1
- package/queue/queue.js +0 -2
- package/queue/queue.js.map +1 -1
- package/retry/arbitraryPolicy.cjs.map +1 -0
- package/retry/arbitraryPolicy.d.ts +5 -2
- package/retry/arbitraryPolicy.js +14 -15
- package/retry/arbitraryPolicy.js.map +1 -1
- package/retry/backoffPolicy.cjs.map +1 -0
- package/retry/backoffPolicy.d.ts +5 -3
- package/retry/backoffPolicy.js +52 -50
- package/retry/backoffPolicy.js.map +1 -1
- package/retry/index.cjs.map +1 -0
- package/retry/index.d.ts +5 -5
- package/retry/index.js +11 -13
- package/retry/index.js.map +1 -1
- package/retry/maxAttemptsPolicy.cjs.map +1 -0
- package/retry/maxAttemptsPolicy.d.ts +5 -2
- package/retry/maxAttemptsPolicy.js +17 -18
- package/retry/maxAttemptsPolicy.js.map +1 -1
- package/retry/neverPolicy.cjs.map +1 -0
- package/retry/neverPolicy.d.ts +5 -2
- package/retry/neverPolicy.js +9 -10
- package/retry/neverPolicy.js.map +1 -1
- package/retry/policy.cjs.map +1 -0
- package/retry/policy.d.ts +3 -1
- package/retry/policy.js +0 -2
- package/retry/policy.js.map +1 -1
- package/schema/attributeSchema.cjs.map +1 -0
- package/schema/attributeSchema.d.ts +6 -2
- package/schema/attributeSchema.js +7 -7
- package/schema/attributeSchema.js.map +1 -1
- package/schema/contentFetcherSchemas.cjs.map +1 -0
- package/schema/contentFetcherSchemas.d.ts +6 -2
- package/schema/contentFetcherSchemas.js +24 -21
- package/schema/contentFetcherSchemas.js.map +1 -1
- package/schema/contentSchemas.cjs.map +1 -0
- package/schema/contentSchemas.d.ts +6 -2
- package/schema/contentSchemas.js +45 -45
- package/schema/contentSchemas.js.map +1 -1
- package/schema/contextSchemas.cjs.map +1 -0
- package/schema/contextSchemas.d.ts +6 -2
- package/schema/contextSchemas.js +6 -6
- package/schema/contextSchemas.js.map +1 -1
- package/schema/ecommerceSchemas.cjs.map +1 -0
- package/schema/ecommerceSchemas.d.ts +10 -6
- package/schema/ecommerceSchemas.js +176 -172
- package/schema/ecommerceSchemas.js.map +1 -1
- package/schema/evaluatorSchemas.cjs.map +1 -0
- package/schema/evaluatorSchemas.d.ts +6 -2
- package/schema/evaluatorSchemas.js +46 -30
- package/schema/evaluatorSchemas.js.map +1 -1
- package/schema/eventSchemas.cjs.map +1 -0
- package/schema/eventSchemas.d.ts +16 -12
- package/schema/eventSchemas.js +125 -102
- package/schema/eventSchemas.js.map +1 -1
- package/schema/index.cjs.map +1 -0
- package/schema/index.d.ts +14 -11
- package/schema/index.js +11 -14
- package/schema/index.js.map +1 -1
- package/schema/loggerSchema.cjs.map +1 -0
- package/schema/loggerSchema.d.ts +6 -2
- package/schema/loggerSchema.js +13 -13
- package/schema/loggerSchema.js.map +1 -1
- package/schema/operationSchemas.cjs.map +1 -0
- package/schema/operationSchemas.d.ts +14 -10
- package/schema/operationSchemas.js +85 -69
- package/schema/operationSchemas.js.map +1 -1
- package/schema/sdkFacadeSchemas.cjs.map +1 -0
- package/schema/sdkFacadeSchemas.d.ts +6 -2
- package/schema/sdkFacadeSchemas.js +65 -51
- package/schema/sdkFacadeSchemas.js.map +1 -1
- package/schema/sdkSchemas.cjs.map +1 -0
- package/schema/sdkSchemas.d.ts +8 -4
- package/schema/sdkSchemas.js +80 -78
- package/schema/sdkSchemas.js.map +1 -1
- package/schema/tokenSchema.cjs.map +1 -0
- package/schema/tokenSchema.d.ts +6 -2
- package/schema/tokenSchema.js +41 -38
- package/schema/tokenSchema.js.map +1 -1
- package/schema/userSchema.cjs.map +1 -0
- package/schema/userSchema.d.ts +6 -2
- package/schema/userSchema.js +183 -134
- package/schema/userSchema.js.map +1 -1
- package/sdk.cjs.map +1 -0
- package/sdk.d.ts +28 -14
- package/sdk.js +106 -108
- package/sdk.js.map +1 -1
- package/sdkEvents.cjs.map +1 -0
- package/sdkEvents.d.ts +10 -5
- package/sdkEvents.js +0 -2
- package/sdkEvents.js.map +1 -1
- package/sourceLocation.cjs.map +1 -0
- package/sourceLocation.d.ts +7 -5
- package/sourceLocation.js +56 -57
- package/sourceLocation.js.map +1 -1
- package/tab.cjs.map +1 -0
- package/tab.d.ts +9 -7
- package/tab.js +93 -90
- package/tab.js.map +1 -1
- package/token/cachedTokenStore.cjs.map +1 -0
- package/token/cachedTokenStore.d.ts +8 -3
- package/token/cachedTokenStore.js +22 -24
- package/token/cachedTokenStore.js.map +1 -1
- package/token/inMemoryTokenStore.cjs.map +1 -0
- package/token/inMemoryTokenStore.d.ts +7 -2
- package/token/inMemoryTokenStore.js +12 -13
- package/token/inMemoryTokenStore.js.map +1 -1
- package/token/index.cjs.map +1 -0
- package/token/index.d.ts +7 -4
- package/token/index.js +9 -11
- package/token/index.js.map +1 -1
- package/token/replicatedTokenStore.cjs.map +1 -0
- package/token/replicatedTokenStore.d.ts +7 -2
- package/token/replicatedTokenStore.js +14 -15
- package/token/replicatedTokenStore.js.map +1 -1
- package/token/token.cjs.map +1 -0
- package/token/token.d.ts +11 -8
- package/token/token.js +212 -195
- package/token/token.js.map +1 -1
- package/tracker.cjs.map +1 -0
- package/tracker.d.ts +20 -13
- package/tracker.js +307 -307
- package/tracker.js.map +1 -1
- package/trackingEvents.cjs.map +1 -0
- package/trackingEvents.d.ts +65 -62
- package/trackingEvents.js +57 -56
- package/trackingEvents.js.map +1 -1
- package/transformer.cjs.map +1 -0
- package/transformer.d.ts +4 -2
- package/transformer.js +5 -6
- package/transformer.js.map +1 -1
- package/utilityTypes.cjs.map +1 -0
- package/utilityTypes.d.ts +4 -2
- package/utilityTypes.js +0 -2
- package/utilityTypes.js.map +1 -1
- package/uuid.cjs.map +1 -0
- package/uuid.d.ts +3 -1
- package/uuid.js +27 -32
- package/uuid.js.map +1 -1
- package/validation/arrayType.cjs.map +1 -0
- package/validation/arrayType.d.ts +5 -3
- package/validation/arrayType.js +45 -41
- package/validation/arrayType.js.map +1 -1
- package/validation/booleanType.cjs.map +1 -0
- package/validation/booleanType.d.ts +5 -2
- package/validation/booleanType.js +19 -16
- package/validation/booleanType.js.map +1 -1
- package/validation/functionType.cjs.map +1 -0
- package/validation/functionType.d.ts +5 -2
- package/validation/functionType.js +19 -16
- package/validation/functionType.js.map +1 -1
- package/validation/index.cjs.map +1 -0
- package/validation/index.d.ts +12 -12
- package/validation/index.js +27 -29
- package/validation/index.js.map +1 -1
- package/validation/jsonType.cjs.map +1 -0
- package/validation/jsonType.d.ts +8 -6
- package/validation/jsonType.js +89 -82
- package/validation/jsonType.js.map +1 -1
- package/validation/mixedSchema.cjs.map +1 -0
- package/validation/mixedSchema.d.ts +5 -2
- package/validation/mixedSchema.js +5 -7
- package/validation/mixedSchema.js.map +1 -1
- package/validation/nullType.cjs.map +1 -0
- package/validation/nullType.d.ts +5 -2
- package/validation/nullType.js +19 -16
- package/validation/nullType.js.map +1 -1
- package/validation/numberType.cjs.map +1 -0
- package/validation/numberType.d.ts +5 -3
- package/validation/numberType.js +40 -32
- package/validation/numberType.js.map +1 -1
- package/validation/objectType.cjs.map +1 -0
- package/validation/objectType.d.ts +5 -3
- package/validation/objectType.js +84 -85
- package/validation/objectType.js.map +1 -1
- package/validation/schema.cjs.map +1 -0
- package/validation/schema.d.ts +5 -3
- package/validation/schema.js +8 -9
- package/validation/schema.js.map +1 -1
- package/validation/stringType.cjs.map +1 -0
- package/validation/stringType.d.ts +5 -3
- package/validation/stringType.js +74 -70
- package/validation/stringType.js.map +1 -1
- package/validation/unionType.cjs.map +1 -0
- package/validation/unionType.d.ts +5 -2
- package/validation/unionType.js +37 -35
- package/validation/unionType.js.map +1 -1
- package/validation/violation.cjs.map +1 -0
- package/validation/violation.d.ts +4 -2
- package/validation/violation.js +18 -18
- package/validation/violation.js.map +1 -1
package/token/token.js
CHANGED
|
@@ -1,198 +1,215 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
1
|
+
import { tokenSchema } from "../schema";
|
|
2
|
+
import { formatCause } from "../error";
|
|
3
|
+
import { base64UrlDecode, base64UrlEncode } from "../base64Url";
|
|
4
|
+
const _Token = class _Token {
|
|
5
|
+
constructor(headers, payload, signature = "") {
|
|
6
|
+
this.headers = headers;
|
|
7
|
+
this.payload = payload;
|
|
8
|
+
this.signature = signature;
|
|
9
|
+
}
|
|
10
|
+
static issue(appId, subject = null, timestamp = Math.floor(Date.now() / 1e3)) {
|
|
11
|
+
if (timestamp < 0) {
|
|
12
|
+
throw new Error("The timestamp must be non-negative.");
|
|
13
|
+
}
|
|
14
|
+
if (subject === "") {
|
|
15
|
+
throw new Error("The subject must be non-empty.");
|
|
16
|
+
}
|
|
17
|
+
return new _Token(
|
|
18
|
+
{
|
|
19
|
+
typ: "JWT",
|
|
20
|
+
alg: "none",
|
|
21
|
+
appId
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
iss: "croct.io",
|
|
25
|
+
aud: "croct.io",
|
|
26
|
+
iat: timestamp,
|
|
27
|
+
...subject !== null ? { sub: subject } : null
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
static parse(token) {
|
|
32
|
+
if (token === "") {
|
|
33
|
+
throw new Error("The token cannot be empty.");
|
|
34
|
+
}
|
|
35
|
+
const parts = token.split(".", 3);
|
|
36
|
+
if (parts.length < 2) {
|
|
37
|
+
throw new Error("The token is malformed.");
|
|
38
|
+
}
|
|
39
|
+
let headers;
|
|
40
|
+
let payload;
|
|
41
|
+
try {
|
|
42
|
+
headers = JSON.parse(base64UrlDecode(parts[0], true));
|
|
43
|
+
payload = JSON.parse(base64UrlDecode(parts[1], true));
|
|
44
|
+
} catch (error) {
|
|
45
|
+
throw new Error("The token is corrupted.");
|
|
46
|
+
}
|
|
47
|
+
return _Token.of(headers, payload, parts[2]);
|
|
48
|
+
}
|
|
49
|
+
static of(headers, payload, signature = "") {
|
|
50
|
+
try {
|
|
51
|
+
tokenSchema.validate({
|
|
52
|
+
headers,
|
|
53
|
+
payload,
|
|
54
|
+
signature
|
|
55
|
+
});
|
|
56
|
+
} catch (violation) {
|
|
57
|
+
throw new Error(`The token is invalid: ${formatCause(violation)}`);
|
|
58
|
+
}
|
|
59
|
+
return new _Token(headers, payload, signature);
|
|
60
|
+
}
|
|
61
|
+
async signedWith(apiKey) {
|
|
62
|
+
const keyId = await apiKey.getIdentifierHash();
|
|
63
|
+
const headers = {
|
|
64
|
+
...this.headers,
|
|
65
|
+
kid: keyId,
|
|
66
|
+
alg: apiKey.getSigningAlgorithm()
|
|
67
|
+
};
|
|
68
|
+
const encodedHeader = base64UrlEncode(JSON.stringify(headers), true);
|
|
69
|
+
const encodedPayload = base64UrlEncode(JSON.stringify(this.payload), true);
|
|
70
|
+
const signature = await apiKey.sign(`${encodedHeader}.${encodedPayload}`);
|
|
71
|
+
return new _Token(headers, this.payload, base64UrlEncode(signature, false));
|
|
72
|
+
}
|
|
73
|
+
isSigned() {
|
|
74
|
+
return this.headers.alg !== "none" && this.signature !== "";
|
|
75
|
+
}
|
|
76
|
+
isSubject(subject) {
|
|
77
|
+
return this.getSubject() === subject;
|
|
78
|
+
}
|
|
79
|
+
isAnonymous() {
|
|
80
|
+
return this.payload.sub === void 0;
|
|
81
|
+
}
|
|
82
|
+
isValidNow(now = Math.floor(Date.now() / 1e3)) {
|
|
83
|
+
const { exp, iat } = this.payload;
|
|
84
|
+
return (exp === void 0 || exp >= now) && iat <= now;
|
|
85
|
+
}
|
|
86
|
+
isNewerThan(token) {
|
|
87
|
+
return this.payload.iat > token.payload.iat;
|
|
88
|
+
}
|
|
89
|
+
async matchesKeyId(apiKey) {
|
|
90
|
+
return this.headers.kid === await apiKey.getIdentifierHash();
|
|
91
|
+
}
|
|
92
|
+
getHeaders() {
|
|
93
|
+
return { ...this.headers };
|
|
94
|
+
}
|
|
95
|
+
getPayload() {
|
|
96
|
+
return { ...this.payload };
|
|
97
|
+
}
|
|
98
|
+
getSignature() {
|
|
99
|
+
return this.signature;
|
|
100
|
+
}
|
|
101
|
+
getApplicationId() {
|
|
102
|
+
return this.headers.appId ?? null;
|
|
103
|
+
}
|
|
104
|
+
getAlgorithm() {
|
|
105
|
+
return this.headers.alg;
|
|
106
|
+
}
|
|
107
|
+
getType() {
|
|
108
|
+
return this.headers.typ;
|
|
109
|
+
}
|
|
110
|
+
getKeyId() {
|
|
111
|
+
return this.headers.kid ?? null;
|
|
112
|
+
}
|
|
113
|
+
getSubject() {
|
|
114
|
+
return this.payload.sub ?? null;
|
|
115
|
+
}
|
|
116
|
+
getIssueTime() {
|
|
117
|
+
return this.payload.iat;
|
|
118
|
+
}
|
|
119
|
+
getExpirationTime() {
|
|
120
|
+
return this.payload.exp ?? null;
|
|
121
|
+
}
|
|
122
|
+
getTokenId() {
|
|
123
|
+
return this.payload.jti ?? null;
|
|
124
|
+
}
|
|
125
|
+
getAudience() {
|
|
126
|
+
return this.payload.aud;
|
|
127
|
+
}
|
|
128
|
+
getIssuer() {
|
|
129
|
+
return this.payload.iss;
|
|
130
|
+
}
|
|
131
|
+
withTokenId(tokenId) {
|
|
132
|
+
if (tokenId === "" || !_Token.UUID_PATTERN.test(tokenId)) {
|
|
133
|
+
throw new Error("The token ID must be a valid UUID.");
|
|
134
|
+
}
|
|
135
|
+
return new _Token(
|
|
136
|
+
this.headers,
|
|
137
|
+
{
|
|
138
|
+
...this.payload,
|
|
139
|
+
jti: tokenId
|
|
140
|
+
},
|
|
141
|
+
this.signature
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
withDuration(duration, now = Math.floor(Date.now() / 1e3)) {
|
|
145
|
+
return new _Token(
|
|
146
|
+
this.headers,
|
|
147
|
+
{
|
|
148
|
+
...this.payload,
|
|
149
|
+
iat: now,
|
|
150
|
+
exp: now + duration
|
|
151
|
+
},
|
|
152
|
+
this.signature
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
withAddedHeaders(headers) {
|
|
156
|
+
return this.withHeaders({
|
|
157
|
+
...this.headers,
|
|
158
|
+
...Object.fromEntries(
|
|
159
|
+
Object.entries(headers).filter(([, value]) => value !== void 0)
|
|
160
|
+
)
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
withAddedClaims(claims) {
|
|
164
|
+
return this.withPayload({
|
|
165
|
+
...this.payload,
|
|
166
|
+
...Object.fromEntries(
|
|
167
|
+
Object.entries(claims).filter(([, value]) => value !== void 0)
|
|
168
|
+
)
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
withHeaders(headers) {
|
|
172
|
+
return new _Token(
|
|
173
|
+
headers,
|
|
174
|
+
this.payload,
|
|
175
|
+
this.signature
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
withPayload(payload) {
|
|
179
|
+
return new _Token(
|
|
180
|
+
this.headers,
|
|
181
|
+
payload,
|
|
182
|
+
this.signature
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
withSignature(signature) {
|
|
186
|
+
return new _Token(
|
|
187
|
+
this.headers,
|
|
188
|
+
this.payload,
|
|
189
|
+
signature
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
toJSON() {
|
|
193
|
+
return this.toString();
|
|
194
|
+
}
|
|
195
|
+
toString() {
|
|
196
|
+
const headers = base64UrlEncode(JSON.stringify(this.headers), true);
|
|
197
|
+
const payload = base64UrlEncode(JSON.stringify(this.payload), true);
|
|
198
|
+
return `${headers}.${payload}.${this.signature}`;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
_Token.UUID_PATTERN = /^[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}$/;
|
|
202
|
+
let Token = _Token;
|
|
189
203
|
class FixedTokenProvider {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
204
|
+
constructor(token) {
|
|
205
|
+
this.token = token;
|
|
206
|
+
}
|
|
207
|
+
getToken() {
|
|
208
|
+
return this.token;
|
|
209
|
+
}
|
|
196
210
|
}
|
|
197
|
-
|
|
211
|
+
export {
|
|
212
|
+
FixedTokenProvider,
|
|
213
|
+
Token
|
|
214
|
+
};
|
|
198
215
|
//# sourceMappingURL=token.js.map
|
package/token/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token/token.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/token/token.ts"],"sourcesContent":["import {JsonObject} from '@croct/json';\nimport {tokenSchema} from '../schema';\nimport {formatCause} from '../error';\nimport {ApiKey} from '../apiKey';\nimport {base64UrlDecode, base64UrlEncode} from '../base64Url';\n\nexport type TokenHeaders = {\n typ: string,\n alg: string,\n kid?: string,\n appId?: string,\n};\n\nexport type TokenClaims = {\n iss: string,\n aud: string|string[],\n iat: number,\n exp?: number,\n sub?: string,\n jti?: string,\n};\n\nexport type TokenPayload = JsonObject & TokenClaims;\n\nexport class Token {\n private static readonly UUID_PATTERN = /^[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}$/;\n\n private readonly headers: TokenHeaders;\n\n private readonly payload: TokenPayload;\n\n private readonly signature: string;\n\n private constructor(headers: TokenHeaders, payload: TokenPayload, signature = '') {\n this.headers = headers;\n this.payload = payload;\n this.signature = signature;\n }\n\n public static issue(\n appId: string,\n subject: string|null = null,\n timestamp: number = Math.floor(Date.now() / 1000),\n ): Token {\n if (timestamp < 0) {\n throw new Error('The timestamp must be non-negative.');\n }\n\n if (subject === '') {\n throw new Error('The subject must be non-empty.');\n }\n\n return new Token(\n {\n typ: 'JWT',\n alg: 'none',\n appId: appId,\n },\n {\n iss: 'croct.io',\n aud: 'croct.io',\n iat: timestamp,\n ...(subject !== null ? {sub: subject} : null),\n },\n );\n }\n\n public static parse(token: string): Token {\n if (token === '') {\n throw new Error('The token cannot be empty.');\n }\n\n const parts = token.split('.', 3);\n\n // This token is invalid\n if (parts.length < 2) {\n throw new Error('The token is malformed.');\n }\n\n let headers;\n let payload;\n\n try {\n headers = JSON.parse(base64UrlDecode(parts[0], true));\n payload = JSON.parse(base64UrlDecode(parts[1], true));\n } catch (error) {\n throw new Error('The token is corrupted.');\n }\n\n return Token.of(headers, payload, parts[2]);\n }\n\n public static of(headers: TokenHeaders, payload: TokenPayload, signature = ''): Token {\n try {\n tokenSchema.validate({\n headers: headers,\n payload: payload,\n signature: signature,\n });\n } catch (violation) {\n throw new Error(`The token is invalid: ${formatCause(violation)}`);\n }\n\n return new Token(headers as TokenHeaders, payload as TokenPayload, signature as string);\n }\n\n public async signedWith(apiKey: ApiKey): Promise<Token> {\n const keyId = await apiKey.getIdentifierHash();\n const headers: TokenHeaders = {\n ...this.headers,\n kid: keyId,\n alg: apiKey.getSigningAlgorithm(),\n };\n\n const encodedHeader = base64UrlEncode(JSON.stringify(headers), true);\n const encodedPayload = base64UrlEncode(JSON.stringify(this.payload), true);\n const signature = await apiKey.sign(`${encodedHeader}.${encodedPayload}`);\n\n return new Token(headers, this.payload, base64UrlEncode(signature, false));\n }\n\n public isSigned(): boolean {\n return this.headers.alg !== 'none' && this.signature !== '';\n }\n\n public isSubject(subject: string): boolean {\n return this.getSubject() === subject;\n }\n\n public isAnonymous(): boolean {\n return this.payload.sub === undefined;\n }\n\n public isValidNow(now: number = Math.floor(Date.now() / 1000)): boolean {\n const {exp, iat} = this.payload;\n\n return (exp === undefined || exp >= now) && iat <= now;\n }\n\n public isNewerThan(token: Token): boolean {\n return this.payload.iat > token.payload.iat;\n }\n\n public async matchesKeyId(apiKey: ApiKey): Promise<boolean> {\n return this.headers.kid === await apiKey.getIdentifierHash();\n }\n\n public getHeaders(): TokenHeaders {\n return {...this.headers};\n }\n\n public getPayload(): TokenPayload {\n return {...this.payload};\n }\n\n public getSignature(): string {\n return this.signature;\n }\n\n public getApplicationId(): string | null {\n return this.headers.appId ?? null;\n }\n\n public getAlgorithm(): string {\n return this.headers.alg;\n }\n\n public getType(): string {\n return this.headers.typ;\n }\n\n public getKeyId(): string | null {\n return this.headers.kid ?? null;\n }\n\n public getSubject(): string | null {\n return this.payload.sub ?? null;\n }\n\n public getIssueTime(): number {\n return this.payload.iat;\n }\n\n public getExpirationTime(): number | null {\n return this.payload.exp ?? null;\n }\n\n public getTokenId(): string | null {\n return this.payload.jti ?? null;\n }\n\n public getAudience(): string | string[] {\n return this.payload.aud;\n }\n\n public getIssuer(): string {\n return this.payload.iss;\n }\n\n public withTokenId(tokenId: string): Token {\n if (tokenId === '' || !Token.UUID_PATTERN.test(tokenId)) {\n throw new Error('The token ID must be a valid UUID.');\n }\n\n return new Token(\n this.headers,\n {\n ...this.payload,\n jti: tokenId,\n },\n this.signature,\n );\n }\n\n public withDuration(duration: number, now: number = Math.floor(Date.now() / 1000)): Token {\n return new Token(\n this.headers,\n {\n ...this.payload,\n iat: now,\n exp: now + duration,\n },\n this.signature,\n );\n }\n\n public withAddedHeaders(headers: Partial<TokenHeaders>): Token {\n return this.withHeaders({\n ...this.headers,\n ...Object.fromEntries(\n Object.entries(headers)\n .filter(([, value]) => value !== undefined),\n ),\n });\n }\n\n public withAddedClaims(claims: Partial<TokenClaims>): Token {\n return this.withPayload({\n ...this.payload,\n ...Object.fromEntries(\n Object.entries(claims)\n .filter(([, value]) => value !== undefined),\n ),\n });\n }\n\n public withHeaders(headers: TokenHeaders): Token {\n return new Token(\n headers,\n this.payload,\n this.signature,\n );\n }\n\n public withPayload(payload: TokenPayload): Token {\n return new Token(\n this.headers,\n payload,\n this.signature,\n );\n }\n\n public withSignature(signature: string): Token {\n return new Token(\n this.headers,\n this.payload,\n signature,\n );\n }\n\n public toJSON(): string {\n return this.toString();\n }\n\n public toString(): string {\n const headers = base64UrlEncode(JSON.stringify(this.headers), true);\n const payload = base64UrlEncode(JSON.stringify(this.payload), true);\n\n return `${headers}.${payload}.${this.signature}`;\n }\n}\n\nexport interface TokenProvider {\n getToken(): Token | null;\n}\n\nexport interface TokenStore extends TokenProvider {\n setToken(token: Token | null): void;\n}\n\nexport class FixedTokenProvider implements TokenProvider {\n private readonly token: Token | null;\n\n public constructor(token: Token | null) {\n this.token = token;\n }\n\n public getToken(): Token | null {\n return this.token;\n }\n}\n"],"mappings":"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","names":[]}
|
package/tracker.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tracker.ts"],"sourcesContent":["import {Logger, NullLogger} from './logging';\nimport {Tab, TabEvent, TabUrlChangeEvent, TabVisibilityChangeEvent} from './tab';\nimport {OutputChannel} from './channel';\nimport {formatCause} from './error';\nimport {Token, TokenProvider} from './token';\nimport {RetryPolicy} from './retry';\nimport {\n Beacon,\n BeaconPayload,\n TrackingEvent,\n TrackingEventContext,\n isCartPartialEvent,\n isIdentifiedUserEvent,\n PartialTrackingEvent,\n} from './trackingEvents';\n\ntype Options = {\n eventMetadata?: {[key: string]: string},\n};\n\nexport type Configuration = Options & {\n channel: OutputChannel<Beacon>,\n logger?: Logger,\n tab: Tab,\n tokenProvider: TokenProvider,\n processor?: TrackingEventProcessor,\n inactivityRetryPolicy: RetryPolicy<number>,\n};\n\ntype State = {\n initialized: boolean,\n enabled: boolean,\n suspended: boolean,\n};\n\ntype InactivityTimer = {\n id?: number,\n since: number,\n};\n\nexport interface TrackingEventProcessor {\n process(event: QueuedEventInfo): QueuedEventInfo[];\n}\n\nexport type QueuedEventInfo<T extends TrackingEvent = TrackingEvent> = Omit<EventInfo<T>, 'status'>;\n\nexport type EventInfo<T extends TrackingEvent = TrackingEvent> = {\n context: TrackingEventContext,\n userToken?: Token,\n event: T,\n timestamp: number,\n status: 'pending' | 'confirmed' | 'failed' | 'ignored',\n};\n\nexport interface EventListener {\n (event: EventInfo): void;\n}\n\nconst trackedEvents: {[key: string]: {[key: string]: boolean}} = {};\n\nexport class Tracker {\n private readonly options: Required<Options>;\n\n private tab: Tab;\n\n private tokenProvider: TokenProvider;\n\n private inactivityRetryPolicy: RetryPolicy<any>;\n\n private readonly channel: OutputChannel<Beacon>;\n\n private readonly logger: Logger;\n\n private readonly processor?: TrackingEventProcessor;\n\n private readonly listeners: EventListener[] = [];\n\n private readonly pending: Array<Promise<void>> = [];\n\n private readonly state: State = {\n enabled: false,\n initialized: false,\n suspended: false,\n };\n\n private readonly inactivityTimer: InactivityTimer = {\n since: 0,\n };\n\n public constructor(config: Configuration) {\n const {tab, tokenProvider, channel, logger, inactivityRetryPolicy, ...options} = config;\n\n this.tab = tab;\n this.tokenProvider = tokenProvider;\n this.inactivityRetryPolicy = inactivityRetryPolicy;\n this.channel = channel;\n this.logger = logger ?? new NullLogger();\n this.processor = config.processor;\n this.options = {\n ...options,\n eventMetadata: options.eventMetadata ?? {},\n };\n\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n this.suspend = this.suspend.bind(this);\n this.unsuspend = this.unsuspend.bind(this);\n this.trackPageLoad = this.trackPageLoad.bind(this);\n this.trackTabVisibilityChange = this.trackTabVisibilityChange.bind(this);\n this.trackTabUrlChange = this.trackTabUrlChange.bind(this);\n this.trackInactivity = this.trackInactivity.bind(this);\n }\n\n public addListener(listener: EventListener): void {\n this.listeners.push(listener);\n }\n\n public removeListener(listener: EventListener): void {\n let index = this.listeners.indexOf(listener);\n\n while (index >= 0) {\n this.listeners.splice(index, 1);\n index = this.listeners.indexOf(listener);\n }\n }\n\n public get flushed(): Promise<void> {\n const suppress = (): void => {\n // suppress errors\n };\n\n return Promise.all(this.pending).then(suppress, suppress);\n }\n\n public isEnabled(): boolean {\n return this.state.enabled;\n }\n\n public isSuspended(): boolean {\n return this.state.suspended;\n }\n\n public enable(): void {\n if (this.state.enabled) {\n return;\n }\n\n this.logger.info('Tracker enabled');\n\n this.state.enabled = true;\n\n if (this.state.suspended) {\n return;\n }\n\n this.startInactivityTimer();\n\n if (!this.state.initialized) {\n this.state.initialized = true;\n this.initialize();\n }\n\n this.tab.addListener('load', this.trackPageLoad);\n this.tab.addListener('urlChange', this.trackTabUrlChange);\n this.tab.addListener('visibilityChange', this.trackTabVisibilityChange);\n }\n\n public disable(): void {\n if (!this.state.enabled) {\n return;\n }\n\n this.logger.info('Tracker disabled');\n\n this.state.enabled = false;\n\n if (this.state.suspended) {\n return;\n }\n\n this.tab.removeListener('load', this.trackPageLoad);\n this.tab.removeListener('urlChange', this.trackTabUrlChange);\n this.tab.removeListener('visibilityChange', this.trackTabVisibilityChange);\n\n this.stopInactivityTimer();\n }\n\n public suspend(): void {\n if (this.state.suspended) {\n return;\n }\n\n this.logger.info('Tracker suspended');\n\n if (this.state.enabled) {\n this.disable();\n this.state.enabled = true;\n }\n\n this.state.suspended = true;\n }\n\n public unsuspend(): void {\n if (!this.state.suspended) {\n return;\n }\n\n this.logger.info('Tracker unsuspended');\n\n this.state.suspended = false;\n\n if (this.state.enabled) {\n this.state.enabled = false;\n this.enable();\n }\n }\n\n private initialize(): void {\n if (trackedEvents[this.tab.id] === undefined) {\n trackedEvents[this.tab.id] = {};\n }\n\n const initEvents = trackedEvents[this.tab.id];\n\n if (this.tab.isNew && !initEvents.tabOpened) {\n initEvents.tabOpened = true;\n\n this.trackTabOpen({tabId: this.tab.id});\n }\n\n if (!initEvents.pageOpened) {\n initEvents.pageOpened = true;\n\n this.trackPageOpen({\n url: this.tab.url,\n referrer: this.tab.referrer,\n });\n }\n }\n\n private stopInactivityTimer(): void {\n if (this.inactivityTimer.id !== undefined) {\n window.clearTimeout(this.inactivityTimer.id);\n\n delete this.inactivityTimer.id;\n }\n }\n\n private startInactivityTimer(): void {\n this.stopInactivityTimer();\n\n this.inactivityTimer.since = Date.now();\n\n let iteration = -1;\n\n const startTimer = (): void => {\n if (!this.inactivityRetryPolicy.shouldRetry(iteration + 1, this.inactivityTimer.since)) {\n window.clearTimeout(this.inactivityTimer.id);\n\n return;\n }\n\n iteration += 1;\n\n this.inactivityTimer.id = window.setTimeout(\n () => {\n this.trackInactivity();\n startTimer();\n },\n this.inactivityRetryPolicy.getDelay(iteration),\n );\n };\n\n startTimer();\n }\n\n public track<T extends PartialTrackingEvent>(event: T, timestamp: number = Date.now()): Promise<T> {\n return this.dispatch(this.enrichEvent(event, timestamp), timestamp).then(() => event);\n }\n\n private trackPageOpen({referrer, ...payload}: {url: string, referrer: string}): void {\n this.enqueue({\n type: 'pageOpened',\n ...payload,\n ...(referrer.length > 0 ? {referrer: referrer} : {}),\n });\n }\n\n private trackPageLoad({detail: {tab}}: TabEvent): void {\n this.enqueue({\n type: 'pageLoaded',\n url: tab.url,\n title: tab.title,\n lastModifiedTime: Date.parse(tab.document.lastModified),\n });\n }\n\n private trackTabOpen(payload: {tabId: string}): void {\n this.enqueue({\n type: 'tabOpened',\n ...payload,\n });\n }\n\n private trackTabUrlChange({detail}: TabUrlChangeEvent): void {\n this.enqueue({\n type: 'tabUrlChanged',\n tabId: detail.tab.id,\n url: detail.url,\n });\n }\n\n private trackTabVisibilityChange({detail}: TabVisibilityChangeEvent): void {\n this.enqueue({\n type: 'tabVisibilityChanged',\n tabId: detail.tab.id,\n visibility: detail.visible ? 'visible' : 'hidden',\n });\n }\n\n private trackInactivity(): void {\n this.enqueue({\n type: 'nothingChanged',\n sinceTime: this.inactivityTimer.since,\n });\n }\n\n private enqueue(event: TrackingEvent, timestamp: number = Date.now()): void {\n this.dispatch(event, timestamp).catch(() => {\n // suppress error\n });\n }\n\n private notifyEvent(event: EventInfo): void {\n this.listeners.map(listener => listener(event));\n }\n\n private dispatch<T extends TrackingEvent>(event: T, timestamp: number): Promise<T> {\n const userToken = this.tokenProvider.getToken();\n const metadata = this.options.eventMetadata;\n const context: TrackingEventContext = {\n tabId: this.tab.id,\n url: this.tab.url,\n ...(Object.keys(metadata).length > 0 ? {metadata: metadata} : {}),\n };\n\n const queuedEvent: QueuedEventInfo<T> = {\n ...(userToken !== null ? {userToken: userToken} : {}),\n event: event,\n timestamp: timestamp,\n context: context,\n };\n\n const processedEvents = this.processor !== undefined\n ? this.processor.process(queuedEvent)\n : [queuedEvent];\n\n // sort events by timestamp in ascending order\n processedEvents.sort((left, right) => left.timestamp - right.timestamp);\n\n let result: Promise<T>|null = null;\n\n for (const processedEvent of processedEvents) {\n if (processedEvent === queuedEvent) {\n result = this.publish(queuedEvent);\n\n continue;\n }\n\n this.publish(processedEvent);\n }\n\n if (result === null) {\n return Promise.reject(new Error('Event suppressed.'));\n }\n\n return result;\n }\n\n private publish<T extends TrackingEvent>(queuedEvent: QueuedEventInfo<T>): Promise<T> {\n const {event} = queuedEvent;\n\n if (event.type !== 'nothingChanged') {\n this.stopInactivityTimer();\n }\n\n const eventInfo: EventInfo<T> = {\n ...queuedEvent,\n status: 'pending',\n };\n\n if (this.state.suspended) {\n this.logger.warn(`Tracker is suspended, ignoring event \"${event.type}\"`);\n\n this.notifyEvent({...eventInfo, status: 'ignored'});\n\n return Promise.reject(new Error('The tracker is suspended.'));\n }\n\n this.logger.info(`Tracked event \"${event.type}\"`);\n\n this.notifyEvent(eventInfo);\n\n return new Promise<T>((resolve, reject) => {\n const promise = this.channel\n .publish(this.createBeacon(queuedEvent))\n .then(\n () => {\n this.logger.debug(`Successfully published event \"${event.type}\"`);\n\n this.notifyEvent({...eventInfo, status: 'confirmed'});\n\n resolve(event);\n },\n cause => {\n this.logger.error(`Failed to publish event \"${event.type}\", reason: ${formatCause(cause)}`);\n\n this.notifyEvent({...eventInfo, status: 'failed'});\n\n reject(cause);\n },\n );\n\n this.pending.push(promise);\n\n promise.finally(() => {\n this.pending.splice(this.pending.indexOf(promise), 1);\n });\n\n if (this.state.enabled && event.type !== 'nothingChanged') {\n this.startInactivityTimer();\n }\n });\n }\n\n private enrichEvent(event: PartialTrackingEvent, timestamp: number): TrackingEvent {\n if (isCartPartialEvent(event)) {\n const {cart: {lastUpdateTime = timestamp, ...cart}, ...payload} = event;\n\n return {\n ...payload,\n cart: {\n ...cart,\n lastUpdateTime: lastUpdateTime,\n },\n };\n }\n\n return event;\n }\n\n private createBeacon({event, timestamp, context, userToken}: QueuedEventInfo): Beacon {\n return {\n timestamp: timestamp,\n ...(userToken !== undefined ? {token: userToken.toString()} : {}),\n context: context,\n payload: this.enrichBeaconPayload(this.createBeaconPayload(event)),\n };\n }\n\n private createBeaconPayload(event: TrackingEvent): BeaconPayload {\n if (!isIdentifiedUserEvent(event)) {\n return event;\n }\n\n if (event.type === 'userSignedUp' && event.profile !== undefined) {\n const {userId, profile, ...payload} = event;\n\n return {\n ...payload,\n externalUserId: userId,\n patch: {\n operations: [\n {\n type: 'merge',\n path: '.',\n value: profile,\n },\n ],\n },\n };\n }\n\n const {userId, ...payload} = event;\n\n return {\n ...payload,\n externalUserId: userId,\n };\n }\n\n private enrichBeaconPayload(event: BeaconPayload): BeaconPayload {\n switch (event.type) {\n case 'linkOpened':\n return {\n ...event,\n link: new URL(event.link, this.tab.url).toString(),\n };\n\n default:\n return event;\n }\n }\n}\n"],"mappings":"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","names":["userId","payload"]}
|
package/tracker.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import { Logger } from './logging';
|
|
2
|
-
import { Tab } from './tab';
|
|
3
|
-
import { OutputChannel } from './channel';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { Logger } from './logging/logger.js';
|
|
2
|
+
import { Tab } from './tab.js';
|
|
3
|
+
import { OutputChannel } from './channel/channel.js';
|
|
4
|
+
import { RetryPolicy } from './retry/policy.js';
|
|
5
|
+
import { Token, TokenProvider } from './token/token.js';
|
|
6
|
+
import { TrackingEvent, TrackingEventContext, Beacon, PartialTrackingEvent } from './trackingEvents.js';
|
|
7
|
+
import './eventManager.js';
|
|
8
|
+
import '@croct/json';
|
|
9
|
+
import './apiKey.js';
|
|
10
|
+
import './patch.js';
|
|
11
|
+
import './utilityTypes.js';
|
|
12
|
+
|
|
7
13
|
type Options = {
|
|
8
14
|
eventMetadata?: {
|
|
9
15
|
[key: string]: string;
|
|
10
16
|
};
|
|
11
17
|
};
|
|
12
|
-
|
|
18
|
+
type Configuration = Options & {
|
|
13
19
|
channel: OutputChannel<Beacon>;
|
|
14
20
|
logger?: Logger;
|
|
15
21
|
tab: Tab;
|
|
@@ -17,21 +23,21 @@ export type Configuration = Options & {
|
|
|
17
23
|
processor?: TrackingEventProcessor;
|
|
18
24
|
inactivityRetryPolicy: RetryPolicy<number>;
|
|
19
25
|
};
|
|
20
|
-
|
|
26
|
+
interface TrackingEventProcessor {
|
|
21
27
|
process(event: QueuedEventInfo): QueuedEventInfo[];
|
|
22
28
|
}
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
type QueuedEventInfo<T extends TrackingEvent = TrackingEvent> = Omit<EventInfo<T>, 'status'>;
|
|
30
|
+
type EventInfo<T extends TrackingEvent = TrackingEvent> = {
|
|
25
31
|
context: TrackingEventContext;
|
|
26
32
|
userToken?: Token;
|
|
27
33
|
event: T;
|
|
28
34
|
timestamp: number;
|
|
29
35
|
status: 'pending' | 'confirmed' | 'failed' | 'ignored';
|
|
30
36
|
};
|
|
31
|
-
|
|
37
|
+
interface EventListener {
|
|
32
38
|
(event: EventInfo): void;
|
|
33
39
|
}
|
|
34
|
-
|
|
40
|
+
declare class Tracker {
|
|
35
41
|
private readonly options;
|
|
36
42
|
private tab;
|
|
37
43
|
private tokenProvider;
|
|
@@ -72,4 +78,5 @@ export declare class Tracker {
|
|
|
72
78
|
private createBeaconPayload;
|
|
73
79
|
private enrichBeaconPayload;
|
|
74
80
|
}
|
|
75
|
-
|
|
81
|
+
|
|
82
|
+
export { type Configuration, type EventInfo, type EventListener, type QueuedEventInfo, Tracker, type TrackingEventProcessor };
|