document-drive 1.19.1 → 1.20.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.
Files changed (252) hide show
  1. package/README.md +4 -0
  2. package/dist/index.d.ts +28 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +18 -0
  5. package/dist/src/cache/memory.d.ts +10 -0
  6. package/dist/src/cache/memory.d.ts.map +1 -0
  7. package/dist/src/cache/memory.js +26 -0
  8. package/dist/src/cache/redis.d.ts +14 -0
  9. package/dist/src/cache/redis.d.ts.map +1 -0
  10. package/dist/src/cache/redis.js +40 -0
  11. package/dist/src/cache/types.d.ts +7 -0
  12. package/dist/src/cache/types.d.ts.map +1 -0
  13. package/dist/src/cache/types.js +1 -0
  14. package/dist/src/drive-document-model/constants.d.ts +2 -0
  15. package/dist/src/drive-document-model/constants.d.ts.map +1 -0
  16. package/dist/src/drive-document-model/constants.js +1 -0
  17. package/dist/src/drive-document-model/gen/actions.d.ts +7 -0
  18. package/dist/src/drive-document-model/gen/actions.d.ts.map +1 -0
  19. package/dist/src/drive-document-model/gen/actions.js +2 -0
  20. package/dist/src/drive-document-model/gen/constants.d.ts +7 -0
  21. package/dist/src/drive-document-model/gen/constants.d.ts.map +1 -0
  22. package/dist/src/drive-document-model/gen/constants.js +16 -0
  23. package/dist/src/drive-document-model/gen/creators.d.ts +3 -0
  24. package/dist/src/drive-document-model/gen/creators.d.ts.map +1 -0
  25. package/dist/src/drive-document-model/gen/creators.js +2 -0
  26. package/dist/src/drive-document-model/gen/document-model.d.ts +3 -0
  27. package/dist/src/drive-document-model/gen/document-model.d.ts.map +1 -0
  28. package/dist/src/drive-document-model/gen/document-model.js +210 -0
  29. package/dist/src/drive-document-model/gen/drive/actions.d.ts +12 -0
  30. package/dist/src/drive-document-model/gen/drive/actions.d.ts.map +1 -0
  31. package/dist/src/drive-document-model/gen/drive/actions.js +1 -0
  32. package/dist/src/drive-document-model/gen/drive/creators.d.ts +11 -0
  33. package/dist/src/drive-document-model/gen/drive/creators.d.ts.map +1 -0
  34. package/dist/src/drive-document-model/gen/drive/creators.js +10 -0
  35. package/dist/src/drive-document-model/gen/drive/error.d.ts +2 -0
  36. package/dist/src/drive-document-model/gen/drive/error.d.ts.map +1 -0
  37. package/dist/src/drive-document-model/gen/drive/error.js +1 -0
  38. package/dist/src/drive-document-model/gen/drive/object.d.ts +14 -0
  39. package/dist/src/drive-document-model/gen/drive/object.d.ts.map +1 -0
  40. package/dist/src/drive-document-model/gen/drive/object.js +28 -0
  41. package/dist/src/drive-document-model/gen/drive/operations.d.ts +14 -0
  42. package/dist/src/drive-document-model/gen/drive/operations.d.ts.map +1 -0
  43. package/dist/src/drive-document-model/gen/drive/operations.js +1 -0
  44. package/dist/src/drive-document-model/gen/node/actions.d.ts +11 -0
  45. package/dist/src/drive-document-model/gen/node/actions.d.ts.map +1 -0
  46. package/dist/src/drive-document-model/gen/node/actions.js +1 -0
  47. package/dist/src/drive-document-model/gen/node/creators.d.ts +10 -0
  48. package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -0
  49. package/dist/src/drive-document-model/gen/node/creators.js +9 -0
  50. package/dist/src/drive-document-model/gen/node/error.d.ts +2 -0
  51. package/dist/src/drive-document-model/gen/node/error.d.ts.map +1 -0
  52. package/dist/src/drive-document-model/gen/node/error.js +1 -0
  53. package/dist/src/drive-document-model/gen/node/object.d.ts +13 -0
  54. package/dist/src/drive-document-model/gen/node/object.d.ts.map +1 -0
  55. package/dist/src/drive-document-model/gen/node/object.js +25 -0
  56. package/dist/src/drive-document-model/gen/node/operations.d.ts +13 -0
  57. package/dist/src/drive-document-model/gen/node/operations.d.ts.map +1 -0
  58. package/dist/src/drive-document-model/gen/node/operations.js +1 -0
  59. package/dist/src/drive-document-model/gen/object.d.ts +21 -0
  60. package/dist/src/drive-document-model/gen/object.d.ts.map +1 -0
  61. package/dist/src/drive-document-model/gen/object.js +28 -0
  62. package/dist/src/drive-document-model/gen/reducer.d.ts +4 -0
  63. package/dist/src/drive-document-model/gen/reducer.d.ts.map +1 -0
  64. package/dist/src/drive-document-model/gen/reducer.js +74 -0
  65. package/dist/src/drive-document-model/gen/schema/types.d.ts +176 -0
  66. package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -0
  67. package/dist/src/drive-document-model/gen/schema/types.js +1 -0
  68. package/dist/src/drive-document-model/gen/schema/zod.d.ts +87 -0
  69. package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -0
  70. package/dist/src/drive-document-model/gen/schema/zod.js +203 -0
  71. package/dist/src/drive-document-model/gen/types.d.ts +9 -0
  72. package/dist/src/drive-document-model/gen/types.d.ts.map +1 -0
  73. package/dist/src/drive-document-model/gen/types.js +1 -0
  74. package/dist/src/drive-document-model/gen/utils.d.ts +10 -0
  75. package/dist/src/drive-document-model/gen/utils.d.ts.map +1 -0
  76. package/dist/src/drive-document-model/gen/utils.js +27 -0
  77. package/dist/src/drive-document-model/index.d.ts +2 -0
  78. package/dist/src/drive-document-model/index.d.ts.map +1 -0
  79. package/dist/src/drive-document-model/index.js +1 -0
  80. package/dist/src/drive-document-model/module.d.ts +3 -0
  81. package/dist/src/drive-document-model/module.d.ts.map +1 -0
  82. package/dist/src/drive-document-model/module.js +12 -0
  83. package/dist/src/drive-document-model/src/reducers/drive.d.ts +8 -0
  84. package/dist/src/drive-document-model/src/reducers/drive.d.ts.map +1 -0
  85. package/dist/src/drive-document-model/src/reducers/drive.js +37 -0
  86. package/dist/src/drive-document-model/src/reducers/node.d.ts +8 -0
  87. package/dist/src/drive-document-model/src/reducers/node.d.ts.map +1 -0
  88. package/dist/src/drive-document-model/src/reducers/node.js +185 -0
  89. package/dist/src/drive-document-model/src/utils.d.ts +34 -0
  90. package/dist/src/drive-document-model/src/utils.d.ts.map +1 -0
  91. package/dist/src/drive-document-model/src/utils.js +146 -0
  92. package/dist/src/queue/base.d.ts +43 -0
  93. package/dist/src/queue/base.d.ts.map +1 -0
  94. package/dist/src/queue/base.js +241 -0
  95. package/dist/src/queue/redis.d.ts +28 -0
  96. package/dist/src/queue/redis.d.ts.map +1 -0
  97. package/dist/src/queue/redis.js +110 -0
  98. package/dist/src/queue/types.d.ts +55 -0
  99. package/dist/src/queue/types.d.ts.map +1 -0
  100. package/dist/src/queue/types.js +6 -0
  101. package/dist/src/read-mode/errors.d.ts +12 -0
  102. package/dist/src/read-mode/errors.d.ts.map +1 -0
  103. package/dist/src/read-mode/errors.js +17 -0
  104. package/dist/src/read-mode/server.d.ts +4 -0
  105. package/dist/src/read-mode/server.d.ts.map +1 -0
  106. package/dist/src/read-mode/server.js +78 -0
  107. package/dist/src/read-mode/service.d.ts +18 -0
  108. package/dist/src/read-mode/service.d.ts.map +1 -0
  109. package/dist/src/read-mode/service.js +112 -0
  110. package/dist/src/read-mode/types.d.ts +35 -0
  111. package/dist/src/read-mode/types.d.ts.map +1 -0
  112. package/dist/src/read-mode/types.js +1 -0
  113. package/dist/src/server/base-server.d.ts +112 -0
  114. package/dist/src/server/base-server.d.ts.map +1 -0
  115. package/dist/src/server/base-server.js +1280 -0
  116. package/dist/src/server/builder.d.ts +30 -0
  117. package/dist/src/server/builder.d.ts.map +1 -0
  118. package/dist/src/server/builder.js +89 -0
  119. package/dist/src/server/constants.d.ts +2 -0
  120. package/dist/src/server/constants.d.ts.map +1 -0
  121. package/dist/src/server/constants.js +1 -0
  122. package/dist/src/server/error.d.ts +30 -0
  123. package/dist/src/server/error.d.ts.map +1 -0
  124. package/dist/src/server/error.js +47 -0
  125. package/dist/src/server/event-emitter.d.ts +8 -0
  126. package/dist/src/server/event-emitter.d.ts.map +1 -0
  127. package/dist/src/server/event-emitter.js +10 -0
  128. package/dist/src/server/listener/index.d.ts +2 -0
  129. package/dist/src/server/listener/index.d.ts.map +1 -0
  130. package/dist/src/server/listener/index.js +1 -0
  131. package/dist/src/server/listener/listener-manager.d.ts +27 -0
  132. package/dist/src/server/listener/listener-manager.d.ts.map +1 -0
  133. package/dist/src/server/listener/listener-manager.js +401 -0
  134. package/dist/src/server/listener/transmitter/factory.d.ts +8 -0
  135. package/dist/src/server/listener/transmitter/factory.d.ts.map +1 -0
  136. package/dist/src/server/listener/transmitter/factory.js +25 -0
  137. package/dist/src/server/listener/transmitter/internal.d.ts +34 -0
  138. package/dist/src/server/listener/transmitter/internal.d.ts.map +1 -0
  139. package/dist/src/server/listener/transmitter/internal.js +87 -0
  140. package/dist/src/server/listener/transmitter/pull-responder.d.ts +38 -0
  141. package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -0
  142. package/dist/src/server/listener/transmitter/pull-responder.js +256 -0
  143. package/dist/src/server/listener/transmitter/switchboard-push.d.ts +9 -0
  144. package/dist/src/server/listener/transmitter/switchboard-push.d.ts.map +1 -0
  145. package/dist/src/server/listener/transmitter/switchboard-push.js +77 -0
  146. package/dist/src/server/listener/transmitter/types.d.ts +20 -0
  147. package/dist/src/server/listener/transmitter/types.d.ts.map +1 -0
  148. package/dist/src/server/listener/transmitter/types.js +1 -0
  149. package/dist/src/server/listener/util.d.ts +2 -0
  150. package/dist/src/server/listener/util.d.ts.map +1 -0
  151. package/dist/src/server/listener/util.js +22 -0
  152. package/dist/src/server/sync-manager.d.ts +30 -0
  153. package/dist/src/server/sync-manager.d.ts.map +1 -0
  154. package/dist/src/server/sync-manager.js +287 -0
  155. package/dist/src/server/types.d.ts +308 -0
  156. package/dist/src/server/types.d.ts.map +1 -0
  157. package/dist/src/server/types.js +12 -0
  158. package/dist/src/server/utils.d.ts +8 -0
  159. package/dist/src/server/utils.d.ts.map +1 -0
  160. package/dist/src/server/utils.js +47 -0
  161. package/dist/src/storage/base.d.ts +36 -0
  162. package/dist/src/storage/base.d.ts.map +1 -0
  163. package/dist/src/storage/base.js +4 -0
  164. package/dist/src/storage/browser.d.ts +36 -0
  165. package/dist/src/storage/browser.d.ts.map +1 -0
  166. package/dist/src/storage/browser.js +155 -0
  167. package/dist/src/storage/filesystem.d.ts +33 -0
  168. package/dist/src/storage/filesystem.d.ts.map +1 -0
  169. package/dist/src/storage/filesystem.js +197 -0
  170. package/dist/src/storage/memory.d.ts +33 -0
  171. package/dist/src/storage/memory.d.ts.map +1 -0
  172. package/dist/src/storage/memory.js +139 -0
  173. package/dist/src/storage/prisma.d.ts +67 -0
  174. package/dist/src/storage/prisma.d.ts.map +1 -0
  175. package/dist/src/storage/prisma.js +445 -0
  176. package/dist/src/storage/sequelize.d.ts +32 -0
  177. package/dist/src/storage/sequelize.d.ts.map +1 -0
  178. package/dist/src/storage/sequelize.js +373 -0
  179. package/dist/src/storage/types.d.ts +43 -0
  180. package/dist/src/storage/types.d.ts.map +1 -0
  181. package/dist/src/storage/types.js +1 -0
  182. package/dist/src/utils/default-drives-manager.d.ts +29 -0
  183. package/dist/src/utils/default-drives-manager.d.ts.map +1 -0
  184. package/dist/src/utils/default-drives-manager.js +208 -0
  185. package/dist/src/utils/graphql.d.ts +34 -0
  186. package/dist/src/utils/graphql.d.ts.map +1 -0
  187. package/dist/src/utils/graphql.js +183 -0
  188. package/dist/src/utils/logger.d.ts +27 -0
  189. package/dist/src/utils/logger.d.ts.map +1 -0
  190. package/dist/src/utils/logger.js +105 -0
  191. package/dist/src/utils/migrations.d.ts +4 -0
  192. package/dist/src/utils/migrations.d.ts.map +1 -0
  193. package/dist/src/utils/migrations.js +41 -0
  194. package/dist/src/utils/misc.d.ts +11 -0
  195. package/dist/src/utils/misc.d.ts.map +1 -0
  196. package/dist/src/utils/misc.js +43 -0
  197. package/dist/src/utils/run-asap.d.ts +12 -0
  198. package/dist/src/utils/run-asap.d.ts.map +1 -0
  199. package/dist/src/utils/run-asap.js +131 -0
  200. package/dist/test/document-helpers/utils.d.ts +8 -0
  201. package/dist/test/document-helpers/utils.d.ts.map +1 -0
  202. package/dist/test/document-helpers/utils.js +21 -0
  203. package/dist/test/utils.d.ts +48 -0
  204. package/dist/test/utils.d.ts.map +1 -0
  205. package/dist/test/utils.js +132 -0
  206. package/dist/test/vitest-setup.d.ts +2 -0
  207. package/dist/test/vitest-setup.d.ts.map +1 -0
  208. package/dist/test/vitest-setup.js +4 -0
  209. package/dist/tsconfig.tsbuildinfo +1 -0
  210. package/dist/vitest.config.d.ts +3 -0
  211. package/dist/vitest.config.d.ts.map +1 -0
  212. package/dist/vitest.config.js +20 -0
  213. package/package.json +20 -38
  214. package/src/cache/index.ts +0 -2
  215. package/src/cache/memory.ts +0 -33
  216. package/src/cache/redis.ts +0 -56
  217. package/src/cache/types.ts +0 -9
  218. package/src/index.ts +0 -4
  219. package/src/queue/base.ts +0 -320
  220. package/src/queue/index.ts +0 -2
  221. package/src/queue/redis.ts +0 -144
  222. package/src/queue/types.ts +0 -79
  223. package/src/read-mode/errors.ts +0 -19
  224. package/src/read-mode/index.ts +0 -125
  225. package/src/read-mode/service.ts +0 -207
  226. package/src/read-mode/types.ts +0 -108
  227. package/src/server/error.ts +0 -70
  228. package/src/server/index.ts +0 -2444
  229. package/src/server/listener/index.ts +0 -2
  230. package/src/server/listener/manager.ts +0 -652
  231. package/src/server/listener/transmitter/index.ts +0 -4
  232. package/src/server/listener/transmitter/internal.ts +0 -143
  233. package/src/server/listener/transmitter/pull-responder.ts +0 -462
  234. package/src/server/listener/transmitter/switchboard-push.ts +0 -125
  235. package/src/server/listener/transmitter/types.ts +0 -27
  236. package/src/server/types.ts +0 -596
  237. package/src/server/utils.ts +0 -82
  238. package/src/storage/base.ts +0 -81
  239. package/src/storage/browser.ts +0 -238
  240. package/src/storage/filesystem.ts +0 -297
  241. package/src/storage/index.ts +0 -2
  242. package/src/storage/memory.ts +0 -211
  243. package/src/storage/prisma.ts +0 -653
  244. package/src/storage/sequelize.ts +0 -498
  245. package/src/storage/types.ts +0 -97
  246. package/src/utils/default-drives-manager.ts +0 -341
  247. package/src/utils/document-helpers.ts +0 -21
  248. package/src/utils/graphql.ts +0 -301
  249. package/src/utils/index.ts +0 -90
  250. package/src/utils/logger.ts +0 -38
  251. package/src/utils/migrations.ts +0 -58
  252. package/src/utils/run-asap.ts +0 -156
