@verdant-web/server 3.3.10 → 4.0.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.
Files changed (204) hide show
  1. package/bin/server.mjs +110 -107
  2. package/dist/esm/TokenVerifier.d.ts +1 -0
  3. package/dist/esm/TokenVerifier.js +3 -0
  4. package/dist/esm/TokenVerifier.js.map +1 -1
  5. package/dist/esm/adapters/node/errorHandler.d.ts +2 -0
  6. package/dist/esm/adapters/node/errorHandler.js +12 -0
  7. package/dist/esm/adapters/node/errorHandler.js.map +1 -0
  8. package/dist/esm/adapters/node/getRequestToken.d.ts +1 -0
  9. package/dist/esm/adapters/node/getRequestToken.js +25 -0
  10. package/dist/esm/adapters/node/getRequestToken.js.map +1 -0
  11. package/dist/esm/adapters/node/httpRouter.d.ts +47 -0
  12. package/dist/esm/adapters/node/httpRouter.js +88 -0
  13. package/dist/esm/adapters/node/httpRouter.js.map +1 -0
  14. package/dist/esm/adapters/node/index.d.ts +5 -0
  15. package/dist/esm/adapters/node/index.js +6 -0
  16. package/dist/esm/adapters/node/index.js.map +1 -0
  17. package/dist/esm/adapters/node/tokenMiddleware.d.ts +7 -0
  18. package/dist/esm/adapters/node/tokenMiddleware.js +22 -0
  19. package/dist/esm/adapters/node/tokenMiddleware.js.map +1 -0
  20. package/dist/esm/adapters/node/websocketHandler.d.ts +4 -0
  21. package/dist/esm/adapters/node/websocketHandler.js +54 -0
  22. package/dist/esm/adapters/node/websocketHandler.js.map +1 -0
  23. package/dist/esm/connections/ClientConnection.d.ts +25 -0
  24. package/dist/esm/{ClientConnection.js → connections/ClientConnection.js} +47 -38
  25. package/dist/esm/connections/ClientConnection.js.map +1 -0
  26. package/dist/esm/connections/MessageSender.d.ts +5 -0
  27. package/dist/esm/connections/MessageSender.js.map +1 -0
  28. package/dist/esm/connections/Presence.d.ts +23 -0
  29. package/dist/esm/connections/Presence.js +65 -0
  30. package/dist/esm/connections/Presence.js.map +1 -0
  31. package/dist/esm/core.d.ts +15 -0
  32. package/dist/esm/core.js +15 -0
  33. package/dist/esm/core.js.map +1 -0
  34. package/dist/esm/defaults.d.ts +2 -0
  35. package/dist/esm/defaults.js +3 -0
  36. package/dist/esm/defaults.js.map +1 -0
  37. package/dist/esm/files/FileStorage.d.ts +12 -3
  38. package/dist/esm/files/FileStorage.js +20 -0
  39. package/dist/esm/files/FileStorage.js.map +1 -1
  40. package/dist/esm/index.d.ts +7 -7
  41. package/dist/esm/index.js +2 -2
  42. package/dist/esm/index.js.map +1 -1
  43. package/dist/esm/internals.d.ts +14 -0
  44. package/dist/esm/internals.js +12 -0
  45. package/dist/esm/internals.js.map +1 -0
  46. package/dist/esm/libraries/Library.d.ts +78 -0
  47. package/dist/esm/{ServerLibrary.js → libraries/Library.js} +153 -144
  48. package/dist/esm/libraries/Library.js.map +1 -0
  49. package/dist/esm/{ServerLibrary.test.js → libraries/Library.test.js} +42 -33
  50. package/dist/esm/libraries/Library.test.js.map +1 -0
  51. package/dist/esm/libraries/generic.d.ts +8 -0
  52. package/dist/esm/libraries/generic.js +2 -0
  53. package/dist/esm/libraries/generic.js.map +1 -0
  54. package/dist/esm/libraries/singleNode.d.ts +53 -0
  55. package/dist/esm/libraries/singleNode.js +88 -0
  56. package/dist/esm/libraries/singleNode.js.map +1 -0
  57. package/dist/esm/logger.d.ts +1 -0
  58. package/dist/esm/logger.js +2 -0
  59. package/dist/esm/logger.js.map +1 -0
  60. package/dist/esm/storage/Storage.d.ts +39 -38
  61. package/dist/esm/storage/StorageManager.d.ts +11 -0
  62. package/dist/esm/storage/StorageManager.js +32 -0
  63. package/dist/esm/storage/StorageManager.js.map +1 -0
  64. package/dist/esm/storage/index.d.ts +1 -2
  65. package/dist/esm/storage/index.js +1 -2
  66. package/dist/esm/storage/index.js.map +1 -1
  67. package/dist/esm/storage/sqlShard/Databases.d.ts +5 -3
  68. package/dist/esm/storage/sqlShard/Databases.js +11 -7
  69. package/dist/esm/storage/sqlShard/Databases.js.map +1 -1
  70. package/dist/esm/storage/sqlShard/SqlBaselines.d.ts +16 -17
  71. package/dist/esm/storage/sqlShard/SqlBaselines.js +55 -59
  72. package/dist/esm/storage/sqlShard/SqlBaselines.js.map +1 -1
  73. package/dist/esm/storage/sqlShard/SqlFileMetadata.d.ts +13 -13
  74. package/dist/esm/storage/sqlShard/SqlFileMetadata.js +44 -57
  75. package/dist/esm/storage/sqlShard/SqlFileMetadata.js.map +1 -1
  76. package/dist/esm/storage/sqlShard/SqlOperations.d.ts +12 -12
  77. package/dist/esm/storage/sqlShard/SqlOperations.js +38 -73
  78. package/dist/esm/storage/sqlShard/SqlOperations.js.map +1 -1
  79. package/dist/esm/storage/sqlShard/SqlReplicas.d.ts +18 -17
  80. package/dist/esm/storage/sqlShard/SqlReplicas.js +63 -100
  81. package/dist/esm/storage/sqlShard/SqlReplicas.js.map +1 -1
  82. package/dist/esm/storage/sqlShard/database.d.ts +25 -5
  83. package/dist/esm/storage/sqlShard/database.js +47 -15
  84. package/dist/esm/storage/sqlShard/database.js.map +1 -1
  85. package/dist/esm/storage/sqlShard/migrations/v1.d.ts +2 -3
  86. package/dist/esm/storage/sqlShard/migrations/v1.js +42 -47
  87. package/dist/esm/storage/sqlShard/migrations/v1.js.map +1 -1
  88. package/dist/esm/storage/sqlShard/migrations/v2.d.ts +2 -3
  89. package/dist/esm/storage/sqlShard/migrations/v2.js +5 -15
  90. package/dist/esm/storage/sqlShard/migrations/v2.js.map +1 -1
  91. package/dist/esm/storage/sqlShard/migrations.d.ts +5 -7
  92. package/dist/esm/storage/sqlShard/migrations.js +48 -1
  93. package/dist/esm/storage/sqlShard/migrations.js.map +1 -1
  94. package/dist/esm/storage/sqlShard/sqlShardStorage.d.ts +25 -4
  95. package/dist/esm/storage/sqlShard/sqlShardStorage.js +43 -40
  96. package/dist/esm/storage/sqlShard/sqlShardStorage.js.map +1 -1
  97. package/dist/esm/storage/sqlShard/tables.d.ts +9 -6
  98. package/dist/esm/types.d.ts +1 -2
  99. package/package.json +24 -13
  100. package/src/TokenVerifier.ts +4 -0
  101. package/src/adapters/node/errorHandler.ts +18 -0
  102. package/src/adapters/node/getRequestToken.ts +34 -0
  103. package/src/adapters/node/httpRouter.ts +139 -0
  104. package/src/adapters/node/index.ts +5 -0
  105. package/src/adapters/node/tokenMiddleware.ts +32 -0
  106. package/src/adapters/node/websocketHandler.ts +79 -0
  107. package/src/{ClientConnection.ts → connections/ClientConnection.ts} +64 -57
  108. package/src/connections/MessageSender.ts +6 -0
  109. package/src/connections/Presence.ts +95 -0
  110. package/src/core.ts +36 -0
  111. package/src/defaults.ts +2 -0
  112. package/src/files/FileStorage.ts +36 -3
  113. package/src/index.ts +7 -7
  114. package/src/internals.ts +14 -0
  115. package/src/{ServerLibrary.test.ts → libraries/Library.test.ts} +51 -49
  116. package/src/{ServerLibrary.ts → libraries/Library.ts} +203 -206
  117. package/src/libraries/generic.ts +9 -0
  118. package/src/libraries/singleNode.ts +145 -0
  119. package/src/logger.ts +4 -0
  120. package/src/storage/Storage.ts +37 -66
  121. package/src/storage/StorageManager.ts +39 -0
  122. package/src/storage/index.ts +1 -2
  123. package/src/storage/sqlShard/Databases.ts +26 -13
  124. package/src/storage/sqlShard/SqlBaselines.ts +58 -67
  125. package/src/storage/sqlShard/SqlFileMetadata.ts +51 -72
  126. package/src/storage/sqlShard/SqlOperations.ts +57 -81
  127. package/src/storage/sqlShard/SqlReplicas.ts +80 -121
  128. package/src/storage/sqlShard/database.ts +82 -18
  129. package/src/storage/sqlShard/migrations/v1.ts +42 -52
  130. package/src/storage/sqlShard/migrations/v2.ts +5 -19
  131. package/src/storage/sqlShard/migrations.ts +66 -1
  132. package/src/storage/sqlShard/sqlShardStorage.ts +56 -55
  133. package/src/storage/sqlShard/tables.ts +6 -6
  134. package/src/types.ts +1 -2
  135. package/dist/esm/ClientConnection.d.ts +0 -19
  136. package/dist/esm/ClientConnection.js.map +0 -1
  137. package/dist/esm/MessageSender.d.ts +0 -5
  138. package/dist/esm/MessageSender.js.map +0 -1
  139. package/dist/esm/Presence.d.ts +0 -18
  140. package/dist/esm/Presence.js +0 -65
  141. package/dist/esm/Presence.js.map +0 -1
  142. package/dist/esm/ReplicaKeepaliveTimers.d.ts +0 -17
  143. package/dist/esm/ReplicaKeepaliveTimers.js +0 -27
  144. package/dist/esm/ReplicaKeepaliveTimers.js.map +0 -1
  145. package/dist/esm/Server.d.ts +0 -166
  146. package/dist/esm/Server.js +0 -572
  147. package/dist/esm/Server.js.map +0 -1
  148. package/dist/esm/ServerLibrary.d.ts +0 -64
  149. package/dist/esm/ServerLibrary.js.map +0 -1
  150. package/dist/esm/ServerLibrary.test.js.map +0 -1
  151. package/dist/esm/storage/sql/SqlBaselines.d.ts +0 -22
  152. package/dist/esm/storage/sql/SqlBaselines.js +0 -107
  153. package/dist/esm/storage/sql/SqlBaselines.js.map +0 -1
  154. package/dist/esm/storage/sql/SqlFileMetadata.d.ts +0 -18
  155. package/dist/esm/storage/sql/SqlFileMetadata.js +0 -69
  156. package/dist/esm/storage/sql/SqlFileMetadata.js.map +0 -1
  157. package/dist/esm/storage/sql/SqlOperations.d.ts +0 -19
  158. package/dist/esm/storage/sql/SqlOperations.js +0 -122
  159. package/dist/esm/storage/sql/SqlOperations.js.map +0 -1
  160. package/dist/esm/storage/sql/SqlReplicas.d.ts +0 -32
  161. package/dist/esm/storage/sql/SqlReplicas.js +0 -163
  162. package/dist/esm/storage/sql/SqlReplicas.js.map +0 -1
  163. package/dist/esm/storage/sql/database.d.ts +0 -9
  164. package/dist/esm/storage/sql/database.js +0 -24
  165. package/dist/esm/storage/sql/database.js.map +0 -1
  166. package/dist/esm/storage/sql/migrations/v1.d.ts +0 -3
  167. package/dist/esm/storage/sql/migrations/v1.js +0 -59
  168. package/dist/esm/storage/sql/migrations/v1.js.map +0 -1
  169. package/dist/esm/storage/sql/migrations/v2.d.ts +0 -3
  170. package/dist/esm/storage/sql/migrations/v2.js +0 -16
  171. package/dist/esm/storage/sql/migrations/v2.js.map +0 -1
  172. package/dist/esm/storage/sql/migrations.d.ts +0 -7
  173. package/dist/esm/storage/sql/migrations.js +0 -4
  174. package/dist/esm/storage/sql/migrations.js.map +0 -1
  175. package/dist/esm/storage/sql/sqlStorage.d.ts +0 -6
  176. package/dist/esm/storage/sql/sqlStorage.js +0 -35
  177. package/dist/esm/storage/sql/sqlStorage.js.map +0 -1
  178. package/dist/esm/storage/sql/tables.d.ts +0 -44
  179. package/dist/esm/storage/sql/tables.js +0 -2
  180. package/dist/esm/storage/sql/tables.js.map +0 -1
  181. package/dist/esm/storage/sqlShard/transfer.d.ts +0 -7
  182. package/dist/esm/storage/sqlShard/transfer.js +0 -90
  183. package/dist/esm/storage/sqlShard/transfer.js.map +0 -1
  184. package/dist/esm/storage/sqlShard/transfer.test.d.ts +0 -1
  185. package/dist/esm/storage/sqlShard/transfer.test.js +0 -109
  186. package/dist/esm/storage/sqlShard/transfer.test.js.map +0 -1
  187. package/src/MessageSender.ts +0 -10
  188. package/src/Presence.ts +0 -86
  189. package/src/ReplicaKeepaliveTimers.ts +0 -34
  190. package/src/Server.ts +0 -859
  191. package/src/storage/sql/SqlBaselines.ts +0 -147
  192. package/src/storage/sql/SqlFileMetadata.ts +0 -94
  193. package/src/storage/sql/SqlOperations.ts +0 -160
  194. package/src/storage/sql/SqlReplicas.ts +0 -234
  195. package/src/storage/sql/database.ts +0 -32
  196. package/src/storage/sql/migrations/v1.ts +0 -64
  197. package/src/storage/sql/migrations/v2.ts +0 -20
  198. package/src/storage/sql/migrations.ts +0 -4
  199. package/src/storage/sql/sqlStorage.ts +0 -57
  200. package/src/storage/sql/tables.ts +0 -51
  201. package/src/storage/sqlShard/transfer.test.ts +0 -149
  202. package/src/storage/sqlShard/transfer.ts +0 -123
  203. /package/dist/esm/{MessageSender.js → connections/MessageSender.js} +0 -0
  204. /package/dist/esm/{ServerLibrary.test.d.ts → libraries/Library.test.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Library.js","sourceRoot":"","sources":["../../../src/libraries/Library.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import { UserProfileLoader } from './Profiles.js';
3
- import { sqlStorage } from './storage/index.js';
4
- import { ServerLibrary } from './ServerLibrary.js';
5
1
  import { ReplicaType, } from '@verdant-web/common';
2
+ import { describe, expect, it, vi } from 'vitest';
3
+ import { Presence } from '../connections/Presence.js';
4
+ import { UserProfileLoader } from '../Profiles.js';
5
+ import { sqlShardStorage } from '../storage/index.js';
6
+ import { Library } from './Library.js';
6
7
  const profiles = new UserProfileLoader({
7
8
  get: async (userId) => {
8
9
  return {
@@ -11,13 +12,21 @@ const profiles = new UserProfileLoader({
11
12
  };
12
13
  },
13
14
  });
14
- const baseOptions = () => ({
15
+ const baseOptions = async () => ({
16
+ id: 'library-1',
15
17
  profiles,
16
- storage: sqlStorage({
17
- databaseFile: ':memory:',
18
- })({
18
+ storage: await sqlShardStorage({
19
+ databasesDirectory: ':memory:',
19
20
  fileDeleteExpirationDays: 7,
20
21
  replicaTruancyMinutes: 60 * 24,
22
+ })('library-1'),
23
+ presence: new Presence({
24
+ get: async (userId) => {
25
+ return {
26
+ id: userId,
27
+ name: 'Alice',
28
+ };
29
+ },
21
30
  }),
22
31
  });
23
32
  let time = 0;
@@ -49,12 +58,12 @@ function getAllReceivedReplicaOperations(replica) {
49
58
  }
50
59
  return operations;
51
60
  }
52
- describe('ServerLibrary', () => {
61
+ describe('Library', () => {
53
62
  describe('sync handling', () => {
54
63
  it('should initialize a new library from a replica', async () => {
55
64
  const sender = {
56
65
  broadcast: vi.fn(),
57
- send: vi.fn(),
66
+ respond: vi.fn((_, message) => { }),
58
67
  };
59
68
  const tokenInfo = {
60
69
  libraryId: 'library-1',
@@ -63,7 +72,7 @@ describe('ServerLibrary', () => {
63
72
  type: ReplicaType.Realtime,
64
73
  userId: 'user-1',
65
74
  };
66
- const library = new ServerLibrary(Object.assign(Object.assign({}, baseOptions()), { sender }));
75
+ const library = new Library(Object.assign(Object.assign({}, (await baseOptions())), { sender }));
67
76
  const messages = [
68
77
  {
69
78
  type: 'sync',
@@ -106,9 +115,9 @@ describe('ServerLibrary', () => {
106
115
  },
107
116
  ];
108
117
  // purposefully do not await in order - these all come at the same time
109
- await Promise.all(messages.map((m) => library.receive(m, 'clientKey-1', tokenInfo)));
118
+ await Promise.all(messages.map((m) => library.handleMessage(m, 'clientKey-1', tokenInfo)));
110
119
  // expect sender.broadcast for the operations, and a reply with sync response
111
- expect(sender.broadcast).toHaveBeenCalledWith('library-1', {
120
+ expect(sender.broadcast).toHaveBeenCalledWith({
112
121
  type: 'op-re',
113
122
  baselines: [
114
123
  {
@@ -145,7 +154,7 @@ describe('ServerLibrary', () => {
145
154
  replicaId: 'replica-1',
146
155
  globalAckTimestamp: undefined,
147
156
  }, ['clientKey-1']);
148
- expect(sender.send).toHaveBeenCalledWith('library-1', 'clientKey-1', {
157
+ expect(sender.respond).toHaveBeenCalledWith('clientKey-1', {
149
158
  type: 'sync-resp',
150
159
  operations: [],
151
160
  baselines: [],
@@ -163,21 +172,21 @@ describe('ServerLibrary', () => {
163
172
  const replicaB = createTestReplica('b');
164
173
  const replicas = [replicaA, replicaB];
165
174
  const sender = {
166
- broadcast: (libraryId, message, omitKeys) => {
175
+ broadcast: (message, omitKeys) => {
167
176
  replicas.forEach((replica) => {
168
177
  if (!(omitKeys === null || omitKeys === void 0 ? void 0 : omitKeys.includes(replica.key))) {
169
178
  replica.messages.push(message);
170
179
  }
171
180
  });
172
181
  },
173
- send: (libraryId, clientKey, message) => {
182
+ respond: (clientKey, message) => {
174
183
  const replica = replicas.find((r) => r.key === clientKey);
175
184
  if (replica) {
176
185
  replica.messages.push(message);
177
186
  }
178
187
  },
179
188
  };
180
- const library = new ServerLibrary(Object.assign(Object.assign({}, baseOptions()), { sender }));
189
+ const library = new Library(Object.assign(Object.assign({}, (await baseOptions())), { sender }));
181
190
  // replica A sends a sync message to initialize library
182
191
  const syncMessageA = {
183
192
  type: 'sync',
@@ -207,7 +216,7 @@ describe('ServerLibrary', () => {
207
216
  since: null,
208
217
  timestamp: now(),
209
218
  };
210
- await library.receive(syncMessageA, replicaA.key, replicaA.tokenInfo);
219
+ await library.handleMessage(syncMessageA, replicaA.key, replicaA.tokenInfo);
211
220
  // concurrently, replica B syncs, and A sends more operations
212
221
  const syncMessageB = {
213
222
  type: 'sync',
@@ -236,8 +245,8 @@ describe('ServerLibrary', () => {
236
245
  timestamp: now(),
237
246
  };
238
247
  await Promise.all([
239
- library.receive(syncMessageB, replicaB.key, replicaB.tokenInfo),
240
- library.receive(opMessageA, replicaA.key, replicaA.tokenInfo),
248
+ library.handleMessage(syncMessageB, replicaB.key, replicaB.tokenInfo),
249
+ library.handleMessage(opMessageA, replicaA.key, replicaA.tokenInfo),
241
250
  ]);
242
251
  // there are two valid scenario outcomes here:
243
252
  // 1. A's operation is resolved before B's sync reads operations, and so it's
@@ -269,7 +278,7 @@ describe('ServerLibrary', () => {
269
278
  it('should reject syncs with data from read replicas', async () => {
270
279
  const sender = {
271
280
  broadcast: vi.fn(),
272
- send: vi.fn(),
281
+ respond: vi.fn(),
273
282
  };
274
283
  const tokenInfo = {
275
284
  libraryId: 'library-1',
@@ -278,7 +287,7 @@ describe('ServerLibrary', () => {
278
287
  type: ReplicaType.ReadOnlyPull,
279
288
  userId: 'user-1',
280
289
  };
281
- const library = new ServerLibrary(Object.assign(Object.assign({}, baseOptions()), { sender }));
290
+ const library = new Library(Object.assign(Object.assign({}, (await baseOptions())), { sender }));
282
291
  const messages = [
283
292
  {
284
293
  type: 'sync',
@@ -321,16 +330,16 @@ describe('ServerLibrary', () => {
321
330
  },
322
331
  ];
323
332
  // purposefully do not await in order - these all come at the same time
324
- await Promise.all(messages.map((m) => library.receive(m, 'clientKey-1', tokenInfo)));
325
- expect(sender.send).toHaveBeenCalledOnce();
326
- expect(sender.send).toHaveBeenCalledWith('library-1', 'clientKey-1', {
333
+ await Promise.all(messages.map((m) => library.handleMessage(m, 'clientKey-1', tokenInfo)));
334
+ expect(sender.respond).toHaveBeenCalledOnce();
335
+ expect(sender.respond).toHaveBeenCalledWith('clientKey-1', {
327
336
  type: 'forbidden',
328
337
  });
329
338
  });
330
339
  it('should reject messages from a replica claimed by a user other than the one recorded on the server', async () => {
331
340
  const sender = {
332
341
  broadcast: vi.fn(),
333
- send: vi.fn(),
342
+ respond: vi.fn((_, message) => { }),
334
343
  };
335
344
  const tokenInfo = {
336
345
  libraryId: 'library-1',
@@ -339,9 +348,9 @@ describe('ServerLibrary', () => {
339
348
  type: ReplicaType.Realtime,
340
349
  userId: 'user-1',
341
350
  };
342
- const library = new ServerLibrary(Object.assign(Object.assign({}, baseOptions()), { sender }));
351
+ const library = new Library(Object.assign(Object.assign({}, (await baseOptions())), { sender }));
343
352
  // purposefully do not await in order - these all come at the same time
344
- await library.receive({
353
+ await library.handleMessage({
345
354
  type: 'sync',
346
355
  baselines: [],
347
356
  operations: [],
@@ -350,7 +359,7 @@ describe('ServerLibrary', () => {
350
359
  since: null,
351
360
  timestamp: now(),
352
361
  }, 'clientKey-1', tokenInfo);
353
- sender.send.mockReset();
362
+ sender.respond.mockReset();
354
363
  // now try to send a message from a different user with the same replica
355
364
  const tokenInfo2 = {
356
365
  libraryId: 'library-1',
@@ -368,12 +377,12 @@ describe('ServerLibrary', () => {
368
377
  since: null,
369
378
  timestamp: now(),
370
379
  };
371
- await library.receive(message, 'clientKey-1', tokenInfo2);
372
- expect(sender.send).toHaveBeenCalledOnce();
373
- expect(sender.send).toHaveBeenCalledWith('library-1', 'clientKey-1', {
380
+ await library.handleMessage(message, 'clientKey-1', tokenInfo2);
381
+ expect(sender.respond).toHaveBeenCalledOnce();
382
+ expect(sender.respond).toHaveBeenCalledWith('clientKey-1', {
374
383
  type: 'forbidden',
375
384
  });
376
385
  });
377
386
  });
378
387
  });
379
- //# sourceMappingURL=ServerLibrary.test.js.map
388
+ //# sourceMappingURL=Library.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Library.test.js","sourceRoot":"","sources":["../../../src/libraries/Library.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { LibraryInfo } from '../types.js';
2
+ import { LibraryFileInfo } from './Library.js';
3
+ export interface LibraryApi {
4
+ getFileInfo(fileId: string): Promise<LibraryFileInfo | null>;
5
+ forceTruant: (replicaId: string) => Promise<void>;
6
+ getInfo: () => Promise<LibraryInfo | null>;
7
+ getDocumentSnapshot: (collection: string, id: string) => any;
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/libraries/generic.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import { ClientMessage, EventSubscriber } from '@verdant-web/common';
2
+ import { Readable } from 'stream';
3
+ import { ReadableStream } from 'stream/web';
4
+ import { UserProfileLoader } from '../Profiles.js';
5
+ import { TokenInfo, TokenVerifier } from '../TokenVerifier.js';
6
+ import { ClientConnectionManager } from '../connections/ClientConnection.js';
7
+ import { FileInfo, FileStorage } from '../files/FileStorage.js';
8
+ import { Library } from '../internals.js';
9
+ import { Logger } from '../logger.js';
10
+ import { StorageFactory } from '../storage/Storage.js';
11
+ import { LibraryEvents } from './Library.js';
12
+ import { LibraryApi } from './generic.js';
13
+ export interface SingleNodeMicroserverConfig {
14
+ storage: StorageFactory;
15
+ fileStorage?: FileStorage;
16
+ disableRebasing?: boolean;
17
+ profiles: UserProfileLoader<any>;
18
+ tokenSecret: string;
19
+ log?: Logger;
20
+ __testMode?: boolean;
21
+ }
22
+ export declare class SingleNodeLibraryManager {
23
+ private ctx;
24
+ readonly events: EventSubscriber<LibraryEvents>;
25
+ private microserverPromises;
26
+ readonly tokenVerifier: TokenVerifier;
27
+ constructor(ctx: SingleNodeMicroserverConfig);
28
+ get log(): Logger;
29
+ get __testMode(): boolean;
30
+ get: (libraryId: string) => Promise<SingleNodeMicroserver>;
31
+ evict: (libraryId: string) => Promise<void>;
32
+ private constructMicroserver;
33
+ }
34
+ export declare class SingleNodeMicroserver implements LibraryApi {
35
+ private library;
36
+ readonly clientConnections: ClientConnectionManager;
37
+ private ctx;
38
+ constructor(library: Library, clientConnections: ClientConnectionManager, ctx: SingleNodeMicroserverConfig);
39
+ handleMessage: (key: string, info: TokenInfo, message: ClientMessage) => Promise<void>;
40
+ uploadFile: (fileStream: Readable | ReadableStream | any, info: FileInfo) => Promise<void>;
41
+ getFileInfo: (fileId: string) => Promise<{
42
+ libraryId: string;
43
+ id: string;
44
+ name: string;
45
+ type: string;
46
+ url: string | null;
47
+ } | null>;
48
+ onRequest: (key: string, req: Request, info: TokenInfo) => (() => Response);
49
+ getDocumentSnapshot: (collection: string, documentId: string) => Promise<any | null>;
50
+ destroy: () => Promise<void>;
51
+ getInfo: () => Promise<import("../types.js").LibraryInfo | null>;
52
+ forceTruant: (replicaId: string) => Promise<void>;
53
+ }
@@ -0,0 +1,88 @@
1
+ import { createOid, EventSubscriber, VerdantError, } from '@verdant-web/common';
2
+ import { TokenVerifier } from '../TokenVerifier.js';
3
+ import { ClientConnectionManager } from '../connections/ClientConnection.js';
4
+ import { FileStorageLibraryDelegate, } from '../files/FileStorage.js';
5
+ import { Library } from '../internals.js';
6
+ const noop = () => { };
7
+ export class SingleNodeLibraryManager {
8
+ constructor(ctx) {
9
+ this.ctx = ctx;
10
+ this.events = new EventSubscriber();
11
+ this.microserverPromises = new Map();
12
+ this.get = async (libraryId) => {
13
+ let microserverPromise = this.microserverPromises.get(libraryId);
14
+ if (!microserverPromise) {
15
+ microserverPromise = this.constructMicroserver(libraryId);
16
+ this.microserverPromises.set(libraryId, microserverPromise);
17
+ }
18
+ return microserverPromise;
19
+ };
20
+ this.evict = async (libraryId) => {
21
+ const lib = await this.get(libraryId);
22
+ await lib.destroy();
23
+ this.microserverPromises.delete(libraryId);
24
+ };
25
+ this.constructMicroserver = async (libraryId) => {
26
+ const clientConnections = new ClientConnectionManager({
27
+ profiles: this.ctx.profiles,
28
+ });
29
+ const storage = await this.ctx.storage(libraryId);
30
+ const library = new Library({
31
+ storage,
32
+ id: libraryId,
33
+ events: this.events,
34
+ sender: clientConnections,
35
+ presence: clientConnections.presence,
36
+ log: (level, ...args) => { var _a, _b; return (_b = (_a = this.ctx).log) === null || _b === void 0 ? void 0 : _b.call(_a, level, `[Library ${libraryId}]`, ...args); },
37
+ fileStorage: this.ctx.fileStorage
38
+ ? new FileStorageLibraryDelegate(libraryId, this.ctx.fileStorage)
39
+ : undefined,
40
+ disableRebasing: this.ctx.disableRebasing || false,
41
+ });
42
+ return new SingleNodeMicroserver(library, clientConnections, this.ctx);
43
+ };
44
+ this.tokenVerifier = new TokenVerifier({ secret: ctx.tokenSecret });
45
+ }
46
+ get log() {
47
+ var _a;
48
+ return (_a = this.ctx.log) !== null && _a !== void 0 ? _a : noop;
49
+ }
50
+ get __testMode() {
51
+ return this.ctx.__testMode === true;
52
+ }
53
+ }
54
+ export class SingleNodeMicroserver {
55
+ constructor(library, clientConnections, ctx) {
56
+ this.library = library;
57
+ this.clientConnections = clientConnections;
58
+ this.ctx = ctx;
59
+ this.handleMessage = async (key, info, message) => {
60
+ return this.library.handleMessage(message, key, info);
61
+ };
62
+ this.uploadFile = async (fileStream, info) => {
63
+ if (!this.ctx.fileStorage) {
64
+ throw new VerdantError(VerdantError.Code.ConfigurationError, undefined, 'File storage not configured');
65
+ }
66
+ await this.library.putFileInfo(info);
67
+ await this.ctx.fileStorage.put(fileStream, info);
68
+ };
69
+ this.getFileInfo = async (fileId) => {
70
+ return this.library.getFileInfo(fileId);
71
+ };
72
+ this.onRequest = this.clientConnections.addFetch.bind(this.clientConnections);
73
+ this.getDocumentSnapshot = async (collection, documentId) => {
74
+ return this.library.getDocumentSnapshot(createOid(collection, documentId));
75
+ };
76
+ this.destroy = async () => {
77
+ this.clientConnections.disconnectAll();
78
+ await this.library.destroy();
79
+ };
80
+ this.getInfo = async () => {
81
+ return this.library.getInfo();
82
+ };
83
+ this.forceTruant = async (replicaId) => {
84
+ await this.library.forceTruant(replicaId);
85
+ };
86
+ }
87
+ }
88
+ //# sourceMappingURL=singleNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleNode.js","sourceRoot":"","sources":["../../../src/libraries/singleNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export type Logger = (level: 'info' | 'warn' | 'error' | 'debug', ...args: any[]) => void;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":""}
@@ -1,59 +1,60 @@
1
1
  import { DocumentBaseline, Operation, Ref, ReplicaType } from '@verdant-web/common';
2
- import { HydratedDocumentBaseline, StoredOperation, StoredReplicaInfo, FileMetadata } from '../types.js';
3
2
  import { FileInfo } from '../files/FileStorage.js';
3
+ import { FileMetadata, HydratedDocumentBaseline, StoredOperation, StoredReplicaInfo } from '../types.js';
4
4
  export interface ReplicaStorage {
5
5
  readonly truantCutoff: number;
6
- get(libraryId: string, replicaId: string): Promise<StoredReplicaInfo | null>;
7
- getOrCreate(libraryId: string, replicaId: string, info: {
6
+ get(replicaId: string): Promise<StoredReplicaInfo | null>;
7
+ getOrCreate(replicaId: string, info: {
8
8
  userId: string;
9
9
  type: ReplicaType;
10
10
  }): Promise<{
11
11
  status: 'new' | 'existing' | 'truant';
12
12
  replicaInfo: StoredReplicaInfo;
13
13
  }>;
14
- getAll(libraryId: string, options?: {
14
+ getAll(options?: {
15
15
  omitTruant: boolean;
16
16
  }): Promise<StoredReplicaInfo[]>;
17
- updateLastSeen(libraryId: string, replicaId: string): Promise<void>;
18
- updateAckedServerOrder(libraryId: string, replicaId: string, serverOrder: number): Promise<void>;
19
- updateAcknowledgedLogicalTime(libraryId: string, replicaId: string, timestamp: string): Promise<void>;
20
- getEarliestAckedServerOrder(libraryId: string): Promise<number>;
21
- acknowledgeOperation(libraryId: string, replicaId: string, timestamp: string): Promise<void>;
22
- getGlobalAck(libraryId: string, onlineReplicaIds?: string[]): Promise<string | null>;
23
- delete(libraryId: string, replicaId: string): Promise<void>;
24
- deleteAll(libraryId: string): Promise<void>;
25
- deleteAllForUser(libraryId: string, userId: string): Promise<void>;
17
+ updateLastSeen(replicaId: string): Promise<void>;
18
+ updateAckedServerOrder(replicaId: string, serverOrder: number): Promise<void>;
19
+ updateAcknowledgedLogicalTime(replicaId: string, timestamp: string): Promise<void>;
20
+ getEarliestAckedServerOrder(): Promise<number>;
21
+ acknowledgeOperation(replicaId: string, timestamp: string): Promise<void>;
22
+ getGlobalAck(onlineReplicaIds?: string[]): Promise<string | null>;
23
+ delete(replicaId: string): Promise<void>;
24
+ deleteAll(): Promise<void>;
25
+ deleteAllForUser(userId: string): Promise<void>;
26
+ forceTruant(replicaId: string): Promise<void>;
26
27
  }
27
28
  export interface OperationStorage {
28
- getAll(libraryId: string, oid: string): Promise<StoredOperation[]>;
29
- getBeforeServerOrder(libraryId: string, beforeServerOrder: number): Promise<StoredOperation[]>;
30
- getAfterServerOrder(libraryId: string, afterServerOrder: number): Promise<StoredOperation[]>;
31
- getLatestServerOrder(libraryId: string): Promise<number>;
32
- getCount(libraryId: string): Promise<number>;
33
- insertAll(libraryId: string, replicaId: string, operations: Operation[]): Promise<number>;
34
- deleteAll(libraryId: string): Promise<void>;
35
- delete(libraryId: string, operations: Operation[]): Promise<void>;
29
+ getAll(oid: string): Promise<StoredOperation[]>;
30
+ getBeforeServerOrder(beforeServerOrder: number): Promise<StoredOperation[]>;
31
+ getAfterServerOrder(afterServerOrder: number): Promise<StoredOperation[]>;
32
+ getLatestServerOrder(): Promise<number>;
33
+ getCount(): Promise<number>;
34
+ insertAll(replicaId: string, operations: Operation[]): Promise<number>;
35
+ deleteAll(): Promise<void>;
36
+ delete(operations: Operation[]): Promise<void>;
36
37
  }
37
38
  export interface BaselineStorage {
38
- get(libraryId: string, oid: string): Promise<HydratedDocumentBaseline | null>;
39
- getAll(libraryId: string): Promise<HydratedDocumentBaseline[]>;
40
- insertAll(libraryId: string, baselines: DocumentBaseline<any>[]): Promise<void>;
41
- deleteAll(libraryId: string): Promise<void>;
42
- getCount(libraryId: string): Promise<number>;
43
- applyOperations(libraryId: string, oid: string, operations: StoredOperation[], deletedRefs?: Ref[]): Promise<void>;
39
+ get(oid: string): Promise<HydratedDocumentBaseline | null>;
40
+ getAll(): Promise<HydratedDocumentBaseline[]>;
41
+ insertAll(baselines: DocumentBaseline<any>[]): Promise<void>;
42
+ deleteAll(): Promise<void>;
43
+ getCount(): Promise<number>;
44
+ applyOperations(oid: string, operations: StoredOperation[], deletedRefs?: Ref[]): Promise<void>;
44
45
  }
45
46
  export interface FileMetadataStorage {
46
- get(libraryId: string, fileId: string): Promise<FileMetadata | null>;
47
- getAll(libraryId: string): Promise<FileMetadata[]>;
48
- deleteAll(libraryId: string): Promise<void>;
49
- put(libraryId: string, fileInfo: FileInfo): Promise<void>;
50
- markPendingDelete(libraryId: string, fileId: string): Promise<void>;
51
- delete(libraryId: string, fileId: string): Promise<void>;
52
- getPendingDelete(libraryId: string): Promise<FileMetadata[]>;
47
+ get(fileId: string): Promise<FileMetadata | null>;
48
+ getAll(): Promise<FileMetadata[]>;
49
+ deleteAll(): Promise<void>;
50
+ put(fileInfo: FileInfo): Promise<void>;
51
+ markPendingDelete(fileId: string): Promise<void>;
52
+ delete(fileId: string): Promise<void>;
53
+ getPendingDelete(): Promise<FileMetadata[]>;
53
54
  }
54
55
  export interface StorageOptions {
55
- replicaTruancyMinutes: number;
56
- fileDeleteExpirationDays: number;
56
+ replicaTruancyMinutes?: number;
57
+ fileDeleteExpirationDays?: number;
57
58
  }
58
59
  export interface Storage {
59
60
  replicas: ReplicaStorage;
@@ -62,6 +63,6 @@ export interface Storage {
62
63
  fileMetadata: FileMetadataStorage;
63
64
  close(): Promise<void>;
64
65
  readonly open: boolean;
65
- readonly ready: Promise<void>;
66
66
  }
67
- export type StorageFactory = (options: StorageOptions) => Storage;
67
+ export type StorageFactory = (libraryId: string) => Promise<Storage>;
68
+ export type StorageFactoryFactory = (options: StorageOptions) => StorageFactory;
@@ -0,0 +1,11 @@
1
+ import { Storage, StorageFactory } from './Storage.js';
2
+ export declare class StorageManager {
3
+ private _factory;
4
+ private _cache;
5
+ private _evicts;
6
+ constructor(_factory: StorageFactory);
7
+ open: (libraryId: string) => Promise<Storage>;
8
+ closeAll: () => Promise<void>;
9
+ private refresh;
10
+ private evict;
11
+ }
@@ -0,0 +1,32 @@
1
+ export class StorageManager {
2
+ constructor(_factory) {
3
+ this._factory = _factory;
4
+ this._cache = new Map();
5
+ this._evicts = new Map();
6
+ this.open = async (libraryId) => {
7
+ let storage = this._cache.get(libraryId);
8
+ if (!storage) {
9
+ storage = this._factory(libraryId);
10
+ this._cache.set(libraryId, storage);
11
+ }
12
+ this.refresh(libraryId);
13
+ await storage;
14
+ return storage;
15
+ };
16
+ this.closeAll = async () => {
17
+ for (const [libraryId, storage] of this._cache) {
18
+ await (await storage).close();
19
+ this.evict(libraryId);
20
+ }
21
+ };
22
+ this.refresh = (libraryId) => {
23
+ clearTimeout(this._evicts.get(libraryId));
24
+ this._evicts.set(libraryId, setTimeout(this.evict, 1000 * 60 * 60, libraryId));
25
+ };
26
+ this.evict = (libraryId) => {
27
+ this._cache.delete(libraryId);
28
+ this._evicts.delete(libraryId);
29
+ };
30
+ }
31
+ }
32
+ //# sourceMappingURL=StorageManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageManager.js","sourceRoot":"","sources":["../../../src/storage/StorageManager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IAI1B,YAAoB,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;QAHpC,WAAM,GAAkC,IAAI,GAAG,EAAE,CAAC;QAClD,YAAO,GAAgC,IAAI,GAAG,EAAE,CAAC;QAIzD,SAAI,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;YAClC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,OAAO,CAAC;YACd,OAAO,OAAO,CAAC;QAChB,CAAC,CAAC;QAEF,aAAQ,GAAG,KAAK,IAAI,EAAE;YACrB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChD,MAAM,CAAC,MAAM,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;QACF,CAAC,CAAC;QAEM,YAAO,GAAG,CAAC,SAAiB,EAAE,EAAE;YACvC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CACf,SAAS,EACT,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CACjD,CAAC;QACH,CAAC,CAAC;QAEM,UAAK,GAAG,CAAC,SAAiB,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC,CAAC;IA/B6C,CAAC;CAgChD"}
@@ -1,3 +1,2 @@
1
- export * from './Storage.js';
2
- export * from './sql/sqlStorage.js';
3
1
  export * from './sqlShard/sqlShardStorage.js';
2
+ export * from './Storage.js';
@@ -1,4 +1,3 @@
1
- export * from './Storage.js';
2
- export * from './sql/sqlStorage.js';
3
1
  export * from './sqlShard/sqlShardStorage.js';
2
+ export * from './Storage.js';
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC"}