document-drive 1.19.1 → 1.20.0
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/README.md +4 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/src/cache/memory.d.ts +10 -0
- package/dist/src/cache/memory.d.ts.map +1 -0
- package/dist/src/cache/memory.js +26 -0
- package/dist/src/cache/redis.d.ts +14 -0
- package/dist/src/cache/redis.d.ts.map +1 -0
- package/dist/src/cache/redis.js +40 -0
- package/dist/src/cache/types.d.ts +7 -0
- package/dist/src/cache/types.d.ts.map +1 -0
- package/dist/src/cache/types.js +1 -0
- package/dist/src/drive-document-model/constants.d.ts +2 -0
- package/dist/src/drive-document-model/constants.d.ts.map +1 -0
- package/dist/src/drive-document-model/constants.js +1 -0
- package/dist/src/drive-document-model/gen/actions.d.ts +7 -0
- package/dist/src/drive-document-model/gen/actions.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/actions.js +2 -0
- package/dist/src/drive-document-model/gen/constants.d.ts +7 -0
- package/dist/src/drive-document-model/gen/constants.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/constants.js +16 -0
- package/dist/src/drive-document-model/gen/creators.d.ts +3 -0
- package/dist/src/drive-document-model/gen/creators.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/creators.js +2 -0
- package/dist/src/drive-document-model/gen/document-model.d.ts +3 -0
- package/dist/src/drive-document-model/gen/document-model.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/document-model.js +210 -0
- package/dist/src/drive-document-model/gen/drive/actions.d.ts +12 -0
- package/dist/src/drive-document-model/gen/drive/actions.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/actions.js +1 -0
- package/dist/src/drive-document-model/gen/drive/creators.d.ts +11 -0
- package/dist/src/drive-document-model/gen/drive/creators.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/creators.js +10 -0
- package/dist/src/drive-document-model/gen/drive/error.d.ts +2 -0
- package/dist/src/drive-document-model/gen/drive/error.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/error.js +1 -0
- package/dist/src/drive-document-model/gen/drive/object.d.ts +14 -0
- package/dist/src/drive-document-model/gen/drive/object.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/object.js +28 -0
- package/dist/src/drive-document-model/gen/drive/operations.d.ts +14 -0
- package/dist/src/drive-document-model/gen/drive/operations.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/operations.js +1 -0
- package/dist/src/drive-document-model/gen/node/actions.d.ts +11 -0
- package/dist/src/drive-document-model/gen/node/actions.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/actions.js +1 -0
- package/dist/src/drive-document-model/gen/node/creators.d.ts +10 -0
- package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/creators.js +9 -0
- package/dist/src/drive-document-model/gen/node/error.d.ts +2 -0
- package/dist/src/drive-document-model/gen/node/error.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/error.js +1 -0
- package/dist/src/drive-document-model/gen/node/object.d.ts +13 -0
- package/dist/src/drive-document-model/gen/node/object.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/object.js +25 -0
- package/dist/src/drive-document-model/gen/node/operations.d.ts +13 -0
- package/dist/src/drive-document-model/gen/node/operations.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/operations.js +1 -0
- package/dist/src/drive-document-model/gen/object.d.ts +21 -0
- package/dist/src/drive-document-model/gen/object.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/object.js +28 -0
- package/dist/src/drive-document-model/gen/reducer.d.ts +4 -0
- package/dist/src/drive-document-model/gen/reducer.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/reducer.js +74 -0
- package/dist/src/drive-document-model/gen/schema/types.d.ts +176 -0
- package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/schema/types.js +1 -0
- package/dist/src/drive-document-model/gen/schema/zod.d.ts +87 -0
- package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/schema/zod.js +203 -0
- package/dist/src/drive-document-model/gen/types.d.ts +9 -0
- package/dist/src/drive-document-model/gen/types.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/types.js +1 -0
- package/dist/src/drive-document-model/gen/utils.d.ts +10 -0
- package/dist/src/drive-document-model/gen/utils.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/utils.js +27 -0
- package/dist/src/drive-document-model/index.d.ts +2 -0
- package/dist/src/drive-document-model/index.d.ts.map +1 -0
- package/dist/src/drive-document-model/index.js +1 -0
- package/dist/src/drive-document-model/module.d.ts +3 -0
- package/dist/src/drive-document-model/module.d.ts.map +1 -0
- package/dist/src/drive-document-model/module.js +12 -0
- package/dist/src/drive-document-model/src/reducers/drive.d.ts +8 -0
- package/dist/src/drive-document-model/src/reducers/drive.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/reducers/drive.js +37 -0
- package/dist/src/drive-document-model/src/reducers/node.d.ts +8 -0
- package/dist/src/drive-document-model/src/reducers/node.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/reducers/node.js +185 -0
- package/dist/src/drive-document-model/src/utils.d.ts +34 -0
- package/dist/src/drive-document-model/src/utils.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/utils.js +146 -0
- package/dist/src/queue/base.d.ts +43 -0
- package/dist/src/queue/base.d.ts.map +1 -0
- package/dist/src/queue/base.js +241 -0
- package/dist/src/queue/redis.d.ts +28 -0
- package/dist/src/queue/redis.d.ts.map +1 -0
- package/dist/src/queue/redis.js +110 -0
- package/dist/src/queue/types.d.ts +55 -0
- package/dist/src/queue/types.d.ts.map +1 -0
- package/dist/src/queue/types.js +6 -0
- package/dist/src/read-mode/errors.d.ts +12 -0
- package/dist/src/read-mode/errors.d.ts.map +1 -0
- package/dist/src/read-mode/errors.js +17 -0
- package/dist/src/read-mode/server.d.ts +4 -0
- package/dist/src/read-mode/server.d.ts.map +1 -0
- package/dist/src/read-mode/server.js +78 -0
- package/dist/src/read-mode/service.d.ts +18 -0
- package/dist/src/read-mode/service.d.ts.map +1 -0
- package/dist/src/read-mode/service.js +112 -0
- package/dist/src/read-mode/types.d.ts +35 -0
- package/dist/src/read-mode/types.d.ts.map +1 -0
- package/dist/src/read-mode/types.js +1 -0
- package/dist/src/server/base-server.d.ts +112 -0
- package/dist/src/server/base-server.d.ts.map +1 -0
- package/dist/src/server/base-server.js +1280 -0
- package/dist/src/server/builder.d.ts +30 -0
- package/dist/src/server/builder.d.ts.map +1 -0
- package/dist/src/server/builder.js +89 -0
- package/dist/src/server/constants.d.ts +2 -0
- package/dist/src/server/constants.d.ts.map +1 -0
- package/dist/src/server/constants.js +1 -0
- package/dist/src/server/error.d.ts +30 -0
- package/dist/src/server/error.d.ts.map +1 -0
- package/dist/src/server/error.js +47 -0
- package/dist/src/server/event-emitter.d.ts +8 -0
- package/dist/src/server/event-emitter.d.ts.map +1 -0
- package/dist/src/server/event-emitter.js +10 -0
- package/dist/src/server/listener/index.d.ts +2 -0
- package/dist/src/server/listener/index.d.ts.map +1 -0
- package/dist/src/server/listener/index.js +1 -0
- package/dist/src/server/listener/listener-manager.d.ts +27 -0
- package/dist/src/server/listener/listener-manager.d.ts.map +1 -0
- package/dist/src/server/listener/listener-manager.js +401 -0
- package/dist/src/server/listener/transmitter/factory.d.ts +8 -0
- package/dist/src/server/listener/transmitter/factory.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/factory.js +25 -0
- package/dist/src/server/listener/transmitter/internal.d.ts +34 -0
- package/dist/src/server/listener/transmitter/internal.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/internal.js +87 -0
- package/dist/src/server/listener/transmitter/pull-responder.d.ts +38 -0
- package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/pull-responder.js +256 -0
- package/dist/src/server/listener/transmitter/switchboard-push.d.ts +9 -0
- package/dist/src/server/listener/transmitter/switchboard-push.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/switchboard-push.js +77 -0
- package/dist/src/server/listener/transmitter/types.d.ts +20 -0
- package/dist/src/server/listener/transmitter/types.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/types.js +1 -0
- package/dist/src/server/listener/util.d.ts +2 -0
- package/dist/src/server/listener/util.d.ts.map +1 -0
- package/dist/src/server/listener/util.js +22 -0
- package/dist/src/server/sync-manager.d.ts +30 -0
- package/dist/src/server/sync-manager.d.ts.map +1 -0
- package/dist/src/server/sync-manager.js +287 -0
- package/dist/src/server/types.d.ts +308 -0
- package/dist/src/server/types.d.ts.map +1 -0
- package/dist/src/server/types.js +12 -0
- package/dist/src/server/utils.d.ts +8 -0
- package/dist/src/server/utils.d.ts.map +1 -0
- package/dist/src/server/utils.js +47 -0
- package/dist/src/storage/base.d.ts +36 -0
- package/dist/src/storage/base.d.ts.map +1 -0
- package/dist/src/storage/base.js +4 -0
- package/dist/src/storage/browser.d.ts +36 -0
- package/dist/src/storage/browser.d.ts.map +1 -0
- package/dist/src/storage/browser.js +155 -0
- package/dist/src/storage/filesystem.d.ts +33 -0
- package/dist/src/storage/filesystem.d.ts.map +1 -0
- package/dist/src/storage/filesystem.js +197 -0
- package/dist/src/storage/memory.d.ts +33 -0
- package/dist/src/storage/memory.d.ts.map +1 -0
- package/dist/src/storage/memory.js +139 -0
- package/dist/src/storage/prisma.d.ts +67 -0
- package/dist/src/storage/prisma.d.ts.map +1 -0
- package/dist/src/storage/prisma.js +445 -0
- package/dist/src/storage/sequelize.d.ts +32 -0
- package/dist/src/storage/sequelize.d.ts.map +1 -0
- package/dist/src/storage/sequelize.js +373 -0
- package/dist/src/storage/types.d.ts +43 -0
- package/dist/src/storage/types.d.ts.map +1 -0
- package/dist/src/storage/types.js +1 -0
- package/dist/src/utils/default-drives-manager.d.ts +29 -0
- package/dist/src/utils/default-drives-manager.d.ts.map +1 -0
- package/dist/src/utils/default-drives-manager.js +208 -0
- package/dist/src/utils/graphql.d.ts +34 -0
- package/dist/src/utils/graphql.d.ts.map +1 -0
- package/dist/src/utils/graphql.js +183 -0
- package/dist/src/utils/logger.d.ts +27 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +105 -0
- package/dist/src/utils/migrations.d.ts +4 -0
- package/dist/src/utils/migrations.d.ts.map +1 -0
- package/dist/src/utils/migrations.js +41 -0
- package/dist/src/utils/misc.d.ts +11 -0
- package/dist/src/utils/misc.d.ts.map +1 -0
- package/dist/src/utils/misc.js +43 -0
- package/dist/src/utils/run-asap.d.ts +12 -0
- package/dist/src/utils/run-asap.d.ts.map +1 -0
- package/dist/src/utils/run-asap.js +131 -0
- package/dist/test/document-helpers/utils.d.ts +8 -0
- package/dist/test/document-helpers/utils.d.ts.map +1 -0
- package/dist/test/document-helpers/utils.js +21 -0
- package/dist/test/utils.d.ts +48 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/test/utils.js +132 -0
- package/dist/test/vitest-setup.d.ts +2 -0
- package/dist/test/vitest-setup.d.ts.map +1 -0
- package/dist/test/vitest-setup.js +4 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +20 -0
- package/package.json +20 -38
- package/src/cache/index.ts +0 -2
- package/src/cache/memory.ts +0 -33
- package/src/cache/redis.ts +0 -56
- package/src/cache/types.ts +0 -9
- package/src/index.ts +0 -4
- package/src/queue/base.ts +0 -320
- package/src/queue/index.ts +0 -2
- package/src/queue/redis.ts +0 -144
- package/src/queue/types.ts +0 -79
- package/src/read-mode/errors.ts +0 -19
- package/src/read-mode/index.ts +0 -125
- package/src/read-mode/service.ts +0 -207
- package/src/read-mode/types.ts +0 -108
- package/src/server/error.ts +0 -70
- package/src/server/index.ts +0 -2444
- package/src/server/listener/index.ts +0 -2
- package/src/server/listener/manager.ts +0 -652
- package/src/server/listener/transmitter/index.ts +0 -4
- package/src/server/listener/transmitter/internal.ts +0 -143
- package/src/server/listener/transmitter/pull-responder.ts +0 -462
- package/src/server/listener/transmitter/switchboard-push.ts +0 -125
- package/src/server/listener/transmitter/types.ts +0 -27
- package/src/server/types.ts +0 -596
- package/src/server/utils.ts +0 -82
- package/src/storage/base.ts +0 -81
- package/src/storage/browser.ts +0 -238
- package/src/storage/filesystem.ts +0 -297
- package/src/storage/index.ts +0 -2
- package/src/storage/memory.ts +0 -211
- package/src/storage/prisma.ts +0 -653
- package/src/storage/sequelize.ts +0 -498
- package/src/storage/types.ts +0 -97
- package/src/utils/default-drives-manager.ts +0 -341
- package/src/utils/document-helpers.ts +0 -21
- package/src/utils/graphql.ts +0 -301
- package/src/utils/index.ts +0 -90
- package/src/utils/logger.ts +0 -38
- package/src/utils/migrations.ts +0 -58
- package/src/utils/run-asap.ts +0 -156
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { isFileNode } from "#drive-document-model/src/utils";
|
|
2
|
+
import { logger } from "#utils/logger";
|
|
3
|
+
import { isBefore, isDocumentDrive } from "#utils/misc";
|
|
4
|
+
import { garbageCollectDocumentOperations, replayDocument, } from "document-model";
|
|
5
|
+
import { SynchronizationUnitNotFoundError } from "./error.js";
|
|
6
|
+
export default class SynchronizationManager {
|
|
7
|
+
storage;
|
|
8
|
+
cache;
|
|
9
|
+
documentModelModules;
|
|
10
|
+
eventEmitter;
|
|
11
|
+
syncStatus = new Map();
|
|
12
|
+
constructor(storage, cache, documentModelModules, eventEmitter) {
|
|
13
|
+
this.storage = storage;
|
|
14
|
+
this.cache = cache;
|
|
15
|
+
this.documentModelModules = documentModelModules;
|
|
16
|
+
this.eventEmitter = eventEmitter;
|
|
17
|
+
}
|
|
18
|
+
async getSynchronizationUnits(driveId, documentId, scope, branch, documentType) {
|
|
19
|
+
const synchronizationUnitsQuery = await this.getSynchronizationUnitsIds(driveId, documentId, scope, branch, documentType);
|
|
20
|
+
return this.getSynchronizationUnitsRevision(driveId, synchronizationUnitsQuery);
|
|
21
|
+
}
|
|
22
|
+
async getSynchronizationUnitsRevision(driveId, syncUnitsQuery) {
|
|
23
|
+
const drive = await this.getDrive(driveId);
|
|
24
|
+
const revisions = await this.storage.getSynchronizationUnitsRevision(syncUnitsQuery);
|
|
25
|
+
const synchronizationUnits = syncUnitsQuery.map((s) => ({
|
|
26
|
+
...s,
|
|
27
|
+
lastUpdated: drive.created,
|
|
28
|
+
revision: -1,
|
|
29
|
+
}));
|
|
30
|
+
for (const revision of revisions) {
|
|
31
|
+
const syncUnit = synchronizationUnits.find((s) => revision.driveId === s.driveId &&
|
|
32
|
+
revision.documentId === s.documentId &&
|
|
33
|
+
revision.scope === s.scope &&
|
|
34
|
+
revision.branch === s.branch);
|
|
35
|
+
if (syncUnit) {
|
|
36
|
+
syncUnit.revision = revision.revision;
|
|
37
|
+
syncUnit.lastUpdated = revision.lastUpdated;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return synchronizationUnits;
|
|
41
|
+
}
|
|
42
|
+
async getSynchronizationUnitsIds(driveId, documentId, scope, branch, documentType) {
|
|
43
|
+
const drive = await this.getDrive(driveId);
|
|
44
|
+
const nodes = drive.state.global.nodes.filter((node) => isFileNode(node) &&
|
|
45
|
+
(!documentId?.length ||
|
|
46
|
+
documentId.includes(node.id) ||
|
|
47
|
+
documentId.includes("*")) &&
|
|
48
|
+
(!documentType?.length ||
|
|
49
|
+
documentType.includes(node.documentType) ||
|
|
50
|
+
documentType.includes("*")));
|
|
51
|
+
// checks if document drive synchronization unit should be added
|
|
52
|
+
if ((!documentId || documentId.includes("*") || documentId.includes("")) &&
|
|
53
|
+
(!documentType?.length ||
|
|
54
|
+
documentType.includes("powerhouse/document-drive") ||
|
|
55
|
+
documentType.includes("*"))) {
|
|
56
|
+
nodes.unshift({
|
|
57
|
+
id: "",
|
|
58
|
+
documentType: "powerhouse/document-drive",
|
|
59
|
+
synchronizationUnits: [
|
|
60
|
+
{
|
|
61
|
+
syncId: "0",
|
|
62
|
+
scope: "global",
|
|
63
|
+
branch: "main",
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const synchronizationUnitsQuery = [];
|
|
69
|
+
for (const node of nodes) {
|
|
70
|
+
const nodeUnits = scope?.length || branch?.length
|
|
71
|
+
? node.synchronizationUnits.filter((unit) => (!scope?.length ||
|
|
72
|
+
scope.includes(unit.scope) ||
|
|
73
|
+
scope.includes("*")) &&
|
|
74
|
+
(!branch?.length ||
|
|
75
|
+
branch.includes(unit.branch) ||
|
|
76
|
+
branch.includes("*")))
|
|
77
|
+
: node.synchronizationUnits;
|
|
78
|
+
if (!nodeUnits.length) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
synchronizationUnitsQuery.push(...nodeUnits.map((n) => ({
|
|
82
|
+
driveId,
|
|
83
|
+
documentId: node.id,
|
|
84
|
+
syncId: n.syncId,
|
|
85
|
+
documentType: node.documentType,
|
|
86
|
+
scope: n.scope,
|
|
87
|
+
branch: n.branch,
|
|
88
|
+
})));
|
|
89
|
+
}
|
|
90
|
+
return synchronizationUnitsQuery;
|
|
91
|
+
}
|
|
92
|
+
async getSynchronizationUnitIdInfo(driveId, syncId) {
|
|
93
|
+
const drive = await this.getDrive(driveId);
|
|
94
|
+
const node = drive.state.global.nodes.find((node) => isFileNode(node) &&
|
|
95
|
+
node.synchronizationUnits.find((unit) => unit.syncId === syncId));
|
|
96
|
+
if (!node || !isFileNode(node)) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
const syncUnit = node.synchronizationUnits.find((unit) => unit.syncId === syncId);
|
|
100
|
+
if (!syncUnit) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
syncId,
|
|
105
|
+
scope: syncUnit.scope,
|
|
106
|
+
branch: syncUnit.branch,
|
|
107
|
+
driveId,
|
|
108
|
+
documentId: node.id,
|
|
109
|
+
documentType: node.documentType,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
async getSynchronizationUnit(driveId, syncId) {
|
|
113
|
+
const syncUnit = await this.getSynchronizationUnitIdInfo(driveId, syncId);
|
|
114
|
+
if (!syncUnit) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const { scope, branch, documentId, documentType } = syncUnit;
|
|
118
|
+
// TODO: REPLACE WITH GET DOCUMENT OPERATIONS
|
|
119
|
+
const document = await this.getDocument(driveId, documentId);
|
|
120
|
+
const operations = document.operations[scope] ?? [];
|
|
121
|
+
const lastOperation = operations[operations.length - 1];
|
|
122
|
+
return {
|
|
123
|
+
syncId,
|
|
124
|
+
scope,
|
|
125
|
+
branch,
|
|
126
|
+
driveId,
|
|
127
|
+
documentId,
|
|
128
|
+
documentType,
|
|
129
|
+
lastUpdated: lastOperation.timestamp ?? document.lastModified,
|
|
130
|
+
revision: lastOperation.index ?? 0,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
async getOperationData(driveId, syncId, filter) {
|
|
134
|
+
const syncUnit = syncId === "0"
|
|
135
|
+
? { documentId: "", scope: "global" }
|
|
136
|
+
: await this.getSynchronizationUnitIdInfo(driveId, syncId);
|
|
137
|
+
if (!syncUnit) {
|
|
138
|
+
throw new Error(`Invalid Sync Id ${syncId} in drive ${driveId}`);
|
|
139
|
+
}
|
|
140
|
+
const document = syncId === "0"
|
|
141
|
+
? await this.getDrive(driveId)
|
|
142
|
+
: await this.getDocument(driveId, syncUnit.documentId); // TODO replace with getDocumentOperations
|
|
143
|
+
const operations = document.operations[syncUnit.scope] ?? []; // TODO filter by branch also
|
|
144
|
+
const filteredOperations = operations.filter((operation) => Object.keys(filter).length === 0 ||
|
|
145
|
+
((filter.since === undefined ||
|
|
146
|
+
isBefore(filter.since, operation.timestamp)) &&
|
|
147
|
+
(filter.fromRevision === undefined ||
|
|
148
|
+
operation.index > filter.fromRevision)));
|
|
149
|
+
const limitedOperations = filter.limit
|
|
150
|
+
? filteredOperations.slice(0, filter.limit)
|
|
151
|
+
: filteredOperations;
|
|
152
|
+
return limitedOperations.map((operation) => ({
|
|
153
|
+
hash: operation.hash,
|
|
154
|
+
index: operation.index,
|
|
155
|
+
timestamp: operation.timestamp,
|
|
156
|
+
type: operation.type,
|
|
157
|
+
input: operation.input,
|
|
158
|
+
skip: operation.skip,
|
|
159
|
+
context: operation.context,
|
|
160
|
+
id: operation.id,
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
async getDrive(driveId) {
|
|
164
|
+
try {
|
|
165
|
+
const cachedDocument = await this.cache.getDocument("drives", driveId);
|
|
166
|
+
if (cachedDocument && isDocumentDrive(cachedDocument)) {
|
|
167
|
+
return cachedDocument;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
logger.error("Error getting drive from cache", e);
|
|
172
|
+
}
|
|
173
|
+
const driveStorage = await this.storage.getDrive(driveId);
|
|
174
|
+
const result = this._buildDocument(driveStorage);
|
|
175
|
+
if (!isDocumentDrive(result)) {
|
|
176
|
+
throw new Error(`Document with id ${driveId} is not a Document Drive`);
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
async getDocument(driveId, documentId) {
|
|
181
|
+
try {
|
|
182
|
+
const cachedDocument = await this.cache.getDocument(driveId, documentId);
|
|
183
|
+
if (cachedDocument) {
|
|
184
|
+
return cachedDocument;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (e) {
|
|
188
|
+
logger.error("Error getting document from cache", e);
|
|
189
|
+
}
|
|
190
|
+
const documentStorage = await this.storage.getDocument(driveId, documentId);
|
|
191
|
+
return this._buildDocument(documentStorage);
|
|
192
|
+
}
|
|
193
|
+
_buildDocument(documentStorage) {
|
|
194
|
+
const documentModelModule = this.getDocumentModelModule(documentStorage.documentType);
|
|
195
|
+
const operations = garbageCollectDocumentOperations(documentStorage.operations);
|
|
196
|
+
return replayDocument(documentStorage.initialState, operations, documentModelModule.reducer, undefined, documentStorage, undefined, {
|
|
197
|
+
checkHashes: true,
|
|
198
|
+
reuseOperationResultingState: true,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
getDocumentModelModule(documentType) {
|
|
202
|
+
const documentModelModule = this.documentModelModules.find((m) => m.documentModel.id === documentType);
|
|
203
|
+
if (!documentModelModule) {
|
|
204
|
+
throw new Error(`Document type ${documentType} not supported`);
|
|
205
|
+
}
|
|
206
|
+
return documentModelModule;
|
|
207
|
+
}
|
|
208
|
+
getCombinedSyncUnitStatus(syncUnitStatus) {
|
|
209
|
+
if (!syncUnitStatus.pull && !syncUnitStatus.push)
|
|
210
|
+
return "INITIAL_SYNC";
|
|
211
|
+
if (syncUnitStatus.pull === "INITIAL_SYNC")
|
|
212
|
+
return "INITIAL_SYNC";
|
|
213
|
+
if (syncUnitStatus.push === "INITIAL_SYNC")
|
|
214
|
+
return syncUnitStatus.pull || "INITIAL_SYNC";
|
|
215
|
+
const order = [
|
|
216
|
+
"ERROR",
|
|
217
|
+
"MISSING",
|
|
218
|
+
"CONFLICT",
|
|
219
|
+
"SYNCING",
|
|
220
|
+
"SUCCESS",
|
|
221
|
+
];
|
|
222
|
+
const sortedStatus = Object.values(syncUnitStatus).sort((a, b) => order.indexOf(a) - order.indexOf(b));
|
|
223
|
+
return sortedStatus[0];
|
|
224
|
+
}
|
|
225
|
+
getSyncStatus(syncUnitId) {
|
|
226
|
+
const status = this.syncStatus.get(syncUnitId);
|
|
227
|
+
if (!status) {
|
|
228
|
+
return new SynchronizationUnitNotFoundError(`Sync status not found for syncUnitId: ${syncUnitId}`, syncUnitId);
|
|
229
|
+
}
|
|
230
|
+
return this.getCombinedSyncUnitStatus(status);
|
|
231
|
+
}
|
|
232
|
+
updateSyncStatus(syncUnitId, status, error) {
|
|
233
|
+
if (status === null) {
|
|
234
|
+
this.syncStatus.delete(syncUnitId);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const syncUnitStatus = this.syncStatus.get(syncUnitId);
|
|
238
|
+
if (!syncUnitStatus) {
|
|
239
|
+
this.initSyncStatus(syncUnitId, status);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const shouldUpdateStatus = Object.entries(status).some(([key, _status]) => syncUnitStatus[key] !== _status);
|
|
243
|
+
if (shouldUpdateStatus) {
|
|
244
|
+
const newstatus = Object.entries(status).reduce((acc, [key, _status]) => {
|
|
245
|
+
return {
|
|
246
|
+
...acc,
|
|
247
|
+
// do not replace initial_syncing if it has not finished yet
|
|
248
|
+
[key]: acc[key] === "INITIAL_SYNC" &&
|
|
249
|
+
_status === "SYNCING"
|
|
250
|
+
? "INITIAL_SYNC"
|
|
251
|
+
: _status,
|
|
252
|
+
};
|
|
253
|
+
}, syncUnitStatus);
|
|
254
|
+
const previousCombinedStatus = this.getCombinedSyncUnitStatus(syncUnitStatus);
|
|
255
|
+
const newCombinedStatus = this.getCombinedSyncUnitStatus(newstatus);
|
|
256
|
+
this.syncStatus.set(syncUnitId, newstatus);
|
|
257
|
+
if (previousCombinedStatus !== newCombinedStatus && this.eventEmitter) {
|
|
258
|
+
this.eventEmitter.emit("syncStatus", syncUnitId, this.getCombinedSyncUnitStatus(newstatus), error, newstatus);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
initSyncStatus(syncUnitId, status) {
|
|
263
|
+
const defaultSyncUnitStatus = Object.entries(status).reduce((acc, [key, _status]) => {
|
|
264
|
+
return {
|
|
265
|
+
...acc,
|
|
266
|
+
[key]: _status !== "SYNCING" ? _status : "INITIAL_SYNC",
|
|
267
|
+
};
|
|
268
|
+
}, {});
|
|
269
|
+
this.syncStatus.set(syncUnitId, defaultSyncUnitStatus);
|
|
270
|
+
if (this.eventEmitter) {
|
|
271
|
+
this.eventEmitter.emit("syncStatus", syncUnitId, this.getCombinedSyncUnitStatus(defaultSyncUnitStatus), undefined, defaultSyncUnitStatus);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
async initializeDriveSyncStatus(driveId, drive) {
|
|
275
|
+
const syncUnits = await this.getSynchronizationUnitsIds(driveId);
|
|
276
|
+
const syncStatus = {
|
|
277
|
+
pull: drive.state.local.triggers.length > 0 ? "INITIAL_SYNC" : undefined,
|
|
278
|
+
push: drive.state.local.listeners.length > 0 ? "SUCCESS" : undefined,
|
|
279
|
+
};
|
|
280
|
+
if (!syncStatus.pull && !syncStatus.push)
|
|
281
|
+
return;
|
|
282
|
+
const syncUnitsIds = [driveId, ...syncUnits.map((s) => s.syncId)];
|
|
283
|
+
for (const syncUnitId of syncUnitsIds) {
|
|
284
|
+
this.initSyncStatus(syncUnitId, syncStatus);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { DocumentDriveAction, DocumentDriveDocument, DocumentDriveLocalState, DocumentDriveState, ListenerCallInfo, ListenerFilter, Trigger } from "#drive-document-model/gen/types";
|
|
2
|
+
import { IReadModeDriveServer } from "#read-mode/types";
|
|
3
|
+
import { IDefaultDrivesManager } from "#utils/default-drives-manager";
|
|
4
|
+
import { DriveInfo } from "#utils/graphql";
|
|
5
|
+
import { RunAsap } from "#utils/run-asap";
|
|
6
|
+
import { Action, ActionContext, BaseState, CreateChildDocumentInput, DocumentModelModule, Operation, OperationFromDocument, OperationScope, PHDocument, ReducerOptions, Signal } from "document-model";
|
|
7
|
+
import { Unsubscribe } from "nanoevents";
|
|
8
|
+
import { BaseDocumentDriveServer } from "./base-server.js";
|
|
9
|
+
import { OperationError, SynchronizationUnitNotFoundError } from "./error.js";
|
|
10
|
+
import { IInternalTransmitter, IReceiver } from "./listener/transmitter/internal.js";
|
|
11
|
+
import { ITransmitter, PullResponderTrigger, StrandUpdateSource } from "./listener/transmitter/types.js";
|
|
12
|
+
export type Constructor<T = object> = new (...args: any[]) => T;
|
|
13
|
+
export type Mixin<T extends Constructor, I> = T & Constructor<InstanceType<T> & I>;
|
|
14
|
+
export type DocumentDriveServerMixin<I> = Mixin<typeof BaseDocumentDriveServer, I>;
|
|
15
|
+
export type DriveInput = BaseState<Omit<DocumentDriveState, "__typename" | "id" | "nodes"> & {
|
|
16
|
+
id?: string;
|
|
17
|
+
}, DocumentDriveLocalState>;
|
|
18
|
+
export type RemoteDriveAccessLevel = "READ" | "WRITE";
|
|
19
|
+
export type RemoteDriveOptions = DocumentDriveLocalState & {
|
|
20
|
+
pullFilter?: ListenerFilter;
|
|
21
|
+
pullInterval?: number;
|
|
22
|
+
expectedDriveInfo?: DriveInfo;
|
|
23
|
+
accessLevel?: RemoteDriveAccessLevel;
|
|
24
|
+
};
|
|
25
|
+
export type CreateDocumentInput<TDocument extends PHDocument> = CreateChildDocumentInput<TDocument>;
|
|
26
|
+
export type SignalResult = {
|
|
27
|
+
signal: Signal;
|
|
28
|
+
result: unknown;
|
|
29
|
+
};
|
|
30
|
+
export type IOperationResult<TDocument extends PHDocument = PHDocument> = {
|
|
31
|
+
status: UpdateStatus;
|
|
32
|
+
error?: OperationError;
|
|
33
|
+
operations: OperationFromDocument<TDocument>[];
|
|
34
|
+
document: TDocument | undefined;
|
|
35
|
+
signals: SignalResult[];
|
|
36
|
+
};
|
|
37
|
+
export type DriveOperationResult = IOperationResult<DocumentDriveDocument>;
|
|
38
|
+
export type SynchronizationUnit = {
|
|
39
|
+
syncId: string;
|
|
40
|
+
driveId: string;
|
|
41
|
+
documentId: string;
|
|
42
|
+
documentType: string;
|
|
43
|
+
scope: string;
|
|
44
|
+
branch: string;
|
|
45
|
+
lastUpdated: string;
|
|
46
|
+
revision: number;
|
|
47
|
+
};
|
|
48
|
+
export type SynchronizationUnitQuery = Omit<SynchronizationUnit, "revision" | "lastUpdated">;
|
|
49
|
+
export type Listener = {
|
|
50
|
+
driveId: string;
|
|
51
|
+
listenerId: string;
|
|
52
|
+
label?: string;
|
|
53
|
+
block: boolean;
|
|
54
|
+
system: boolean;
|
|
55
|
+
filter: ListenerFilter;
|
|
56
|
+
callInfo?: ListenerCallInfo;
|
|
57
|
+
transmitter?: ITransmitter;
|
|
58
|
+
};
|
|
59
|
+
export type CreateListenerInput = {
|
|
60
|
+
driveId: string;
|
|
61
|
+
label?: string;
|
|
62
|
+
block: boolean;
|
|
63
|
+
system: boolean;
|
|
64
|
+
filter: ListenerFilter;
|
|
65
|
+
callInfo?: ListenerCallInfo;
|
|
66
|
+
};
|
|
67
|
+
export declare enum TransmitterType {
|
|
68
|
+
Internal = 0,
|
|
69
|
+
SwitchboardPush = 1,
|
|
70
|
+
PullResponder = 2,
|
|
71
|
+
SecureConnect = 3,
|
|
72
|
+
MatrixConnect = 4,
|
|
73
|
+
RESTWebhook = 5
|
|
74
|
+
}
|
|
75
|
+
export type ListenerRevision = {
|
|
76
|
+
driveId: string;
|
|
77
|
+
documentId: string;
|
|
78
|
+
scope: string;
|
|
79
|
+
branch: string;
|
|
80
|
+
status: UpdateStatus;
|
|
81
|
+
revision: number;
|
|
82
|
+
error?: string;
|
|
83
|
+
};
|
|
84
|
+
export type ListenerRevisionWithError = Omit<ListenerRevision, "error"> & {
|
|
85
|
+
error?: Error;
|
|
86
|
+
};
|
|
87
|
+
export type ListenerUpdate = {
|
|
88
|
+
listenerId: string;
|
|
89
|
+
listenerRevisions: ListenerRevision[];
|
|
90
|
+
};
|
|
91
|
+
export type UpdateStatus = "SUCCESS" | "CONFLICT" | "MISSING" | "ERROR";
|
|
92
|
+
export type ErrorStatus = Exclude<UpdateStatus, "SUCCESS">;
|
|
93
|
+
export type OperationUpdate = {
|
|
94
|
+
timestamp: string;
|
|
95
|
+
index: number;
|
|
96
|
+
skip: number;
|
|
97
|
+
type: string;
|
|
98
|
+
input: object;
|
|
99
|
+
hash: string;
|
|
100
|
+
context?: ActionContext;
|
|
101
|
+
id?: string;
|
|
102
|
+
};
|
|
103
|
+
export type StrandUpdate = {
|
|
104
|
+
driveId: string;
|
|
105
|
+
documentId: string;
|
|
106
|
+
scope: OperationScope;
|
|
107
|
+
branch: string;
|
|
108
|
+
operations: OperationUpdate[];
|
|
109
|
+
};
|
|
110
|
+
export type SyncStatus = "INITIAL_SYNC" | "SYNCING" | UpdateStatus;
|
|
111
|
+
export type PullSyncStatus = SyncStatus;
|
|
112
|
+
export type PushSyncStatus = SyncStatus;
|
|
113
|
+
export type SyncUnitStatusObject = {
|
|
114
|
+
push?: PushSyncStatus;
|
|
115
|
+
pull?: PullSyncStatus;
|
|
116
|
+
};
|
|
117
|
+
export type AddRemoteDriveStatus = "SUCCESS" | "ERROR" | "PENDING" | "ADDING" | "ALREADY_ADDED";
|
|
118
|
+
export interface DriveEvents {
|
|
119
|
+
syncStatus: (driveId: string, status: SyncStatus, error?: Error, syncUnitStatus?: SyncUnitStatusObject) => void;
|
|
120
|
+
defaultRemoteDrive: (status: AddRemoteDriveStatus, defaultDrives: Map<string, DefaultRemoteDriveInfo>, driveInput: DefaultRemoteDriveInput, driveId?: string, driveName?: string, error?: Error) => void;
|
|
121
|
+
strandUpdate: (update: StrandUpdate) => void;
|
|
122
|
+
clientStrandsError: (driveId: string, trigger: Trigger, status: number, errorMessage: string) => void;
|
|
123
|
+
documentModelModules: (documentModelModules: DocumentModelModule[]) => void;
|
|
124
|
+
driveAdded: (drive: DocumentDriveDocument) => void;
|
|
125
|
+
driveDeleted: (driveId: string) => void;
|
|
126
|
+
}
|
|
127
|
+
export type PartialRecord<K extends keyof any, T> = {
|
|
128
|
+
[P in K]?: T;
|
|
129
|
+
};
|
|
130
|
+
export type RevisionsFilter = PartialRecord<OperationScope, number>;
|
|
131
|
+
export type GetDocumentOptions = ReducerOptions & {
|
|
132
|
+
revisions?: RevisionsFilter;
|
|
133
|
+
checkHashes?: boolean;
|
|
134
|
+
};
|
|
135
|
+
export type AddOperationOptions = {
|
|
136
|
+
forceSync?: boolean;
|
|
137
|
+
source?: StrandUpdateSource;
|
|
138
|
+
};
|
|
139
|
+
export type DefaultRemoteDriveInput = {
|
|
140
|
+
url: string;
|
|
141
|
+
options: RemoteDriveOptions;
|
|
142
|
+
};
|
|
143
|
+
export type DefaultRemoteDriveInfo = DefaultRemoteDriveInput & {
|
|
144
|
+
status: AddRemoteDriveStatus;
|
|
145
|
+
metadata?: DriveInfo;
|
|
146
|
+
};
|
|
147
|
+
export type RemoveDriveStrategy = "remove" | "detach";
|
|
148
|
+
/**
|
|
149
|
+
* Options for removing old remote drives.
|
|
150
|
+
*
|
|
151
|
+
* Allows specifying different strategies for handling old remote drives:
|
|
152
|
+
*
|
|
153
|
+
* - `remove-all`: Remove all remote drives.
|
|
154
|
+
* - `preserve-all`: Preserve all remote drives (this is the default behavior).
|
|
155
|
+
* - `remove-by-id`: Remove the remote drives specified by their IDs.
|
|
156
|
+
* - `remove-by-url`: Remove the remote drives specified by their URLs.
|
|
157
|
+
* - `preserve-by-id`: Preserve remote drives by their IDs and remove the rest.
|
|
158
|
+
* - `preserve-by-url`: Preserve remote drives by their URLs and remove the rest.
|
|
159
|
+
* - `detach-by-id`: Detach remote drives by their IDs (changes the remote drive to a local drive).
|
|
160
|
+
* - `detach-by-url`: Detach remote drives by their URLs (changes the remote drive to a local drive).
|
|
161
|
+
* - `preserve-by-id-and-detach`: Preserve the remote drives specified by their IDs and detach the rest.
|
|
162
|
+
* - `preserve-by-url-and-detach`: Preserve the remote drives specified by their URLs and detach the rest.
|
|
163
|
+
*
|
|
164
|
+
* Each strategy is represented by an object with a `strategy` property and,
|
|
165
|
+
* depending on the strategy, additional properties such as `ids` or `urls`.
|
|
166
|
+
*/
|
|
167
|
+
export type RemoveOldRemoteDrivesOption = {
|
|
168
|
+
strategy: "remove-all";
|
|
169
|
+
} | {
|
|
170
|
+
strategy: "preserve-all";
|
|
171
|
+
} | {
|
|
172
|
+
strategy: "remove-by-id";
|
|
173
|
+
ids: string[];
|
|
174
|
+
} | {
|
|
175
|
+
strategy: "remove-by-url";
|
|
176
|
+
urls: string[];
|
|
177
|
+
} | {
|
|
178
|
+
strategy: "preserve-by-id";
|
|
179
|
+
ids: string[];
|
|
180
|
+
} | {
|
|
181
|
+
strategy: "preserve-by-url";
|
|
182
|
+
urls: string[];
|
|
183
|
+
} | {
|
|
184
|
+
strategy: "detach-by-id";
|
|
185
|
+
ids: string[];
|
|
186
|
+
} | {
|
|
187
|
+
strategy: "detach-by-url";
|
|
188
|
+
urls: string[];
|
|
189
|
+
} | {
|
|
190
|
+
strategy: "preserve-by-id-and-detach";
|
|
191
|
+
ids: string[];
|
|
192
|
+
} | {
|
|
193
|
+
strategy: "preserve-by-url-and-detach";
|
|
194
|
+
urls: string[];
|
|
195
|
+
};
|
|
196
|
+
export type DocumentDriveServerOptions = {
|
|
197
|
+
defaultDrives: {
|
|
198
|
+
loadOnInit?: boolean;
|
|
199
|
+
remoteDrives?: Array<DefaultRemoteDriveInput>;
|
|
200
|
+
removeOldRemoteDrives?: RemoveOldRemoteDrivesOption;
|
|
201
|
+
};
|
|
202
|
+
taskQueueMethod?: RunAsap.RunAsap<unknown> | null;
|
|
203
|
+
listenerManager?: ListenerManagerOptions;
|
|
204
|
+
};
|
|
205
|
+
export type GetStrandsOptions = {
|
|
206
|
+
limit?: number;
|
|
207
|
+
since?: string;
|
|
208
|
+
fromRevision?: number;
|
|
209
|
+
};
|
|
210
|
+
export type ListenerManagerOptions = {
|
|
211
|
+
sequentialUpdates?: boolean;
|
|
212
|
+
};
|
|
213
|
+
export declare const DefaultListenerManagerOptions: {
|
|
214
|
+
sequentialUpdates: boolean;
|
|
215
|
+
};
|
|
216
|
+
export interface IBaseDocumentDriveServer {
|
|
217
|
+
initialize(): Promise<Error[] | null>;
|
|
218
|
+
setDocumentModelModules(models: DocumentModelModule[]): void;
|
|
219
|
+
getDrives(): Promise<string[]>;
|
|
220
|
+
addDrive(input: DriveInput, preferredEditor?: string): Promise<DocumentDriveDocument>;
|
|
221
|
+
addRemoteDrive(url: string, options: RemoteDriveOptions): Promise<DocumentDriveDocument>;
|
|
222
|
+
deleteDrive(driveId: string): Promise<void>;
|
|
223
|
+
getDrive(driveId: string, options?: GetDocumentOptions): Promise<DocumentDriveDocument>;
|
|
224
|
+
getDriveBySlug(slug: string): Promise<DocumentDriveDocument>;
|
|
225
|
+
getDocuments(driveId: string): Promise<string[]>;
|
|
226
|
+
getDocument<TDocument extends PHDocument>(driveId: string, documentId: string, options?: GetDocumentOptions): Promise<TDocument>;
|
|
227
|
+
addOperation(driveId: string, documentId: string, operation: Operation, options?: AddOperationOptions): Promise<IOperationResult>;
|
|
228
|
+
addOperations(driveId: string, documentId: string, operations: Operation[], options?: AddOperationOptions): Promise<IOperationResult>;
|
|
229
|
+
queueOperation(driveId: string, documentId: string, operation: Operation, options?: AddOperationOptions): Promise<IOperationResult>;
|
|
230
|
+
queueOperations(driveId: string, documentId: string, operations: Operation[], options?: AddOperationOptions): Promise<IOperationResult>;
|
|
231
|
+
queueAction(driveId: string, documentId: string, action: Action, options?: AddOperationOptions): Promise<IOperationResult>;
|
|
232
|
+
queueActions(driveId: string, documentId: string, actions: Action[], options?: AddOperationOptions): Promise<IOperationResult>;
|
|
233
|
+
addDriveOperation(driveId: string, operation: Operation<DocumentDriveAction>, options?: AddOperationOptions): Promise<DriveOperationResult>;
|
|
234
|
+
addDriveOperations(driveId: string, operations: Operation<DocumentDriveAction>[], options?: AddOperationOptions): Promise<DriveOperationResult>;
|
|
235
|
+
queueDriveOperation(driveId: string, operation: Operation<DocumentDriveAction>, options?: AddOperationOptions): Promise<DriveOperationResult>;
|
|
236
|
+
queueDriveOperations(driveId: string, operations: Operation<DocumentDriveAction>[], options?: AddOperationOptions): Promise<DriveOperationResult>;
|
|
237
|
+
queueDriveAction(driveId: string, action: DocumentDriveAction, options?: AddOperationOptions): Promise<IOperationResult>;
|
|
238
|
+
queueDriveActions(driveId: string, actions: DocumentDriveAction[], options?: AddOperationOptions): Promise<IOperationResult>;
|
|
239
|
+
addAction(driveId: string, documentId: string, action: Action, options?: AddOperationOptions): Promise<IOperationResult>;
|
|
240
|
+
addActions(driveId: string, documentId: string, actions: Action[], options?: AddOperationOptions): Promise<IOperationResult>;
|
|
241
|
+
addDriveAction(driveId: string, action: DocumentDriveAction, options?: AddOperationOptions): Promise<DriveOperationResult>;
|
|
242
|
+
addDriveActions(driveId: string, actions: DocumentDriveAction[], options?: AddOperationOptions): Promise<DriveOperationResult>;
|
|
243
|
+
getSyncStatus(syncUnitId: string): SyncStatus | SynchronizationUnitNotFoundError;
|
|
244
|
+
addInternalListener(driveId: string, receiver: IReceiver, options: {
|
|
245
|
+
listenerId: string;
|
|
246
|
+
label: string;
|
|
247
|
+
block: boolean;
|
|
248
|
+
filter: ListenerFilter;
|
|
249
|
+
}): Promise<IInternalTransmitter>;
|
|
250
|
+
/** Synchronization methods */
|
|
251
|
+
getSynchronizationUnits(driveId: string, documentId?: string[], scope?: string[], branch?: string[], documentType?: string[]): Promise<SynchronizationUnit[]>;
|
|
252
|
+
getSynchronizationUnit(driveId: string, syncId: string, loadedDrive?: DocumentDriveDocument): Promise<SynchronizationUnit | undefined>;
|
|
253
|
+
getSynchronizationUnitsIds(driveId: string, documentId?: string[], scope?: string[], branch?: string[], documentType?: string[]): Promise<SynchronizationUnitQuery[]>;
|
|
254
|
+
getOperationData(driveId: string, syncId: string, filter: GetStrandsOptions): Promise<OperationUpdate[]>;
|
|
255
|
+
/** Internal methods **/
|
|
256
|
+
getDocumentModelModules(): DocumentModelModule[];
|
|
257
|
+
getTransmitter(driveId: string, listenerId: string): Promise<ITransmitter | undefined>;
|
|
258
|
+
clearStorage(): Promise<void>;
|
|
259
|
+
registerPullResponderTrigger(id: string, url: string, options: Pick<RemoteDriveOptions, "pullFilter" | "pullInterval">): Promise<PullResponderTrigger>;
|
|
260
|
+
on<K extends keyof DriveEvents>(event: K, cb: DriveEvents[K]): Unsubscribe;
|
|
261
|
+
}
|
|
262
|
+
export type IDocumentDriveServer = IBaseDocumentDriveServer & IDefaultDrivesManager & IReadModeDriveServer;
|
|
263
|
+
export type DriveUpdateErrorHandler = (error: Error, driveId: string, listener: ListenerState) => void;
|
|
264
|
+
export interface IListenerManager {
|
|
265
|
+
initialize(handler: DriveUpdateErrorHandler): Promise<void>;
|
|
266
|
+
removeDrive(driveId: DocumentDriveState["id"]): Promise<void>;
|
|
267
|
+
driveHasListeners(driveId: string): boolean;
|
|
268
|
+
setListener(driveId: string, listener: Listener): Promise<void>;
|
|
269
|
+
removeListener(driveId: string, listenerId: string): Promise<boolean>;
|
|
270
|
+
getListenerState(driveId: string, listenerId: string): ListenerState;
|
|
271
|
+
getStrands(driveId: string, listenerId: string, options?: GetStrandsOptions): Promise<StrandUpdate[]>;
|
|
272
|
+
updateSynchronizationRevisions(driveId: string, syncUnits: SynchronizationUnit[], source: StrandUpdateSource, willUpdate?: (listeners: Listener[]) => void, onError?: (error: Error, driveId: string, listener: ListenerState) => void, forceSync?: boolean): Promise<ListenerUpdate[]>;
|
|
273
|
+
updateListenerRevision(listenerId: string, driveId: string, syncId: string, listenerRev: number): Promise<void>;
|
|
274
|
+
getListenerSyncUnitIds(driveId: string, listenerId: string): Promise<SynchronizationUnitQuery[]>;
|
|
275
|
+
removeSyncUnits(driveId: string, syncUnits: Pick<SynchronizationUnit, "syncId">[]): Promise<void>;
|
|
276
|
+
}
|
|
277
|
+
export type ListenerStatus = "CREATED" | "PENDING" | "SUCCESS" | "MISSING" | "CONFLICT" | "ERROR";
|
|
278
|
+
export interface ListenerState {
|
|
279
|
+
driveId: string;
|
|
280
|
+
block: boolean;
|
|
281
|
+
pendingTimeout: string;
|
|
282
|
+
listener: Listener;
|
|
283
|
+
syncUnits: Map<SynchronizationUnit["syncId"], SyncronizationUnitState>;
|
|
284
|
+
listenerStatus: ListenerStatus;
|
|
285
|
+
}
|
|
286
|
+
export interface SyncronizationUnitState {
|
|
287
|
+
listenerRev: number;
|
|
288
|
+
lastUpdated: string;
|
|
289
|
+
}
|
|
290
|
+
export interface ITransmitterFactory {
|
|
291
|
+
instance(transmitterType: string, listener: Listener, driveServer: IBaseDocumentDriveServer): ITransmitter;
|
|
292
|
+
}
|
|
293
|
+
export interface IEventEmitter {
|
|
294
|
+
emit<K extends keyof DriveEvents>(event: K, ...args: Parameters<DriveEvents[K]>): void;
|
|
295
|
+
on<K extends keyof DriveEvents>(event: K, cb: DriveEvents[K]): Unsubscribe;
|
|
296
|
+
}
|
|
297
|
+
export interface ISynchronizationManager {
|
|
298
|
+
getSynchronizationUnits(driveId: string, documentId?: string[], scope?: string[], branch?: string[], documentType?: string[]): Promise<SynchronizationUnit[]>;
|
|
299
|
+
getSynchronizationUnitsIds(driveId: string, documentId?: string[], scope?: string[], branch?: string[], documentType?: string[]): Promise<SynchronizationUnitQuery[]>;
|
|
300
|
+
getSynchronizationUnit(driveId: string, syncId: string): Promise<SynchronizationUnit | undefined>;
|
|
301
|
+
getOperationData(driveId: string, syncId: string, filter: GetStrandsOptions): Promise<OperationUpdate[]>;
|
|
302
|
+
getSynchronizationUnitsRevision(driveId: string, syncUnitsQuery: SynchronizationUnitQuery[]): Promise<SynchronizationUnit[]>;
|
|
303
|
+
getSyncStatus(syncUnitId: string): SyncStatus | SynchronizationUnitNotFoundError;
|
|
304
|
+
updateSyncStatus(syncUnitId: string, status: Partial<SyncUnitStatusObject> | null, error?: Error): void;
|
|
305
|
+
initializeDriveSyncStatus(driveId: string, drive: DocumentDriveDocument): Promise<void>;
|
|
306
|
+
getCombinedSyncUnitStatus(syncUnitStatus: SyncUnitStatusObject): SyncStatus;
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export var TransmitterType;
|
|
2
|
+
(function (TransmitterType) {
|
|
3
|
+
TransmitterType[TransmitterType["Internal"] = 0] = "Internal";
|
|
4
|
+
TransmitterType[TransmitterType["SwitchboardPush"] = 1] = "SwitchboardPush";
|
|
5
|
+
TransmitterType[TransmitterType["PullResponder"] = 2] = "PullResponder";
|
|
6
|
+
TransmitterType[TransmitterType["SecureConnect"] = 3] = "SecureConnect";
|
|
7
|
+
TransmitterType[TransmitterType["MatrixConnect"] = 4] = "MatrixConnect";
|
|
8
|
+
TransmitterType[TransmitterType["RESTWebhook"] = 5] = "RESTWebhook";
|
|
9
|
+
})(TransmitterType || (TransmitterType = {}));
|
|
10
|
+
export const DefaultListenerManagerOptions = {
|
|
11
|
+
sequentialUpdates: true,
|
|
12
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Action, DocumentOperations, PHDocument } from "document-model";
|
|
2
|
+
import { RevisionsFilter, StrandUpdate } from "./types.js";
|
|
3
|
+
export declare function buildRevisionsFilter(strands: StrandUpdate[], driveId: string, documentId: string): RevisionsFilter;
|
|
4
|
+
export declare function buildDocumentRevisionsFilter(document: PHDocument): RevisionsFilter;
|
|
5
|
+
export declare function filterOperationsByRevision<TAction extends Action = Action>(operations: DocumentOperations<TAction>, revisions?: RevisionsFilter): DocumentOperations<TAction>;
|
|
6
|
+
export declare function isAtRevision(document: PHDocument, revisions?: RevisionsFilter): boolean;
|
|
7
|
+
export declare function isAfterRevision(document: PHDocument, revisions?: RevisionsFilter): boolean;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/server/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAElB,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,eAAe,CAQjB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,UAAU,GACnB,eAAe,CAQjB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACxE,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACvC,SAAS,CAAC,EAAE,eAAe,GAC1B,kBAAkB,CAAC,OAAO,CAAC,CAgB7B;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,UAAU,EACpB,SAAS,CAAC,EAAE,eAAe,GAC1B,OAAO,CAWT;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,UAAU,EACpB,SAAS,CAAC,EAAE,eAAe,GAC1B,OAAO,CAYT"}
|