@powerhousedao/reactor 5.0.3 → 5.0.4
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/index.d.ts +3 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +2 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/kysely-operation-index.d.ts +13 -0
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -0
- package/dist/src/cache/kysely-operation-index.js +207 -0
- package/dist/src/cache/kysely-operation-index.js.map +1 -0
- package/dist/src/cache/kysely-write-cache.d.ts +5 -4
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
- package/dist/src/cache/kysely-write-cache.js +12 -12
- package/dist/src/cache/kysely-write-cache.js.map +1 -1
- package/dist/src/cache/operation-index-types.d.ts +49 -0
- package/dist/src/cache/operation-index-types.d.ts.map +1 -0
- package/dist/src/cache/operation-index-types.js +4 -0
- package/dist/src/cache/operation-index-types.js.map +1 -0
- package/dist/src/cache/{types.d.ts → write-cache-types.d.ts} +1 -1
- package/dist/src/cache/write-cache-types.d.ts.map +1 -0
- package/dist/src/cache/write-cache-types.js +2 -0
- package/dist/src/cache/write-cache-types.js.map +1 -0
- package/dist/src/client/reactor-client.d.ts +6 -4
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/reactor-client.js +118 -37
- package/dist/src/client/reactor-client.js.map +1 -1
- package/dist/src/client/types.d.ts +4 -4
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/core/builder.d.ts +15 -2
- package/dist/src/core/builder.d.ts.map +1 -1
- package/dist/src/core/builder.js +48 -7
- package/dist/src/core/builder.js.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +40 -0
- package/dist/src/core/reactor-builder.d.ts.map +1 -0
- package/dist/src/core/reactor-builder.js +141 -0
- package/dist/src/core/reactor-builder.js.map +1 -0
- package/dist/src/core/reactor.d.ts +36 -11
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +609 -279
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/core/types.d.ts +84 -7
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/utils.d.ts +44 -4
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/core/utils.js +116 -6
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/events/types.d.ts +28 -0
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js +2 -0
- package/dist/src/events/types.js.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 +19 -1
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +16 -2
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +458 -252
- 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 +18 -0
- package/dist/src/executor/util.d.ts.map +1 -1
- package/dist/src/executor/util.js +42 -1
- package/dist/src/executor/util.js.map +1 -1
- package/dist/src/index.d.ts +12 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts +10 -1
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.js +57 -23
- package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -1
- package/dist/src/job-tracker/interfaces.d.ts +5 -7
- package/dist/src/job-tracker/interfaces.d.ts.map +1 -1
- package/dist/src/queue/types.d.ts +6 -1
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/read-models/coordinator.d.ts.map +1 -1
- package/dist/src/read-models/coordinator.js +11 -0
- package/dist/src/read-models/coordinator.js.map +1 -1
- package/dist/src/read-models/document-view.d.ts +11 -6
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/document-view.js +156 -113
- package/dist/src/read-models/document-view.js.map +1 -1
- package/dist/src/read-models/types.d.ts +3 -3
- package/dist/src/read-models/types.d.ts.map +1 -1
- package/dist/src/shared/awaiter.d.ts +11 -8
- package/dist/src/shared/awaiter.d.ts.map +1 -1
- package/dist/src/shared/awaiter.js +66 -75
- package/dist/src/shared/awaiter.js.map +1 -1
- package/dist/src/shared/consistency-tracker.d.ts +48 -0
- package/dist/src/shared/consistency-tracker.d.ts.map +1 -0
- package/dist/src/shared/consistency-tracker.js +123 -0
- package/dist/src/shared/consistency-tracker.js.map +1 -0
- package/dist/src/shared/types.d.ts +30 -2
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js +4 -2
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/storage/index.d.ts +4 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +3 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +227 -2
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/interfaces.js.map +1 -1
- package/dist/src/storage/kysely/document-indexer.d.ts +28 -0
- package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -0
- package/dist/src/storage/kysely/document-indexer.js +350 -0
- package/dist/src/storage/kysely/document-indexer.js.map +1 -0
- package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -1
- package/dist/src/storage/kysely/keyframe-store.js +6 -13
- package/dist/src/storage/kysely/keyframe-store.js.map +1 -1
- package/dist/src/storage/kysely/store.js +1 -1
- package/dist/src/storage/kysely/store.js.map +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts +13 -0
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +1 -0
- package/dist/src/storage/kysely/sync-cursor-storage.js +93 -0
- package/dist/src/storage/kysely/sync-cursor-storage.js.map +1 -0
- package/dist/src/storage/kysely/sync-remote-storage.d.ts +13 -0
- package/dist/src/storage/kysely/sync-remote-storage.d.ts.map +1 -0
- package/dist/src/storage/kysely/sync-remote-storage.js +134 -0
- package/dist/src/storage/kysely/sync-remote-storage.js.map +1 -0
- package/dist/src/storage/kysely/types.d.ts +98 -2
- package/dist/src/storage/kysely/types.d.ts.map +1 -1
- package/dist/src/storage/migrations/001_create_operation_table.d.ts +3 -0
- package/dist/src/storage/migrations/001_create_operation_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/001_create_operation_table.js +40 -0
- package/dist/src/storage/migrations/001_create_operation_table.js.map +1 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.d.ts +3 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.js +27 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.js.map +1 -0
- package/dist/src/storage/migrations/003_create_document_table.d.ts +3 -0
- package/dist/src/storage/migrations/003_create_document_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/003_create_document_table.js +10 -0
- package/dist/src/storage/migrations/003_create_document_table.js.map +1 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts +3 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.js +35 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.js.map +1 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts +3 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.js +10 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.js.map +1 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts +3 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.js +49 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.js.map +1 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts +3 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.js +24 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.js.map +1 -0
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts +3 -0
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/008_create_view_state_table.js +9 -0
- package/dist/src/storage/migrations/008_create_view_state_table.js.map +1 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts +3 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts.map +1 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.js +50 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +1 -0
- package/dist/src/storage/migrations/010_create_sync_tables.d.ts +3 -0
- package/dist/src/storage/migrations/010_create_sync_tables.d.ts.map +1 -0
- package/dist/src/storage/migrations/010_create_sync_tables.js +43 -0
- package/dist/src/storage/migrations/010_create_sync_tables.js.map +1 -0
- package/dist/src/storage/migrations/index.d.ts +3 -0
- package/dist/src/storage/migrations/index.d.ts.map +1 -0
- package/dist/src/storage/migrations/index.js +3 -0
- package/dist/src/storage/migrations/index.js.map +1 -0
- package/dist/src/storage/migrations/migrator.d.ts +5 -0
- package/dist/src/storage/migrations/migrator.d.ts.map +1 -0
- package/dist/src/storage/migrations/migrator.js +55 -0
- package/dist/src/storage/migrations/migrator.js.map +1 -0
- package/dist/src/storage/migrations/run-migrations.d.ts +2 -0
- package/dist/src/storage/migrations/run-migrations.d.ts.map +1 -0
- package/dist/src/storage/migrations/run-migrations.js +58 -0
- package/dist/src/storage/migrations/run-migrations.js.map +1 -0
- package/dist/src/storage/migrations/types.d.ts +9 -0
- package/dist/src/storage/migrations/types.d.ts.map +1 -0
- package/dist/src/storage/migrations/types.js.map +1 -0
- package/dist/src/storage/txn.d.ts.map +1 -1
- package/dist/src/storage/txn.js +2 -0
- package/dist/src/storage/txn.js.map +1 -1
- package/dist/src/sync/channels/index.d.ts +3 -0
- package/dist/src/sync/channels/index.d.ts.map +1 -0
- package/dist/src/sync/channels/index.js +3 -0
- package/dist/src/sync/channels/index.js.map +1 -0
- package/dist/src/sync/channels/internal-channel.d.ts +57 -0
- package/dist/src/sync/channels/internal-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/internal-channel.js +106 -0
- package/dist/src/sync/channels/internal-channel.js.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +15 -0
- package/dist/src/sync/channels/utils.d.ts.map +1 -0
- package/dist/src/sync/channels/utils.js +26 -0
- package/dist/src/sync/channels/utils.js.map +1 -0
- package/dist/src/sync/errors.d.ts +10 -0
- package/dist/src/sync/errors.d.ts.map +1 -0
- package/dist/src/sync/errors.js +17 -0
- package/dist/src/sync/errors.js.map +1 -0
- package/dist/src/sync/index.d.ts +12 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +9 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/interfaces.d.ts +150 -0
- package/dist/src/sync/interfaces.d.ts.map +1 -0
- package/dist/src/sync/interfaces.js +2 -0
- package/dist/src/sync/interfaces.js.map +1 -0
- package/dist/src/sync/mailbox.d.ts +21 -0
- package/dist/src/sync/mailbox.d.ts.map +1 -0
- package/dist/src/sync/mailbox.js +59 -0
- package/dist/src/sync/mailbox.js.map +1 -0
- package/dist/src/sync/sync-builder.d.ts +17 -0
- package/dist/src/sync/sync-builder.d.ts.map +1 -0
- package/dist/src/sync/sync-builder.js +29 -0
- package/dist/src/sync/sync-builder.js.map +1 -0
- package/dist/src/sync/sync-manager.d.ts +33 -0
- package/dist/src/sync/sync-manager.d.ts.map +1 -0
- package/dist/src/sync/sync-manager.js +197 -0
- package/dist/src/sync/sync-manager.js.map +1 -0
- package/dist/src/sync/sync-operation.d.ts +28 -0
- package/dist/src/sync/sync-operation.d.ts.map +1 -0
- package/dist/src/sync/sync-operation.js +63 -0
- package/dist/src/sync/sync-operation.js.map +1 -0
- package/dist/src/sync/types.d.ts +61 -0
- package/dist/src/sync/types.d.ts.map +1 -0
- package/dist/src/sync/types.js +16 -0
- package/dist/src/sync/types.js.map +1 -0
- package/dist/src/sync/utils.d.ts +17 -0
- package/dist/src/sync/utils.d.ts.map +1 -0
- package/dist/src/sync/utils.js +34 -0
- package/dist/src/sync/utils.js.map +1 -0
- package/package.json +9 -5
- package/dist/src/cache/types.d.ts.map +0 -1
- package/dist/src/cache/types.js.map +0 -1
- /package/dist/src/{cache → storage/migrations}/types.js +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IOperationIndex } from "../cache/operation-index-types.js";
|
|
2
|
+
import type { IReactor } from "../core/types.js";
|
|
3
|
+
import type { IEventBus } from "../events/interfaces.js";
|
|
4
|
+
import { type JobInfo, type ShutdownStatus } from "../shared/types.js";
|
|
5
|
+
import type { ISyncCursorStorage, ISyncRemoteStorage } from "../storage/interfaces.js";
|
|
6
|
+
import type { IChannelFactory, ISyncManager, Remote } from "./interfaces.js";
|
|
7
|
+
import type { ChannelConfig, RemoteFilter, RemoteOptions } from "./types.js";
|
|
8
|
+
export declare class SyncManager implements ISyncManager {
|
|
9
|
+
private readonly remoteStorage;
|
|
10
|
+
private readonly cursorStorage;
|
|
11
|
+
private readonly channelFactory;
|
|
12
|
+
private readonly _operationIndex;
|
|
13
|
+
private readonly reactor;
|
|
14
|
+
private readonly eventBus;
|
|
15
|
+
private readonly remotes;
|
|
16
|
+
private readonly awaiter;
|
|
17
|
+
private isShutdown;
|
|
18
|
+
private eventUnsubscribe?;
|
|
19
|
+
loadJobs: Map<string, JobInfo>;
|
|
20
|
+
constructor(remoteStorage: ISyncRemoteStorage, cursorStorage: ISyncCursorStorage, channelFactory: IChannelFactory, operationIndex: IOperationIndex, reactor: IReactor, eventBus: IEventBus);
|
|
21
|
+
startup(): Promise<void>;
|
|
22
|
+
shutdown(): ShutdownStatus;
|
|
23
|
+
get(name: string): Remote;
|
|
24
|
+
add(name: string, collectionId: string, channelConfig: ChannelConfig, filter?: RemoteFilter, options?: RemoteOptions): Promise<Remote>;
|
|
25
|
+
remove(name: string): Promise<void>;
|
|
26
|
+
list(): Remote[];
|
|
27
|
+
private wireChannelCallbacks;
|
|
28
|
+
private handleOperationWritten;
|
|
29
|
+
private handleInboxJob;
|
|
30
|
+
private handleOutboxJob;
|
|
31
|
+
private applyInboxJob;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=sync-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-manager.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EAGd,MAAM,YAAY,CAAC;AAIpB,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,gBAAgB,CAAC,CAAa;IAE/B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAa;gBAGhD,aAAa,EAAE,kBAAkB,EACjC,aAAa,EAAE,kBAAkB,EACjC,cAAc,EAAE,eAAe,EAC/B,cAAc,EAAE,eAAe,EAC/B,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS;IAef,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B9B,QAAQ,IAAI,cAAc;IA2B1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQnB,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,aAAa,EAC5B,MAAM,GAAE,YAAwD,EAChE,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC;IA2CZ,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzC,IAAI,IAAI,MAAM,EAAE;IAIhB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,eAAe;YAUT,aAAa;CAoD5B"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { OperationEventTypes, } from "../events/types.js";
|
|
2
|
+
import { JobStatus, } from "../shared/types.js";
|
|
3
|
+
import { JobAwaiter } from "../shared/awaiter.js";
|
|
4
|
+
import { ChannelError } from "./errors.js";
|
|
5
|
+
import { SyncOperation } from "./sync-operation.js";
|
|
6
|
+
import { ChannelErrorSource, SyncOperationStatus } from "./types.js";
|
|
7
|
+
import { createIdleHealth, filterOperations } from "./utils.js";
|
|
8
|
+
export class SyncManager {
|
|
9
|
+
remoteStorage;
|
|
10
|
+
cursorStorage;
|
|
11
|
+
channelFactory;
|
|
12
|
+
_operationIndex;
|
|
13
|
+
reactor;
|
|
14
|
+
eventBus;
|
|
15
|
+
remotes;
|
|
16
|
+
awaiter;
|
|
17
|
+
isShutdown;
|
|
18
|
+
eventUnsubscribe;
|
|
19
|
+
loadJobs = new Map();
|
|
20
|
+
constructor(remoteStorage, cursorStorage, channelFactory, operationIndex, reactor, eventBus) {
|
|
21
|
+
this.remoteStorage = remoteStorage;
|
|
22
|
+
this.cursorStorage = cursorStorage;
|
|
23
|
+
this.channelFactory = channelFactory;
|
|
24
|
+
this._operationIndex = operationIndex;
|
|
25
|
+
this.reactor = reactor;
|
|
26
|
+
this.eventBus = eventBus;
|
|
27
|
+
this.remotes = new Map();
|
|
28
|
+
this.awaiter = new JobAwaiter(eventBus, (jobId, signal) => reactor.getJobStatus(jobId, signal));
|
|
29
|
+
this.isShutdown = false;
|
|
30
|
+
}
|
|
31
|
+
async startup() {
|
|
32
|
+
if (this.isShutdown) {
|
|
33
|
+
throw new Error("SyncManager is already shutdown and cannot be started");
|
|
34
|
+
}
|
|
35
|
+
const remoteRecords = await this.remoteStorage.list();
|
|
36
|
+
for (const record of remoteRecords) {
|
|
37
|
+
const channel = this.channelFactory.instance(record.channelConfig, this.cursorStorage);
|
|
38
|
+
const remote = {
|
|
39
|
+
name: record.name,
|
|
40
|
+
collectionId: record.collectionId,
|
|
41
|
+
filter: record.filter,
|
|
42
|
+
options: record.options,
|
|
43
|
+
channel,
|
|
44
|
+
};
|
|
45
|
+
this.remotes.set(record.name, remote);
|
|
46
|
+
this.wireChannelCallbacks(remote);
|
|
47
|
+
}
|
|
48
|
+
this.eventUnsubscribe = this.eventBus.subscribe(OperationEventTypes.OPERATION_WRITTEN, (_type, event) => this.handleOperationWritten(event));
|
|
49
|
+
}
|
|
50
|
+
shutdown() {
|
|
51
|
+
this.isShutdown = true;
|
|
52
|
+
if (this.eventUnsubscribe) {
|
|
53
|
+
this.eventUnsubscribe();
|
|
54
|
+
this.eventUnsubscribe = undefined;
|
|
55
|
+
}
|
|
56
|
+
this.awaiter.shutdown();
|
|
57
|
+
for (const remote of this.remotes.values()) {
|
|
58
|
+
try {
|
|
59
|
+
remote.channel.shutdown();
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error(`Error shutting down channel for remote ${remote.name}: ${error instanceof Error ? error.message : String(error)}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this.remotes.clear();
|
|
66
|
+
return {
|
|
67
|
+
isShutdown: true,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
get(name) {
|
|
71
|
+
const remote = this.remotes.get(name);
|
|
72
|
+
if (!remote) {
|
|
73
|
+
throw new Error(`Remote with name '${name}' does not exist`);
|
|
74
|
+
}
|
|
75
|
+
return remote;
|
|
76
|
+
}
|
|
77
|
+
async add(name, collectionId, channelConfig, filter = { documentId: [], scope: [], branch: "" }, options = {}) {
|
|
78
|
+
if (this.isShutdown) {
|
|
79
|
+
throw new Error("SyncManager is shutdown and cannot add remotes");
|
|
80
|
+
}
|
|
81
|
+
if (this.remotes.has(name)) {
|
|
82
|
+
throw new Error(`Remote with name '${name}' already exists`);
|
|
83
|
+
}
|
|
84
|
+
const status = {
|
|
85
|
+
push: createIdleHealth(),
|
|
86
|
+
pull: createIdleHealth(),
|
|
87
|
+
};
|
|
88
|
+
const remoteRecord = {
|
|
89
|
+
name,
|
|
90
|
+
collectionId,
|
|
91
|
+
channelConfig,
|
|
92
|
+
filter,
|
|
93
|
+
options,
|
|
94
|
+
status,
|
|
95
|
+
};
|
|
96
|
+
await this.remoteStorage.upsert(remoteRecord);
|
|
97
|
+
const channel = this.channelFactory.instance(channelConfig, this.cursorStorage);
|
|
98
|
+
const remote = {
|
|
99
|
+
name,
|
|
100
|
+
collectionId,
|
|
101
|
+
filter,
|
|
102
|
+
options,
|
|
103
|
+
channel,
|
|
104
|
+
};
|
|
105
|
+
this.remotes.set(name, remote);
|
|
106
|
+
this.wireChannelCallbacks(remote);
|
|
107
|
+
return remote;
|
|
108
|
+
}
|
|
109
|
+
async remove(name) {
|
|
110
|
+
const remote = this.remotes.get(name);
|
|
111
|
+
if (!remote) {
|
|
112
|
+
throw new Error(`Remote with name '${name}' does not exist`);
|
|
113
|
+
}
|
|
114
|
+
await this.remoteStorage.remove(name);
|
|
115
|
+
remote.channel.shutdown();
|
|
116
|
+
this.remotes.delete(name);
|
|
117
|
+
}
|
|
118
|
+
list() {
|
|
119
|
+
return Array.from(this.remotes.values());
|
|
120
|
+
}
|
|
121
|
+
wireChannelCallbacks(remote) {
|
|
122
|
+
remote.channel.inbox.onAdded((syncOp) => {
|
|
123
|
+
this.handleInboxJob(remote, syncOp);
|
|
124
|
+
});
|
|
125
|
+
remote.channel.outbox.onAdded((syncOp) => {
|
|
126
|
+
this.handleOutboxJob(remote, syncOp);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
handleOperationWritten(event) {
|
|
130
|
+
if (this.isShutdown) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
for (const remote of this.remotes.values()) {
|
|
134
|
+
const filteredOps = filterOperations(event.operations, remote.filter);
|
|
135
|
+
if (filteredOps.length === 0) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const syncOp = new SyncOperation(crypto.randomUUID(), remote.name, filteredOps[0].context.documentId, [...new Set(filteredOps.map((op) => op.context.scope))], filteredOps[0].context.branch, filteredOps);
|
|
139
|
+
remote.channel.outbox.add(syncOp);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
handleInboxJob(remote, syncOp) {
|
|
143
|
+
if (this.isShutdown) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
void this.applyInboxJob(remote, syncOp);
|
|
147
|
+
}
|
|
148
|
+
handleOutboxJob(remote, syncOp) {
|
|
149
|
+
syncOp.on((syncOp, _prev, next) => {
|
|
150
|
+
if (next === SyncOperationStatus.Applied) {
|
|
151
|
+
remote.channel.outbox.remove(syncOp);
|
|
152
|
+
}
|
|
153
|
+
else if (next === SyncOperationStatus.Error) {
|
|
154
|
+
remote.channel.outbox.remove(syncOp);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
async applyInboxJob(remote, syncOp) {
|
|
159
|
+
const operations = syncOp.operations.map((op) => op.operation);
|
|
160
|
+
let jobInfo;
|
|
161
|
+
try {
|
|
162
|
+
jobInfo = await this.reactor.load(syncOp.documentId, syncOp.branch, operations);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
166
|
+
const channelError = new ChannelError(ChannelErrorSource.Inbox, err);
|
|
167
|
+
syncOp.failed(channelError);
|
|
168
|
+
remote.channel.deadLetter.add(syncOp);
|
|
169
|
+
remote.channel.inbox.remove(syncOp);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
let completedJobInfo;
|
|
173
|
+
try {
|
|
174
|
+
completedJobInfo = await this.awaiter.waitForJob(jobInfo.id);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
178
|
+
const channelError = new ChannelError(ChannelErrorSource.Inbox, err);
|
|
179
|
+
syncOp.failed(channelError);
|
|
180
|
+
remote.channel.deadLetter.add(syncOp);
|
|
181
|
+
remote.channel.inbox.remove(syncOp);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const jobKey = `${syncOp.documentId}:${syncOp.branch}`;
|
|
185
|
+
this.loadJobs.set(jobKey, completedJobInfo);
|
|
186
|
+
if (completedJobInfo.status === JobStatus.FAILED) {
|
|
187
|
+
const error = new ChannelError(ChannelErrorSource.Inbox, new Error(`Failed to apply operations: ${completedJobInfo.error?.message || "Unknown error"}`));
|
|
188
|
+
syncOp.failed(error);
|
|
189
|
+
remote.channel.deadLetter.add(syncOp);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
syncOp.executed();
|
|
193
|
+
}
|
|
194
|
+
remote.channel.inbox.remove(syncOp);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=sync-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-manager.js","sourceRoot":"","sources":["../../../src/sync/sync-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { OperationWithContext } from "../storage/interfaces.js";
|
|
2
|
+
import type { ChannelError } from "./errors.js";
|
|
3
|
+
import { SyncOperationStatus } from "./types.js";
|
|
4
|
+
type SyncOperationStatusCallback = (syncOp: SyncOperation, prev: SyncOperationStatus, next: SyncOperationStatus) => void;
|
|
5
|
+
export declare class SyncOperationAggregateError extends Error {
|
|
6
|
+
errors: Error[];
|
|
7
|
+
constructor(errors: Error[]);
|
|
8
|
+
}
|
|
9
|
+
export declare class SyncOperation {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly remoteName: string;
|
|
12
|
+
readonly documentId: string;
|
|
13
|
+
readonly scopes: string[];
|
|
14
|
+
readonly branch: string;
|
|
15
|
+
readonly operations: OperationWithContext[];
|
|
16
|
+
status: SyncOperationStatus;
|
|
17
|
+
error?: ChannelError;
|
|
18
|
+
private callbacks;
|
|
19
|
+
constructor(id: string, remoteName: string, documentId: string, scopes: string[], branch: string, operations: OperationWithContext[]);
|
|
20
|
+
on(callback: SyncOperationStatusCallback): void;
|
|
21
|
+
started(): void;
|
|
22
|
+
transported(): void;
|
|
23
|
+
executed(): void;
|
|
24
|
+
failed(error: ChannelError): void;
|
|
25
|
+
private transition;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=sync-operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-operation.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,KAAK,2BAA2B,GAAG,CACjC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,mBAAmB,KACtB,IAAI,CAAC;AAEV,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,MAAM,EAAE,KAAK,EAAE,CAAC;gBAEJ,MAAM,EAAE,KAAK,EAAE;CAQ5B;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC;IAC5C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,OAAO,CAAC,SAAS,CAAqC;gBAGpD,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,oBAAoB,EAAE;IAWpC,EAAE,CAAC,QAAQ,EAAE,2BAA2B,GAAG,IAAI;IAI/C,OAAO,IAAI,IAAI;IAIf,WAAW,IAAI,IAAI;IAInB,QAAQ,IAAI,IAAI;IAIhB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKjC,OAAO,CAAC,UAAU;CAenB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { SyncOperationStatus } from "./types.js";
|
|
2
|
+
export class SyncOperationAggregateError extends Error {
|
|
3
|
+
errors;
|
|
4
|
+
constructor(errors) {
|
|
5
|
+
const messages = errors.map((e) => e.message).join("; ");
|
|
6
|
+
super(`SyncOperation callback failed with ${errors.length} error(s): ${messages}`);
|
|
7
|
+
this.name = "SyncOperationAggregateError";
|
|
8
|
+
this.errors = errors;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class SyncOperation {
|
|
12
|
+
id;
|
|
13
|
+
remoteName;
|
|
14
|
+
documentId;
|
|
15
|
+
scopes;
|
|
16
|
+
branch;
|
|
17
|
+
operations;
|
|
18
|
+
status;
|
|
19
|
+
error;
|
|
20
|
+
callbacks = [];
|
|
21
|
+
constructor(id, remoteName, documentId, scopes, branch, operations) {
|
|
22
|
+
this.id = id;
|
|
23
|
+
this.remoteName = remoteName;
|
|
24
|
+
this.documentId = documentId;
|
|
25
|
+
this.scopes = scopes;
|
|
26
|
+
this.branch = branch;
|
|
27
|
+
this.operations = operations;
|
|
28
|
+
this.status = SyncOperationStatus.Unknown;
|
|
29
|
+
}
|
|
30
|
+
on(callback) {
|
|
31
|
+
this.callbacks.push(callback);
|
|
32
|
+
}
|
|
33
|
+
started() {
|
|
34
|
+
this.transition(SyncOperationStatus.TransportPending);
|
|
35
|
+
}
|
|
36
|
+
transported() {
|
|
37
|
+
this.transition(SyncOperationStatus.ExecutionPending);
|
|
38
|
+
}
|
|
39
|
+
executed() {
|
|
40
|
+
this.transition(SyncOperationStatus.Applied);
|
|
41
|
+
}
|
|
42
|
+
failed(error) {
|
|
43
|
+
this.error = error;
|
|
44
|
+
this.transition(SyncOperationStatus.Error);
|
|
45
|
+
}
|
|
46
|
+
transition(next) {
|
|
47
|
+
const prev = this.status;
|
|
48
|
+
this.status = next;
|
|
49
|
+
const errors = [];
|
|
50
|
+
for (const callback of this.callbacks) {
|
|
51
|
+
try {
|
|
52
|
+
callback(this, prev, next);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
errors.push(error instanceof Error ? error : new Error(String(error)));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (errors.length > 0) {
|
|
59
|
+
throw new SyncOperationAggregateError(errors);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=sync-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-operation.js","sourceRoot":"","sources":["../../../src/sync/sync-operation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAQjD,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpD,MAAM,CAAU;IAEhB,YAAY,MAAe;QACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,KAAK,CACH,sCAAsC,MAAM,CAAC,MAAM,cAAc,QAAQ,EAAE,CAC5E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACf,EAAE,CAAS;IACX,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,MAAM,CAAW;IACjB,MAAM,CAAS;IACf,UAAU,CAAyB;IAC5C,MAAM,CAAsB;IAC5B,KAAK,CAAgB;IAEb,SAAS,GAAkC,EAAE,CAAC;IAEtD,YACE,EAAU,EACV,UAAkB,EAClB,UAAkB,EAClB,MAAgB,EAChB,MAAc,EACd,UAAkC;QAElC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC;IAC5C,CAAC;IAED,EAAE,CAAC,QAAqC;QACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACxD,CAAC;IAED,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAmB;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEO,UAAU,CAAC,IAAyB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { OperationWithContext } from "../storage/interfaces.js";
|
|
2
|
+
export type RemoteOptions = {};
|
|
3
|
+
export type RemoteFilter = {
|
|
4
|
+
documentId: string[];
|
|
5
|
+
scope: string[];
|
|
6
|
+
branch: string;
|
|
7
|
+
};
|
|
8
|
+
export type RemoteCursor = {
|
|
9
|
+
remoteName: string;
|
|
10
|
+
cursorOrdinal: number;
|
|
11
|
+
lastSyncedAtUtcMs?: number;
|
|
12
|
+
};
|
|
13
|
+
export type ChannelMeta = {
|
|
14
|
+
id: string;
|
|
15
|
+
};
|
|
16
|
+
export type SyncEnvelopeType = "operations" | "ack";
|
|
17
|
+
export type SyncEnvelope = {
|
|
18
|
+
type: SyncEnvelopeType;
|
|
19
|
+
channelMeta: ChannelMeta;
|
|
20
|
+
operations?: OperationWithContext[];
|
|
21
|
+
cursor?: RemoteCursor;
|
|
22
|
+
};
|
|
23
|
+
export declare enum SyncOperationStatus {
|
|
24
|
+
Unknown = -1,
|
|
25
|
+
TransportPending = 0,
|
|
26
|
+
ExecutionPending = 1,
|
|
27
|
+
Applied = 2,
|
|
28
|
+
Error = 3
|
|
29
|
+
}
|
|
30
|
+
export declare enum ChannelErrorSource {
|
|
31
|
+
None = "none",
|
|
32
|
+
Channel = "channel",
|
|
33
|
+
Inbox = "inbox",
|
|
34
|
+
Outbox = "outbox"
|
|
35
|
+
}
|
|
36
|
+
export type SyncOperationErrorType = "SIGNATURE_INVALID" | "HASH_MISMATCH" | "LIBRARY_ERROR" | "MISSING_OPERATIONS" | "EXCESSIVE_SHUFFLE" | "GRACEFUL_ABORT";
|
|
37
|
+
export type ChannelHealth = {
|
|
38
|
+
state: "idle" | "running" | "error";
|
|
39
|
+
lastSuccessUtcMs?: number;
|
|
40
|
+
lastFailureUtcMs?: number;
|
|
41
|
+
failureCount: number;
|
|
42
|
+
};
|
|
43
|
+
export type RemoteStatus = {
|
|
44
|
+
push: ChannelHealth;
|
|
45
|
+
pull: ChannelHealth;
|
|
46
|
+
};
|
|
47
|
+
export type ChannelConfig = {
|
|
48
|
+
type: string;
|
|
49
|
+
channelId: string;
|
|
50
|
+
remoteName: string;
|
|
51
|
+
parameters: Record<string, unknown>;
|
|
52
|
+
};
|
|
53
|
+
export type RemoteRecord = {
|
|
54
|
+
name: string;
|
|
55
|
+
collectionId: string;
|
|
56
|
+
channelConfig: ChannelConfig;
|
|
57
|
+
filter: RemoteFilter;
|
|
58
|
+
options: RemoteOptions;
|
|
59
|
+
status: RemoteStatus;
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export var SyncOperationStatus;
|
|
2
|
+
(function (SyncOperationStatus) {
|
|
3
|
+
SyncOperationStatus[SyncOperationStatus["Unknown"] = -1] = "Unknown";
|
|
4
|
+
SyncOperationStatus[SyncOperationStatus["TransportPending"] = 0] = "TransportPending";
|
|
5
|
+
SyncOperationStatus[SyncOperationStatus["ExecutionPending"] = 1] = "ExecutionPending";
|
|
6
|
+
SyncOperationStatus[SyncOperationStatus["Applied"] = 2] = "Applied";
|
|
7
|
+
SyncOperationStatus[SyncOperationStatus["Error"] = 3] = "Error";
|
|
8
|
+
})(SyncOperationStatus || (SyncOperationStatus = {}));
|
|
9
|
+
export var ChannelErrorSource;
|
|
10
|
+
(function (ChannelErrorSource) {
|
|
11
|
+
ChannelErrorSource["None"] = "none";
|
|
12
|
+
ChannelErrorSource["Channel"] = "channel";
|
|
13
|
+
ChannelErrorSource["Inbox"] = "inbox";
|
|
14
|
+
ChannelErrorSource["Outbox"] = "outbox";
|
|
15
|
+
})(ChannelErrorSource || (ChannelErrorSource = {}));
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/sync/types.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAN,IAAY,mBAMX;AAND,WAAY,mBAAmB;IAC7B,oEAAY,CAAA;IACZ,qFAAoB,CAAA;IACpB,qFAAoB,CAAA;IACpB,mEAAW,CAAA;IACX,+DAAS,CAAA;AACX,CAAC,EANW,mBAAmB,KAAnB,mBAAmB,QAM9B;AAED,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,mCAAa,CAAA;IACb,yCAAmB,CAAA;IACnB,qCAAe,CAAA;IACf,uCAAiB,CAAA;AACnB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { OperationWithContext } from "../storage/interfaces.js";
|
|
2
|
+
import type { ChannelHealth, RemoteFilter } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Filters operations based on a remote's filter criteria.
|
|
5
|
+
*
|
|
6
|
+
* @param operations - The operations to filter
|
|
7
|
+
* @param filter - The filter criteria to apply
|
|
8
|
+
* @returns The filtered operations that match the criteria
|
|
9
|
+
*/
|
|
10
|
+
export declare function filterOperations(operations: OperationWithContext[], filter: RemoteFilter): OperationWithContext[];
|
|
11
|
+
/**
|
|
12
|
+
* Creates an idle channel health status.
|
|
13
|
+
*
|
|
14
|
+
* @returns A new idle channel health object
|
|
15
|
+
*/
|
|
16
|
+
export declare function createIdleHealth(): ChannelHealth;
|
|
17
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filters operations based on a remote's filter criteria.
|
|
3
|
+
*
|
|
4
|
+
* @param operations - The operations to filter
|
|
5
|
+
* @param filter - The filter criteria to apply
|
|
6
|
+
* @returns The filtered operations that match the criteria
|
|
7
|
+
*/
|
|
8
|
+
export function filterOperations(operations, filter) {
|
|
9
|
+
return operations.filter((op) => {
|
|
10
|
+
if (filter.branch && op.context.branch !== filter.branch) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (filter.documentId.length > 0 &&
|
|
14
|
+
!filter.documentId.includes(op.context.documentId)) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (filter.scope.length > 0 && !filter.scope.includes(op.context.scope)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates an idle channel health status.
|
|
25
|
+
*
|
|
26
|
+
* @returns A new idle channel health object
|
|
27
|
+
*/
|
|
28
|
+
export function createIdleHealth() {
|
|
29
|
+
return {
|
|
30
|
+
state: "idle",
|
|
31
|
+
failureCount: 0,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/sync/utils.ts"],"names":[],"mappings":"AAGA;;;;;;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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/reactor",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -28,11 +28,13 @@
|
|
|
28
28
|
"kysely": "^0.28.2",
|
|
29
29
|
"kysely-pglite": "^0.6.1",
|
|
30
30
|
"uuid": "^11.0.5",
|
|
31
|
-
"document-drive": "5.0.
|
|
32
|
-
"document-model": "5.0.
|
|
31
|
+
"document-drive": "5.0.4",
|
|
32
|
+
"document-model": "5.0.4"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@vitest/coverage-v8": "^3.2.4",
|
|
36
|
+
"tsx": "^4.19.2",
|
|
37
|
+
"tinybench": "^2.9.0",
|
|
36
38
|
"typescript": "^5.7.3",
|
|
37
39
|
"vitest": "^3.2.4"
|
|
38
40
|
},
|
|
@@ -40,12 +42,14 @@
|
|
|
40
42
|
"build": "pnpm run build:tsc",
|
|
41
43
|
"build:tsc": "tsc --build",
|
|
42
44
|
"prebuild": "pnpm run clean",
|
|
43
|
-
"test": "vitest run --coverage",
|
|
45
|
+
"test": "vitest run --coverage --printConsoleTrace=true --silent=false",
|
|
44
46
|
"test:watch": "vitest --coverage",
|
|
45
47
|
"lint": "eslint",
|
|
46
48
|
"bench": "vitest bench --run",
|
|
47
49
|
"clean": "rimraf dist",
|
|
48
50
|
"clean:node_modules": "rimraf node_modules",
|
|
49
|
-
"claude": "pnpm build && pnpm test && npx prettier --write \"**/*.ts\" && pnpm lint"
|
|
51
|
+
"claude": "pnpm build && pnpm test && npx prettier --write \"**/*.ts\" && pnpm lint",
|
|
52
|
+
"migrate": "tsx src/storage/migrations/run-migrations.ts",
|
|
53
|
+
"migrate:status": "tsx src/storage/migrations/run-migrations.ts status"
|
|
50
54
|
}
|
|
51
55
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IAErB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IAEvB,iEAAiE;IACjE,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IAEnB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IAEd,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IAEjB,0CAA0C;IAC1C,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IAEjB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":""}
|
|
File without changes
|