@powerhousedao/reactor 5.1.0 → 5.2.0-dev.1
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/actions/index.d.ts +24 -0
- package/dist/src/actions/index.d.ts.map +1 -0
- package/dist/src/actions/index.js +76 -0
- package/dist/src/actions/index.js.map +1 -0
- 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 +67 -24
- 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 +3 -2
- package/dist/src/cache/kysely-write-cache.js.map +1 -1
- package/dist/src/cache/operation-index-types.d.ts +4 -3
- 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 +22 -10
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/reactor-client.js +145 -48
- package/dist/src/client/reactor-client.js.map +1 -1
- package/dist/src/client/types.d.ts +32 -13
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +19 -12
- package/dist/src/core/reactor-builder.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.js +127 -37
- package/dist/src/core/reactor-builder.js.map +1 -1
- package/dist/src/core/{builder.d.ts → reactor-client-builder.d.ts} +20 -4
- package/dist/src/core/reactor-client-builder.d.ts.map +1 -0
- package/dist/src/core/reactor-client-builder.js +123 -0
- package/dist/src/core/reactor-client-builder.js.map +1 -0
- package/dist/src/core/reactor.d.ts +14 -16
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +101 -110
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/core/types.d.ts +101 -22
- 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 +3 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +10 -7
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +20 -2
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +400 -219
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/types.d.ts +2 -0
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/types.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 +17 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +15 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/logging/console.d.ts +23 -0
- package/dist/src/logging/console.d.ts.map +1 -0
- package/dist/src/logging/console.js +108 -0
- package/dist/src/logging/console.js.map +1 -0
- package/dist/src/logging/types.d.ts +12 -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/processors/index.d.ts +3 -0
- package/dist/src/processors/index.d.ts.map +1 -0
- package/dist/src/processors/index.js +2 -0
- package/dist/src/processors/index.js.map +1 -0
- package/dist/src/processors/processor-manager.d.ts +38 -0
- package/dist/src/processors/processor-manager.d.ts.map +1 -0
- package/dist/src/processors/processor-manager.js +165 -0
- package/dist/src/processors/processor-manager.js.map +1 -0
- package/dist/src/processors/types.d.ts +63 -0
- package/dist/src/processors/types.d.ts.map +1 -0
- package/dist/src/processors/types.js +2 -0
- package/dist/src/processors/types.js.map +1 -0
- package/dist/src/processors/utils.d.ts +10 -0
- package/dist/src/processors/utils.d.ts.map +1 -0
- package/dist/src/processors/utils.js +58 -0
- package/dist/src/processors/utils.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 -2
- package/dist/src/read-models/coordinator.d.ts.map +1 -1
- package/dist/src/read-models/coordinator.js +12 -13
- 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 +18 -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 +94 -1
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/interfaces.js +2 -2
- package/dist/src/storage/interfaces.js.map +1 -1
- package/dist/src/storage/kysely/store.d.ts +1 -0
- package/dist/src/storage/kysely/store.d.ts.map +1 -1
- package/dist/src/storage/kysely/store.js +41 -4
- package/dist/src/storage/kysely/store.js.map +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.js +2 -2
- package/dist/src/storage/kysely/sync-cursor-storage.js.map +1 -1
- package/dist/src/storage/kysely/sync-remote-storage.d.ts.map +1 -1
- package/dist/src/storage/kysely/sync-remote-storage.js +11 -12
- package/dist/src/storage/kysely/sync-remote-storage.js.map +1 -1
- package/dist/src/storage/kysely/types.d.ts +6 -6
- package/dist/src/storage/migrations/001_create_operation_table.d.ts.map +1 -1
- package/dist/src/storage/migrations/001_create_operation_table.js +2 -1
- package/dist/src/storage/migrations/001_create_operation_table.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/009_create_operation_index_tables.js +1 -1
- package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +1 -1
- package/dist/src/storage/migrations/010_create_sync_tables.js +5 -5
- package/dist/src/storage/migrations/010_create_sync_tables.js.map +1 -1
- package/dist/src/storage/migrations/migrator.d.ts +3 -2
- package/dist/src/storage/migrations/migrator.d.ts.map +1 -1
- package/dist/src/storage/migrations/migrator.js +29 -6
- package/dist/src/storage/migrations/migrator.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/storage/txn.d.ts.map +1 -1
- package/dist/src/storage/txn.js +2 -3
- package/dist/src/storage/txn.js.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.d.ts +17 -0
- package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -0
- package/dist/src/subs/subscription-notification-read-model.js +62 -0
- package/dist/src/subs/subscription-notification-read-model.js.map +1 -0
- package/dist/src/sync/channels/composite-channel-factory.d.ts +30 -0
- package/dist/src/sync/channels/composite-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/composite-channel-factory.js +87 -0
- package/dist/src/sync/channels/composite-channel-factory.js.map +1 -0
- package/dist/src/sync/channels/gql-channel-factory.d.ts +25 -0
- package/dist/src/sync/channels/gql-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-channel-factory.js +76 -0
- package/dist/src/sync/channels/gql-channel-factory.js.map +1 -0
- package/dist/src/sync/channels/gql-channel.d.ts +118 -0
- package/dist/src/sync/channels/gql-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-channel.js +423 -0
- package/dist/src/sync/channels/gql-channel.js.map +1 -0
- package/dist/src/sync/channels/index.d.ts +4 -1
- package/dist/src/sync/channels/index.d.ts.map +1 -1
- package/dist/src/sync/channels/index.js +4 -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 +72 -0
- package/dist/src/sync/channels/polling-channel.js.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +17 -2
- package/dist/src/sync/channels/utils.d.ts.map +1 -1
- package/dist/src/sync/channels/utils.js +76 -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 +33 -3
- package/dist/src/sync/interfaces.d.ts.map +1 -1
- package/dist/src/sync/sync-builder.d.ts +4 -2
- package/dist/src/sync/sync-builder.d.ts.map +1 -1
- package/dist/src/sync/sync-builder.js +12 -2
- package/dist/src/sync/sync-builder.js.map +1 -1
- package/dist/src/sync/sync-manager.d.ts +7 -3
- package/dist/src/sync/sync-manager.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.js +79 -10
- package/dist/src/sync/sync-manager.js.map +1 -1
- package/dist/src/sync/types.d.ts +1 -2
- package/dist/src/sync/types.d.ts.map +1 -1
- package/dist/src/sync/utils.d.ts +19 -0
- package/dist/src/sync/utils.d.ts.map +1 -1
- package/dist/src/sync/utils.js +44 -0
- package/dist/src/sync/utils.js.map +1 -1
- package/package.json +6 -5
- package/dist/src/core/builder.d.ts.map +0 -1
- package/dist/src/core/builder.js +0 -88
- 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
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { OperationEventTypes, } from "../events/types.js";
|
|
2
|
-
import { JobStatus, } from "../shared/types.js";
|
|
3
2
|
import { JobAwaiter } from "../shared/awaiter.js";
|
|
3
|
+
import { JobStatus, } from "../shared/types.js";
|
|
4
4
|
import { ChannelError } from "./errors.js";
|
|
5
5
|
import { SyncOperation } from "./sync-operation.js";
|
|
6
6
|
import { ChannelErrorSource, SyncOperationStatus } from "./types.js";
|
|
7
|
-
import { createIdleHealth, filterOperations } from "./utils.js";
|
|
7
|
+
import { batchOperationsByDocument, createIdleHealth, filterOperations, } from "./utils.js";
|
|
8
8
|
export class SyncManager {
|
|
9
|
+
logger;
|
|
9
10
|
remoteStorage;
|
|
10
11
|
cursorStorage;
|
|
11
12
|
channelFactory;
|
|
@@ -17,7 +18,8 @@ export class SyncManager {
|
|
|
17
18
|
isShutdown;
|
|
18
19
|
eventUnsubscribe;
|
|
19
20
|
loadJobs = new Map();
|
|
20
|
-
constructor(remoteStorage, cursorStorage, channelFactory, operationIndex, reactor, eventBus) {
|
|
21
|
+
constructor(logger, remoteStorage, cursorStorage, channelFactory, operationIndex, reactor, eventBus) {
|
|
22
|
+
this.logger = logger;
|
|
21
23
|
this.remoteStorage = remoteStorage;
|
|
22
24
|
this.cursorStorage = cursorStorage;
|
|
23
25
|
this.channelFactory = channelFactory;
|
|
@@ -34,8 +36,16 @@ export class SyncManager {
|
|
|
34
36
|
}
|
|
35
37
|
const remoteRecords = await this.remoteStorage.list();
|
|
36
38
|
for (const record of remoteRecords) {
|
|
37
|
-
const channel = this.channelFactory.instance(record.channelConfig, this.cursorStorage);
|
|
39
|
+
const channel = this.channelFactory.instance(record.id, record.name, record.channelConfig, this.cursorStorage, record.collectionId, record.filter);
|
|
40
|
+
try {
|
|
41
|
+
await channel.init();
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error(`Error initializing channel for remote ${record.name}: ${error instanceof Error ? error.message : String(error)}`);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
38
47
|
const remote = {
|
|
48
|
+
id: record.id,
|
|
39
49
|
name: record.name,
|
|
40
50
|
collectionId: record.collectionId,
|
|
41
51
|
filter: record.filter,
|
|
@@ -67,25 +77,36 @@ export class SyncManager {
|
|
|
67
77
|
isShutdown: true,
|
|
68
78
|
};
|
|
69
79
|
}
|
|
70
|
-
|
|
80
|
+
getByName(name) {
|
|
71
81
|
const remote = this.remotes.get(name);
|
|
72
82
|
if (!remote) {
|
|
73
83
|
throw new Error(`Remote with name '${name}' does not exist`);
|
|
74
84
|
}
|
|
75
85
|
return remote;
|
|
76
86
|
}
|
|
77
|
-
|
|
87
|
+
getById(id) {
|
|
88
|
+
for (const remote of this.remotes.values()) {
|
|
89
|
+
if (remote.id === id) {
|
|
90
|
+
return remote;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
throw new Error(`Remote with id '${id}' does not exist`);
|
|
94
|
+
}
|
|
95
|
+
async add(name, collectionId, channelConfig, filter = { documentId: [], scope: [], branch: "" }, options = {}, id) {
|
|
78
96
|
if (this.isShutdown) {
|
|
79
97
|
throw new Error("SyncManager is shutdown and cannot add remotes");
|
|
80
98
|
}
|
|
81
99
|
if (this.remotes.has(name)) {
|
|
82
100
|
throw new Error(`Remote with name '${name}' already exists`);
|
|
83
101
|
}
|
|
102
|
+
this.logger.debug("Adding remote (@name, @collectionId, @channelConfig, @filter, @options, @id)", name, collectionId, channelConfig, filter, options, id);
|
|
103
|
+
const remoteId = id ?? crypto.randomUUID();
|
|
84
104
|
const status = {
|
|
85
105
|
push: createIdleHealth(),
|
|
86
106
|
pull: createIdleHealth(),
|
|
87
107
|
};
|
|
88
108
|
const remoteRecord = {
|
|
109
|
+
id: remoteId,
|
|
89
110
|
name,
|
|
90
111
|
collectionId,
|
|
91
112
|
channelConfig,
|
|
@@ -94,8 +115,10 @@ export class SyncManager {
|
|
|
94
115
|
status,
|
|
95
116
|
};
|
|
96
117
|
await this.remoteStorage.upsert(remoteRecord);
|
|
97
|
-
const channel = this.channelFactory.instance(channelConfig, this.cursorStorage);
|
|
118
|
+
const channel = this.channelFactory.instance(remoteId, name, channelConfig, this.cursorStorage, collectionId, filter);
|
|
119
|
+
await channel.init();
|
|
98
120
|
const remote = {
|
|
121
|
+
id: remoteId,
|
|
99
122
|
name,
|
|
100
123
|
collectionId,
|
|
101
124
|
filter,
|
|
@@ -104,8 +127,47 @@ export class SyncManager {
|
|
|
104
127
|
};
|
|
105
128
|
this.remotes.set(name, remote);
|
|
106
129
|
this.wireChannelCallbacks(remote);
|
|
130
|
+
await this.backfillOutbox(remote, collectionId, filter);
|
|
107
131
|
return remote;
|
|
108
132
|
}
|
|
133
|
+
async backfillOutbox(remote, collectionId, filter) {
|
|
134
|
+
let historicalOps;
|
|
135
|
+
try {
|
|
136
|
+
historicalOps = await this._operationIndex.find(collectionId);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (historicalOps.items.length === 0) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const opsWithContext = historicalOps.items.map((entry) => ({
|
|
145
|
+
operation: {
|
|
146
|
+
id: entry.id,
|
|
147
|
+
index: entry.index,
|
|
148
|
+
skip: entry.skip,
|
|
149
|
+
hash: entry.hash,
|
|
150
|
+
timestampUtcMs: entry.timestampUtcMs,
|
|
151
|
+
action: entry.action,
|
|
152
|
+
},
|
|
153
|
+
context: {
|
|
154
|
+
documentId: entry.documentId,
|
|
155
|
+
documentType: entry.documentType,
|
|
156
|
+
scope: entry.scope,
|
|
157
|
+
branch: entry.branch,
|
|
158
|
+
ordinal: entry.ordinal ?? 0,
|
|
159
|
+
},
|
|
160
|
+
}));
|
|
161
|
+
const filteredOps = filterOperations(opsWithContext, filter);
|
|
162
|
+
if (filteredOps.length === 0) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const batches = batchOperationsByDocument(filteredOps);
|
|
166
|
+
for (const batch of batches) {
|
|
167
|
+
const syncOp = new SyncOperation(crypto.randomUUID(), remote.name, batch.documentId, [batch.scope], batch.branch, batch.operations);
|
|
168
|
+
remote.channel.outbox.add(syncOp);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
109
171
|
async remove(name) {
|
|
110
172
|
const remote = this.remotes.get(name);
|
|
111
173
|
if (!remote) {
|
|
@@ -130,13 +192,20 @@ export class SyncManager {
|
|
|
130
192
|
if (this.isShutdown) {
|
|
131
193
|
return;
|
|
132
194
|
}
|
|
195
|
+
const sourceRemote = event.jobMeta?.sourceRemote;
|
|
133
196
|
for (const remote of this.remotes.values()) {
|
|
197
|
+
if (sourceRemote && remote.name === sourceRemote) {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
134
200
|
const filteredOps = filterOperations(event.operations, remote.filter);
|
|
135
201
|
if (filteredOps.length === 0) {
|
|
136
202
|
continue;
|
|
137
203
|
}
|
|
138
|
-
const
|
|
139
|
-
|
|
204
|
+
const batches = batchOperationsByDocument(filteredOps);
|
|
205
|
+
for (const batch of batches) {
|
|
206
|
+
const syncOp = new SyncOperation(crypto.randomUUID(), remote.name, batch.documentId, [batch.scope], batch.branch, batch.operations);
|
|
207
|
+
remote.channel.outbox.add(syncOp);
|
|
208
|
+
}
|
|
140
209
|
}
|
|
141
210
|
}
|
|
142
211
|
handleInboxJob(remote, syncOp) {
|
|
@@ -159,7 +228,7 @@ export class SyncManager {
|
|
|
159
228
|
const operations = syncOp.operations.map((op) => op.operation);
|
|
160
229
|
let jobInfo;
|
|
161
230
|
try {
|
|
162
|
-
jobInfo = await this.reactor.load(syncOp.documentId, syncOp.branch, operations);
|
|
231
|
+
jobInfo = await this.reactor.load(syncOp.documentId, syncOp.branch, operations, undefined, { sourceRemote: remote.name });
|
|
163
232
|
}
|
|
164
233
|
catch (error) {
|
|
165
234
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-manager.js","sourceRoot":"","sources":["../../../src/sync/sync-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-manager.js","sourceRoot":"","sources":["../../../src/sync/sync-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/src/sync/types.d.ts
CHANGED
|
@@ -46,11 +46,10 @@ export type RemoteStatus = {
|
|
|
46
46
|
};
|
|
47
47
|
export type ChannelConfig = {
|
|
48
48
|
type: string;
|
|
49
|
-
channelId: string;
|
|
50
|
-
remoteName: string;
|
|
51
49
|
parameters: Record<string, unknown>;
|
|
52
50
|
};
|
|
53
51
|
export type RemoteRecord = {
|
|
52
|
+
id: string;
|
|
54
53
|
name: string;
|
|
55
54
|
collectionId: string;
|
|
56
55
|
channelConfig: ChannelConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sync/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,MAAM,MAAM,aAAa,GAAG,EAE3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,KAAK,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,oBAAY,mBAAmB;IAC7B,OAAO,KAAK;IACZ,gBAAgB,IAAI;IACpB,gBAAgB,IAAI;IACpB,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,CAAC;AAErB,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sync/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,MAAM,MAAM,aAAa,GAAG,EAE3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,KAAK,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,oBAAY,mBAAmB;IAC7B,OAAO,KAAK;IACZ,gBAAgB,IAAI;IACpB,gBAAgB,IAAI;IACpB,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,CAAC;AAErB,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC"}
|
package/dist/src/sync/utils.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { OperationWithContext } from "../storage/interfaces.js";
|
|
2
2
|
import type { ChannelHealth, RemoteFilter } from "./types.js";
|
|
3
|
+
export type OperationBatch = {
|
|
4
|
+
documentId: string;
|
|
5
|
+
branch: string;
|
|
6
|
+
scope: string;
|
|
7
|
+
operations: OperationWithContext[];
|
|
8
|
+
};
|
|
3
9
|
/**
|
|
4
10
|
* Filters operations based on a remote's filter criteria.
|
|
5
11
|
*
|
|
@@ -14,4 +20,17 @@ export declare function filterOperations(operations: OperationWithContext[], fil
|
|
|
14
20
|
* @returns A new idle channel health object
|
|
15
21
|
*/
|
|
16
22
|
export declare function createIdleHealth(): ChannelHealth;
|
|
23
|
+
/**
|
|
24
|
+
* Batches consecutive operations by documentId and scope, preserving ordering.
|
|
25
|
+
*
|
|
26
|
+
* For operations [a1_doc, a1_global, a2_doc, b1_global], this returns:
|
|
27
|
+
* - Batch 1: [a1_doc] for doc-a, document scope
|
|
28
|
+
* - Batch 2: [a1_global] for doc-a, global scope
|
|
29
|
+
* - Batch 3: [a2_doc] for doc-a, document scope
|
|
30
|
+
* - Batch 4: [b1_global] for doc-b, global scope
|
|
31
|
+
*
|
|
32
|
+
* This ensures operations are grouped for efficient processing while maintaining
|
|
33
|
+
* causality across documents and scopes.
|
|
34
|
+
*/
|
|
35
|
+
export declare function batchOperationsByDocument(operations: OperationWithContext[]): OperationBatch[];
|
|
17
36
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/sync/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,oBAAoB,EAAE,EAClC,MAAM,EAAE,YAAY,GACnB,oBAAoB,EAAE,CAmBxB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/sync/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,oBAAoB,EAAE,EAClC,MAAM,EAAE,YAAY,GACnB,oBAAoB,EAAE,CAmBxB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,oBAAoB,EAAE,GACjC,cAAc,EAAE,CAsClB"}
|
package/dist/src/sync/utils.js
CHANGED
|
@@ -31,4 +31,48 @@ export function createIdleHealth() {
|
|
|
31
31
|
failureCount: 0,
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Batches consecutive operations by documentId and scope, preserving ordering.
|
|
36
|
+
*
|
|
37
|
+
* For operations [a1_doc, a1_global, a2_doc, b1_global], this returns:
|
|
38
|
+
* - Batch 1: [a1_doc] for doc-a, document scope
|
|
39
|
+
* - Batch 2: [a1_global] for doc-a, global scope
|
|
40
|
+
* - Batch 3: [a2_doc] for doc-a, document scope
|
|
41
|
+
* - Batch 4: [b1_global] for doc-b, global scope
|
|
42
|
+
*
|
|
43
|
+
* This ensures operations are grouped for efficient processing while maintaining
|
|
44
|
+
* causality across documents and scopes.
|
|
45
|
+
*/
|
|
46
|
+
export function batchOperationsByDocument(operations) {
|
|
47
|
+
const batches = [];
|
|
48
|
+
let currentDocId = null;
|
|
49
|
+
let currentScope = null;
|
|
50
|
+
let currentBatch = [];
|
|
51
|
+
const flushBatch = () => {
|
|
52
|
+
if (currentBatch.length === 0 ||
|
|
53
|
+
currentDocId === null ||
|
|
54
|
+
currentScope === null) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
batches.push({
|
|
58
|
+
documentId: currentDocId,
|
|
59
|
+
branch: currentBatch[0].context.branch,
|
|
60
|
+
scope: currentScope,
|
|
61
|
+
operations: currentBatch,
|
|
62
|
+
});
|
|
63
|
+
currentBatch = [];
|
|
64
|
+
};
|
|
65
|
+
for (const op of operations) {
|
|
66
|
+
const docId = op.context.documentId;
|
|
67
|
+
const scope = op.context.scope;
|
|
68
|
+
if (docId !== currentDocId || scope !== currentScope) {
|
|
69
|
+
flushBatch();
|
|
70
|
+
currentDocId = docId;
|
|
71
|
+
currentScope = scope;
|
|
72
|
+
}
|
|
73
|
+
currentBatch.push(op);
|
|
74
|
+
}
|
|
75
|
+
flushBatch();
|
|
76
|
+
return batches;
|
|
77
|
+
}
|
|
34
78
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/sync/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/sync/utils.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkC,EAClC,MAAoB;IAEpB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;QAC9B,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IACE,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAC5B,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAClD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,CAAC;KAChB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAkC;IAElC,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,YAAY,GAA2B,EAAE,CAAC;IAE9C,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IACE,YAAY,CAAC,MAAM,KAAK,CAAC;YACzB,YAAY,KAAK,IAAI;YACrB,YAAY,KAAK,IAAI,EACrB,CAAC;YACD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,UAAU,EAAE,YAAY;YACxB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;YACtC,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,YAAY;SACzB,CAAC,CAAC;QACH,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;QACpC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/B,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YACrD,UAAU,EAAE,CAAC;YACb,YAAY,GAAG,KAAK,CAAC;YACrB,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,UAAU,EAAE,CAAC;IACb,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/reactor",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0-dev.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -26,15 +26,15 @@
|
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@electric-sql/pglite": "0.2.17",
|
|
28
28
|
"kysely": "^0.28.2",
|
|
29
|
-
"kysely-pglite": "^
|
|
29
|
+
"kysely-pglite-dialect": "^1.1.1",
|
|
30
30
|
"uuid": "^11.0.5",
|
|
31
|
-
"document-drive": "5.
|
|
32
|
-
"document-model": "5.
|
|
31
|
+
"document-drive": "5.2.0-dev.1",
|
|
32
|
+
"document-model": "5.2.0-dev.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@vitest/coverage-v8": "^3.2.4",
|
|
36
|
-
"tsx": "^4.19.2",
|
|
37
36
|
"tinybench": "^2.9.0",
|
|
37
|
+
"tsx": "^4.19.2",
|
|
38
38
|
"typescript": "^5.7.3",
|
|
39
39
|
"vitest": "^3.2.4"
|
|
40
40
|
},
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"test:watch": "vitest --coverage",
|
|
47
47
|
"lint": "eslint",
|
|
48
48
|
"bench": "vitest bench --run",
|
|
49
|
+
"bench:sync": "node --import tsx bench/two-reactor-sync.bench.ts",
|
|
49
50
|
"clean": "rimraf dist",
|
|
50
51
|
"clean:node_modules": "rimraf node_modules",
|
|
51
52
|
"claude": "pnpm build && pnpm test && npx prettier --write \"**/*.ts\" && pnpm lint",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/core/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,OAAO,CAAC,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAY;IAC7B,OAAO,CAAC,eAAe,CAAC,CAAmB;IAC3C,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,OAAO,CAAC,mBAAmB,CAAC,CAA8B;IAC1D,OAAO,CAAC,UAAU,CAAC,CAAc;IAEjC;;OAEG;IACI,kBAAkB,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;IAS/D;;OAEG;IACI,WAAW,CAChB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS,EACnB,eAAe,EAAE,gBAAgB,GAChC,IAAI;IAWA,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKjC,uBAAuB,CAC5B,mBAAmB,EAAE,2BAA2B,GAC/C,IAAI;IAKA,cAAc,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAKvC,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;CAwD7C"}
|
package/dist/src/core/builder.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { ReactorClient } from "../client/reactor-client.js";
|
|
2
|
-
import { JobAwaiter } from "../shared/awaiter.js";
|
|
3
|
-
import { PassthroughSigner } from "../signer/passthrough-signer.js";
|
|
4
|
-
import { DefaultSubscriptionErrorHandler } from "../subs/default-error-handler.js";
|
|
5
|
-
import { ReactorSubscriptionManager } from "../subs/react-subscription-manager.js";
|
|
6
|
-
/**
|
|
7
|
-
* Builder class for constructing ReactorClient instances with proper configuration
|
|
8
|
-
*/
|
|
9
|
-
export class ReactorClientBuilder {
|
|
10
|
-
reactorBuilder;
|
|
11
|
-
reactor;
|
|
12
|
-
eventBus;
|
|
13
|
-
documentIndexer;
|
|
14
|
-
signer;
|
|
15
|
-
subscriptionManager;
|
|
16
|
-
jobAwaiter;
|
|
17
|
-
/**
|
|
18
|
-
* Either this or withReactor must be set.
|
|
19
|
-
*/
|
|
20
|
-
withReactorBuilder(reactorBuilder) {
|
|
21
|
-
if (this.reactor) {
|
|
22
|
-
throw new Error("Reactor is already set");
|
|
23
|
-
}
|
|
24
|
-
this.reactorBuilder = reactorBuilder;
|
|
25
|
-
return this;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Either this or withReactorBuilder must be set.
|
|
29
|
-
*/
|
|
30
|
-
withReactor(reactor, eventBus, documentIndexer) {
|
|
31
|
-
if (this.reactorBuilder) {
|
|
32
|
-
throw new Error("ReactorBuilder is already set");
|
|
33
|
-
}
|
|
34
|
-
this.reactor = reactor;
|
|
35
|
-
this.eventBus = eventBus;
|
|
36
|
-
this.documentIndexer = documentIndexer;
|
|
37
|
-
return this;
|
|
38
|
-
}
|
|
39
|
-
withSigner(signer) {
|
|
40
|
-
this.signer = signer;
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
withSubscriptionManager(subscriptionManager) {
|
|
44
|
-
this.subscriptionManager = subscriptionManager;
|
|
45
|
-
return this;
|
|
46
|
-
}
|
|
47
|
-
withJobAwaiter(jobAwaiter) {
|
|
48
|
-
this.jobAwaiter = jobAwaiter;
|
|
49
|
-
return this;
|
|
50
|
-
}
|
|
51
|
-
async build() {
|
|
52
|
-
let reactor;
|
|
53
|
-
let eventBus;
|
|
54
|
-
let documentIndexer;
|
|
55
|
-
if (this.reactorBuilder) {
|
|
56
|
-
reactor = await this.reactorBuilder.build();
|
|
57
|
-
const builderEventBus = this.reactorBuilder.events;
|
|
58
|
-
const builderDocumentIndexer = this.reactorBuilder.documentIndexer;
|
|
59
|
-
if (!builderEventBus) {
|
|
60
|
-
throw new Error("Event bus is required in ReactorBuilder");
|
|
61
|
-
}
|
|
62
|
-
if (!builderDocumentIndexer) {
|
|
63
|
-
throw new Error("DocumentIndexer must be initialized by ReactorBuilder");
|
|
64
|
-
}
|
|
65
|
-
eventBus = builderEventBus;
|
|
66
|
-
documentIndexer = builderDocumentIndexer;
|
|
67
|
-
}
|
|
68
|
-
else if (this.reactor && this.eventBus && this.documentIndexer) {
|
|
69
|
-
reactor = this.reactor;
|
|
70
|
-
eventBus = this.eventBus;
|
|
71
|
-
documentIndexer = this.documentIndexer;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
throw new Error("Either ReactorBuilder or (Reactor + EventBus + DocumentIndexer) is required");
|
|
75
|
-
}
|
|
76
|
-
if (!this.signer) {
|
|
77
|
-
this.signer = new PassthroughSigner();
|
|
78
|
-
}
|
|
79
|
-
if (!this.subscriptionManager) {
|
|
80
|
-
this.subscriptionManager = new ReactorSubscriptionManager(new DefaultSubscriptionErrorHandler());
|
|
81
|
-
}
|
|
82
|
-
if (!this.jobAwaiter) {
|
|
83
|
-
this.jobAwaiter = new JobAwaiter(eventBus, (jobId, signal) => reactor.getJobStatus(jobId, signal));
|
|
84
|
-
}
|
|
85
|
-
return new ReactorClient(reactor, this.signer, this.subscriptionManager, this.jobAwaiter, documentIndexer);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/core/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
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
|
-
* In-memory synchronization channel for testing purposes only.
|
|
8
|
-
*
|
|
9
|
-
* InternalChannel enables direct bidirectional communication between two reactor
|
|
10
|
-
* instances without network transport. Channels are wired together by passing
|
|
11
|
-
* a send function that delivers envelopes to the peer's inbox.
|
|
12
|
-
*/
|
|
13
|
-
export declare class InternalChannel 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 readonly send;
|
|
21
|
-
private isShutdown;
|
|
22
|
-
constructor(channelId: string, remoteName: string, cursorStorage: ISyncCursorStorage, send: (envelope: SyncEnvelope) => void);
|
|
23
|
-
/**
|
|
24
|
-
* Shuts down the channel and prevents further operations.
|
|
25
|
-
*/
|
|
26
|
-
shutdown(): void;
|
|
27
|
-
/**
|
|
28
|
-
* Receives a sync envelope from a peer channel.
|
|
29
|
-
*
|
|
30
|
-
* This method is called by the peer's send function to deliver an envelope
|
|
31
|
-
* to this channel's inbox.
|
|
32
|
-
*
|
|
33
|
-
* @param envelope - The sync envelope to receive
|
|
34
|
-
* @throws {InternalChannelError} If channel is shutdown
|
|
35
|
-
*/
|
|
36
|
-
receive(envelope: SyncEnvelope): void;
|
|
37
|
-
/**
|
|
38
|
-
* Updates the synchronization cursor for this channel's remote.
|
|
39
|
-
*
|
|
40
|
-
* Cursors track progress through the operation stream and enable resuming
|
|
41
|
-
* synchronization after restarts. The cursor is exclusive - the next sync
|
|
42
|
-
* will start at cursorOrdinal + 1.
|
|
43
|
-
*
|
|
44
|
-
* @param cursorOrdinal - The last processed ordinal (exclusive)
|
|
45
|
-
*/
|
|
46
|
-
updateCursor(cursorOrdinal: number): Promise<void>;
|
|
47
|
-
/**
|
|
48
|
-
* Handles sync operations added to the outbox by sending them to the peer.
|
|
49
|
-
*
|
|
50
|
-
* This method is called automatically via the outbox.onAdded callback.
|
|
51
|
-
* It converts the sync operation to a SyncEnvelope and sends it via the send function.
|
|
52
|
-
*
|
|
53
|
-
* @param syncOp - The sync operation to transport
|
|
54
|
-
*/
|
|
55
|
-
private handleOutboxAdded;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=internal-channel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal-channel.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/internal-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;AAI9D;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,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,IAAI,CAAmC;IACxD,OAAO,CAAC,UAAU,CAAU;gBAG1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,kBAAkB,EACjC,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI;IAiBxC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAcrC;;;;;;;;OAQG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CAuB1B"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { ChannelError, InternalChannelError } from "../errors.js";
|
|
2
|
-
import { Mailbox } from "../mailbox.js";
|
|
3
|
-
import { ChannelErrorSource } from "../types.js";
|
|
4
|
-
import { envelopeToSyncOperation } from "./utils.js";
|
|
5
|
-
/**
|
|
6
|
-
* In-memory synchronization channel for testing purposes only.
|
|
7
|
-
*
|
|
8
|
-
* InternalChannel enables direct bidirectional communication between two reactor
|
|
9
|
-
* instances without network transport. Channels are wired together by passing
|
|
10
|
-
* a send function that delivers envelopes to the peer's inbox.
|
|
11
|
-
*/
|
|
12
|
-
export class InternalChannel {
|
|
13
|
-
inbox;
|
|
14
|
-
outbox;
|
|
15
|
-
deadLetter;
|
|
16
|
-
channelId;
|
|
17
|
-
remoteName;
|
|
18
|
-
cursorStorage;
|
|
19
|
-
send;
|
|
20
|
-
isShutdown;
|
|
21
|
-
constructor(channelId, remoteName, cursorStorage, send) {
|
|
22
|
-
this.channelId = channelId;
|
|
23
|
-
this.remoteName = remoteName;
|
|
24
|
-
this.cursorStorage = cursorStorage;
|
|
25
|
-
this.send = send;
|
|
26
|
-
this.isShutdown = false;
|
|
27
|
-
this.inbox = new Mailbox();
|
|
28
|
-
this.outbox = new Mailbox();
|
|
29
|
-
this.deadLetter = new Mailbox();
|
|
30
|
-
this.outbox.onAdded((syncOp) => {
|
|
31
|
-
this.handleOutboxAdded(syncOp);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Shuts down the channel and prevents further operations.
|
|
36
|
-
*/
|
|
37
|
-
shutdown() {
|
|
38
|
-
this.isShutdown = true;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Receives a sync envelope from a peer channel.
|
|
42
|
-
*
|
|
43
|
-
* This method is called by the peer's send function to deliver an envelope
|
|
44
|
-
* to this channel's inbox.
|
|
45
|
-
*
|
|
46
|
-
* @param envelope - The sync envelope to receive
|
|
47
|
-
* @throws {InternalChannelError} If channel is shutdown
|
|
48
|
-
*/
|
|
49
|
-
receive(envelope) {
|
|
50
|
-
if (this.isShutdown) {
|
|
51
|
-
throw new InternalChannelError(`Channel ${this.channelId} is shutdown and cannot receive envelopes`);
|
|
52
|
-
}
|
|
53
|
-
if (envelope.type === "operations" && envelope.operations) {
|
|
54
|
-
const syncOp = envelopeToSyncOperation(envelope, this.remoteName);
|
|
55
|
-
syncOp.transported();
|
|
56
|
-
this.inbox.add(syncOp);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Updates the synchronization cursor for this channel's remote.
|
|
61
|
-
*
|
|
62
|
-
* Cursors track progress through the operation stream and enable resuming
|
|
63
|
-
* synchronization after restarts. The cursor is exclusive - the next sync
|
|
64
|
-
* will start at cursorOrdinal + 1.
|
|
65
|
-
*
|
|
66
|
-
* @param cursorOrdinal - The last processed ordinal (exclusive)
|
|
67
|
-
*/
|
|
68
|
-
async updateCursor(cursorOrdinal) {
|
|
69
|
-
const cursor = {
|
|
70
|
-
remoteName: this.remoteName,
|
|
71
|
-
cursorOrdinal,
|
|
72
|
-
lastSyncedAtUtcMs: Date.now(),
|
|
73
|
-
};
|
|
74
|
-
await this.cursorStorage.upsert(cursor);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Handles sync operations added to the outbox by sending them to the peer.
|
|
78
|
-
*
|
|
79
|
-
* This method is called automatically via the outbox.onAdded callback.
|
|
80
|
-
* It converts the sync operation to a SyncEnvelope and sends it via the send function.
|
|
81
|
-
*
|
|
82
|
-
* @param syncOp - The sync operation to transport
|
|
83
|
-
*/
|
|
84
|
-
handleOutboxAdded(syncOp) {
|
|
85
|
-
if (this.isShutdown) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
try {
|
|
89
|
-
syncOp.started();
|
|
90
|
-
const envelope = {
|
|
91
|
-
type: "operations",
|
|
92
|
-
channelMeta: { id: this.channelId },
|
|
93
|
-
operations: syncOp.operations,
|
|
94
|
-
};
|
|
95
|
-
this.send(envelope);
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
99
|
-
const channelError = new ChannelError(ChannelErrorSource.Outbox, err);
|
|
100
|
-
syncOp.failed(channelError);
|
|
101
|
-
this.deadLetter.add(syncOp);
|
|
102
|
-
this.outbox.remove(syncOp);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=internal-channel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal-channel.js","sourceRoot":"","sources":["../../../../src/sync/channels/internal-channel.ts"],"names":[],"mappings":"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"}
|