@@ -1,596 +0,0 @@
1
- import type {
2
- DocumentDriveAction,
3
- DocumentDriveDocument,
4
- DocumentDriveLocalState,
5
- DocumentDriveState,
6
- ListenerCallInfo,
7
- ListenerFilter,
8
- Trigger,
9
- } from "document-model-libs/document-drive";
10
- import type {
11
- Action,
12
- ActionContext,
13
- BaseAction,
14
- CreateChildDocumentInput,
15
- Document,
16
- DocumentModel,
17
- Operation,
18
- OperationScope,
19
- ReducerOptions,
20
- Signal,
21
- State,
22
- } from "document-model/document";
23
- import { Unsubscribe } from "nanoevents";
24
- import { BaseDocumentDriveServer } from ".";
25
- import { IReadModeDriveServer } from "../read-mode/types";
26
- import { RunAsap } from "../utils";
27
- import { IDefaultDrivesManager } from "../utils/default-drives-manager";
28
- import { DriveInfo } from "../utils/graphql";
29
- import { OperationError, SynchronizationUnitNotFoundError } from "./error";
30
- import {
31
- IReceiver as IInternalListener,
32
- IInternalTransmitter,
33
- } from "./listener/transmitter/internal";
34
- import {
35
- ITransmitter,
36
- PullResponderTrigger,
37
- StrandUpdateSource,
38
- } from "./listener/transmitter/types";
39
-
40
- export type Constructor<T = object> = new (...args: any[]) => T;
41
-
42
- export type DocumentDriveServerConstructor =
43
- Constructor<BaseDocumentDriveServer>;
44
-
45
- // Mixin type that returns a type extending both the base class and the interface
46
- export type Mixin<T extends Constructor, I> = T &
47
- Constructor<InstanceType<T> & I>;
48
-
49
- export type DocumentDriveServerMixin<I> = Mixin<
50
- typeof BaseDocumentDriveServer,
51
- I
52
- >;
53
-
54
- export type DriveInput = State<
55
- Omit<DocumentDriveState, "__typename" | "id" | "nodes"> & { id?: string },
56
- DocumentDriveLocalState
57
- >;
58
-
59
- export type RemoteDriveAccessLevel = "READ" | "WRITE";
60
-
61
- export type RemoteDriveOptions = DocumentDriveLocalState & {
62
- // TODO make local state optional
63
- pullFilter?: ListenerFilter;
64
- pullInterval?: number;
65
- expectedDriveInfo?: DriveInfo;
66
- accessLevel?: RemoteDriveAccessLevel;
67
- };
68
-
69
- export type CreateDocumentInput = CreateChildDocumentInput;
70
-
71
- export type SignalResult = {
72
- signal: Signal;
73
- result: unknown; // infer from return types on document-model
74
- };
75
-
76
- export type IOperationResult<T extends Document = Document> = {
77
- status: UpdateStatus;
78
- error?: OperationError;
79
- operations: Operation[];
80
- document: T | undefined;
81
- signals: SignalResult[];
82
- };
83
-
84
- export type SynchronizationUnit = {
85
- syncId: string;
86
- driveId: string;
87
- documentId: string;
88
- documentType: string;
89
- scope: string;
90
- branch: string;
91
- lastUpdated: string;
92
- revision: number;
93
- };
94
-
95
- export type SynchronizationUnitQuery = Omit<
96
- SynchronizationUnit,
97
- "revision" | "lastUpdated"
98
- >;
99
-
100
- export type Listener = {
101
- driveId: string;
102
- listenerId: string;
103
- label?: string;
104
- block: boolean;
105
- system: boolean;
106
- filter: ListenerFilter;
107
- callInfo?: ListenerCallInfo;
108
- transmitter?: ITransmitter;
109
- };
110
-
111
- export type CreateListenerInput = {
112
- driveId: string;
113
- label?: string;
114
- block: boolean;
115
- system: boolean;
116
- filter: ListenerFilter;
117
- callInfo?: ListenerCallInfo;
118
- };
119
-
120
- export enum TransmitterType {
121
- Internal,
122
- SwitchboardPush,
123
- PullResponder,
124
- SecureConnect,
125
- MatrixConnect,
126
- RESTWebhook,
127
- }
128
-
129
- export type ListenerRevision = {
130
- driveId: string;
131
- documentId: string;
132
- scope: string;
133
- branch: string;
134
- status: UpdateStatus;
135
- revision: number;
136
- error?: string;
137
- };
138
-
139
- export type ListenerRevisionWithError = Omit<ListenerRevision, "error"> & {
140
- error?: Error;
141
- };
142
-
143
- export type ListenerUpdate = {
144
- listenerId: string;
145
- listenerRevisions: ListenerRevision[];
146
- };
147
-
148
- export type UpdateStatus = "SUCCESS" | "CONFLICT" | "MISSING" | "ERROR";
149
- export type ErrorStatus = Exclude<UpdateStatus, "SUCCESS">;
150
-
151
- export type OperationUpdate = {
152
- timestamp: string;
153
- index: number;
154
- skip: number;
155
- type: string;
156
- input: object;
157
- hash: string;
158
- context?: ActionContext;
159
- id?: string;
160
- };
161
-
162
- export type StrandUpdate = {
163
- driveId: string;
164
- documentId: string;
165
- scope: OperationScope;
166
- branch: string;
167
- operations: OperationUpdate[];
168
- };
169
-
170
- export type SyncStatus = "INITIAL_SYNC" | "SYNCING" | UpdateStatus;
171
-
172
- export type PullSyncStatus = SyncStatus;
173
- export type PushSyncStatus = SyncStatus;
174
-
175
- export type SyncUnitStatusObject = {
176
- push?: PushSyncStatus;
177
- pull?: PullSyncStatus;
178
- };
179
-
180
- export type AddRemoteDriveStatus =
181
- | "SUCCESS"
182
- | "ERROR"
183
- | "PENDING"
184
- | "ADDING"
185
- | "ALREADY_ADDED";
186
-
187
- export interface DriveEvents {
188
- syncStatus: (
189
- driveId: string,
190
- status: SyncStatus,
191
- error?: Error,
192
- syncUnitStatus?: SyncUnitStatusObject,
193
- ) => void;
194
- defaultRemoteDrive: (
195
- status: AddRemoteDriveStatus,
196
- defaultDrives: Map<string, DefaultRemoteDriveInfo>,
197
- driveInput: DefaultRemoteDriveInput,
198
- driveId?: string,
199
- driveName?: string,
200
- error?: Error,
201
- ) => void;
202
- strandUpdate: (update: StrandUpdate) => void;
203
- clientStrandsError: (
204
- driveId: string,
205
- trigger: Trigger,
206
- status: number,
207
- errorMessage: string,
208
- ) => void;
209
- documentModels: (documentModels: DocumentModel[]) => void;
210
- driveAdded: (drive: DocumentDriveDocument) => void;
211
- driveDeleted: (driveId: string) => void;
212
- }
213
-
214
- export type PartialRecord<K extends keyof any, T> = {
215
- [P in K]?: T;
216
- };
217
-
218
- export type RevisionsFilter = PartialRecord<OperationScope, number>;
219
-
220
- export type GetDocumentOptions = ReducerOptions & {
221
- revisions?: RevisionsFilter;
222
- checkHashes?: boolean;
223
- };
224
-
225
- export type AddOperationOptions = {
226
- forceSync?: boolean;
227
- source: StrandUpdateSource;
228
- };
229
-
230
- export type DefaultRemoteDriveInput = {
231
- url: string;
232
- options: RemoteDriveOptions;
233
- };
234
-
235
- export type DefaultRemoteDriveInfo = DefaultRemoteDriveInput & {
236
- status: AddRemoteDriveStatus;
237
- metadata?: DriveInfo;
238
- };
239
-
240
- export type RemoveDriveStrategy = "remove" | "detach";
241
-
242
- /**
243
- * Options for removing old remote drives.
244
- *
245
- * Allows specifying different strategies for handling old remote drives:
246
- *
247
- * - `remove-all`: Remove all remote drives.
248
- * - `preserve-all`: Preserve all remote drives (this is the default behavior).
249
- * - `remove-by-id`: Remove the remote drives specified by their IDs.
250
- * - `remove-by-url`: Remove the remote drives specified by their URLs.
251
- * - `preserve-by-id`: Preserve remote drives by their IDs and remove the rest.
252
- * - `preserve-by-url`: Preserve remote drives by their URLs and remove the rest.
253
- * - `detach-by-id`: Detach remote drives by their IDs (changes the remote drive to a local drive).
254
- * - `detach-by-url`: Detach remote drives by their URLs (changes the remote drive to a local drive).
255
- * - `preserve-by-id-and-detach`: Preserve the remote drives specified by their IDs and detach the rest.
256
- * - `preserve-by-url-and-detach`: Preserve the remote drives specified by their URLs and detach the rest.
257
- *
258
- * Each strategy is represented by an object with a `strategy` property and,
259
- * depending on the strategy, additional properties such as `ids` or `urls`.
260
- */
261
- export type RemoveOldRemoteDrivesOption =
262
- | {
263
- strategy: "remove-all";
264
- }
265
- | {
266
- strategy: "preserve-all";
267
- }
268
- | {
269
- strategy: "remove-by-id";
270
- ids: string[];
271
- }
272
- | {
273
- strategy: "remove-by-url";
274
- urls: string[];
275
- }
276
- | {
277
- strategy: "preserve-by-id";
278
- ids: string[];
279
- }
280
- | {
281
- strategy: "preserve-by-url";
282
- urls: string[];
283
- }
284
- | {
285
- strategy: "detach-by-id";
286
- ids: string[];
287
- }
288
- | {
289
- strategy: "detach-by-url";
290
- urls: string[];
291
- }
292
- | {
293
- strategy: "preserve-by-id-and-detach";
294
- ids: string[];
295
- }
296
- | {
297
- strategy: "preserve-by-url-and-detach";
298
- urls: string[];
299
- };
300
-
301
- export type DocumentDriveServerOptions = {
302
- defaultDrives: {
303
- loadOnInit?: boolean; // defaults to true
304
- remoteDrives?: Array<DefaultRemoteDriveInput>;
305
- removeOldRemoteDrives?: RemoveOldRemoteDrivesOption;
306
- };
307
- /* method to queue heavy tasks that might block the event loop.
308
- * If set to null then it will queued as micro task.
309
- * Defaults to the most appropriate method according to the system
310
- */
311
- taskQueueMethod?: RunAsap.RunAsap<unknown> | null;
312
- listenerManager?: ListenerManagerOptions;
313
- };
314
-
315
- export type GetStrandsOptions = {
316
- limit?: number;
317
- since?: string;
318
- fromRevision?: number;
319
- };
320
-
321
- export type ListenerManagerOptions = {
322
- sequentialUpdates?: boolean;
323
- };
324
-
325
- export const DefaultListenerManagerOptions = {
326
- sequentialUpdates: true,
327
- };
328
-
329
- type PublicKeys<T> = {
330
- [K in keyof T]: T extends { [P in K]: T[K] } ? K : never;
331
- }[keyof T];
332
-
333
- type PublicPart<T> = Pick<T, PublicKeys<T>>;
334
-
335
- export interface IBaseDocumentDriveServer {
336
- initialize(): Promise<Error[] | null>;
337
- setDocumentModels(models: DocumentModel[]): void;
338
- getDrives(): Promise<string[]>;
339
- addDrive(input: DriveInput): Promise<DocumentDriveDocument>;
340
- addRemoteDrive(
341
- url: string,
342
- options: RemoteDriveOptions,
343
- ): Promise<DocumentDriveDocument>;
344
- deleteDrive(driveId: string): Promise<void>;
345
- getDrive(
346
- driveId: string,
347
- options?: GetDocumentOptions,
348
- ): Promise<DocumentDriveDocument>;
349
-
350
- getDriveBySlug(slug: string): Promise<DocumentDriveDocument>;
351
-
352
- getDocuments(driveId: string): Promise<string[]>;
353
- getDocument(
354
- driveId: string,
355
- documentId: string,
356
- options?: GetDocumentOptions,
357
- ): Promise<Document>;
358
-
359
- addOperation(
360
- driveId: string,
361
- documentId: string,
362
- operation: Operation,
363
- options?: AddOperationOptions,
364
- ): Promise<IOperationResult>;
365
-
366
- addOperations(
367
- driveId: string,
368
- documentId: string,
369
- operations: Operation[],
370
- options?: AddOperationOptions,
371
- ): Promise<IOperationResult>;
372
-
373
- queueOperation(
374
- driveId: string,
375
- documentId: string,
376
- operation: Operation,
377
- options?: AddOperationOptions,
378
- ): Promise<IOperationResult>;
379
-
380
- queueOperations(
381
- driveId: string,
382
- documentId: string,
383
- operations: Operation[],
384
- options?: AddOperationOptions,
385
- ): Promise<IOperationResult>;
386
-
387
- queueAction(
388
- driveId: string,
389
- documentId: string,
390
- action: Action,
391
- options?: AddOperationOptions,
392
- ): Promise<IOperationResult>;
393
-
394
- queueActions(
395
- driveId: string,
396
- documentId: string,
397
- actions: Action[],
398
- options?: AddOperationOptions,
399
- ): Promise<IOperationResult>;
400
-
401
- addDriveOperation(
402
- driveId: string,
403
- operation: Operation<DocumentDriveAction | BaseAction>,
404
- options?: AddOperationOptions,
405
- ): Promise<IOperationResult<DocumentDriveDocument>>;
406
- addDriveOperations(
407
- driveId: string,
408
- operations: Operation<DocumentDriveAction | BaseAction>[],
409
- options?: AddOperationOptions,
410
- ): Promise<IOperationResult<DocumentDriveDocument>>;
411
-
412
- queueDriveOperation(
413
- driveId: string,
414
- operation: Operation<DocumentDriveAction | BaseAction>,
415
- options?: AddOperationOptions,
416
- ): Promise<IOperationResult<DocumentDriveDocument>>;
417
-
418
- queueDriveOperations(
419
- driveId: string,
420
- operations: Operation<DocumentDriveAction | BaseAction>[],
421
- options?: AddOperationOptions,
422
- ): Promise<IOperationResult<DocumentDriveDocument>>;
423
-
424
- queueDriveAction(
425
- driveId: string,
426
- action: DocumentDriveAction | BaseAction,
427
- options?: AddOperationOptions,
428
- ): Promise<IOperationResult<DocumentDriveDocument>>;
429
-
430
- queueDriveActions(
431
- driveId: string,
432
- actions: Array<DocumentDriveAction | BaseAction>,
433
- options?: AddOperationOptions,
434
- ): Promise<IOperationResult<DocumentDriveDocument>>;
435
-
436
- addAction(
437
- driveId: string,
438
- documentId: string,
439
- action: Action,
440
- options?: AddOperationOptions,
441
- ): Promise<IOperationResult>;
442
- addActions(
443
- driveId: string,
444
- documentId: string,
445
- actions: Action[],
446
- options?: AddOperationOptions,
447
- ): Promise<IOperationResult>;
448
-
449
- addDriveAction(
450
- driveId: string,
451
- action: DocumentDriveAction | BaseAction,
452
- options?: AddOperationOptions,
453
- ): Promise<IOperationResult<DocumentDriveDocument>>;
454
- addDriveActions(
455
- driveId: string,
456
- actions: (DocumentDriveAction | BaseAction)[],
457
- options?: AddOperationOptions,
458
- ): Promise<IOperationResult<DocumentDriveDocument>>;
459
-
460
- getSyncStatus(
461
- syncUnitId: string,
462
- ): SyncStatus | SynchronizationUnitNotFoundError;
463
-
464
- addInternalListener(
465
- driveId: string,
466
- receiver: IInternalListener,
467
- options: {
468
- listenerId: string;
469
- label: string;
470
- block: boolean;
471
- filter: ListenerFilter;
472
- },
473
- ): Promise<IInternalTransmitter>;
474
-
475
- /** Synchronization methods */
476
- getSynchronizationUnits(
477
- driveId: string,
478
- documentId?: string[],
479
- scope?: string[],
480
- branch?: string[],
481
- documentType?: string[],
482
- loadedDrive?: DocumentDriveDocument,
483
- ): Promise<SynchronizationUnit[]>;
484
-
485
- getSynchronizationUnit(
486
- driveId: string,
487
- syncId: string,
488
- loadedDrive?: DocumentDriveDocument,
489
- ): Promise<SynchronizationUnit | undefined>;
490
-
491
- getSynchronizationUnitsIds(
492
- driveId: string,
493
- documentId?: string[],
494
- scope?: string[],
495
- branch?: string[],
496
- documentType?: string[],
497
- ): Promise<SynchronizationUnitQuery[]>;
498
-
499
- getOperationData(
500
- driveId: string,
501
- syncId: string,
502
- filter: GetStrandsOptions,
503
- loadedDrive?: DocumentDriveDocument,
504
- ): Promise<OperationUpdate[]>;
505
-
506
- /** Internal methods **/
507
- getDocumentModels(): DocumentModel[];
508
-
509
- getTransmitter(
510
- driveId: string,
511
- listenerId: string,
512
- ): Promise<ITransmitter | undefined>;
513
-
514
- clearStorage(): Promise<void>;
515
-
516
- registerPullResponderTrigger(
517
- id: string,
518
- url: string,
519
- options: Pick<RemoteDriveOptions, "pullFilter" | "pullInterval">,
520
- ): Promise<PullResponderTrigger>;
521
-
522
- on<K extends keyof DriveEvents>(event: K, cb: DriveEvents[K]): Unsubscribe;
523
- }
524
-
525
- export type IDocumentDriveServer = IBaseDocumentDriveServer &
526
- IDefaultDrivesManager &
527
- IReadModeDriveServer;
528
-
529
- export type DriveUpdateErrorHandler = (
530
- error: Error,
531
- driveId: string,
532
- listener: ListenerState,
533
- ) => void;
534
-
535
- export interface IListenerManager {
536
- initialize(handler: DriveUpdateErrorHandler): Promise<void>;
537
-
538
- removeDrive(driveId: DocumentDriveState["id"]): Promise<void>;
539
- driveHasListeners(driveId: string): boolean;
540
-
541
- setListener(driveId: string, listener: Listener): Promise<void>;
542
- removeListener(driveId: string, listenerId: string): Promise<boolean>;
543
- getListenerState(driveId: string, listenerId: string): ListenerState;
544
-
545
- getStrands(
546
- driveId: string,
547
- listenerId: string,
548
- options?: GetStrandsOptions,
549
- ): Promise<StrandUpdate[]>;
550
- updateSynchronizationRevisions(
551
- driveId: string,
552
- syncUnits: SynchronizationUnit[],
553
- source: StrandUpdateSource,
554
- willUpdate?: (listeners: Listener[]) => void,
555
- onError?: (error: Error, driveId: string, listener: ListenerState) => void,
556
- forceSync?: boolean,
557
- ): Promise<ListenerUpdate[]>;
558
- updateListenerRevision(
559
- listenerId: string,
560
- driveId: string,
561
- syncId: string,
562
- listenerRev: number,
563
- ): Promise<void>;
564
-
565
- // todo: re-evaluate
566
- getListenerSyncUnitIds(
567
- driveId: string,
568
- listenerId: string,
569
- ): Promise<SynchronizationUnitQuery[]>;
570
- removeSyncUnits(
571
- driveId: string,
572
- syncUnits: Pick<SynchronizationUnit, "syncId">[],
573
- ): Promise<void>;
574
- }
575
-
576
- export type ListenerStatus =
577
- | "CREATED"
578
- | "PENDING"
579
- | "SUCCESS"
580
- | "MISSING"
581
- | "CONFLICT"
582
- | "ERROR";
583
-
584
- export interface ListenerState {
585
- driveId: string;
586
- block: boolean;
587
- pendingTimeout: string;
588
- listener: Listener;
589
- syncUnits: Map<SynchronizationUnit["syncId"], SyncronizationUnitState>;
590
- listenerStatus: ListenerStatus;
591
- }
592
-
593
- export interface SyncronizationUnitState {
594
- listenerRev: number;
595
- lastUpdated: string;
596
- }
@@ -1,82 +0,0 @@
1
- import type { Document, OperationScope } from "document-model/document";
2
- import { RevisionsFilter, StrandUpdate } from "./types";
3
-
4
- export function buildRevisionsFilter(
5
- strands: StrandUpdate[],
6
- driveId: string,
7
- documentId: string,
8
- ): RevisionsFilter {
9
- return strands.reduce<RevisionsFilter>((acc, s) => {
10
- if (!(s.driveId === driveId && s.documentId === documentId)) {
11
- return acc;
12
- }
13
- acc[s.scope] = s.operations[s.operations.length - 1]?.index ?? -1;
14
- return acc;
15
- }, {});
16
- }
17
-
18
- export function buildDocumentRevisionsFilter(
19
- document: Document,
20
- ): RevisionsFilter {
21
- return Object.entries(document.operations).reduce<RevisionsFilter>(
22
- (acc, [scope, operations]) => {
23
- acc[scope as OperationScope] = operations.at(-1)?.index ?? -1;
24
- return acc;
25
- },
26
- {} as RevisionsFilter,
27
- );
28
- }
29
-
30
- export function filterOperationsByRevision(
31
- operations: Document["operations"],
32
- revisions?: RevisionsFilter,
33
- ): Document["operations"] {
34
- if (!revisions) {
35
- return operations;
36
- }
37
- return (Object.keys(operations) as OperationScope[]).reduce<
38
- Document["operations"]
39
- >(
40
- (acc, scope) => {
41
- const revision = revisions[scope];
42
- if (revision !== undefined) {
43
- acc[scope] = operations[scope].filter((op) => op.index <= revision);
44
- }
45
- return acc;
46
- },
47
- { global: [], local: [] } as unknown as Document["operations"],
48
- );
49
- }
50
-
51
- export function isAtRevision(
52
- document: Document,
53
- revisions?: RevisionsFilter,
54
- ): boolean {
55
- return (
56
- !revisions ||
57
- Object.entries(revisions).find(([scope, revision]) => {
58
- const operation = document.operations[scope as OperationScope].at(-1);
59
- if (revision === -1) {
60
- return operation !== undefined;
61
- }
62
- return operation?.index !== revision;
63
- }) === undefined
64
- );
65
- }
66
-
67
- export function isAfterRevision(
68
- document: Document,
69
- revisions?: RevisionsFilter,
70
- ): boolean {
71
- return (
72
- !revisions ||
73
- Object.entries(revisions).every(([scope, revision]) => {
74
- const operation = document.operations[scope as OperationScope].at(-1);
75
-
76
- if (revision === -1) {
77
- return operation !== undefined;
78
- }
79
- return operation && operation.index > revision;
80
- })
81
- );
82
- }