@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
|
@@ -1,66 +1,58 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LocalStorageCache = void 0;
|
|
4
1
|
class LocalStorageCache {
|
|
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
|
-
const value = this.storage.getItem(this.key);
|
|
59
|
-
if (this.value !== value) {
|
|
60
|
-
this.value = value;
|
|
61
|
-
this.notifyChange(value);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
2
|
+
constructor(storage, key) {
|
|
3
|
+
this.listeners = [];
|
|
4
|
+
this.storage = storage;
|
|
5
|
+
this.key = key;
|
|
6
|
+
this.value = storage.getItem(key);
|
|
7
|
+
}
|
|
8
|
+
static autoSync(cache) {
|
|
9
|
+
const listener = cache.sync.bind(cache);
|
|
10
|
+
window.addEventListener("storage", listener);
|
|
11
|
+
return () => window.removeEventListener("storage", listener);
|
|
12
|
+
}
|
|
13
|
+
get() {
|
|
14
|
+
return this.value;
|
|
15
|
+
}
|
|
16
|
+
put(value) {
|
|
17
|
+
this.storage.setItem(this.key, value);
|
|
18
|
+
if (this.value !== value) {
|
|
19
|
+
this.value = value;
|
|
20
|
+
this.notifyChange(value);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
clear() {
|
|
24
|
+
this.storage.removeItem(this.key);
|
|
25
|
+
if (this.value !== null) {
|
|
26
|
+
this.value = null;
|
|
27
|
+
this.notifyChange(null);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
addListener(listener) {
|
|
31
|
+
if (!this.listeners.includes(listener)) {
|
|
32
|
+
this.listeners.push(listener);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
removeListener(listener) {
|
|
36
|
+
const index = this.listeners.indexOf(listener);
|
|
37
|
+
if (index > -1) {
|
|
38
|
+
this.listeners.splice(index, 1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
notifyChange(value) {
|
|
42
|
+
this.listeners.forEach((listener) => listener(value));
|
|
43
|
+
}
|
|
44
|
+
sync(event) {
|
|
45
|
+
if (event.storageArea !== this.storage || event.key !== null && event.key !== this.key) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const value = this.storage.getItem(this.key);
|
|
49
|
+
if (this.value !== value) {
|
|
50
|
+
this.value = value;
|
|
51
|
+
this.notifyChange(value);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
64
54
|
}
|
|
65
|
-
|
|
55
|
+
export {
|
|
56
|
+
LocalStorageCache
|
|
57
|
+
};
|
|
66
58
|
//# sourceMappingURL=localStorageCache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/cache/localStorageCache.ts"],"sourcesContent":["import {CacheListener, ObservableCache} from './cache';\n\nexport class LocalStorageCache implements ObservableCache {\n private readonly storage: Storage;\n\n private readonly key: string;\n\n private value: string|null;\n\n private readonly listeners: CacheListener[] = [];\n\n public constructor(storage: Storage, key: string) {\n this.storage = storage;\n this.key = key;\n this.value = storage.getItem(key);\n }\n\n public static autoSync(cache: LocalStorageCache): (() => void) {\n const listener = cache.sync.bind(cache);\n\n window.addEventListener('storage', listener);\n\n return (): void => window.removeEventListener('storage', listener);\n }\n\n public get(): string|null {\n return this.value;\n }\n\n public put(value: string): void {\n this.storage.setItem(this.key, value);\n\n if (this.value !== value) {\n this.value = value;\n this.notifyChange(value);\n }\n }\n\n public clear(): void {\n this.storage.removeItem(this.key);\n\n if (this.value !== null) {\n this.value = null;\n this.notifyChange(null);\n }\n }\n\n public addListener(listener: CacheListener): void {\n if (!this.listeners.includes(listener)) {\n this.listeners.push(listener);\n }\n }\n\n public removeListener(listener: CacheListener): void {\n const index = this.listeners.indexOf(listener);\n\n if (index > -1) {\n this.listeners.splice(index, 1);\n }\n }\n\n private notifyChange(value: string|null): void {\n this.listeners.forEach(listener => listener(value));\n }\n\n private sync(event: StorageEvent): void {\n if (event.storageArea !== this.storage || (event.key !== null && event.key !== this.key)) {\n // Ignore unrelated changes\n return;\n }\n\n /*\n * Retrieving the value from the store rather than the event ensures\n * the cache will be in sync with the latest value set.\n * In case of cascading changes, it prevents notifying listeners\n * about intermediate states already outdated at this point.\n */\n const value = this.storage.getItem(this.key);\n\n if (this.value !== value) {\n this.value = value;\n this.notifyChange(value);\n }\n }\n}\n"],"mappings":"AAEO,MAAM,kBAA6C;AAAA,EAS/C,YAAY,SAAkB,KAAa;AAFlD,SAAiB,YAA6B,CAAC;AAG3C,SAAK,UAAU;AACf,SAAK,MAAM;AACX,SAAK,QAAQ,QAAQ,QAAQ,GAAG;AAAA,EACpC;AAAA,EAEA,OAAc,SAAS,OAAwC;AAC3D,UAAM,WAAW,MAAM,KAAK,KAAK,KAAK;AAEtC,WAAO,iBAAiB,WAAW,QAAQ;AAE3C,WAAO,MAAY,OAAO,oBAAoB,WAAW,QAAQ;AAAA,EACrE;AAAA,EAEO,MAAmB;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,IAAI,OAAqB;AAC5B,SAAK,QAAQ,QAAQ,KAAK,KAAK,KAAK;AAEpC,QAAI,KAAK,UAAU,OAAO;AACtB,WAAK,QAAQ;AACb,WAAK,aAAa,KAAK;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEO,QAAc;AACjB,SAAK,QAAQ,WAAW,KAAK,GAAG;AAEhC,QAAI,KAAK,UAAU,MAAM;AACrB,WAAK,QAAQ;AACb,WAAK,aAAa,IAAI;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEO,YAAY,UAA+B;AAC9C,QAAI,CAAC,KAAK,UAAU,SAAS,QAAQ,GAAG;AACpC,WAAK,UAAU,KAAK,QAAQ;AAAA,IAChC;AAAA,EACJ;AAAA,EAEO,eAAe,UAA+B;AACjD,UAAM,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AAE7C,QAAI,QAAQ,IAAI;AACZ,WAAK,UAAU,OAAO,OAAO,CAAC;AAAA,IAClC;AAAA,EACJ;AAAA,EAEQ,aAAa,OAA0B;AAC3C,SAAK,UAAU,QAAQ,cAAY,SAAS,KAAK,CAAC;AAAA,EACtD;AAAA,EAEQ,KAAK,OAA2B;AACpC,QAAI,MAAM,gBAAgB,KAAK,WAAY,MAAM,QAAQ,QAAQ,MAAM,QAAQ,KAAK,KAAM;AAEtF;AAAA,IACJ;AAQA,UAAM,QAAQ,KAAK,QAAQ,QAAQ,KAAK,GAAG;AAE3C,QAAI,KAAK,UAAU,OAAO;AACtB,WAAK,QAAQ;AACb,WAAK,aAAa,KAAK;AAAA,IAC3B;AAAA,EACJ;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/channel/channel.ts"],"sourcesContent":["import {formatMessage} from '../error';\n\nexport class MessageDeliveryError extends Error {\n public readonly retryable: boolean;\n\n public constructor(message: string, retryable: boolean) {\n super(message);\n\n this.retryable = retryable;\n\n Object.setPrototypeOf(this, MessageDeliveryError.prototype);\n }\n\n public static retryable(cause: unknown): MessageDeliveryError {\n return MessageDeliveryError.fromCause(cause, true);\n }\n\n public static nonRetryable(cause: unknown): MessageDeliveryError {\n return MessageDeliveryError.fromCause(cause, false);\n }\n\n private static fromCause(cause: unknown, retryable: boolean): MessageDeliveryError {\n const error = new MessageDeliveryError(formatMessage(cause), retryable);\n\n if (cause instanceof Error) {\n error.stack = cause.stack;\n }\n\n return error;\n }\n}\n\nexport interface Closeable {\n close(): Promise<void>;\n}\n\nexport interface OutputChannel<O> extends Closeable {\n publish(message: O): Promise<void>;\n}\n\nexport type ChannelListener<T> = {\n (message: T): void,\n};\n\nexport interface InputChannel<I> extends Closeable {\n subscribe(listener: ChannelListener<I>): void;\n\n unsubscribe(listener: ChannelListener<I>): void;\n}\n\nexport interface DuplexChannel<I, O> extends InputChannel<I>, OutputChannel<O> {\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAErB,MAAM,6BAA6B,MAAM;AAAA,EAGrC,YAAY,SAAiB,WAAoB;AACpD,UAAM,OAAO;AAEb,SAAK,YAAY;AAEjB,WAAO,eAAe,MAAM,qBAAqB,SAAS;AAAA,EAC9D;AAAA,EAEA,OAAc,UAAU,OAAsC;AAC1D,WAAO,qBAAqB,UAAU,OAAO,IAAI;AAAA,EACrD;AAAA,EAEA,OAAc,aAAa,OAAsC;AAC7D,WAAO,qBAAqB,UAAU,OAAO,KAAK;AAAA,EACtD;AAAA,EAEA,OAAe,UAAU,OAAgB,WAA0C;AAC/E,UAAM,QAAQ,IAAI,yBAAqB,4BAAc,KAAK,GAAG,SAAS;AAEtE,QAAI,iBAAiB,OAAO;AACxB,YAAM,QAAQ,MAAM;AAAA,IACxB;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
|
package/channel/channel.d.ts
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
declare class MessageDeliveryError extends Error {
|
|
2
2
|
readonly retryable: boolean;
|
|
3
3
|
constructor(message: string, retryable: boolean);
|
|
4
4
|
static retryable(cause: unknown): MessageDeliveryError;
|
|
5
5
|
static nonRetryable(cause: unknown): MessageDeliveryError;
|
|
6
6
|
private static fromCause;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
interface Closeable {
|
|
9
9
|
close(): Promise<void>;
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
interface OutputChannel<O> extends Closeable {
|
|
12
12
|
publish(message: O): Promise<void>;
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
type ChannelListener<T> = {
|
|
15
15
|
(message: T): void;
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
interface InputChannel<I> extends Closeable {
|
|
18
18
|
subscribe(listener: ChannelListener<I>): void;
|
|
19
19
|
unsubscribe(listener: ChannelListener<I>): void;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
interface DuplexChannel<I, O> extends InputChannel<I>, OutputChannel<O> {
|
|
22
22
|
}
|
|
23
|
+
|
|
24
|
+
export { type ChannelListener, type Closeable, type DuplexChannel, type InputChannel, MessageDeliveryError, type OutputChannel };
|
package/channel/channel.js
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MessageDeliveryError = void 0;
|
|
4
|
-
const error_1 = require("../error");
|
|
1
|
+
import { formatMessage } from "../error";
|
|
5
2
|
class MessageDeliveryError extends Error {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
return error;
|
|
3
|
+
constructor(message, retryable) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.retryable = retryable;
|
|
6
|
+
Object.setPrototypeOf(this, MessageDeliveryError.prototype);
|
|
7
|
+
}
|
|
8
|
+
static retryable(cause) {
|
|
9
|
+
return MessageDeliveryError.fromCause(cause, true);
|
|
10
|
+
}
|
|
11
|
+
static nonRetryable(cause) {
|
|
12
|
+
return MessageDeliveryError.fromCause(cause, false);
|
|
13
|
+
}
|
|
14
|
+
static fromCause(cause, retryable) {
|
|
15
|
+
const error = new MessageDeliveryError(formatMessage(cause), retryable);
|
|
16
|
+
if (cause instanceof Error) {
|
|
17
|
+
error.stack = cause.stack;
|
|
23
18
|
}
|
|
19
|
+
return error;
|
|
20
|
+
}
|
|
24
21
|
}
|
|
25
|
-
|
|
22
|
+
export {
|
|
23
|
+
MessageDeliveryError
|
|
24
|
+
};
|
|
26
25
|
//# sourceMappingURL=channel.js.map
|
package/channel/channel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/channel/channel.ts"],"sourcesContent":["import {formatMessage} from '../error';\n\nexport class MessageDeliveryError extends Error {\n public readonly retryable: boolean;\n\n public constructor(message: string, retryable: boolean) {\n super(message);\n\n this.retryable = retryable;\n\n Object.setPrototypeOf(this, MessageDeliveryError.prototype);\n }\n\n public static retryable(cause: unknown): MessageDeliveryError {\n return MessageDeliveryError.fromCause(cause, true);\n }\n\n public static nonRetryable(cause: unknown): MessageDeliveryError {\n return MessageDeliveryError.fromCause(cause, false);\n }\n\n private static fromCause(cause: unknown, retryable: boolean): MessageDeliveryError {\n const error = new MessageDeliveryError(formatMessage(cause), retryable);\n\n if (cause instanceof Error) {\n error.stack = cause.stack;\n }\n\n return error;\n }\n}\n\nexport interface Closeable {\n close(): Promise<void>;\n}\n\nexport interface OutputChannel<O> extends Closeable {\n publish(message: O): Promise<void>;\n}\n\nexport type ChannelListener<T> = {\n (message: T): void,\n};\n\nexport interface InputChannel<I> extends Closeable {\n subscribe(listener: ChannelListener<I>): void;\n\n unsubscribe(listener: ChannelListener<I>): void;\n}\n\nexport interface DuplexChannel<I, O> extends InputChannel<I>, OutputChannel<O> {\n}\n"],"mappings":"AAAA,SAAQ,qBAAoB;AAErB,MAAM,6BAA6B,MAAM;AAAA,EAGrC,YAAY,SAAiB,WAAoB;AACpD,UAAM,OAAO;AAEb,SAAK,YAAY;AAEjB,WAAO,eAAe,MAAM,qBAAqB,SAAS;AAAA,EAC9D;AAAA,EAEA,OAAc,UAAU,OAAsC;AAC1D,WAAO,qBAAqB,UAAU,OAAO,IAAI;AAAA,EACrD;AAAA,EAEA,OAAc,aAAa,OAAsC;AAC7D,WAAO,qBAAqB,UAAU,OAAO,KAAK;AAAA,EACtD;AAAA,EAEA,OAAe,UAAU,OAAgB,WAA0C;AAC/E,UAAM,QAAQ,IAAI,qBAAqB,cAAc,KAAK,GAAG,SAAS;AAEtE,QAAI,iBAAiB,OAAO;AACxB,YAAM,QAAQ,MAAM;AAAA,IACxB;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/channel/encodedChannel.ts"],"sourcesContent":["import {OutputChannel} from './channel';\nimport {Transformer} from '../transformer';\n\nexport class EncodedChannel<D, E> implements OutputChannel<D> {\n private readonly encode: Transformer<D, E>;\n\n private readonly channel: OutputChannel<E>;\n\n public constructor(channel: OutputChannel<E>, encoder: Transformer<D, E>) {\n this.channel = channel;\n this.encode = encoder;\n }\n\n public publish(message: D): Promise<void> {\n return this.encode(message).then((result => this.channel.publish(result)));\n }\n\n public close(): Promise<void> {\n return this.channel.close();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,eAAiD;AAAA,EAKnD,YAAY,SAA2B,SAA4B;AACtE,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAClB;AAAA,EAEO,QAAQ,SAA2B;AACtC,WAAO,KAAK,OAAO,OAAO,EAAE,KAAM,YAAU,KAAK,QAAQ,QAAQ,MAAM,CAAE;AAAA,EAC7E;AAAA,EAEO,QAAuB;AAC1B,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AACJ;","names":[]}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { OutputChannel } from './channel';
|
|
2
|
-
import { Transformer } from '../transformer';
|
|
3
|
-
|
|
1
|
+
import { OutputChannel } from './channel.js';
|
|
2
|
+
import { Transformer } from '../transformer.js';
|
|
3
|
+
|
|
4
|
+
declare class EncodedChannel<D, E> implements OutputChannel<D> {
|
|
4
5
|
private readonly encode;
|
|
5
6
|
private readonly channel;
|
|
6
7
|
constructor(channel: OutputChannel<E>, encoder: Transformer<D, E>);
|
|
7
8
|
publish(message: D): Promise<void>;
|
|
8
9
|
close(): Promise<void>;
|
|
9
10
|
}
|
|
11
|
+
|
|
12
|
+
export { EncodedChannel };
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EncodedChannel = void 0;
|
|
4
1
|
class EncodedChannel {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
constructor(channel, encoder) {
|
|
3
|
+
this.channel = channel;
|
|
4
|
+
this.encode = encoder;
|
|
5
|
+
}
|
|
6
|
+
publish(message) {
|
|
7
|
+
return this.encode(message).then((result) => this.channel.publish(result));
|
|
8
|
+
}
|
|
9
|
+
close() {
|
|
10
|
+
return this.channel.close();
|
|
11
|
+
}
|
|
15
12
|
}
|
|
16
|
-
|
|
13
|
+
export {
|
|
14
|
+
EncodedChannel
|
|
15
|
+
};
|
|
17
16
|
//# sourceMappingURL=encodedChannel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/channel/encodedChannel.ts"],"sourcesContent":["import {OutputChannel} from './channel';\nimport {Transformer} from '../transformer';\n\nexport class EncodedChannel<D, E> implements OutputChannel<D> {\n private readonly encode: Transformer<D, E>;\n\n private readonly channel: OutputChannel<E>;\n\n public constructor(channel: OutputChannel<E>, encoder: Transformer<D, E>) {\n this.channel = channel;\n this.encode = encoder;\n }\n\n public publish(message: D): Promise<void> {\n return this.encode(message).then((result => this.channel.publish(result)));\n }\n\n public close(): Promise<void> {\n return this.channel.close();\n }\n}\n"],"mappings":"AAGO,MAAM,eAAiD;AAAA,EAKnD,YAAY,SAA2B,SAA4B;AACtE,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAClB;AAAA,EAEO,QAAQ,SAA2B;AACtC,WAAO,KAAK,OAAO,OAAO,EAAE,KAAM,YAAU,KAAK,QAAQ,QAAQ,MAAM,CAAE;AAAA,EAC7E;AAAA,EAEO,QAAuB;AAC1B,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/channel/guaranteedChannel.ts"],"sourcesContent":["import {Logger, NullLogger} from '../logging';\nimport {DuplexChannel, MessageDeliveryError, OutputChannel} from './channel';\n\nexport type MessageStamper<M, S> = {\n generate(message: M): S,\n};\n\nexport class TimeStamper implements MessageStamper<any, string> {\n public generate(): string {\n return String(Date.now());\n }\n}\n\nexport type Envelope<M, S> = {\n id: S,\n message: M,\n};\n\ntype Options = {\n ackTimeout: number,\n};\n\ntype Configuration<M, S> = Partial<Options> & {\n channel: DuplexChannel<S, Envelope<M, S>>,\n stamper: MessageStamper<M, S>,\n logger?: Logger,\n};\n\nexport class GuaranteedChannel<M, S> implements OutputChannel<M> {\n private readonly channel: DuplexChannel<S, Envelope<M, S>>;\n\n private readonly stamper: MessageStamper<M, S>;\n\n private readonly logger: Logger;\n\n private readonly options: Options;\n\n private closed = false;\n\n public constructor({channel, logger, stamper, ...options}: Configuration<M, S>) {\n this.channel = channel;\n this.logger = logger ?? new NullLogger();\n this.stamper = stamper;\n this.options = {\n ...options,\n ackTimeout: options.ackTimeout ?? 5000,\n };\n }\n\n public publish(message: M): Promise<void> {\n if (this.closed) {\n return Promise.reject(MessageDeliveryError.nonRetryable('Channel is closed.'));\n }\n\n return new Promise((resolve, reject): void => {\n const id = this.stamper.generate(message);\n\n let timeoutTimer: number;\n let closeWatcher: number;\n let confirmed = false;\n const start = Date.now();\n\n const acknowledge = (response: any): void => {\n if (response === id) {\n confirmed = true;\n\n const elapsed = Date.now() - start;\n\n window.clearTimeout(timeoutTimer);\n window.clearInterval(closeWatcher);\n\n this.logger.debug(`Delivery confirmed #${id}, elapsed ${elapsed}ms.`);\n\n this.channel.unsubscribe(acknowledge);\n\n resolve();\n }\n };\n\n this.channel.subscribe(acknowledge);\n\n const abort = (error: any): void => {\n window.clearTimeout(timeoutTimer);\n window.clearInterval(closeWatcher);\n\n this.logger.error(`Failed to send message #${id}`);\n\n this.channel.unsubscribe(acknowledge);\n\n reject(error);\n };\n\n const wait = (): void => {\n if (confirmed) {\n return;\n }\n\n closeWatcher = window.setInterval(\n () => {\n if (this.closed) {\n // Cancel delay immediately when the channel is closed\n abort(MessageDeliveryError.retryable('Connection deliberately closed.'));\n }\n },\n 0,\n );\n\n this.logger.debug(`Waiting confirmation #${id}...`);\n\n timeoutTimer = window.setTimeout(\n () => {\n abort(MessageDeliveryError.retryable('Maximum confirmation time reached.'));\n },\n this.options.ackTimeout,\n );\n };\n\n this.logger.debug(`Sending message #${id}...`);\n\n this.channel\n .publish({id: id, message: message})\n .then(wait, abort);\n });\n }\n\n public close(): Promise<void> {\n this.closed = true;\n\n return this.channel.close();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAiC;AACjC,qBAAiE;AAM1D,MAAM,YAAmD;AAAA,EACrD,WAAmB;AACtB,WAAO,OAAO,KAAK,IAAI,CAAC;AAAA,EAC5B;AACJ;AAiBO,MAAM,kBAAoD;AAAA,EAWtD,YAAY,EAAC,SAAS,QAAQ,SAAS,GAAG,QAAO,GAAwB;AAFhF,SAAQ,SAAS;AAGb,SAAK,UAAU;AACf,SAAK,SAAS,UAAU,IAAI,0BAAW;AACvC,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,MACX,GAAG;AAAA,MACH,YAAY,QAAQ,cAAc;AAAA,IACtC;AAAA,EACJ;AAAA,EAEO,QAAQ,SAA2B;AACtC,QAAI,KAAK,QAAQ;AACb,aAAO,QAAQ,OAAO,oCAAqB,aAAa,oBAAoB,CAAC;AAAA,IACjF;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAiB;AAC1C,YAAM,KAAK,KAAK,QAAQ,SAAS,OAAO;AAExC,UAAI;AACJ,UAAI;AACJ,UAAI,YAAY;AAChB,YAAM,QAAQ,KAAK,IAAI;AAEvB,YAAM,cAAc,CAAC,aAAwB;AACzC,YAAI,aAAa,IAAI;AACjB,sBAAY;AAEZ,gBAAM,UAAU,KAAK,IAAI,IAAI;AAE7B,iBAAO,aAAa,YAAY;AAChC,iBAAO,cAAc,YAAY;AAEjC,eAAK,OAAO,MAAM,uBAAuB,EAAE,aAAa,OAAO,KAAK;AAEpE,eAAK,QAAQ,YAAY,WAAW;AAEpC,kBAAQ;AAAA,QACZ;AAAA,MACJ;AAEA,WAAK,QAAQ,UAAU,WAAW;AAElC,YAAM,QAAQ,CAAC,UAAqB;AAChC,eAAO,aAAa,YAAY;AAChC,eAAO,cAAc,YAAY;AAEjC,aAAK,OAAO,MAAM,2BAA2B,EAAE,EAAE;AAEjD,aAAK,QAAQ,YAAY,WAAW;AAEpC,eAAO,KAAK;AAAA,MAChB;AAEA,YAAM,OAAO,MAAY;AACrB,YAAI,WAAW;AACX;AAAA,QACJ;AAEA,uBAAe,OAAO;AAAA,UAClB,MAAM;AACF,gBAAI,KAAK,QAAQ;AAEb,oBAAM,oCAAqB,UAAU,iCAAiC,CAAC;AAAA,YAC3E;AAAA,UACJ;AAAA,UACA;AAAA,QACJ;AAEA,aAAK,OAAO,MAAM,yBAAyB,EAAE,KAAK;AAElD,uBAAe,OAAO;AAAA,UAClB,MAAM;AACF,kBAAM,oCAAqB,UAAU,oCAAoC,CAAC;AAAA,UAC9E;AAAA,UACA,KAAK,QAAQ;AAAA,QACjB;AAAA,MACJ;AAEA,WAAK,OAAO,MAAM,oBAAoB,EAAE,KAAK;AAE7C,WAAK,QACA,QAAQ,EAAC,IAAQ,QAAgB,CAAC,EAClC,KAAK,MAAM,KAAK;AAAA,IACzB,CAAC;AAAA,EACL;AAAA,EAEO,QAAuB;AAC1B,SAAK,SAAS;AAEd,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AACJ;","names":[]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { Logger } from '../logging';
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { Logger } from '../logging/logger.js';
|
|
2
|
+
import { OutputChannel, DuplexChannel } from './channel.js';
|
|
3
|
+
|
|
4
|
+
type MessageStamper<M, S> = {
|
|
4
5
|
generate(message: M): S;
|
|
5
6
|
};
|
|
6
|
-
|
|
7
|
+
declare class TimeStamper implements MessageStamper<any, string> {
|
|
7
8
|
generate(): string;
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
+
type Envelope<M, S> = {
|
|
10
11
|
id: S;
|
|
11
12
|
message: M;
|
|
12
13
|
};
|
|
@@ -18,7 +19,7 @@ type Configuration<M, S> = Partial<Options> & {
|
|
|
18
19
|
stamper: MessageStamper<M, S>;
|
|
19
20
|
logger?: Logger;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
+
declare class GuaranteedChannel<M, S> implements OutputChannel<M> {
|
|
22
23
|
private readonly channel;
|
|
23
24
|
private readonly stamper;
|
|
24
25
|
private readonly logger;
|
|
@@ -28,4 +29,5 @@ export declare class GuaranteedChannel<M, S> implements OutputChannel<M> {
|
|
|
28
29
|
publish(message: M): Promise<void>;
|
|
29
30
|
close(): Promise<void>;
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
|
|
33
|
+
export { type Envelope, GuaranteedChannel, type MessageStamper, TimeStamper };
|
|
@@ -1,80 +1,81 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.GuaranteedChannel = exports.TimeStamper = void 0;
|
|
4
|
-
const logging_1 = require("../logging");
|
|
5
|
-
const channel_1 = require("./channel");
|
|
1
|
+
import { NullLogger } from "../logging";
|
|
2
|
+
import { MessageDeliveryError } from "./channel";
|
|
6
3
|
class TimeStamper {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
generate() {
|
|
5
|
+
return String(Date.now());
|
|
6
|
+
}
|
|
10
7
|
}
|
|
11
|
-
exports.TimeStamper = TimeStamper;
|
|
12
8
|
class GuaranteedChannel {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
9
|
+
constructor({ channel, logger, stamper, ...options }) {
|
|
10
|
+
this.closed = false;
|
|
11
|
+
this.channel = channel;
|
|
12
|
+
this.logger = logger ?? new NullLogger();
|
|
13
|
+
this.stamper = stamper;
|
|
14
|
+
this.options = {
|
|
15
|
+
...options,
|
|
16
|
+
ackTimeout: options.ackTimeout ?? 5e3
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
publish(message) {
|
|
20
|
+
if (this.closed) {
|
|
21
|
+
return Promise.reject(MessageDeliveryError.nonRetryable("Channel is closed."));
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const id = this.stamper.generate(message);
|
|
25
|
+
let timeoutTimer;
|
|
26
|
+
let closeWatcher;
|
|
27
|
+
let confirmed = false;
|
|
28
|
+
const start = Date.now();
|
|
29
|
+
const acknowledge = (response) => {
|
|
30
|
+
if (response === id) {
|
|
31
|
+
confirmed = true;
|
|
32
|
+
const elapsed = Date.now() - start;
|
|
33
|
+
window.clearTimeout(timeoutTimer);
|
|
34
|
+
window.clearInterval(closeWatcher);
|
|
35
|
+
this.logger.debug(`Delivery confirmed #${id}, elapsed ${elapsed}ms.`);
|
|
36
|
+
this.channel.unsubscribe(acknowledge);
|
|
37
|
+
resolve();
|
|
27
38
|
}
|
|
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
|
-
abort(channel_1.MessageDeliveryError.retryable('Maximum confirmation time reached.'));
|
|
66
|
-
}, this.options.ackTimeout);
|
|
67
|
-
};
|
|
68
|
-
this.logger.debug(`Sending message #${id}...`);
|
|
69
|
-
this.channel
|
|
70
|
-
.publish({ id: id, message: message })
|
|
71
|
-
.then(wait, abort);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
close() {
|
|
75
|
-
this.closed = true;
|
|
76
|
-
return this.channel.close();
|
|
77
|
-
}
|
|
39
|
+
};
|
|
40
|
+
this.channel.subscribe(acknowledge);
|
|
41
|
+
const abort = (error) => {
|
|
42
|
+
window.clearTimeout(timeoutTimer);
|
|
43
|
+
window.clearInterval(closeWatcher);
|
|
44
|
+
this.logger.error(`Failed to send message #${id}`);
|
|
45
|
+
this.channel.unsubscribe(acknowledge);
|
|
46
|
+
reject(error);
|
|
47
|
+
};
|
|
48
|
+
const wait = () => {
|
|
49
|
+
if (confirmed) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
closeWatcher = window.setInterval(
|
|
53
|
+
() => {
|
|
54
|
+
if (this.closed) {
|
|
55
|
+
abort(MessageDeliveryError.retryable("Connection deliberately closed."));
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
0
|
|
59
|
+
);
|
|
60
|
+
this.logger.debug(`Waiting confirmation #${id}...`);
|
|
61
|
+
timeoutTimer = window.setTimeout(
|
|
62
|
+
() => {
|
|
63
|
+
abort(MessageDeliveryError.retryable("Maximum confirmation time reached."));
|
|
64
|
+
},
|
|
65
|
+
this.options.ackTimeout
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
this.logger.debug(`Sending message #${id}...`);
|
|
69
|
+
this.channel.publish({ id, message }).then(wait, abort);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
close() {
|
|
73
|
+
this.closed = true;
|
|
74
|
+
return this.channel.close();
|
|
75
|
+
}
|
|
78
76
|
}
|
|
79
|
-
|
|
77
|
+
export {
|
|
78
|
+
GuaranteedChannel,
|
|
79
|
+
TimeStamper
|
|
80
|
+
};
|
|
80
81
|
//# sourceMappingURL=guaranteedChannel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/channel/guaranteedChannel.ts"],"sourcesContent":["import {Logger, NullLogger} from '../logging';\nimport {DuplexChannel, MessageDeliveryError, OutputChannel} from './channel';\n\nexport type MessageStamper<M, S> = {\n generate(message: M): S,\n};\n\nexport class TimeStamper implements MessageStamper<any, string> {\n public generate(): string {\n return String(Date.now());\n }\n}\n\nexport type Envelope<M, S> = {\n id: S,\n message: M,\n};\n\ntype Options = {\n ackTimeout: number,\n};\n\ntype Configuration<M, S> = Partial<Options> & {\n channel: DuplexChannel<S, Envelope<M, S>>,\n stamper: MessageStamper<M, S>,\n logger?: Logger,\n};\n\nexport class GuaranteedChannel<M, S> implements OutputChannel<M> {\n private readonly channel: DuplexChannel<S, Envelope<M, S>>;\n\n private readonly stamper: MessageStamper<M, S>;\n\n private readonly logger: Logger;\n\n private readonly options: Options;\n\n private closed = false;\n\n public constructor({channel, logger, stamper, ...options}: Configuration<M, S>) {\n this.channel = channel;\n this.logger = logger ?? new NullLogger();\n this.stamper = stamper;\n this.options = {\n ...options,\n ackTimeout: options.ackTimeout ?? 5000,\n };\n }\n\n public publish(message: M): Promise<void> {\n if (this.closed) {\n return Promise.reject(MessageDeliveryError.nonRetryable('Channel is closed.'));\n }\n\n return new Promise((resolve, reject): void => {\n const id = this.stamper.generate(message);\n\n let timeoutTimer: number;\n let closeWatcher: number;\n let confirmed = false;\n const start = Date.now();\n\n const acknowledge = (response: any): void => {\n if (response === id) {\n confirmed = true;\n\n const elapsed = Date.now() - start;\n\n window.clearTimeout(timeoutTimer);\n window.clearInterval(closeWatcher);\n\n this.logger.debug(`Delivery confirmed #${id}, elapsed ${elapsed}ms.`);\n\n this.channel.unsubscribe(acknowledge);\n\n resolve();\n }\n };\n\n this.channel.subscribe(acknowledge);\n\n const abort = (error: any): void => {\n window.clearTimeout(timeoutTimer);\n window.clearInterval(closeWatcher);\n\n this.logger.error(`Failed to send message #${id}`);\n\n this.channel.unsubscribe(acknowledge);\n\n reject(error);\n };\n\n const wait = (): void => {\n if (confirmed) {\n return;\n }\n\n closeWatcher = window.setInterval(\n () => {\n if (this.closed) {\n // Cancel delay immediately when the channel is closed\n abort(MessageDeliveryError.retryable('Connection deliberately closed.'));\n }\n },\n 0,\n );\n\n this.logger.debug(`Waiting confirmation #${id}...`);\n\n timeoutTimer = window.setTimeout(\n () => {\n abort(MessageDeliveryError.retryable('Maximum confirmation time reached.'));\n },\n this.options.ackTimeout,\n );\n };\n\n this.logger.debug(`Sending message #${id}...`);\n\n this.channel\n .publish({id: id, message: message})\n .then(wait, abort);\n });\n }\n\n public close(): Promise<void> {\n this.closed = true;\n\n return this.channel.close();\n }\n}\n"],"mappings":"AAAA,SAAgB,kBAAiB;AACjC,SAAuB,4BAA0C;AAM1D,MAAM,YAAmD;AAAA,EACrD,WAAmB;AACtB,WAAO,OAAO,KAAK,IAAI,CAAC;AAAA,EAC5B;AACJ;AAiBO,MAAM,kBAAoD;AAAA,EAWtD,YAAY,EAAC,SAAS,QAAQ,SAAS,GAAG,QAAO,GAAwB;AAFhF,SAAQ,SAAS;AAGb,SAAK,UAAU;AACf,SAAK,SAAS,UAAU,IAAI,WAAW;AACvC,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,MACX,GAAG;AAAA,MACH,YAAY,QAAQ,cAAc;AAAA,IACtC;AAAA,EACJ;AAAA,EAEO,QAAQ,SAA2B;AACtC,QAAI,KAAK,QAAQ;AACb,aAAO,QAAQ,OAAO,qBAAqB,aAAa,oBAAoB,CAAC;AAAA,IACjF;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAiB;AAC1C,YAAM,KAAK,KAAK,QAAQ,SAAS,OAAO;AAExC,UAAI;AACJ,UAAI;AACJ,UAAI,YAAY;AAChB,YAAM,QAAQ,KAAK,IAAI;AAEvB,YAAM,cAAc,CAAC,aAAwB;AACzC,YAAI,aAAa,IAAI;AACjB,sBAAY;AAEZ,gBAAM,UAAU,KAAK,IAAI,IAAI;AAE7B,iBAAO,aAAa,YAAY;AAChC,iBAAO,cAAc,YAAY;AAEjC,eAAK,OAAO,MAAM,uBAAuB,EAAE,aAAa,OAAO,KAAK;AAEpE,eAAK,QAAQ,YAAY,WAAW;AAEpC,kBAAQ;AAAA,QACZ;AAAA,MACJ;AAEA,WAAK,QAAQ,UAAU,WAAW;AAElC,YAAM,QAAQ,CAAC,UAAqB;AAChC,eAAO,aAAa,YAAY;AAChC,eAAO,cAAc,YAAY;AAEjC,aAAK,OAAO,MAAM,2BAA2B,EAAE,EAAE;AAEjD,aAAK,QAAQ,YAAY,WAAW;AAEpC,eAAO,KAAK;AAAA,MAChB;AAEA,YAAM,OAAO,MAAY;AACrB,YAAI,WAAW;AACX;AAAA,QACJ;AAEA,uBAAe,OAAO;AAAA,UAClB,MAAM;AACF,gBAAI,KAAK,QAAQ;AAEb,oBAAM,qBAAqB,UAAU,iCAAiC,CAAC;AAAA,YAC3E;AAAA,UACJ;AAAA,UACA;AAAA,QACJ;AAEA,aAAK,OAAO,MAAM,yBAAyB,EAAE,KAAK;AAElD,uBAAe,OAAO;AAAA,UAClB,MAAM;AACF,kBAAM,qBAAqB,UAAU,oCAAoC,CAAC;AAAA,UAC9E;AAAA,UACA,KAAK,QAAQ;AAAA,QACjB;AAAA,MACJ;AAEA,WAAK,OAAO,MAAM,oBAAoB,EAAE,KAAK;AAE7C,WAAK,QACA,QAAQ,EAAC,IAAQ,QAAgB,CAAC,EAClC,KAAK,MAAM,KAAK;AAAA,IACzB,CAAC;AAAA,EACL;AAAA,EAEO,QAAuB;AAC1B,SAAK,SAAS;AAEd,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/channel/httpBeaconChannel.ts"],"sourcesContent":["import {ChannelListener, DuplexChannel, MessageDeliveryError} from './channel';\nimport {Envelope} from './guaranteedChannel';\nimport {Logger, NullLogger} from '../logging';\nimport {CidAssigner} from '../cid';\nimport {formatMessage} from '../error';\nimport {CLIENT_LIBRARY} from '../constants';\nimport {Help} from '../help';\n\nexport type Configuration = {\n appId: string,\n endpointUrl: string,\n cidAssigner: CidAssigner,\n logger?: Logger,\n};\n\ntype ApiProblem = {\n type: string,\n title: string,\n status: number,\n detail: string,\n};\n\nexport class HttpBeaconChannel implements DuplexChannel<string, Envelope<string, string>> {\n private readonly configuration: Omit<Configuration, 'logger'>;\n\n private readonly logger: Logger;\n\n private readonly listeners: Array<ChannelListener<string>> = [];\n\n private closed = false;\n\n public constructor({logger = new NullLogger(), ...configuration}: Configuration) {\n this.configuration = configuration;\n this.logger = logger;\n }\n\n public async publish({id: receiptId, message}: Envelope<string, string>): Promise<void> {\n if (this.closed) {\n return Promise.reject(MessageDeliveryError.nonRetryable('Channel is closed'));\n }\n\n const {token, timestamp, context, payload} = JSON.parse(message);\n const {endpointUrl, appId, cidAssigner} = this.configuration;\n\n return fetch(endpointUrl, {\n method: 'POST',\n headers: {\n 'X-App-Id': appId,\n 'X-Client-Id': await cidAssigner.assignCid(),\n 'X-Client-Library': CLIENT_LIBRARY,\n 'Content-Type': 'application/json',\n ...(token !== undefined ? {'X-Token': token} : {}),\n },\n body: JSON.stringify({\n context: context,\n payload: payload,\n originalTime: timestamp,\n departureTime: Date.now(),\n }),\n }).then(async response => {\n if (response.ok) {\n this.notify(receiptId);\n\n return;\n }\n\n const problem: ApiProblem = await response.json().catch(\n () => ({\n type: 'https://croct.help/api/event-tracker#unexpected-error',\n title: response.statusText,\n status: response.status,\n }),\n );\n\n const isRetryable = HttpBeaconChannel.isRetryable(problem.status);\n const help = Help.forStatusCode(problem.status);\n\n if (help !== undefined) {\n this.logger.error(help);\n } else if (!isRetryable) {\n this.logger.error(`Beacon rejected with non-retryable status: ${problem.title}`);\n }\n\n return Promise.reject(\n isRetryable\n ? MessageDeliveryError.retryable(problem.title)\n : MessageDeliveryError.nonRetryable(problem.title),\n );\n }).catch(error => {\n this.logger.error(`Failed to publish beacon: ${formatMessage(error)}`);\n\n return Promise.reject(\n error instanceof MessageDeliveryError\n ? error\n : MessageDeliveryError.retryable(error),\n );\n });\n }\n\n public subscribe(listener: ChannelListener<string>): void {\n if (!this.listeners.includes(listener)) {\n this.listeners.push(listener);\n }\n }\n\n public unsubscribe(listener: ChannelListener<string>): void {\n const index = this.listeners.indexOf(listener);\n\n if (index >= 0) {\n this.listeners.splice(index, 1);\n }\n }\n\n private notify(receiptId: string): void {\n this.listeners.forEach(dispatch => dispatch(receiptId));\n }\n\n public close(): Promise<void> {\n this.closed = true;\n\n return Promise.resolve();\n }\n\n private static isRetryable(status: number): boolean {\n // Retry on any server error and client errors 429 (rate limit) and 408 (request timeout)\n return status >= 500 || status === 429 || status === 408;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmE;AAEnE,qBAAiC;AAEjC,mBAA4B;AAC5B,uBAA6B;AAC7B,kBAAmB;AAgBZ,MAAM,kBAA6E;AAAA,EAS/E,YAAY,EAAC,SAAS,IAAI,0BAAW,GAAG,GAAG,cAAa,GAAkB;AAJjF,SAAiB,YAA4C,CAAC;AAE9D,SAAQ,SAAS;AAGb,SAAK,gBAAgB;AACrB,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,MAAa,QAAQ,EAAC,IAAI,WAAW,QAAO,GAA4C;AACpF,QAAI,KAAK,QAAQ;AACb,aAAO,QAAQ,OAAO,oCAAqB,aAAa,mBAAmB,CAAC;AAAA,IAChF;AAEA,UAAM,EAAC,OAAO,WAAW,SAAS,QAAO,IAAI,KAAK,MAAM,OAAO;AAC/D,UAAM,EAAC,aAAa,OAAO,YAAW,IAAI,KAAK;AAE/C,WAAO,MAAM,aAAa;AAAA,MACtB,QAAQ;AAAA,MACR,SAAS;AAAA,QACL,YAAY;AAAA,QACZ,eAAe,MAAM,YAAY,UAAU;AAAA,QAC3C,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAChB,GAAI,UAAU,SAAY,EAAC,WAAW,MAAK,IAAI,CAAC;AAAA,MACpD;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACjB;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,eAAe,KAAK,IAAI;AAAA,MAC5B,CAAC;AAAA,IACL,CAAC,EAAE,KAAK,OAAM,aAAY;AACtB,UAAI,SAAS,IAAI;AACb,aAAK,OAAO,SAAS;AAErB;AAAA,MACJ;AAEA,YAAM,UAAsB,MAAM,SAAS,KAAK,EAAE;AAAA,QAC9C,OAAO;AAAA,UACH,MAAM;AAAA,UACN,OAAO,SAAS;AAAA,UAChB,QAAQ,SAAS;AAAA,QACrB;AAAA,MACJ;AAEA,YAAM,cAAc,kBAAkB,YAAY,QAAQ,MAAM;AAChE,YAAM,OAAO,iBAAK,cAAc,QAAQ,MAAM;AAE9C,UAAI,SAAS,QAAW;AACpB,aAAK,OAAO,MAAM,IAAI;AAAA,MAC1B,WAAW,CAAC,aAAa;AACrB,aAAK,OAAO,MAAM,8CAA8C,QAAQ,KAAK,EAAE;AAAA,MACnF;AAEA,aAAO,QAAQ;AAAA,QACX,cACM,oCAAqB,UAAU,QAAQ,KAAK,IAC5C,oCAAqB,aAAa,QAAQ,KAAK;AAAA,MACzD;AAAA,IACJ,CAAC,EAAE,MAAM,WAAS;AACd,WAAK,OAAO,MAAM,iCAA6B,4BAAc,KAAK,CAAC,EAAE;AAErE,aAAO,QAAQ;AAAA,QACX,iBAAiB,sCACX,QACA,oCAAqB,UAAU,KAAK;AAAA,MAC9C;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEO,UAAU,UAAyC;AACtD,QAAI,CAAC,KAAK,UAAU,SAAS,QAAQ,GAAG;AACpC,WAAK,UAAU,KAAK,QAAQ;AAAA,IAChC;AAAA,EACJ;AAAA,EAEO,YAAY,UAAyC;AACxD,UAAM,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AAE7C,QAAI,SAAS,GAAG;AACZ,WAAK,UAAU,OAAO,OAAO,CAAC;AAAA,IAClC;AAAA,EACJ;AAAA,EAEQ,OAAO,WAAyB;AACpC,SAAK,UAAU,QAAQ,cAAY,SAAS,SAAS,CAAC;AAAA,EAC1D;AAAA,EAEO,QAAuB;AAC1B,SAAK,SAAS;AAEd,WAAO,QAAQ,QAAQ;AAAA,EAC3B;AAAA,EAEA,OAAe,YAAY,QAAyB;AAEhD,WAAO,UAAU,OAAO,WAAW,OAAO,WAAW;AAAA,EACzD;AACJ;","names":[]}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Envelope } from './guaranteedChannel';
|
|
3
|
-
import { Logger } from '../logging';
|
|
4
|
-
import { CidAssigner } from '../cid';
|
|
5
|
-
|
|
1
|
+
import { DuplexChannel, ChannelListener } from './channel.js';
|
|
2
|
+
import { Envelope } from './guaranteedChannel.js';
|
|
3
|
+
import { Logger } from '../logging/logger.js';
|
|
4
|
+
import { CidAssigner } from '../cid/assigner.js';
|
|
5
|
+
|
|
6
|
+
type Configuration = {
|
|
6
7
|
appId: string;
|
|
7
8
|
endpointUrl: string;
|
|
8
9
|
cidAssigner: CidAssigner;
|
|
9
10
|
logger?: Logger;
|
|
10
11
|
};
|
|
11
|
-
|
|
12
|
+
declare class HttpBeaconChannel implements DuplexChannel<string, Envelope<string, string>> {
|
|
12
13
|
private readonly configuration;
|
|
13
14
|
private readonly logger;
|
|
14
15
|
private readonly listeners;
|
|
@@ -21,3 +22,5 @@ export declare class HttpBeaconChannel implements DuplexChannel<string, Envelope
|
|
|
21
22
|
close(): Promise<void>;
|
|
22
23
|
private static isRetryable;
|
|
23
24
|
}
|
|
25
|
+
|
|
26
|
+
export { type Configuration, HttpBeaconChannel };
|