@verdant-web/server 3.3.11 → 4.0.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 (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} +165 -151
  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 +2 -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} +205 -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 +2 -4
  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,14 @@
1
+ export { errorHandler } from './adapters/node/errorHandler.js';
2
+ export { createHttpRouter as createHonoRouter } from './adapters/node/httpRouter.js';
3
+ export { tokenMiddleware } from './adapters/node/tokenMiddleware.js';
4
+ export { ClientConnectionManager } from './connections/ClientConnection.js';
5
+ export { FileStorageLibraryDelegate } from './files/FileStorage.js';
6
+ export type * from './libraries/generic.js';
7
+ export { Library, type LibraryEvents } from './libraries/Library.js';
8
+ export { type Logger } from './logger.js';
9
+ export { UserProfileLoader } from './Profiles.js';
10
+ export { SqliteExecutor } from './storage/sqlShard/database.js';
11
+ export { migrateToLatest } from './storage/sqlShard/migrations.js';
12
+ export { SqlShardStorage } from './storage/sqlShard/sqlShardStorage.js';
13
+ export type { Database as DatabaseTypes } from './storage/sqlShard/tables.js';
14
+ export { TokenVerifier } from './TokenVerifier.js';
@@ -1,17 +1,16 @@
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 {
6
2
  ClientMessage,
7
- DocumentBaseline,
8
- HybridLogicalClockTimestampProvider,
9
3
  Operation,
10
4
  ReplicaType,
11
5
  ServerMessage,
12
6
  } from '@verdant-web/common';
13
- import { TokenInfo } from './TokenVerifier.js';
14
- import { MessageSender } from './MessageSender.js';
7
+ import { describe, expect, it, vi } from 'vitest';
8
+ import { MessageSender } from '../connections/MessageSender.js';
9
+ import { Presence } from '../connections/Presence.js';
10
+ import { UserProfileLoader } from '../Profiles.js';
11
+ import { sqlShardStorage } from '../storage/index.js';
12
+ import { TokenInfo } from '../TokenVerifier.js';
13
+ import { Library } from './Library.js';
15
14
 
