@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/channel/retryChannel.js
CHANGED
|
@@ -1,63 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.RetryChannel = void 0;
|
|
4
|
-
const channel_1 = require("./channel");
|
|
5
|
-
const logging_1 = require("../logging");
|
|
1
|
+
import { MessageDeliveryError } from "./channel";
|
|
2
|
+
import { NullLogger } from "../logging";
|
|
6
3
|
class RetryChannel {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
constructor({ channel, retryPolicy, logger }) {
|
|
5
|
+
this.closed = false;
|
|
6
|
+
this.channel = channel;
|
|
7
|
+
this.retryPolicy = retryPolicy;
|
|
8
|
+
this.logger = logger ?? new NullLogger();
|
|
9
|
+
}
|
|
10
|
+
publish(message) {
|
|
11
|
+
if (this.closed) {
|
|
12
|
+
return Promise.reject(MessageDeliveryError.nonRetryable("The channel is closed."));
|
|
12
13
|
}
|
|
13
|
-
publish(message)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
.publish(message)
|
|
19
|
-
.catch(error => this.retry(message, error));
|
|
14
|
+
return this.channel.publish(message).catch((error) => this.retry(message, error));
|
|
15
|
+
}
|
|
16
|
+
async retry(message, error) {
|
|
17
|
+
if (error instanceof MessageDeliveryError && !error.retryable) {
|
|
18
|
+
throw error;
|
|
20
19
|
}
|
|
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
|
-
throw channel_1.MessageDeliveryError.nonRetryable('Maximum retry attempts reached.');
|
|
56
|
-
}
|
|
57
|
-
close() {
|
|
58
|
-
this.closed = true;
|
|
59
|
-
return this.channel.close();
|
|
20
|
+
let attempt = 0;
|
|
21
|
+
while (this.retryPolicy.shouldRetry(attempt, message, error)) {
|
|
22
|
+
if (this.closed) {
|
|
23
|
+
throw MessageDeliveryError.retryable("Connection deliberately closed.");
|
|
24
|
+
}
|
|
25
|
+
const delay = this.retryPolicy.getDelay(attempt);
|
|
26
|
+
this.logger.debug(`Retry attempt ${attempt + 1}`);
|
|
27
|
+
if (delay > 0) {
|
|
28
|
+
this.logger.debug(`Retry attempt delayed in ${delay}ms`);
|
|
29
|
+
await new Promise((resolve, reject) => {
|
|
30
|
+
const closeWatcher = window.setInterval(
|
|
31
|
+
() => {
|
|
32
|
+
if (this.closed) {
|
|
33
|
+
window.clearInterval(closeWatcher);
|
|
34
|
+
reject(MessageDeliveryError.retryable("Connection deliberately closed."));
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
0
|
|
38
|
+
);
|
|
39
|
+
window.setTimeout(
|
|
40
|
+
() => {
|
|
41
|
+
window.clearInterval(closeWatcher);
|
|
42
|
+
resolve();
|
|
43
|
+
},
|
|
44
|
+
delay
|
|
45
|
+
);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
return await this.channel.publish(message);
|
|
50
|
+
} catch {
|
|
51
|
+
attempt += 1;
|
|
52
|
+
}
|
|
60
53
|
}
|
|
54
|
+
throw MessageDeliveryError.nonRetryable("Maximum retry attempts reached.");
|
|
55
|
+
}
|
|
56
|
+
close() {
|
|
57
|
+
this.closed = true;
|
|
58
|
+
return this.channel.close();
|
|
59
|
+
}
|
|
61
60
|
}
|
|
62
|
-
|
|
61
|
+
export {
|
|
62
|
+
RetryChannel
|
|
63
|
+
};
|
|
63
64
|
//# sourceMappingURL=retryChannel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/channel/retryChannel.ts"],"sourcesContent":["import {MessageDeliveryError, OutputChannel} from './channel';\nimport {Logger, NullLogger} from '../logging';\nimport {RetryPolicy} from '../retry';\n\ntype Configuration<T> = {\n channel: OutputChannel<T>,\n retryPolicy: RetryPolicy<T>,\n logger?: Logger,\n};\n\nexport class RetryChannel<T> implements OutputChannel<T> {\n private readonly channel: OutputChannel<T>;\n\n private readonly retryPolicy: RetryPolicy<T>;\n\n private readonly logger: Logger;\n\n private closed = false;\n\n public constructor({channel, retryPolicy, logger}: Configuration<T>) {\n this.channel = channel;\n this.retryPolicy = retryPolicy;\n this.logger = logger ?? new NullLogger();\n }\n\n public publish(message: T): Promise<void> {\n if (this.closed) {\n return Promise.reject(MessageDeliveryError.nonRetryable('The channel is closed.'));\n }\n\n return this.channel\n .publish(message)\n .catch(error => this.retry(message, error));\n }\n\n public async retry(message: T, error: unknown): Promise<void> {\n if (error instanceof MessageDeliveryError && !error.retryable) {\n throw error;\n }\n\n let attempt = 0;\n\n while (this.retryPolicy.shouldRetry(attempt, message, error)) {\n if (this.closed) {\n throw MessageDeliveryError.retryable('Connection deliberately closed.');\n }\n\n const delay = this.retryPolicy.getDelay(attempt);\n\n this.logger.debug(`Retry attempt ${attempt + 1}`);\n\n if (delay > 0) {\n this.logger.debug(`Retry attempt delayed in ${delay}ms`);\n\n await new Promise<void>((resolve, reject): void => {\n const closeWatcher = window.setInterval(\n () => {\n if (this.closed) {\n // Cancel delay immediately when the channel is closed\n window.clearInterval(closeWatcher);\n\n reject(MessageDeliveryError.retryable('Connection deliberately closed.'));\n }\n },\n 0,\n );\n\n window.setTimeout(\n (): void => {\n window.clearInterval(closeWatcher);\n\n resolve();\n },\n delay,\n );\n });\n }\n\n try {\n return await this.channel.publish(message);\n } catch {\n attempt += 1;\n }\n }\n\n throw MessageDeliveryError.nonRetryable('Maximum retry attempts reached.');\n }\n\n public close(): Promise<void> {\n this.closed = true;\n\n return this.channel.close();\n }\n}\n"],"mappings":"AAAA,SAAQ,4BAA0C;AAClD,SAAgB,kBAAiB;AAS1B,MAAM,aAA4C;AAAA,EAS9C,YAAY,EAAC,SAAS,aAAa,OAAM,GAAqB;AAFrE,SAAQ,SAAS;AAGb,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,SAAS,UAAU,IAAI,WAAW;AAAA,EAC3C;AAAA,EAEO,QAAQ,SAA2B;AACtC,QAAI,KAAK,QAAQ;AACb,aAAO,QAAQ,OAAO,qBAAqB,aAAa,wBAAwB,CAAC;AAAA,IACrF;AAEA,WAAO,KAAK,QACP,QAAQ,OAAO,EACf,MAAM,WAAS,KAAK,MAAM,SAAS,KAAK,CAAC;AAAA,EAClD;AAAA,EAEA,MAAa,MAAM,SAAY,OAA+B;AAC1D,QAAI,iBAAiB,wBAAwB,CAAC,MAAM,WAAW;AAC3D,YAAM;AAAA,IACV;AAEA,QAAI,UAAU;AAEd,WAAO,KAAK,YAAY,YAAY,SAAS,SAAS,KAAK,GAAG;AAC1D,UAAI,KAAK,QAAQ;AACb,cAAM,qBAAqB,UAAU,iCAAiC;AAAA,MAC1E;AAEA,YAAM,QAAQ,KAAK,YAAY,SAAS,OAAO;AAE/C,WAAK,OAAO,MAAM,iBAAiB,UAAU,CAAC,EAAE;AAEhD,UAAI,QAAQ,GAAG;AACX,aAAK,OAAO,MAAM,4BAA4B,KAAK,IAAI;AAEvD,cAAM,IAAI,QAAc,CAAC,SAAS,WAAiB;AAC/C,gBAAM,eAAe,OAAO;AAAA,YACxB,MAAM;AACF,kBAAI,KAAK,QAAQ;AAEb,uBAAO,cAAc,YAAY;AAEjC,uBAAO,qBAAqB,UAAU,iCAAiC,CAAC;AAAA,cAC5E;AAAA,YACJ;AAAA,YACA;AAAA,UACJ;AAEA,iBAAO;AAAA,YACH,MAAY;AACR,qBAAO,cAAc,YAAY;AAEjC,sBAAQ;AAAA,YACZ;AAAA,YACA;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL;AAEA,UAAI;AACA,eAAO,MAAM,KAAK,QAAQ,QAAQ,OAAO;AAAA,MAC7C,QAAQ;AACJ,mBAAW;AAAA,MACf;AAAA,IACJ;AAEA,UAAM,qBAAqB,aAAa,iCAAiC;AAAA,EAC7E;AAAA,EAEO,QAAuB;AAC1B,SAAK,SAAS;AAEd,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/channel/sandboxChannel.ts"],"sourcesContent":["import {ChannelListener, DuplexChannel, MessageDeliveryError} from './channel';\n\nexport class SandboxChannel<I, O> implements DuplexChannel<I, O> {\n private readonly listeners: Array<ChannelListener<I>> = [];\n\n public readonly messages: O[] = [];\n\n private closed = false;\n\n public publish(message: O): Promise<void> {\n if (this.closed) {\n return Promise.reject(MessageDeliveryError.nonRetryable('Channel is closed.'));\n }\n\n this.messages.push(message);\n\n return Promise.resolve();\n }\n\n public notify(message: I): void {\n this.listeners.forEach(dispatch => dispatch(message));\n }\n\n public subscribe(listener: ChannelListener<I>): void {\n if (!this.listeners.includes(listener)) {\n this.listeners.push(listener);\n }\n }\n\n public unsubscribe(listener: ChannelListener<I>): void {\n const index = this.listeners.indexOf(listener);\n\n if (index >= 0) {\n this.listeners.splice(index, 1);\n }\n }\n\n public close(): Promise<void> {\n this.closed = true;\n\n return Promise.resolve();\n }\n\n public isClosed(): boolean {\n return this.closed;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmE;AAE5D,MAAM,eAAoD;AAAA,EAA1D;AACH,SAAiB,YAAuC,CAAC;AAEzD,SAAgB,WAAgB,CAAC;AAEjC,SAAQ,SAAS;AAAA;AAAA,EAEV,QAAQ,SAA2B;AACtC,QAAI,KAAK,QAAQ;AACb,aAAO,QAAQ,OAAO,oCAAqB,aAAa,oBAAoB,CAAC;AAAA,IACjF;AAEA,SAAK,SAAS,KAAK,OAAO;AAE1B,WAAO,QAAQ,QAAQ;AAAA,EAC3B;AAAA,EAEO,OAAO,SAAkB;AAC5B,SAAK,UAAU,QAAQ,cAAY,SAAS,OAAO,CAAC;AAAA,EACxD;AAAA,EAEO,UAAU,UAAoC;AACjD,QAAI,CAAC,KAAK,UAAU,SAAS,QAAQ,GAAG;AACpC,WAAK,UAAU,KAAK,QAAQ;AAAA,IAChC;AAAA,EACJ;AAAA,EAEO,YAAY,UAAoC;AACnD,UAAM,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AAE7C,QAAI,SAAS,GAAG;AACZ,WAAK,UAAU,OAAO,OAAO,CAAC;AAAA,IAClC;AAAA,EACJ;AAAA,EAEO,QAAuB;AAC1B,SAAK,SAAS;AAEd,WAAO,QAAQ,QAAQ;AAAA,EAC3B;AAAA,EAEO,WAAoB;AACvB,WAAO,KAAK;AAAA,EAChB;AACJ;","names":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { DuplexChannel, ChannelListener } from './channel.js';
|
|
2
|
+
|
|
3
|
+
declare class SandboxChannel<I, O> implements DuplexChannel<I, O> {
|
|
3
4
|
private readonly listeners;
|
|
4
5
|
readonly messages: O[];
|
|
5
6
|
private closed;
|
|
@@ -10,3 +11,5 @@ export declare class SandboxChannel<I, O> implements DuplexChannel<I, O> {
|
|
|
10
11
|
close(): Promise<void>;
|
|
11
12
|
isClosed(): boolean;
|
|
12
13
|
}
|
|
14
|
+
|
|
15
|
+
export { SandboxChannel };
|
|
@@ -1,41 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SandboxChannel = void 0;
|
|
4
|
-
const channel_1 = require("./channel");
|
|
1
|
+
import { MessageDeliveryError } from "./channel";
|
|
5
2
|
class SandboxChannel {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
constructor() {
|
|
4
|
+
this.listeners = [];
|
|
5
|
+
this.messages = [];
|
|
6
|
+
this.closed = false;
|
|
7
|
+
}
|
|
8
|
+
publish(message) {
|
|
9
|
+
if (this.closed) {
|
|
10
|
+
return Promise.reject(MessageDeliveryError.nonRetryable("Channel is closed."));
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
this.messages.push(message);
|
|
13
|
+
return Promise.resolve();
|
|
14
|
+
}
|
|
15
|
+
notify(message) {
|
|
16
|
+
this.listeners.forEach((dispatch) => dispatch(message));
|
|
17
|
+
}
|
|
18
|
+
subscribe(listener) {
|
|
19
|
+
if (!this.listeners.includes(listener)) {
|
|
20
|
+
this.listeners.push(listener);
|
|
17
21
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
this.listeners.push(listener);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
unsubscribe(listener) {
|
|
27
|
-
const index = this.listeners.indexOf(listener);
|
|
28
|
-
if (index >= 0) {
|
|
29
|
-
this.listeners.splice(index, 1);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
close() {
|
|
33
|
-
this.closed = true;
|
|
34
|
-
return Promise.resolve();
|
|
35
|
-
}
|
|
36
|
-
isClosed() {
|
|
37
|
-
return this.closed;
|
|
22
|
+
}
|
|
23
|
+
unsubscribe(listener) {
|
|
24
|
+
const index = this.listeners.indexOf(listener);
|
|
25
|
+
if (index >= 0) {
|
|
26
|
+
this.listeners.splice(index, 1);
|
|
38
27
|
}
|
|
28
|
+
}
|
|
29
|
+
close() {
|
|
30
|
+
this.closed = true;
|
|
31
|
+
return Promise.resolve();
|
|
32
|
+
}
|
|
33
|
+
isClosed() {
|
|
34
|
+
return this.closed;
|
|
35
|
+
}
|
|
39
36
|
}
|
|
40
|
-
|
|
37
|
+
export {
|
|
38
|
+
SandboxChannel
|
|
39
|
+
};
|
|
41
40
|
//# sourceMappingURL=sandboxChannel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/channel/sandboxChannel.ts"],"sourcesContent":["import {ChannelListener, DuplexChannel, MessageDeliveryError} from './channel';\n\nexport class SandboxChannel<I, O> implements DuplexChannel<I, O> {\n private readonly listeners: Array<ChannelListener<I>> = [];\n\n public readonly messages: O[] = [];\n\n private closed = false;\n\n public publish(message: O): Promise<void> {\n if (this.closed) {\n return Promise.reject(MessageDeliveryError.nonRetryable('Channel is closed.'));\n }\n\n this.messages.push(message);\n\n return Promise.resolve();\n }\n\n public notify(message: I): void {\n this.listeners.forEach(dispatch => dispatch(message));\n }\n\n public subscribe(listener: ChannelListener<I>): void {\n if (!this.listeners.includes(listener)) {\n this.listeners.push(listener);\n }\n }\n\n public unsubscribe(listener: ChannelListener<I>): void {\n const index = this.listeners.indexOf(listener);\n\n if (index >= 0) {\n this.listeners.splice(index, 1);\n }\n }\n\n public close(): Promise<void> {\n this.closed = true;\n\n return Promise.resolve();\n }\n\n public isClosed(): boolean {\n return this.closed;\n }\n}\n"],"mappings":"AAAA,SAAwC,4BAA2B;AAE5D,MAAM,eAAoD;AAAA,EAA1D;AACH,SAAiB,YAAuC,CAAC;AAEzD,SAAgB,WAAgB,CAAC;AAEjC,SAAQ,SAAS;AAAA;AAAA,EAEV,QAAQ,SAA2B;AACtC,QAAI,KAAK,QAAQ;AACb,aAAO,QAAQ,OAAO,qBAAqB,aAAa,oBAAoB,CAAC;AAAA,IACjF;AAEA,SAAK,SAAS,KAAK,OAAO;AAE1B,WAAO,QAAQ,QAAQ;AAAA,EAC3B;AAAA,EAEO,OAAO,SAAkB;AAC5B,SAAK,UAAU,QAAQ,cAAY,SAAS,OAAO,CAAC;AAAA,EACxD;AAAA,EAEO,UAAU,UAAoC;AACjD,QAAI,CAAC,KAAK,UAAU,SAAS,QAAQ,GAAG;AACpC,WAAK,UAAU,KAAK,QAAQ;AAAA,IAChC;AAAA,EACJ;AAAA,EAEO,YAAY,UAAoC;AACnD,UAAM,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AAE7C,QAAI,SAAS,GAAG;AACZ,WAAK,UAAU,OAAO,OAAO,CAAC;AAAA,IAClC;AAAA,EACJ;AAAA,EAEO,QAAuB;AAC1B,SAAK,SAAS;AAEd,WAAO,QAAQ,QAAQ;AAAA,EAC3B;AAAA,EAEO,WAAoB;AACvB,WAAO,KAAK;AAAA,EAChB;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cid/assigner.ts"],"sourcesContent":["export interface CidAssigner {\n assignCid(currentCid?: string): Promise<string>;\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
package/cid/assigner.d.ts
CHANGED
package/cid/assigner.js
CHANGED
package/cid/assigner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cid/cachedAssigner.ts"],"sourcesContent":["import {Logger, NullLogger} from '../logging';\nimport {Cache} from '../cache';\nimport {CidAssigner} from './assigner';\n\ntype CachedAssignerOptions = {\n logger?: Logger,\n mirror?: boolean,\n};\n\nexport class CachedAssigner implements CidAssigner {\n private readonly assigner: CidAssigner;\n\n private readonly cache: Cache;\n\n private readonly options: Required<CachedAssignerOptions>;\n\n public constructor(assigner: CidAssigner, cache: Cache, options: CachedAssignerOptions = {}) {\n this.assigner = assigner;\n this.cache = cache;\n this.options = {\n logger: options.logger ?? new NullLogger(),\n mirror: options.mirror ?? false,\n };\n }\n\n public async assignCid(currentCid?: string): Promise<string> {\n const cachedCid = this.cache.get();\n const previousCid = currentCid ?? cachedCid ?? null;\n const {logger, mirror} = this.options;\n\n if (previousCid === null) {\n const newCid = await this.assigner.assignCid();\n\n this.cache.put(newCid);\n\n logger.debug('New CID stored into cache');\n\n return newCid;\n }\n\n logger.debug('Using existing CID');\n\n if (cachedCid !== previousCid) {\n logger.debug('The cached CID is stale, updating cache...');\n\n this.cache.put(previousCid);\n }\n\n if (mirror) {\n logger.debug('Mirroring CID');\n\n this.assigner\n .assignCid(previousCid)\n .then(newCid => {\n if (newCid !== previousCid) {\n logger.warn('The CID has changed, updating cache...');\n\n this.cache.put(newCid);\n }\n })\n .catch(() => {\n logger.error('Failed to mirror CID');\n });\n }\n\n return previousCid;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAiC;AAS1B,MAAM,eAAsC;AAAA,EAOxC,YAAY,UAAuB,OAAc,UAAiC,CAAC,GAAG;AACzF,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,MACX,QAAQ,QAAQ,UAAU,IAAI,0BAAW;AAAA,MACzC,QAAQ,QAAQ,UAAU;AAAA,IAC9B;AAAA,EACJ;AAAA,EAEA,MAAa,UAAU,YAAsC;AACzD,UAAM,YAAY,KAAK,MAAM,IAAI;AACjC,UAAM,cAAc,cAAc,aAAa;AAC/C,UAAM,EAAC,QAAQ,OAAM,IAAI,KAAK;AAE9B,QAAI,gBAAgB,MAAM;AACtB,YAAM,SAAS,MAAM,KAAK,SAAS,UAAU;AAE7C,WAAK,MAAM,IAAI,MAAM;AAErB,aAAO,MAAM,2BAA2B;AAExC,aAAO;AAAA,IACX;AAEA,WAAO,MAAM,oBAAoB;AAEjC,QAAI,cAAc,aAAa;AAC3B,aAAO,MAAM,4CAA4C;AAEzD,WAAK,MAAM,IAAI,WAAW;AAAA,IAC9B;AAEA,QAAI,QAAQ;AACR,aAAO,MAAM,eAAe;AAE5B,WAAK,SACA,UAAU,WAAW,EACrB,KAAK,YAAU;AACZ,YAAI,WAAW,aAAa;AACxB,iBAAO,KAAK,wCAAwC;AAEpD,eAAK,MAAM,IAAI,MAAM;AAAA,QACzB;AAAA,MACJ,CAAC,EACA,MAAM,MAAM;AACT,eAAO,MAAM,sBAAsB;AAAA,MACvC,CAAC;AAAA,IACT;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
|
package/cid/cachedAssigner.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { Logger } from '../logging';
|
|
2
|
-
import { Cache } from '../cache';
|
|
3
|
-
import { CidAssigner } from './assigner';
|
|
1
|
+
import { Logger } from '../logging/logger.js';
|
|
2
|
+
import { Cache } from '../cache/cache.js';
|
|
3
|
+
import { CidAssigner } from './assigner.js';
|
|
4
|
+
|
|
4
5
|
type CachedAssignerOptions = {
|
|
5
6
|
logger?: Logger;
|
|
6
7
|
mirror?: boolean;
|
|
7
8
|
};
|
|
8
|
-
|
|
9
|
+
declare class CachedAssigner implements CidAssigner {
|
|
9
10
|
private readonly assigner;
|
|
10
11
|
private readonly cache;
|
|
11
12
|
private readonly options;
|
|
12
13
|
constructor(assigner: CidAssigner, cache: Cache, options?: CachedAssignerOptions);
|
|
13
14
|
assignCid(currentCid?: string): Promise<string>;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
|
|
17
|
+
export { CachedAssigner };
|
package/cid/cachedAssigner.js
CHANGED
|
@@ -1,49 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CachedAssigner = void 0;
|
|
4
|
-
const logging_1 = require("../logging");
|
|
1
|
+
import { NullLogger } from "../logging";
|
|
5
2
|
class CachedAssigner {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
constructor(assigner, cache, options = {}) {
|
|
4
|
+
this.assigner = assigner;
|
|
5
|
+
this.cache = cache;
|
|
6
|
+
this.options = {
|
|
7
|
+
logger: options.logger ?? new NullLogger(),
|
|
8
|
+
mirror: options.mirror ?? false
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
async assignCid(currentCid) {
|
|
12
|
+
const cachedCid = this.cache.get();
|
|
13
|
+
const previousCid = currentCid ?? cachedCid ?? null;
|
|
14
|
+
const { logger, mirror } = this.options;
|
|
15
|
+
if (previousCid === null) {
|
|
16
|
+
const newCid = await this.assigner.assignCid();
|
|
17
|
+
this.cache.put(newCid);
|
|
18
|
+
logger.debug("New CID stored into cache");
|
|
19
|
+
return newCid;
|
|
14
20
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
logger.debug('Using existing CID');
|
|
27
|
-
if (cachedCid !== previousCid) {
|
|
28
|
-
logger.debug('The cached CID is stale, updating cache...');
|
|
29
|
-
this.cache.put(previousCid);
|
|
30
|
-
}
|
|
31
|
-
if (mirror) {
|
|
32
|
-
logger.debug('Mirroring CID');
|
|
33
|
-
this.assigner
|
|
34
|
-
.assignCid(previousCid)
|
|
35
|
-
.then(newCid => {
|
|
36
|
-
if (newCid !== previousCid) {
|
|
37
|
-
logger.warn('The CID has changed, updating cache...');
|
|
38
|
-
this.cache.put(newCid);
|
|
39
|
-
}
|
|
40
|
-
})
|
|
41
|
-
.catch(() => {
|
|
42
|
-
logger.error('Failed to mirror CID');
|
|
43
|
-
});
|
|
21
|
+
logger.debug("Using existing CID");
|
|
22
|
+
if (cachedCid !== previousCid) {
|
|
23
|
+
logger.debug("The cached CID is stale, updating cache...");
|
|
24
|
+
this.cache.put(previousCid);
|
|
25
|
+
}
|
|
26
|
+
if (mirror) {
|
|
27
|
+
logger.debug("Mirroring CID");
|
|
28
|
+
this.assigner.assignCid(previousCid).then((newCid) => {
|
|
29
|
+
if (newCid !== previousCid) {
|
|
30
|
+
logger.warn("The CID has changed, updating cache...");
|
|
31
|
+
this.cache.put(newCid);
|
|
44
32
|
}
|
|
45
|
-
|
|
33
|
+
}).catch(() => {
|
|
34
|
+
logger.error("Failed to mirror CID");
|
|
35
|
+
});
|
|
46
36
|
}
|
|
37
|
+
return previousCid;
|
|
38
|
+
}
|
|
47
39
|
}
|
|
48
|
-
|
|
40
|
+
export {
|
|
41
|
+
CachedAssigner
|
|
42
|
+
};
|
|
49
43
|
//# sourceMappingURL=cachedAssigner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/cid/cachedAssigner.ts"],"sourcesContent":["import {Logger, NullLogger} from '../logging';\nimport {Cache} from '../cache';\nimport {CidAssigner} from './assigner';\n\ntype CachedAssignerOptions = {\n logger?: Logger,\n mirror?: boolean,\n};\n\nexport class CachedAssigner implements CidAssigner {\n private readonly assigner: CidAssigner;\n\n private readonly cache: Cache;\n\n private readonly options: Required<CachedAssignerOptions>;\n\n public constructor(assigner: CidAssigner, cache: Cache, options: CachedAssignerOptions = {}) {\n this.assigner = assigner;\n this.cache = cache;\n this.options = {\n logger: options.logger ?? new NullLogger(),\n mirror: options.mirror ?? false,\n };\n }\n\n public async assignCid(currentCid?: string): Promise<string> {\n const cachedCid = this.cache.get();\n const previousCid = currentCid ?? cachedCid ?? null;\n const {logger, mirror} = this.options;\n\n if (previousCid === null) {\n const newCid = await this.assigner.assignCid();\n\n this.cache.put(newCid);\n\n logger.debug('New CID stored into cache');\n\n return newCid;\n }\n\n logger.debug('Using existing CID');\n\n if (cachedCid !== previousCid) {\n logger.debug('The cached CID is stale, updating cache...');\n\n this.cache.put(previousCid);\n }\n\n if (mirror) {\n logger.debug('Mirroring CID');\n\n this.assigner\n .assignCid(previousCid)\n .then(newCid => {\n if (newCid !== previousCid) {\n logger.warn('The CID has changed, updating cache...');\n\n this.cache.put(newCid);\n }\n })\n .catch(() => {\n logger.error('Failed to mirror CID');\n });\n }\n\n return previousCid;\n }\n}\n"],"mappings":"AAAA,SAAgB,kBAAiB;AAS1B,MAAM,eAAsC;AAAA,EAOxC,YAAY,UAAuB,OAAc,UAAiC,CAAC,GAAG;AACzF,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,MACX,QAAQ,QAAQ,UAAU,IAAI,WAAW;AAAA,MACzC,QAAQ,QAAQ,UAAU;AAAA,IAC9B;AAAA,EACJ;AAAA,EAEA,MAAa,UAAU,YAAsC;AACzD,UAAM,YAAY,KAAK,MAAM,IAAI;AACjC,UAAM,cAAc,cAAc,aAAa;AAC/C,UAAM,EAAC,QAAQ,OAAM,IAAI,KAAK;AAE9B,QAAI,gBAAgB,MAAM;AACtB,YAAM,SAAS,MAAM,KAAK,SAAS,UAAU;AAE7C,WAAK,MAAM,IAAI,MAAM;AAErB,aAAO,MAAM,2BAA2B;AAExC,aAAO;AAAA,IACX;AAEA,WAAO,MAAM,oBAAoB;AAEjC,QAAI,cAAc,aAAa;AAC3B,aAAO,MAAM,4CAA4C;AAEzD,WAAK,MAAM,IAAI,WAAW;AAAA,IAC9B;AAEA,QAAI,QAAQ;AACR,aAAO,MAAM,eAAe;AAE5B,WAAK,SACA,UAAU,WAAW,EACrB,KAAK,YAAU;AACZ,YAAI,WAAW,aAAa;AACxB,iBAAO,KAAK,wCAAwC;AAEpD,eAAK,MAAM,IAAI,MAAM;AAAA,QACzB;AAAA,MACJ,CAAC,EACA,MAAM,MAAM;AACT,eAAO,MAAM,sBAAsB;AAAA,MACvC,CAAC;AAAA,IACT;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cid/fixedAssigner.ts"],"sourcesContent":["import {CidAssigner} from './assigner';\n\nexport class FixedAssigner implements CidAssigner {\n private readonly cid: string;\n\n public constructor(cid: string) {\n this.cid = cid;\n }\n\n public assignCid(): Promise<string> {\n return Promise.resolve(this.cid);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,cAAqC;AAAA,EAGvC,YAAY,KAAa;AAC5B,SAAK,MAAM;AAAA,EACf;AAAA,EAEO,YAA6B;AAChC,WAAO,QAAQ,QAAQ,KAAK,GAAG;AAAA,EACnC;AACJ;","names":[]}
|
package/cid/fixedAssigner.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { CidAssigner } from './assigner';
|
|
2
|
-
|
|
1
|
+
import { CidAssigner } from './assigner.js';
|
|
2
|
+
|
|
3
|
+
declare class FixedAssigner implements CidAssigner {
|
|
3
4
|
private readonly cid;
|
|
4
5
|
constructor(cid: string);
|
|
5
6
|
assignCid(): Promise<string>;
|
|
6
7
|
}
|
|
8
|
+
|
|
9
|
+
export { FixedAssigner };
|
package/cid/fixedAssigner.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FixedAssigner = void 0;
|
|
4
1
|
class FixedAssigner {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
constructor(cid) {
|
|
3
|
+
this.cid = cid;
|
|
4
|
+
}
|
|
5
|
+
assignCid() {
|
|
6
|
+
return Promise.resolve(this.cid);
|
|
7
|
+
}
|
|
11
8
|
}
|
|
12
|
-
|
|
9
|
+
export {
|
|
10
|
+
FixedAssigner
|
|
11
|
+
};
|
|
13
12
|
//# sourceMappingURL=fixedAssigner.js.map
|
package/cid/fixedAssigner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/cid/fixedAssigner.ts"],"sourcesContent":["import {CidAssigner} from './assigner';\n\nexport class FixedAssigner implements CidAssigner {\n private readonly cid: string;\n\n public constructor(cid: string) {\n this.cid = cid;\n }\n\n public assignCid(): Promise<string> {\n return Promise.resolve(this.cid);\n }\n}\n"],"mappings":"AAEO,MAAM,cAAqC;AAAA,EAGvC,YAAY,KAAa;AAC5B,SAAK,MAAM;AAAA,EACf;AAAA,EAEO,YAA6B;AAChC,WAAO,QAAQ,QAAQ,KAAK,GAAG;AAAA,EACnC;AACJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cid/index.ts"],"sourcesContent":["export * from './assigner';\nexport {CachedAssigner} from './cachedAssigner';\nexport {FixedAssigner} from './fixedAssigner';\nexport {RemoteAssigner} from './remoteAssigner';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAc,uBAAd;AACA,4BAA6B;AAC7B,2BAA4B;AAC5B,4BAA6B;","names":[]}
|
package/cid/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { CachedAssigner } from './cachedAssigner';
|
|
3
|
-
export { FixedAssigner } from './fixedAssigner';
|
|
4
|
-
export { RemoteAssigner } from './remoteAssigner';
|
|
1
|
+
export { CidAssigner } from './assigner.js';
|
|
2
|
+
export { CachedAssigner } from './cachedAssigner.js';
|
|
3
|
+
export { FixedAssigner } from './fixedAssigner.js';
|
|
4
|
+
export { RemoteAssigner } from './remoteAssigner.js';
|
|
5
|
+
import '../logging/logger.js';
|
|
6
|
+
import '../cache/cache.js';
|
package/cid/index.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var remoteAssigner_1 = require("./remoteAssigner");
|
|
11
|
-
Object.defineProperty(exports, "RemoteAssigner", { enumerable: true, get: function () { return remoteAssigner_1.RemoteAssigner; } });
|
|
1
|
+
export * from "./assigner";
|
|
2
|
+
import { CachedAssigner } from "./cachedAssigner";
|
|
3
|
+
import { FixedAssigner } from "./fixedAssigner";
|
|
4
|
+
import { RemoteAssigner } from "./remoteAssigner";
|
|
5
|
+
export {
|
|
6
|
+
CachedAssigner,
|
|
7
|
+
FixedAssigner,
|
|
8
|
+
RemoteAssigner
|
|
9
|
+
};
|
|
12
10
|
//# sourceMappingURL=index.js.map
|
package/cid/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/cid/index.ts"],"sourcesContent":["export * from './assigner';\nexport {CachedAssigner} from './cachedAssigner';\nexport {FixedAssigner} from './fixedAssigner';\nexport {RemoteAssigner} from './remoteAssigner';\n"],"mappings":"AAAA,cAAc;AACd,SAAQ,sBAAqB;AAC7B,SAAQ,qBAAoB;AAC5B,SAAQ,sBAAqB;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cid/remoteAssigner.ts"],"sourcesContent":["import {Logger, NullLogger} from '../logging';\nimport {formatCause} from '../error';\nimport {CidAssigner} from './assigner';\nimport {CLIENT_LIBRARY} from '../constants';\n\nexport class RemoteAssigner implements CidAssigner {\n private readonly logger: Logger;\n\n private readonly endpoint: string;\n\n private pending?: Promise<string>;\n\n public constructor(endpoint: string, logger?: Logger) {\n this.endpoint = endpoint;\n this.logger = logger ?? new NullLogger();\n }\n\n public assignCid(currentCid?: string): Promise<string> {\n if (this.pending === undefined) {\n this.pending = this.fetchCid(currentCid).finally(() => {\n this.pending = undefined;\n });\n }\n\n return this.pending;\n }\n\n private async fetchCid(currentCid?: string): Promise<string> {\n const options: RequestInit = {\n method: 'GET',\n credentials: 'include',\n headers: {\n 'X-Client-Library': CLIENT_LIBRARY,\n },\n };\n\n const endpoint = new URL(this.endpoint);\n\n if (currentCid !== undefined) {\n endpoint.searchParams.set('cid', currentCid);\n }\n\n const response = await fetch(endpoint, options);\n\n if (!response.ok) {\n const error = new Error(`Failed to assign CID: ${formatCause(response.statusText)}`);\n\n this.logger.error(error.message);\n\n throw error;\n }\n\n this.logger.debug('New CID successfully assigned');\n\n return response.text();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAiC;AACjC,mBAA0B;AAE1B,uBAA6B;AAEtB,MAAM,eAAsC;AAAA,EAOxC,YAAY,UAAkB,QAAiB;AAClD,SAAK,WAAW;AAChB,SAAK,SAAS,UAAU,IAAI,0BAAW;AAAA,EAC3C;AAAA,EAEO,UAAU,YAAsC;AACnD,QAAI,KAAK,YAAY,QAAW;AAC5B,WAAK,UAAU,KAAK,SAAS,UAAU,EAAE,QAAQ,MAAM;AACnD,aAAK,UAAU;AAAA,MACnB,CAAC;AAAA,IACL;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAc,SAAS,YAAsC;AACzD,UAAM,UAAuB;AAAA,MACzB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,QACL,oBAAoB;AAAA,MACxB;AAAA,IACJ;AAEA,UAAM,WAAW,IAAI,IAAI,KAAK,QAAQ;AAEtC,QAAI,eAAe,QAAW;AAC1B,eAAS,aAAa,IAAI,OAAO,UAAU;AAAA,IAC/C;AAEA,UAAM,WAAW,MAAM,MAAM,UAAU,OAAO;AAE9C,QAAI,CAAC,SAAS,IAAI;AACd,YAAM,QAAQ,IAAI,MAAM,6BAAyB,0BAAY,SAAS,UAAU,CAAC,EAAE;AAEnF,WAAK,OAAO,MAAM,MAAM,OAAO;AAE/B,YAAM;AAAA,IACV;AAEA,SAAK,OAAO,MAAM,+BAA+B;AAEjD,WAAO,SAAS,KAAK;AAAA,EACzB;AACJ;","names":[]}
|
package/cid/remoteAssigner.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Logger } from '../logging';
|
|
2
|
-
import { CidAssigner } from './assigner';
|
|
3
|
-
|
|
1
|
+
import { Logger } from '../logging/logger.js';
|
|
2
|
+
import { CidAssigner } from './assigner.js';
|
|
3
|
+
|
|
4
|
+
declare class RemoteAssigner implements CidAssigner {
|
|
4
5
|
private readonly logger;
|
|
5
6
|
private readonly endpoint;
|
|
6
7
|
private pending?;
|
|
@@ -8,3 +9,5 @@ export declare class RemoteAssigner implements CidAssigner {
|
|
|
8
9
|
assignCid(currentCid?: string): Promise<string>;
|
|
9
10
|
private fetchCid;
|
|
10
11
|
}
|
|
12
|
+
|
|
13
|
+
export { RemoteAssigner };
|
package/cid/remoteAssigner.js
CHANGED
|
@@ -1,43 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const logging_1 = require("../logging");
|
|
5
|
-
const error_1 = require("../error");
|
|
6
|
-
const constants_1 = require("../constants");
|
|
1
|
+
import { NullLogger } from "../logging";
|
|
2
|
+
import { formatCause } from "../error";
|
|
3
|
+
import { CLIENT_LIBRARY } from "../constants";
|
|
7
4
|
class RemoteAssigner {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
constructor(endpoint, logger) {
|
|
6
|
+
this.endpoint = endpoint;
|
|
7
|
+
this.logger = logger ?? new NullLogger();
|
|
8
|
+
}
|
|
9
|
+
assignCid(currentCid) {
|
|
10
|
+
if (this.pending === void 0) {
|
|
11
|
+
this.pending = this.fetchCid(currentCid).finally(() => {
|
|
12
|
+
this.pending = void 0;
|
|
13
|
+
});
|
|
11
14
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
return this.pending;
|
|
16
|
+
}
|
|
17
|
+
async fetchCid(currentCid) {
|
|
18
|
+
const options = {
|
|
19
|
+
method: "GET",
|
|
20
|
+
credentials: "include",
|
|
21
|
+
headers: {
|
|
22
|
+
"X-Client-Library": CLIENT_LIBRARY
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const endpoint = new URL(this.endpoint);
|
|
26
|
+
if (currentCid !== void 0) {
|
|
27
|
+
endpoint.searchParams.set("cid", currentCid);
|
|
19
28
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
'X-Client-Library': constants_1.CLIENT_LIBRARY,
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
const endpoint = new URL(this.endpoint);
|
|
29
|
-
if (currentCid !== undefined) {
|
|
30
|
-
endpoint.searchParams.set('cid', currentCid);
|
|
31
|
-
}
|
|
32
|
-
const response = await fetch(endpoint, options);
|
|
33
|
-
if (!response.ok) {
|
|
34
|
-
const error = new Error(`Failed to assign CID: ${(0, error_1.formatCause)(response.statusText)}`);
|
|
35
|
-
this.logger.error(error.message);
|
|
36
|
-
throw error;
|
|
37
|
-
}
|
|
38
|
-
this.logger.debug('New CID successfully assigned');
|
|
39
|
-
return response.text();
|
|
29
|
+
const response = await fetch(endpoint, options);
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
const error = new Error(`Failed to assign CID: ${formatCause(response.statusText)}`);
|
|
32
|
+
this.logger.error(error.message);
|
|
33
|
+
throw error;
|
|
40
34
|
}
|
|
35
|
+
this.logger.debug("New CID successfully assigned");
|
|
36
|
+
return response.text();
|
|
37
|
+
}
|
|
41
38
|
}
|
|
42
|
-
|
|
39
|
+
export {
|
|
40
|
+
RemoteAssigner
|
|
41
|
+
};
|
|
43
42
|
//# sourceMappingURL=remoteAssigner.js.map
|