@verdant-web/server 1.7.8 → 1.7.10

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 (100) hide show
  1. package/dist/cjs/Baselines.d.ts +14 -14
  2. package/dist/cjs/Baselines.js +77 -77
  3. package/dist/cjs/ClientConnection.d.ts +18 -18
  4. package/dist/cjs/ClientConnection.js +105 -105
  5. package/dist/cjs/MessageSender.d.ts +5 -5
  6. package/dist/cjs/MessageSender.js +2 -2
  7. package/dist/cjs/OperationHistory.d.ts +34 -34
  8. package/dist/cjs/OperationHistory.js +108 -108
  9. package/dist/cjs/Presence.d.ts +15 -15
  10. package/dist/cjs/Presence.js +59 -59
  11. package/dist/cjs/Profiles.d.ts +10 -10
  12. package/dist/cjs/Profiles.js +19 -19
  13. package/dist/cjs/ReplicaKeepaliveTimers.d.ts +17 -17
  14. package/dist/cjs/ReplicaKeepaliveTimers.js +30 -30
  15. package/dist/cjs/Replicas.d.ts +23 -23
  16. package/dist/cjs/Replicas.js +132 -132
  17. package/dist/cjs/Server.d.ts +121 -121
  18. package/dist/cjs/Server.js +385 -377
  19. package/dist/cjs/Server.js.map +1 -1
  20. package/dist/cjs/ServerLibrary.d.ts +63 -63
  21. package/dist/cjs/ServerLibrary.js +467 -467
  22. package/dist/cjs/TokenProvider.d.ts +16 -16
  23. package/dist/cjs/TokenProvider.js +26 -26
  24. package/dist/cjs/TokenVerifier.d.ts +16 -16
  25. package/dist/cjs/TokenVerifier.js +28 -28
  26. package/dist/cjs/files/FileMetadata.d.ts +28 -28
  27. package/dist/cjs/files/FileMetadata.js +46 -46
  28. package/dist/cjs/files/FileStorage.d.ts +35 -35
  29. package/dist/cjs/files/FileStorage.js +71 -71
  30. package/dist/cjs/index.d.ts +9 -9
  31. package/dist/cjs/index.js +11 -11
  32. package/dist/cjs/migrations/v0.sql.d.ts +2 -2
  33. package/dist/cjs/migrations/v0.sql.js +3 -3
  34. package/dist/cjs/migrations/v1.sql.d.ts +2 -2
  35. package/dist/cjs/migrations/v1.sql.js +3 -3
  36. package/dist/cjs/migrations/v2.sql.d.ts +2 -2
  37. package/dist/cjs/migrations/v2.sql.js +4 -4
  38. package/dist/cjs/migrations/v3.sql.d.ts +2 -2
  39. package/dist/cjs/migrations/v3.sql.js +4 -4
  40. package/dist/cjs/migrations/v4.sql.d.ts +2 -2
  41. package/dist/cjs/migrations/v4.sql.js +4 -4
  42. package/dist/cjs/migrations.d.ts +2 -2
  43. package/dist/cjs/migrations.js +32 -32
  44. package/dist/cjs/types.d.ts +22 -22
  45. package/dist/cjs/types.js +2 -2
  46. package/dist/esm/Baselines.d.ts +14 -14
  47. package/dist/esm/Baselines.js +73 -73
  48. package/dist/esm/ClientConnection.d.ts +18 -18
  49. package/dist/esm/ClientConnection.js +101 -101
  50. package/dist/esm/MessageSender.d.ts +5 -5
  51. package/dist/esm/MessageSender.js +1 -1
  52. package/dist/esm/OperationHistory.d.ts +34 -34
  53. package/dist/esm/OperationHistory.js +104 -104
  54. package/dist/esm/Presence.d.ts +15 -15
  55. package/dist/esm/Presence.js +52 -52
  56. package/dist/esm/Profiles.d.ts +10 -10
  57. package/dist/esm/Profiles.js +15 -15
  58. package/dist/esm/ReplicaKeepaliveTimers.d.ts +17 -17
  59. package/dist/esm/ReplicaKeepaliveTimers.js +26 -26
  60. package/dist/esm/Replicas.d.ts +23 -23
  61. package/dist/esm/Replicas.js +128 -128
  62. package/dist/esm/Server.d.ts +121 -121
  63. package/dist/esm/Server.js +378 -370
  64. package/dist/esm/Server.js.map +1 -1
  65. package/dist/esm/ServerLibrary.d.ts +63 -63
  66. package/dist/esm/ServerLibrary.js +463 -463
  67. package/dist/esm/TokenProvider.d.ts +16 -16
  68. package/dist/esm/TokenProvider.js +19 -19
  69. package/dist/esm/TokenVerifier.d.ts +16 -16
  70. package/dist/esm/TokenVerifier.js +21 -21
  71. package/dist/esm/files/FileMetadata.d.ts +28 -28
  72. package/dist/esm/files/FileMetadata.js +42 -42
  73. package/dist/esm/files/FileStorage.d.ts +35 -35
  74. package/dist/esm/files/FileStorage.js +44 -44
  75. package/dist/esm/index.d.ts +9 -9
  76. package/dist/esm/index.js +4 -4
  77. package/dist/esm/migrations/v0.sql.d.ts +2 -2
  78. package/dist/esm/migrations/v0.sql.js +1 -1
  79. package/dist/esm/migrations/v1.sql.d.ts +2 -2
  80. package/dist/esm/migrations/v1.sql.js +1 -1
  81. package/dist/esm/migrations/v2.sql.d.ts +2 -2
  82. package/dist/esm/migrations/v2.sql.js +2 -2
  83. package/dist/esm/migrations/v3.sql.d.ts +2 -2
  84. package/dist/esm/migrations/v3.sql.js +2 -2
  85. package/dist/esm/migrations/v4.sql.d.ts +2 -2
  86. package/dist/esm/migrations/v4.sql.js +2 -2
  87. package/dist/esm/migrations.d.ts +2 -2
  88. package/dist/esm/migrations.js +25 -25
  89. package/dist/esm/types.d.ts +22 -22
  90. package/dist/esm/types.js +1 -1
  91. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  92. package/dist/tsconfig.tsbuildinfo +1 -1
  93. package/package.json +2 -2
  94. package/src/Server.ts +9 -2
  95. package/dist/cjs/ServerStorage.d.ts +0 -35
  96. package/dist/cjs/ServerStorage.js +0 -60
  97. package/dist/cjs/ServerStorage.js.map +0 -1
  98. package/dist/esm/ServerStorage.d.ts +0 -44
  99. package/dist/esm/ServerStorage.js +0 -58
  100. package/dist/esm/ServerStorage.js.map +0 -1
