@powerhousedao/reactor 5.1.0-dev.3 → 5.1.0-dev.30
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/dist/src/cache/document-meta-cache-types.d.ts +114 -0
- package/dist/src/cache/document-meta-cache-types.d.ts.map +1 -0
- package/dist/src/cache/document-meta-cache-types.js +2 -0
- package/dist/src/cache/document-meta-cache-types.js.map +1 -0
- package/dist/src/cache/document-meta-cache.d.ts +30 -0
- package/dist/src/cache/document-meta-cache.d.ts.map +1 -0
- package/dist/src/cache/document-meta-cache.js +128 -0
- package/dist/src/cache/document-meta-cache.js.map +1 -0
- package/dist/src/cache/kysely-operation-index.d.ts +4 -2
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
- package/dist/src/cache/kysely-operation-index.js +54 -0
- package/dist/src/cache/kysely-operation-index.js.map +1 -1
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
- package/dist/src/cache/kysely-write-cache.js +2 -1
- package/dist/src/cache/kysely-write-cache.js.map +1 -1
- package/dist/src/cache/operation-index-types.d.ts +3 -2
- package/dist/src/cache/operation-index-types.d.ts.map +1 -1
- package/dist/src/cache/operation-index-types.js.map +1 -1
- package/dist/src/client/reactor-client.d.ts +7 -8
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/reactor-client.js +48 -45
- package/dist/src/client/reactor-client.js.map +1 -1
- package/dist/src/client/types.d.ts +10 -10
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +15 -11
- package/dist/src/core/reactor-builder.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.js +57 -19
- package/dist/src/core/reactor-builder.js.map +1 -1
- package/dist/src/core/{builder.d.ts → reactor-client-builder.d.ts} +12 -4
- package/dist/src/core/reactor-client-builder.d.ts.map +1 -0
- package/dist/src/core/{builder.js → reactor-client-builder.js} +44 -23
- package/dist/src/core/reactor-client-builder.js.map +1 -0
- package/dist/src/core/reactor.d.ts +12 -12
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +61 -36
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/core/types.d.ts +49 -14
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/utils.d.ts +9 -1
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/core/utils.js +30 -0
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/events/types.d.ts +1 -0
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +1 -0
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +17 -2
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +283 -192
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/util.d.ts +14 -5
- package/dist/src/executor/util.d.ts.map +1 -1
- package/dist/src/executor/util.js +36 -9
- package/dist/src/executor/util.js.map +1 -1
- package/dist/src/index.d.ts +12 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/logging/console.d.ts +13 -0
- package/dist/src/logging/console.d.ts.map +1 -0
- package/dist/src/logging/console.js +77 -0
- package/dist/src/logging/console.js.map +1 -0
- package/dist/src/logging/types.d.ts +11 -0
- package/dist/src/logging/types.d.ts.map +1 -0
- package/dist/src/logging/types.js +2 -0
- package/dist/src/logging/types.js.map +1 -0
- package/dist/src/queue/types.d.ts +2 -0
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/read-models/base-read-model.d.ts +60 -0
- package/dist/src/read-models/base-read-model.d.ts.map +1 -0
- package/dist/src/read-models/base-read-model.js +143 -0
- package/dist/src/read-models/base-read-model.js.map +1 -0
- package/dist/src/read-models/coordinator.d.ts +3 -1
- package/dist/src/read-models/coordinator.d.ts.map +1 -1
- package/dist/src/read-models/coordinator.js +8 -7
- package/dist/src/read-models/coordinator.js.map +1 -1
- package/dist/src/read-models/document-view.d.ts +6 -7
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/document-view.js +16 -81
- package/dist/src/read-models/document-view.js.map +1 -1
- package/dist/src/read-models/types.d.ts +2 -1
- package/dist/src/read-models/types.d.ts.map +1 -1
- package/dist/src/registry/implementation.d.ts +42 -34
- package/dist/src/registry/implementation.d.ts.map +1 -1
- package/dist/src/registry/implementation.js +168 -48
- package/dist/src/registry/implementation.js.map +1 -1
- package/dist/src/registry/interfaces.d.ts +69 -8
- package/dist/src/registry/interfaces.d.ts.map +1 -1
- package/dist/src/shared/errors.d.ts +24 -0
- package/dist/src/shared/errors.d.ts.map +1 -1
- package/dist/src/shared/errors.js +42 -0
- package/dist/src/shared/errors.js.map +1 -1
- package/dist/src/shared/types.d.ts +4 -0
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/signer/passthrough-signer.d.ts +9 -3
- package/dist/src/signer/passthrough-signer.d.ts.map +1 -1
- package/dist/src/signer/passthrough-signer.js +13 -0
- package/dist/src/signer/passthrough-signer.js.map +1 -1
- package/dist/src/signer/types.d.ts +12 -10
- package/dist/src/signer/types.d.ts.map +1 -1
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts +33 -0
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +1 -0
- package/dist/src/storage/consistency-aware-legacy-storage.js +65 -0
- package/dist/src/storage/consistency-aware-legacy-storage.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +81 -0
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/interfaces.js.map +1 -1
- package/dist/src/storage/kysely/store.d.ts.map +1 -1
- package/dist/src/storage/kysely/store.js +1 -0
- package/dist/src/storage/kysely/store.js.map +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +1 -1
- package/dist/src/storage/migrations/008_create_view_state_table.js +2 -1
- package/dist/src/storage/migrations/008_create_view_state_table.js.map +1 -1
- package/dist/src/storage/migrations/run-migrations.js +3 -3
- package/dist/src/storage/migrations/run-migrations.js.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.d.ts +16 -0
- package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -0
- package/dist/src/subs/subscription-notification-read-model.js +51 -0
- package/dist/src/subs/subscription-notification-read-model.js.map +1 -0
- package/dist/src/sync/channels/composite-channel-factory.d.ts +27 -0
- package/dist/src/sync/channels/composite-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/composite-channel-factory.js +83 -0
- package/dist/src/sync/channels/composite-channel-factory.js.map +1 -0
- package/dist/src/sync/channels/gql-channel-factory.d.ts +2 -2
- package/dist/src/sync/channels/gql-channel-factory.d.ts.map +1 -1
- package/dist/src/sync/channels/gql-channel-factory.js +3 -1
- package/dist/src/sync/channels/gql-channel-factory.js.map +1 -1
- package/dist/src/sync/channels/gql-channel.d.ts +21 -0
- package/dist/src/sync/channels/gql-channel.d.ts.map +1 -1
- package/dist/src/sync/channels/gql-channel.js +108 -13
- package/dist/src/sync/channels/gql-channel.js.map +1 -1
- package/dist/src/sync/channels/index.d.ts +2 -1
- package/dist/src/sync/channels/index.d.ts.map +1 -1
- package/dist/src/sync/channels/index.js +2 -1
- package/dist/src/sync/channels/index.js.map +1 -1
- package/dist/src/sync/channels/polling-channel.d.ts +39 -0
- package/dist/src/sync/channels/polling-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/polling-channel.js +70 -0
- package/dist/src/sync/channels/polling-channel.js.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +4 -2
- package/dist/src/sync/channels/utils.d.ts.map +1 -1
- package/dist/src/sync/channels/utils.js +52 -6
- package/dist/src/sync/channels/utils.js.map +1 -1
- package/dist/src/sync/errors.d.ts +1 -1
- package/dist/src/sync/errors.d.ts.map +1 -1
- package/dist/src/sync/errors.js +2 -2
- package/dist/src/sync/errors.js.map +1 -1
- package/dist/src/sync/index.d.ts +2 -2
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/index.js +2 -2
- package/dist/src/sync/index.js.map +1 -1
- package/dist/src/sync/interfaces.d.ts +16 -1
- package/dist/src/sync/interfaces.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.d.ts +1 -0
- package/dist/src/sync/sync-manager.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.js +52 -4
- package/dist/src/sync/sync-manager.js.map +1 -1
- package/package.json +4 -4
- package/dist/src/core/builder.d.ts.map +0 -1
- package/dist/src/core/builder.js.map +0 -1
- package/dist/src/sync/channels/internal-channel.d.ts +0 -57
- package/dist/src/sync/channels/internal-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/internal-channel.js +0 -106
- package/dist/src/sync/channels/internal-channel.js.map +0 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { GqlChannel } from "./gql-channel.js";
|
|
2
|
+
import { PollingChannel } from "./polling-channel.js";
|
|
3
|
+
/**
|
|
4
|
+
* Factory for creating channel instances of multiple types.
|
|
5
|
+
*
|
|
6
|
+
* Supports both "gql" channels for network-based synchronization and
|
|
7
|
+
* "internal" channels for in-process communication.
|
|
8
|
+
*/
|
|
9
|
+
export class CompositeChannelFactory {
|
|
10
|
+
/**
|
|
11
|
+
* Creates a new channel instance based on the configuration type.
|
|
12
|
+
*
|
|
13
|
+
* @param remoteId - Unique identifier for the remote
|
|
14
|
+
* @param remoteName - Human-readable name for the remote
|
|
15
|
+
* @param config - Channel configuration including type and parameters
|
|
16
|
+
* @param cursorStorage - Storage for persisting synchronization cursors
|
|
17
|
+
* @param collectionId - Collection ID for filtering
|
|
18
|
+
* @param filter - Remote filter configuration
|
|
19
|
+
* @returns A new channel instance
|
|
20
|
+
* @throws Error if config.type is not supported or required parameters are missing
|
|
21
|
+
*/
|
|
22
|
+
instance(remoteId, remoteName, config, cursorStorage, collectionId, filter) {
|
|
23
|
+
if (config.type === "gql") {
|
|
24
|
+
return this.createGqlChannel(remoteId, remoteName, config, cursorStorage, collectionId, filter);
|
|
25
|
+
}
|
|
26
|
+
if (config.type === "polling") {
|
|
27
|
+
return this.createPollingChannel(remoteId, remoteName, cursorStorage);
|
|
28
|
+
}
|
|
29
|
+
throw new Error(`CompositeChannelFactory does not support channel type "${config.type}"`);
|
|
30
|
+
}
|
|
31
|
+
createGqlChannel(remoteId, remoteName, config, cursorStorage, collectionId, filter) {
|
|
32
|
+
const url = config.parameters.url;
|
|
33
|
+
if (typeof url !== "string" || !url) {
|
|
34
|
+
throw new Error('CompositeChannelFactory requires "url" parameter for gql channels');
|
|
35
|
+
}
|
|
36
|
+
const gqlConfig = {
|
|
37
|
+
url,
|
|
38
|
+
collectionId,
|
|
39
|
+
filter,
|
|
40
|
+
};
|
|
41
|
+
if (config.parameters.authToken !== undefined) {
|
|
42
|
+
if (typeof config.parameters.authToken !== "string") {
|
|
43
|
+
throw new Error('"authToken" parameter must be a string');
|
|
44
|
+
}
|
|
45
|
+
gqlConfig.authToken = config.parameters.authToken;
|
|
46
|
+
}
|
|
47
|
+
if (config.parameters.pollIntervalMs !== undefined) {
|
|
48
|
+
if (typeof config.parameters.pollIntervalMs !== "number") {
|
|
49
|
+
throw new Error('"pollIntervalMs" parameter must be a number');
|
|
50
|
+
}
|
|
51
|
+
gqlConfig.pollIntervalMs = config.parameters.pollIntervalMs;
|
|
52
|
+
}
|
|
53
|
+
if (config.parameters.retryBaseDelayMs !== undefined) {
|
|
54
|
+
if (typeof config.parameters.retryBaseDelayMs !== "number") {
|
|
55
|
+
throw new Error('"retryBaseDelayMs" parameter must be a number');
|
|
56
|
+
}
|
|
57
|
+
gqlConfig.retryBaseDelayMs = config.parameters.retryBaseDelayMs;
|
|
58
|
+
}
|
|
59
|
+
if (config.parameters.retryMaxDelayMs !== undefined) {
|
|
60
|
+
if (typeof config.parameters.retryMaxDelayMs !== "number") {
|
|
61
|
+
throw new Error('"retryMaxDelayMs" parameter must be a number');
|
|
62
|
+
}
|
|
63
|
+
gqlConfig.retryMaxDelayMs = config.parameters.retryMaxDelayMs;
|
|
64
|
+
}
|
|
65
|
+
if (config.parameters.maxFailures !== undefined) {
|
|
66
|
+
if (typeof config.parameters.maxFailures !== "number") {
|
|
67
|
+
throw new Error('"maxFailures" parameter must be a number');
|
|
68
|
+
}
|
|
69
|
+
gqlConfig.maxFailures = config.parameters.maxFailures;
|
|
70
|
+
}
|
|
71
|
+
if (config.parameters.fetchFn !== undefined) {
|
|
72
|
+
if (typeof config.parameters.fetchFn !== "function") {
|
|
73
|
+
throw new Error('"fetchFn" parameter must be a function');
|
|
74
|
+
}
|
|
75
|
+
gqlConfig.fetchFn = config.parameters.fetchFn;
|
|
76
|
+
}
|
|
77
|
+
return new GqlChannel(remoteId, remoteName, cursorStorage, gqlConfig);
|
|
78
|
+
}
|
|
79
|
+
createPollingChannel(remoteId, remoteName, cursorStorage) {
|
|
80
|
+
return new PollingChannel(remoteId, remoteName, cursorStorage);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=composite-channel-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite-channel-factory.js","sourceRoot":"","sources":["../../../../src/sync/channels/composite-channel-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ISyncCursorStorage } from "../../storage/interfaces.js";
|
|
2
2
|
import type { IChannel, IChannelFactory } from "../interfaces.js";
|
|
3
|
-
import type { ChannelConfig } from "../types.js";
|
|
3
|
+
import type { ChannelConfig, RemoteFilter } from "../types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Factory for creating GqlChannel instances.
|
|
6
6
|
*
|
|
@@ -17,6 +17,6 @@ export declare class GqlChannelFactory implements IChannelFactory {
|
|
|
17
17
|
* @returns A new GqlChannel instance
|
|
18
18
|
* @throws Error if config.type is not "gql" or required parameters are missing
|
|
19
19
|
*/
|
|
20
|
-
instance(remoteId: string, remoteName: string, config: ChannelConfig, cursorStorage: ISyncCursorStorage): IChannel;
|
|
20
|
+
instance(remoteId: string, remoteName: string, config: ChannelConfig, cursorStorage: ISyncCursorStorage, collectionId: string, filter: RemoteFilter): IChannel;
|
|
21
21
|
}
|
|
22
22
|
//# sourceMappingURL=gql-channel-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gql-channel-factory.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gql-channel-factory.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG/D;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD;;;;;;;;OAQG;IACH,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,GACnB,QAAQ;CAkEZ"}
|
|
@@ -15,7 +15,7 @@ export class GqlChannelFactory {
|
|
|
15
15
|
* @returns A new GqlChannel instance
|
|
16
16
|
* @throws Error if config.type is not "gql" or required parameters are missing
|
|
17
17
|
*/
|
|
18
|
-
instance(remoteId, remoteName, config, cursorStorage) {
|
|
18
|
+
instance(remoteId, remoteName, config, cursorStorage, collectionId, filter) {
|
|
19
19
|
if (config.type !== "gql") {
|
|
20
20
|
throw new Error(`GqlChannelFactory can only create channels of type "gql", got "${config.type}"`);
|
|
21
21
|
}
|
|
@@ -27,6 +27,8 @@ export class GqlChannelFactory {
|
|
|
27
27
|
// Extract optional parameters with validation
|
|
28
28
|
const gqlConfig = {
|
|
29
29
|
url,
|
|
30
|
+
collectionId,
|
|
31
|
+
filter,
|
|
30
32
|
};
|
|
31
33
|
if (config.parameters.authToken !== undefined) {
|
|
32
34
|
if (typeof config.parameters.authToken !== "string") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gql-channel-factory.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel-factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AAErE;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CACN,QAAgB,EAChB,UAAkB,EAClB,MAAqB,EACrB,aAAiC;
|
|
1
|
+
{"version":3,"file":"gql-channel-factory.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { ISyncCursorStorage } from "../../storage/interfaces.js";
|
|
|
2
2
|
import type { IChannel } from "../interfaces.js";
|
|
3
3
|
import { Mailbox } from "../mailbox.js";
|
|
4
4
|
import type { SyncOperation } from "../sync-operation.js";
|
|
5
|
+
import type { RemoteFilter } from "../types.js";
|
|
5
6
|
/**
|
|
6
7
|
* Configuration parameters for GqlChannel
|
|
7
8
|
*/
|
|
@@ -20,6 +21,10 @@ export type GqlChannelConfig = {
|
|
|
20
21
|
maxFailures?: number;
|
|
21
22
|
/** Custom fetch function for testing (default: global fetch) */
|
|
22
23
|
fetchFn?: typeof fetch;
|
|
24
|
+
/** Collection ID to synchronize */
|
|
25
|
+
collectionId: string;
|
|
26
|
+
/** Filter to apply to operations */
|
|
27
|
+
filter: RemoteFilter;
|
|
23
28
|
};
|
|
24
29
|
/**
|
|
25
30
|
* GraphQL-based synchronization channel for network communication between reactors.
|
|
@@ -42,6 +47,10 @@ export declare class GqlChannel implements IChannel {
|
|
|
42
47
|
* Shuts down the channel and prevents further operations.
|
|
43
48
|
*/
|
|
44
49
|
shutdown(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Initializes the channel by registering it on the remote server and starting polling.
|
|
52
|
+
*/
|
|
53
|
+
init(): Promise<void>;
|
|
45
54
|
/**
|
|
46
55
|
* Starts the polling loop to fetch operations from the remote.
|
|
47
56
|
*/
|
|
@@ -58,6 +67,10 @@ export declare class GqlChannel implements IChannel {
|
|
|
58
67
|
* Queries the remote GraphQL endpoint for sync envelopes.
|
|
59
68
|
*/
|
|
60
69
|
private pollSyncEnvelopes;
|
|
70
|
+
/**
|
|
71
|
+
* Registers or updates this channel on the remote server via GraphQL mutation.
|
|
72
|
+
*/
|
|
73
|
+
private touchRemoteChannel;
|
|
61
74
|
/**
|
|
62
75
|
* Handles sync operations added to the outbox by sending them to the remote.
|
|
63
76
|
*/
|
|
@@ -68,8 +81,16 @@ export declare class GqlChannel implements IChannel {
|
|
|
68
81
|
private pushSyncOperation;
|
|
69
82
|
/**
|
|
70
83
|
* Serializes a SyncEnvelope for GraphQL transport.
|
|
84
|
+
*
|
|
85
|
+
* Signatures are serialized as comma-separated strings since GraphQL schema
|
|
86
|
+
* defines them as [String!]!. Extra context fields (resultingState, ordinal)
|
|
87
|
+
* are stripped since they are not defined in OperationContextInput.
|
|
71
88
|
*/
|
|
72
89
|
private serializeEnvelope;
|
|
90
|
+
/**
|
|
91
|
+
* Serializes an action for GraphQL transport, converting signature tuples to strings.
|
|
92
|
+
*/
|
|
93
|
+
private serializeAction;
|
|
73
94
|
/**
|
|
74
95
|
* Executes a GraphQL query or mutation against the remote endpoint.
|
|
75
96
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gql-channel.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gql-channel.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAgB,YAAY,EAAgB,MAAM,aAAa,CAAC;AAI5E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,qBAAa,UAAW,YAAW,QAAQ;IACzC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAGhC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,kBAAkB,EACjC,MAAM,EAAE,gBAAgB;IA4B1B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAQhB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;YACW,IAAI;IAsDlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;YACW,iBAAiB;IA2E/B;;OAEG;YACW,kBAAkB;IAuBhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;YACW,iBAAiB;IA6B/B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;YACW,cAAc;IA4D5B;;OAEG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD;;OAEG;IACH,SAAS,IAAI;QACX,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;QACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB;CAaF"}
|
|
@@ -30,6 +30,8 @@ export class GqlChannel {
|
|
|
30
30
|
retryMaxDelayMs: config.retryMaxDelayMs ?? 300000,
|
|
31
31
|
maxFailures: config.maxFailures ?? 5,
|
|
32
32
|
fetchFn: config.fetchFn,
|
|
33
|
+
collectionId: config.collectionId,
|
|
34
|
+
filter: config.filter,
|
|
33
35
|
};
|
|
34
36
|
this.isShutdown = false;
|
|
35
37
|
this.failureCount = 0;
|
|
@@ -39,8 +41,6 @@ export class GqlChannel {
|
|
|
39
41
|
this.outbox.onAdded((syncOp) => {
|
|
40
42
|
this.handleOutboxAdded(syncOp);
|
|
41
43
|
});
|
|
42
|
-
// Start polling
|
|
43
|
-
this.startPolling();
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* Shuts down the channel and prevents further operations.
|
|
@@ -52,6 +52,13 @@ export class GqlChannel {
|
|
|
52
52
|
this.pollTimer = undefined;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Initializes the channel by registering it on the remote server and starting polling.
|
|
57
|
+
*/
|
|
58
|
+
async init() {
|
|
59
|
+
await this.touchRemoteChannel();
|
|
60
|
+
this.startPolling();
|
|
61
|
+
}
|
|
55
62
|
/**
|
|
56
63
|
* Starts the polling loop to fetch operations from the remote.
|
|
57
64
|
*/
|
|
@@ -59,11 +66,11 @@ export class GqlChannel {
|
|
|
59
66
|
if (this.isShutdown) {
|
|
60
67
|
return;
|
|
61
68
|
}
|
|
62
|
-
this.
|
|
63
|
-
|
|
69
|
+
void this.poll().then(() => {
|
|
70
|
+
this.pollTimer = setTimeout(() => {
|
|
64
71
|
this.startPolling(); // Schedule next poll
|
|
65
|
-
});
|
|
66
|
-
}
|
|
72
|
+
}, this.config.pollIntervalMs);
|
|
73
|
+
});
|
|
67
74
|
}
|
|
68
75
|
/**
|
|
69
76
|
* Polls the remote for new sync envelopes.
|
|
@@ -92,12 +99,25 @@ export class GqlChannel {
|
|
|
92
99
|
this.handlePollError(error);
|
|
93
100
|
return;
|
|
94
101
|
}
|
|
102
|
+
let maxCursorOrdinal = cursorOrdinal;
|
|
95
103
|
for (const envelope of envelopes) {
|
|
96
|
-
if (envelope.type === "operations" && envelope.operations) {
|
|
104
|
+
if (envelope.type.toLowerCase() === "operations" && envelope.operations) {
|
|
97
105
|
const syncOp = envelopeToSyncOperation(envelope, this.remoteName);
|
|
98
106
|
syncOp.transported();
|
|
99
107
|
this.inbox.add(syncOp);
|
|
100
108
|
}
|
|
109
|
+
if (envelope.cursor && envelope.cursor.cursorOrdinal > maxCursorOrdinal) {
|
|
110
|
+
maxCursorOrdinal = envelope.cursor.cursorOrdinal;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (maxCursorOrdinal > cursorOrdinal) {
|
|
114
|
+
try {
|
|
115
|
+
await this.updateCursor(maxCursorOrdinal);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
this.handlePollError(error);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
101
121
|
}
|
|
102
122
|
this.lastSuccessUtcMs = Date.now();
|
|
103
123
|
this.failureCount = 0;
|
|
@@ -133,16 +153,41 @@ export class GqlChannel {
|
|
|
133
153
|
hash
|
|
134
154
|
skip
|
|
135
155
|
error
|
|
136
|
-
resultingState
|
|
137
156
|
id
|
|
138
|
-
action
|
|
157
|
+
action {
|
|
158
|
+
id
|
|
159
|
+
type
|
|
160
|
+
timestampUtcMs
|
|
161
|
+
input
|
|
162
|
+
scope
|
|
163
|
+
attachments {
|
|
164
|
+
data
|
|
165
|
+
mimeType
|
|
166
|
+
hash
|
|
167
|
+
extension
|
|
168
|
+
fileName
|
|
169
|
+
}
|
|
170
|
+
context {
|
|
171
|
+
signer {
|
|
172
|
+
user {
|
|
173
|
+
address
|
|
174
|
+
networkId
|
|
175
|
+
chainId
|
|
176
|
+
}
|
|
177
|
+
app {
|
|
178
|
+
name
|
|
179
|
+
key
|
|
180
|
+
}
|
|
181
|
+
signatures
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
139
185
|
}
|
|
140
186
|
context {
|
|
141
187
|
documentId
|
|
142
188
|
documentType
|
|
143
189
|
scope
|
|
144
190
|
branch
|
|
145
|
-
resultingState
|
|
146
191
|
}
|
|
147
192
|
}
|
|
148
193
|
cursor {
|
|
@@ -160,6 +205,29 @@ export class GqlChannel {
|
|
|
160
205
|
const response = await this.executeGraphQL(query, variables);
|
|
161
206
|
return response.pollSyncEnvelopes;
|
|
162
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Registers or updates this channel on the remote server via GraphQL mutation.
|
|
210
|
+
*/
|
|
211
|
+
async touchRemoteChannel() {
|
|
212
|
+
const mutation = `
|
|
213
|
+
mutation TouchChannel($input: TouchChannelInput!) {
|
|
214
|
+
touchChannel(input: $input)
|
|
215
|
+
}
|
|
216
|
+
`;
|
|
217
|
+
const variables = {
|
|
218
|
+
input: {
|
|
219
|
+
id: this.channelId,
|
|
220
|
+
name: this.channelId,
|
|
221
|
+
collectionId: this.config.collectionId,
|
|
222
|
+
filter: {
|
|
223
|
+
documentId: this.config.filter.documentId,
|
|
224
|
+
scope: this.config.filter.scope,
|
|
225
|
+
branch: this.config.filter.branch,
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
await this.executeGraphQL(mutation, variables);
|
|
230
|
+
}
|
|
163
231
|
/**
|
|
164
232
|
* Handles sync operations added to the outbox by sending them to the remote.
|
|
165
233
|
*/
|
|
@@ -201,6 +269,10 @@ export class GqlChannel {
|
|
|
201
269
|
}
|
|
202
270
|
/**
|
|
203
271
|
* Serializes a SyncEnvelope for GraphQL transport.
|
|
272
|
+
*
|
|
273
|
+
* Signatures are serialized as comma-separated strings since GraphQL schema
|
|
274
|
+
* defines them as [String!]!. Extra context fields (resultingState, ordinal)
|
|
275
|
+
* are stripped since they are not defined in OperationContextInput.
|
|
204
276
|
*/
|
|
205
277
|
serializeEnvelope(envelope) {
|
|
206
278
|
return {
|
|
@@ -213,15 +285,38 @@ export class GqlChannel {
|
|
|
213
285
|
hash: opWithContext.operation.hash,
|
|
214
286
|
skip: opWithContext.operation.skip,
|
|
215
287
|
error: opWithContext.operation.error,
|
|
216
|
-
resultingState: opWithContext.operation.resultingState,
|
|
217
288
|
id: opWithContext.operation.id,
|
|
218
|
-
action: opWithContext.operation.action,
|
|
289
|
+
action: this.serializeAction(opWithContext.operation.action),
|
|
290
|
+
},
|
|
291
|
+
context: {
|
|
292
|
+
documentId: opWithContext.context.documentId,
|
|
293
|
+
documentType: opWithContext.context.documentType,
|
|
294
|
+
scope: opWithContext.context.scope,
|
|
295
|
+
branch: opWithContext.context.branch,
|
|
219
296
|
},
|
|
220
|
-
context: opWithContext.context,
|
|
221
297
|
})),
|
|
222
298
|
cursor: envelope.cursor,
|
|
223
299
|
};
|
|
224
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Serializes an action for GraphQL transport, converting signature tuples to strings.
|
|
303
|
+
*/
|
|
304
|
+
serializeAction(action) {
|
|
305
|
+
const signer = action.context?.signer;
|
|
306
|
+
if (!signer?.signatures) {
|
|
307
|
+
return action;
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
...action,
|
|
311
|
+
context: {
|
|
312
|
+
...action.context,
|
|
313
|
+
signer: {
|
|
314
|
+
...signer,
|
|
315
|
+
signatures: signer.signatures.map((sig) => Array.isArray(sig) ? sig.join(", ") : sig),
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
225
320
|
/**
|
|
226
321
|
* Executes a GraphQL query or mutation against the remote endpoint.
|
|
227
322
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gql-channel.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gql-channel.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { PollingChannel } from "./polling-channel.js";
|
|
2
2
|
export { GqlChannel, type GqlChannelConfig } from "./gql-channel.js";
|
|
3
3
|
export { GqlChannelFactory } from "./gql-channel-factory.js";
|
|
4
|
+
export { CompositeChannelFactory } from "./composite-channel-factory.js";
|
|
4
5
|
export { envelopeToSyncOperation } from "./utils.js";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { PollingChannel } from "./polling-channel.js";
|
|
2
2
|
export { GqlChannel } from "./gql-channel.js";
|
|
3
3
|
export { GqlChannelFactory } from "./gql-channel-factory.js";
|
|
4
|
+
export { CompositeChannelFactory } from "./composite-channel-factory.js";
|
|
4
5
|
export { envelopeToSyncOperation } from "./utils.js";
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ISyncCursorStorage } from "../../storage/interfaces.js";
|
|
2
|
+
import type { IChannel } from "../interfaces.js";
|
|
3
|
+
import type { SyncOperation } from "../sync-operation.js";
|
|
4
|
+
import { Mailbox } from "../mailbox.js";
|
|
5
|
+
import type { SyncEnvelope } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Channel for cursor-based polling by external clients.
|
|
8
|
+
*
|
|
9
|
+
* PollingChannel does NOT auto-remove operations from the outbox.
|
|
10
|
+
* Operations remain until explicitly acknowledged via cursor
|
|
11
|
+
* advancement through updateCursor().
|
|
12
|
+
*/
|
|
13
|
+
export declare class PollingChannel implements IChannel {
|
|
14
|
+
readonly inbox: Mailbox<SyncOperation>;
|
|
15
|
+
readonly outbox: Mailbox<SyncOperation>;
|
|
16
|
+
readonly deadLetter: Mailbox<SyncOperation>;
|
|
17
|
+
private readonly channelId;
|
|
18
|
+
private readonly remoteName;
|
|
19
|
+
private readonly cursorStorage;
|
|
20
|
+
private isShutdown;
|
|
21
|
+
constructor(channelId: string, remoteName: string, cursorStorage: ISyncCursorStorage);
|
|
22
|
+
shutdown(): void;
|
|
23
|
+
init(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Receives a sync envelope from a peer channel.
|
|
26
|
+
*
|
|
27
|
+
* @param envelope - The sync envelope to receive
|
|
28
|
+
* @throws {PollingChannelError} If channel is shutdown
|
|
29
|
+
*/
|
|
30
|
+
receive(envelope: SyncEnvelope): void;
|
|
31
|
+
/**
|
|
32
|
+
* Advances the cursor and removes acknowledged operations from outbox.
|
|
33
|
+
* Operations with ordinal <= cursorOrdinal are considered acknowledged.
|
|
34
|
+
*
|
|
35
|
+
* @param cursorOrdinal - The last processed ordinal (exclusive)
|
|
36
|
+
*/
|
|
37
|
+
updateCursor(cursorOrdinal: number): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=polling-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling-channel.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/polling-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,aAAa,CAAC;AAG9D;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,UAAU,CAAU;gBAG1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,kBAAkB;IAYnC,QAAQ,IAAI,IAAI;IAIV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAcrC;;;;;OAKG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBzD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { PollingChannelError } from "../errors.js";
|
|
2
|
+
import { Mailbox } from "../mailbox.js";
|
|
3
|
+
import { envelopeToSyncOperation } from "./utils.js";
|
|
4
|
+
/**
|
|
5
|
+
* Channel for cursor-based polling by external clients.
|
|
6
|
+
*
|
|
7
|
+
* PollingChannel does NOT auto-remove operations from the outbox.
|
|
8
|
+
* Operations remain until explicitly acknowledged via cursor
|
|
9
|
+
* advancement through updateCursor().
|
|
10
|
+
*/
|
|
11
|
+
export class PollingChannel {
|
|
12
|
+
inbox;
|
|
13
|
+
outbox;
|
|
14
|
+
deadLetter;
|
|
15
|
+
channelId;
|
|
16
|
+
remoteName;
|
|
17
|
+
cursorStorage;
|
|
18
|
+
isShutdown;
|
|
19
|
+
constructor(channelId, remoteName, cursorStorage) {
|
|
20
|
+
this.channelId = channelId;
|
|
21
|
+
this.remoteName = remoteName;
|
|
22
|
+
this.cursorStorage = cursorStorage;
|
|
23
|
+
this.isShutdown = false;
|
|
24
|
+
this.inbox = new Mailbox();
|
|
25
|
+
this.outbox = new Mailbox();
|
|
26
|
+
this.deadLetter = new Mailbox();
|
|
27
|
+
}
|
|
28
|
+
shutdown() {
|
|
29
|
+
this.isShutdown = true;
|
|
30
|
+
}
|
|
31
|
+
async init() { }
|
|
32
|
+
/**
|
|
33
|
+
* Receives a sync envelope from a peer channel.
|
|
34
|
+
*
|
|
35
|
+
* @param envelope - The sync envelope to receive
|
|
36
|
+
* @throws {PollingChannelError} If channel is shutdown
|
|
37
|
+
*/
|
|
38
|
+
receive(envelope) {
|
|
39
|
+
if (this.isShutdown) {
|
|
40
|
+
throw new PollingChannelError(`Channel ${this.channelId} is shutdown and cannot receive envelopes`);
|
|
41
|
+
}
|
|
42
|
+
if (envelope.type === "operations" && envelope.operations) {
|
|
43
|
+
const syncOp = envelopeToSyncOperation(envelope, this.remoteName);
|
|
44
|
+
syncOp.transported();
|
|
45
|
+
this.inbox.add(syncOp);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Advances the cursor and removes acknowledged operations from outbox.
|
|
50
|
+
* Operations with ordinal <= cursorOrdinal are considered acknowledged.
|
|
51
|
+
*
|
|
52
|
+
* @param cursorOrdinal - The last processed ordinal (exclusive)
|
|
53
|
+
*/
|
|
54
|
+
async updateCursor(cursorOrdinal) {
|
|
55
|
+
const cursor = {
|
|
56
|
+
remoteName: this.remoteName,
|
|
57
|
+
cursorOrdinal,
|
|
58
|
+
lastSyncedAtUtcMs: Date.now(),
|
|
59
|
+
};
|
|
60
|
+
await this.cursorStorage.upsert(cursor);
|
|
61
|
+
for (const op of this.outbox.items) {
|
|
62
|
+
const maxOrdinal = Math.max(...op.operations.map((o) => o.operation.index));
|
|
63
|
+
if (maxOrdinal <= cursorOrdinal) {
|
|
64
|
+
op.executed();
|
|
65
|
+
this.outbox.remove(op);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=polling-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling-channel.js","sourceRoot":"","sources":["../../../../src/sync/channels/polling-channel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAChB,KAAK,CAAyB;IAC9B,MAAM,CAAyB;IAC/B,UAAU,CAAyB;IAE3B,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,aAAa,CAAqB;IAC3C,UAAU,CAAU;IAE5B,YACE,SAAiB,EACjB,UAAkB,EAClB,aAAiC;QAEjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,EAAiB,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,EAAiB,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,OAAO,EAAiB,CAAC;IACjD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,KAAmB,CAAC;IAE9B;;;;;OAKG;IACH,OAAO,CAAC,QAAsB;QAC5B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,mBAAmB,CAC3B,WAAW,IAAI,CAAC,SAAS,2CAA2C,CACrE,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAClE,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,aAAqB;QACtC,MAAM,MAAM,GAAiB;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa;YACb,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE;SAC9B,CAAC;QAEF,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAExC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAC/C,CAAC;YACF,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;gBAChC,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -4,11 +4,13 @@ import type { SyncEnvelope } from "../types.js";
|
|
|
4
4
|
* Converts a SyncEnvelope containing operations into a SyncOperation.
|
|
5
5
|
*
|
|
6
6
|
* Extracts the necessary metadata from the envelope's operations to create
|
|
7
|
-
* a sync operation that can be processed by the receiving channel.
|
|
7
|
+
* a sync operation that can be processed by the receiving channel. Also
|
|
8
|
+
* deserializes any signatures from comma-separated strings back to tuples,
|
|
9
|
+
* as GraphQL transport serializes Signature tuples for compatibility.
|
|
8
10
|
*
|
|
9
11
|
* @param envelope - The sync envelope containing operations
|
|
10
12
|
* @param remoteName - The name of the remote this sync operation is associated with
|
|
11
|
-
* @returns A new SyncOperation containing the envelope's operations
|
|
13
|
+
* @returns A new SyncOperation containing the envelope's operations with deserialized signatures
|
|
12
14
|
* @throws Error if envelope has no operations or operations array is empty
|
|
13
15
|
*/
|
|
14
16
|
export declare function envelopeToSyncOperation(envelope: SyncEnvelope, remoteName: string): SyncOperation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAqDhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,GACjB,aAAa,CA2Bf"}
|