16
15
  const profiles = new UserProfileLoader<{ id: string; name: string }>({
17
16
  get: async (userId: string) => {
@@ -22,13 +21,21 @@ const profiles = new UserProfileLoader<{ id: string; name: string }>({
22
21
  },
23
22
  });
24
23
 
25
- const baseOptions = () => ({
24
+ const baseOptions = async () => ({
25
+ id: 'library-1',
26
26
  profiles,
27
- storage: sqlStorage({
28
- databaseFile: ':memory:',
29
- })({
27
+ storage: await sqlShardStorage({
28
+ databasesDirectory: ':memory:',
30
29
  fileDeleteExpirationDays: 7,
31
30
  replicaTruancyMinutes: 60 * 24,
31
+ })('library-1'),
32
+ presence: new Presence({
33
+ get: async (userId: string) => {
34
+ return {
35
+ id: userId,
36
+ name: 'Alice',
37
+ };
38
+ },
32
39
  }),
33
40
  });
34
41
 
@@ -70,12 +77,12 @@ function getAllReceivedReplicaOperations(replica: TestReplica) {
70
77
  return operations;
71
78
  }
72
79
 
73
- describe('ServerLibrary', () => {
80
+ describe('Library', () => {
74
81
  describe('sync handling', () => {
75
82
  it('should initialize a new library from a replica', async () => {
76
- const sender = {
83
+ const sender: MessageSender = {
77
84
  broadcast: vi.fn(),
78
- send: vi.fn(),
85
+ respond: vi.fn((_: string, message: ServerMessage) => {}),
79
86
  };
80
87
 
81
88
  const tokenInfo: TokenInfo = {
@@ -86,8 +93,8 @@ describe('ServerLibrary', () => {
86
93
  userId: 'user-1',
87
94
  };
88
95
 
89
- const library = new ServerLibrary({
90
- ...baseOptions(),
96
+ const library = new Library({
97
+ ...(await baseOptions()),
91
98
  sender,
92
99
  });
93
100
 
@@ -135,12 +142,11 @@ describe('ServerLibrary', () => {
135
142
 
136
143
  // purposefully do not await in order - these all come at the same time
137
144
  await Promise.all(
138
- messages.map((m) => library.receive(m, 'clientKey-1', tokenInfo)),
145
+ messages.map((m) => library.handleMessage(m, 'clientKey-1', tokenInfo)),
139
146
  );
140
147
 
141
148
  // expect sender.broadcast for the operations, and a reply with sync response
142
149
  expect(sender.broadcast).toHaveBeenCalledWith(
143
- 'library-1',
144
150
  {
145
151
  type: 'op-re',
146
152
  baselines: [
@@ -181,7 +187,7 @@ describe('ServerLibrary', () => {
181
187
  ['clientKey-1'],
182
188
  );
183
189
 
184
- expect(sender.send).toHaveBeenCalledWith('library-1', 'clientKey-1', {
190
+ expect(sender.respond).toHaveBeenCalledWith('clientKey-1', {
185
191
  type: 'sync-resp',
186
192
  operations: [],
187
193
  baselines: [],
@@ -201,22 +207,14 @@ describe('ServerLibrary', () => {
201
207
  const replicas = [replicaA, replicaB];
202
208
 
203
209
  const sender: MessageSender = {
204
- broadcast: (
205
- libraryId: string,
206
- message: ServerMessage,
207
- omitKeys?: string[],
208
- ) => {
210
+ broadcast: (message: ServerMessage, omitKeys?: string[]) => {
209
211
  replicas.forEach((replica) => {
210
212
  if (!omitKeys?.includes(replica.key)) {
211
213
  replica.messages.push(message);
212
214
  }
213
215
  });
214
216
  },
215
- send: (
216
- libraryId: string,
217
- clientKey: string,
218
- message: ServerMessage,
219
- ) => {
217
+ respond: (clientKey: string, message: ServerMessage) => {
220
218
  const replica = replicas.find((r) => r.key === clientKey);
221
219
  if (replica) {
222
220
  replica.messages.push(message);
@@ -224,8 +222,8 @@ describe('ServerLibrary', () => {
224
222
  },
225
223
  };
226
224
 
227
- const library = new ServerLibrary({
228
- ...baseOptions(),
225
+ const library = new Library({
226
+ ...(await baseOptions()),
229
227
  sender,
230
228
  });
231
229
 
@@ -258,7 +256,11 @@ describe('ServerLibrary', () => {
258
256
  since: null,
259
257
  timestamp: now(),
260
258
  };
261
- await library.receive(syncMessageA, replicaA.key, replicaA.tokenInfo);
259
+ await library.handleMessage(
260
+ syncMessageA,
261
+ replicaA.key,
262
+ replicaA.tokenInfo,
263
+ );
262
264
 
263
265
  // concurrently, replica B syncs, and A sends more operations
264
266
  const syncMessageB: ClientMessage = {
@@ -288,8 +290,8 @@ describe('ServerLibrary', () => {
288
290
  timestamp: now(),
289
291
  };
290
292
  await Promise.all([
291
- library.receive(syncMessageB, replicaB.key, replicaB.tokenInfo),
292
- library.receive(opMessageA, replicaA.key, replicaA.tokenInfo),
293
+ library.handleMessage(syncMessageB, replicaB.key, replicaB.tokenInfo),
294
+ library.handleMessage(opMessageA, replicaA.key, replicaA.tokenInfo),
293
295
  ]);
294
296
 
295
297
  // there are two valid scenario outcomes here:
@@ -323,7 +325,7 @@ describe('ServerLibrary', () => {
323
325
  it('should reject syncs with data from read replicas', async () => {
324
326
  const sender = {
325
327
  broadcast: vi.fn(),
326
- send: vi.fn(),
328
+ respond: vi.fn(),
327
329
  };
328
330
 
329
331
  const tokenInfo: TokenInfo = {
@@ -334,8 +336,8 @@ describe('ServerLibrary', () => {
334
336
  userId: 'user-1',
335
337
  };
336
338
 
337
- const library = new ServerLibrary({
338
- ...baseOptions(),
339
+ const library = new Library({
340
+ ...(await baseOptions()),
339
341
  sender,
340
342
  });
341
343
 
@@ -383,11 +385,11 @@ describe('ServerLibrary', () => {
383
385
 
384
386
  // purposefully do not await in order - these all come at the same time
385
387
  await Promise.all(
386
- messages.map((m) => library.receive(m, 'clientKey-1', tokenInfo)),
388
+ messages.map((m) => library.handleMessage(m, 'clientKey-1', tokenInfo)),
387
389
  );
388
390
 
389
- expect(sender.send).toHaveBeenCalledOnce();
390
- expect(sender.send).toHaveBeenCalledWith('library-1', 'clientKey-1', {
391
+ expect(sender.respond).toHaveBeenCalledOnce();
392
+ expect(sender.respond).toHaveBeenCalledWith('clientKey-1', {
391
393
  type: 'forbidden',
392
394
  });
393
395
  });
@@ -395,7 +397,7 @@ describe('ServerLibrary', () => {
395
397
  it('should reject messages from a replica claimed by a user other than the one recorded on the server', async () => {
396
398
  const sender = {
397
399
  broadcast: vi.fn(),
398
- send: vi.fn(),
400
+ respond: vi.fn((_: string, message: ServerMessage) => {}),
399
401
  };
400
402
 
401
403
  const tokenInfo: TokenInfo = {
@@ -406,13 +408,13 @@ describe('ServerLibrary', () => {
406
408
  userId: 'user-1',
407
409
  };
408
410
 
409
- const library = new ServerLibrary({
410
- ...baseOptions(),
411
+ const library = new Library({
412
+ ...(await baseOptions()),
411
413
  sender,
412
414
  });
413
415
 
414
416
  // purposefully do not await in order - these all come at the same time
415
- await library.receive(
417
+ await library.handleMessage(
416
418
  {
417
419
  type: 'sync',
418
420
  baselines: [],
@@ -425,7 +427,7 @@ describe('ServerLibrary', () => {
425
427
  'clientKey-1',
426
428
  tokenInfo,
427
429
  );
428
- sender.send.mockReset();
430
+ sender.respond.mockReset();
429
431
 
430
432
  // now try to send a message from a different user with the same replica
431
433
  const tokenInfo2: TokenInfo = {
@@ -446,10 +448,10 @@ describe('ServerLibrary', () => {
446
448
  timestamp: now(),
447
449
  };
448
450
 
449
- await library.receive(message, 'clientKey-1', tokenInfo2);
451
+ await library.handleMessage(message, 'clientKey-1', tokenInfo2);
450
452
 
451
- expect(sender.send).toHaveBeenCalledOnce();
452
- expect(sender.send).toHaveBeenCalledWith('library-1', 'clientKey-1', {
453
+ expect(sender.respond).toHaveBeenCalledOnce();
454
+ expect(sender.respond).toHaveBeenCalledWith('clientKey-1', {
453
455
  type: 'forbidden',
454
456
  });
455
457
  });