package/src/Server.ts CHANGED
@@ -265,8 +265,15 @@ export class Server extends EventEmitter implements MessageSender {
265
265
  });
266
266
  }));
267
267
 
268
- for (const message of body.messages) {
269
- await this.handleMessage(key, info, message);
268
+ try {
269
+ for (const message of body.messages) {
270
+ await this.handleMessage(key, info, message);
271
+ }
272
+ } catch (e) {
273
+ this.emit('error', e);
274
+ res.writeHead(500);
275
+ res.end();
276
+ return;
270
277
  }
271
278
 
272
279
  // update our keepalive timers for presence management
@@ -1,35 +0,0 @@
1
- import { Database } from 'better-sqlite3';
2
- import { ClientMessage } from '@lo-fi/common';
3
- import { MessageSender } from './MessageSender.js';
4
- import { UserProfiles } from './Profiles.js';
5
- import { TokenInfo } from './TokenVerifier.js';
6
- interface ServerStorageOptions {
7
- db: Database;
8
- sender: MessageSender;
9
- profiles: UserProfiles<any>;
10
- replicaTruancyMinutes: number;
11
- log?: (...args: any[]) => void;
12
- disableRebasing?: boolean;
13
- }
14
- export declare class ServerStorage {
15
- private profileLoader;
16
- private libraries;
17
- private db;
18
- private sender;
19
- constructor({ db, sender, profiles, replicaTruancyMinutes, disableRebasing, log, }: ServerStorageOptions);
20
- /**
21
- * Call with any message from any replica
22
- */
23
- receive: (libraryId: string, clientKey: string, message: ClientMessage, info: TokenInfo) => Promise<void>;
24
- /**
25
- * Call when a replica disconnects from the server
26
- */
27
- remove: (libraryId: string, replicaId: string) => void;
28
- evictLibrary: (libraryId: string) => void;
29
- evictUser: (libraryId: string, userId: string) => void;
30
- private createSchema;
31
- close: () => Promise<void>;
32
- getLibraryPresence: (libraryId: string) => Record<string, import("@lo-fi/common").UserInfo<any, any>>;
33
- getDocumentSnapshot: (libraryId: string, documentId: string) => any;
34
- }
35
- export {};
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ServerStorage = void 0;
4
- const ServerLibrary_js_1 = require("./ServerLibrary.js");
5
- const Profiles_js_1 = require("./Profiles.js");
6
- const migrations_js_1 = require("./migrations.js");
7
- class ServerStorage {
8
- constructor({ db, sender, profiles, replicaTruancyMinutes, disableRebasing = false, log = () => { }, }) {
9
- /**
10
- * Call with any message from any replica
11
- */
12
- this.receive = (libraryId, clientKey, message, info) => {
13
- const library = this.libraries.open(libraryId);
14
- return library.receive(message, clientKey, info);
15
- };
16
- /**
17
- * Call when a replica disconnects from the server
18
- */
19
- this.remove = (libraryId, replicaId) => {
20
- const library = this.libraries.open(libraryId);
21
- library.remove(replicaId);
22
- };
23
- this.evictLibrary = (libraryId) => {
24
- const library = this.libraries.open(libraryId);
25
- library.destroy();
26
- };
27
- this.evictUser = (libraryId, userId) => {
28
- const library = this.libraries.open(libraryId);
29
- library.evictUser(userId);
30
- };
31
- this.createSchema = () => {
32
- (0, migrations_js_1.migrations)(this.db);
33
- };
34
- this.close = async () => {
35
- this.db.close();
36
- };
37
- this.getLibraryPresence = (libraryId) => {
38
- const library = this.libraries.open(libraryId);
39
- return library.getPresence();
40
- };
41
- this.getDocumentSnapshot = (libraryId, documentId) => {
42
- const library = this.libraries.open(libraryId);
43
- return library.getDocumentSnapshot(documentId);
44
- };
45
- this.db = db;
46
- this.sender = sender;
47
- this.createSchema();
48
- this.profileLoader = new Profiles_js_1.UserProfileLoader(profiles);
49
- this.libraries = new ServerLibrary_js_1.ServerLibraryManager({
50
- db: this.db,
51
- sender: this.sender,
52
- profileLoader: this.profileLoader,
53
- replicaTruancyMinutes,
54
- log,
55
- disableRebasing,
56
- });
57
- }
58
- }
59
- exports.ServerStorage = ServerStorage;
60
- //# sourceMappingURL=ServerStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ServerStorage.js","sourceRoot":"","sources":["../../src/ServerStorage.ts"],"names":[],"mappings":";;;AAEA,yDAA0D;AAE1D,+CAAgE;AAEhE,mDAA6C;AAW7C,MAAa,aAAa;IAMzB,YAAY,EACX,EAAE,EACF,MAAM,EACN,QAAQ,EACR,qBAAqB,EACrB,eAAe,GAAG,KAAK,EACvB,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,GACQ;QAevB;;WAEG;QACH,YAAO,GAAG,CACT,SAAiB,EACjB,SAAiB,EACjB,OAAsB,EACtB,IAAe,EACd,EAAE;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC;QAEF;;WAEG;QACH,WAAM,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,SAAiB,EAAE,EAAE;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,cAAS,GAAG,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEM,iBAAY,GAAG,GAAG,EAAE;YAC3B,IAAA,0BAAU,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,UAAK,GAAG,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;QAEF,uBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC,CAAC;QAEF,wBAAmB,GAAG,CAAC,SAAiB,EAAE,UAAkB,EAAE,EAAE;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC,CAAC;QA7DD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,+BAAiB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,uCAAoB,CAAC;YACzC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,qBAAqB;YACrB,GAAG;YACH,eAAe;SACf,CAAC,CAAC;IACJ,CAAC;CAkDD;AA5ED,sCA4EC"}
@@ -1,44 +0,0 @@
1
- import { Database } from 'better-sqlite3';
2
- import { ClientMessage } from '@lo-fi/common';
3
- import { MessageSender } from './MessageSender.js';
4
- import { UserProfiles } from './Profiles.js';
5
- import { TokenInfo } from './TokenVerifier.js';
6
- import { FileInfo } from './files/FileStorage.js';
7
- interface ServerStorageOptions {
8
- db: Database;
9
- sender: MessageSender;
10
- profiles: UserProfiles<any>;
11
- replicaTruancyMinutes: number;
12
- log?: (...args: any[]) => void;
13
- disableRebasing?: boolean;
14
- }
15
- export declare class ServerStorage {
16
- private profileLoader;
17
- private library;
18
- private db;
19
- private sender;
20
- private fileMetadata;
21
- constructor({ db, sender, profiles, replicaTruancyMinutes, disableRebasing, log, }: ServerStorageOptions);
22
- /**
23
- * Call with any message from any replica
24
- */
25
- receive: (libraryId: string, clientKey: string, message: ClientMessage, info: TokenInfo) => Promise<void>;
26
- /**
27
- * Call when a replica disconnects from the server
28
- */
29
- remove: (libraryId: string, replicaId: string) => void;
30
- evictLibrary: (libraryId: string) => void;
31
- evictUser: (libraryId: string, userId: string) => void;
32
- private createSchema;
33
- close: () => Promise<void>;
34
- getLibraryPresence: (libraryId: string) => Record<string, import("@lo-fi/common").UserInfo<any, any>>;
35
- getDocumentSnapshot: (libraryId: string, oid: string) => any;
36
- putFileInfo: (libraryId: string, fileInfo: FileInfo) => void;
37
- getFileInfo: (libraryId: string, fileId: string) => {
38
- libraryId: string;
39
- fileId: string;
40
- name: string;
41
- type: string;
42
- };
43
- }
44
- export {};
@@ -1,58 +0,0 @@
1
- import { ServerLibrary } from './ServerLibrary.js';
2
- import { UserProfileLoader } from './Profiles.js';
3
- import { migrations } from './migrations.js';
4
- import { FileMetadata } from './files/FileMetadata.js';
5
- export class ServerStorage {
6
- constructor({ db, sender, profiles, replicaTruancyMinutes, disableRebasing = false, log = () => { }, }) {
7
- /**
8
- * Call with any message from any replica
9
- */
10
- this.receive = (libraryId, clientKey, message, info) => {
11
- return this.library.receive(message, clientKey, info);
12
- };
13
- /**
14
- * Call when a replica disconnects from the server
15
- */
16
- this.remove = (libraryId, replicaId) => {
17
- this.library.remove(libraryId, replicaId);
18
- };
19
- this.evictLibrary = (libraryId) => {
20
- this.library.destroy(libraryId);
21
- };
22
- this.evictUser = (libraryId, userId) => {
23
- this.library.evictUser(libraryId, userId);
24
- };
25
- this.createSchema = () => {
26
- migrations(this.db);
27
- };
28
- this.close = async () => {
29
- this.db.close();
30
- };
31
- this.getLibraryPresence = (libraryId) => {
32
- return this.library.getPresence(libraryId);
33
- };
34
- this.getDocumentSnapshot = (libraryId, oid) => {
35
- return this.library.getDocumentSnapshot(libraryId, oid);
36
- };
37
- this.putFileInfo = (libraryId, fileInfo) => {
38
- this.fileMetadata.put(libraryId, fileInfo);
39
- };
40
- this.getFileInfo = (libraryId, fileId) => {
41
- return this.fileMetadata.get(libraryId, fileId);
42
- };
43
- this.db = db;
44
- this.sender = sender;
45
- this.createSchema();
46
- this.profileLoader = new UserProfileLoader(profiles);
47
- this.library = new ServerLibrary({
48
- db: this.db,
49
- sender: this.sender,
50
- profiles: this.profileLoader,
51
- replicaTruancyMinutes,
52
- log,
53
- disableRebasing,
54
- });
55
- this.fileMetadata = new FileMetadata(this.db);
56
- }
57
- }
58
- //# sourceMappingURL=ServerStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ServerStorage.js","sourceRoot":"","sources":["../../src/ServerStorage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAgB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAWvD,MAAM,OAAO,aAAa;IAOzB,YAAY,EACX,EAAE,EACF,MAAM,EACN,QAAQ,EACR,qBAAqB,EACrB,eAAe,GAAG,KAAK,EACvB,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,GACQ;QAgBvB;;WAEG;QACH,YAAO,GAAG,CACT,SAAiB,EACjB,SAAiB,EACjB,OAAsB,EACtB,IAAe,EACd,EAAE;YACH,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF;;WAEG;QACH,WAAM,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,EAAE;YACjD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,SAAiB,EAAE,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,cAAS,GAAG,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE;YACjD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC;QAEM,iBAAY,GAAG,GAAG,EAAE;YAC3B,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,UAAK,GAAG,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;QAEF,uBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE;YAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,wBAAmB,GAAG,CAAC,SAAiB,EAAE,GAAW,EAAE,EAAE;YACxD,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,SAAiB,EAAE,QAAkB,EAAE,EAAE;YACvD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE;YACnD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC;QAhED,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC;YAChC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,aAAa;YAC5B,qBAAqB;YACrB,GAAG;YACH,eAAe;SACf,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;CAoDD"}