@verdant-web/server 2.1.3 → 3.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 (198) hide show
  1. package/dist/esm/ClientConnection.d.ts +1 -0
  2. package/dist/esm/ClientConnection.js.map +1 -1
  3. package/dist/esm/Presence.js.map +1 -1
  4. package/dist/esm/Profiles.js.map +1 -1
  5. package/dist/esm/ReplicaKeepaliveTimers.js.map +1 -1
  6. package/dist/esm/Server.d.ts +15 -11
  7. package/dist/esm/Server.js +29 -30
  8. package/dist/esm/Server.js.map +1 -1
  9. package/dist/esm/ServerLibrary.d.ts +10 -17
  10. package/dist/esm/ServerLibrary.js +151 -127
  11. package/dist/esm/ServerLibrary.js.map +1 -1
  12. package/dist/esm/ServerLibrary.test.js +369 -0
  13. package/dist/esm/ServerLibrary.test.js.map +1 -0
  14. package/dist/esm/TokenVerifier.js.map +1 -1
  15. package/dist/esm/files/FileStorage.js.map +1 -1
  16. package/dist/esm/storage/Storage.d.ts +67 -0
  17. package/dist/esm/storage/Storage.js +2 -0
  18. package/dist/esm/storage/Storage.js.map +1 -0
  19. package/dist/esm/storage/index.d.ts +2 -0
  20. package/dist/esm/storage/index.js +3 -0
  21. package/dist/esm/storage/index.js.map +1 -0
  22. package/dist/esm/storage/sql/SqlBaselines.d.ts +22 -0
  23. package/dist/esm/storage/sql/SqlBaselines.js +101 -0
  24. package/dist/esm/storage/sql/SqlBaselines.js.map +1 -0
  25. package/dist/esm/storage/sql/SqlFileMetadata.d.ts +18 -0
  26. package/dist/esm/storage/sql/SqlFileMetadata.js +69 -0
  27. package/dist/esm/storage/sql/SqlFileMetadata.js.map +1 -0
  28. package/dist/esm/storage/sql/SqlOperations.d.ts +19 -0
  29. package/dist/esm/storage/sql/SqlOperations.js +104 -0
  30. package/dist/esm/storage/sql/SqlOperations.js.map +1 -0
  31. package/dist/esm/storage/sql/SqlReplicas.d.ts +32 -0
  32. package/dist/esm/storage/sql/SqlReplicas.js +163 -0
  33. package/dist/esm/storage/sql/SqlReplicas.js.map +1 -0
  34. package/dist/esm/storage/sql/migrations/v1.d.ts +3 -0
  35. package/dist/esm/storage/sql/migrations/v1.js +59 -0
  36. package/dist/esm/storage/sql/migrations/v1.js.map +1 -0
  37. package/dist/esm/storage/sql/migrations.d.ts +5 -0
  38. package/dist/esm/storage/sql/migrations.js +3 -0
  39. package/dist/esm/storage/sql/migrations.js.map +1 -0
  40. package/dist/esm/storage/sql/sqlStorage.d.ts +5 -0
  41. package/dist/esm/storage/sql/sqlStorage.js +43 -0
  42. package/dist/esm/storage/sql/sqlStorage.js.map +1 -0
  43. package/dist/esm/storage/sql/tables.d.ts +40 -0
  44. package/dist/esm/storage/sql/tables.js +2 -0
  45. package/dist/esm/storage/sql/tables.js.map +1 -0
  46. package/dist/esm/types.d.ts +14 -5
  47. package/package.json +20 -14
  48. package/src/Server.ts +37 -43
  49. package/src/ServerLibrary.test.ts +447 -0
  50. package/src/ServerLibrary.ts +239 -163
  51. package/src/storage/Storage.ts +118 -0
  52. package/src/storage/index.ts +2 -0
  53. package/src/storage/sql/SqlBaselines.ts +141 -0
  54. package/src/storage/sql/SqlFileMetadata.ts +94 -0
  55. package/src/storage/sql/SqlOperations.ts +149 -0
  56. package/src/storage/sql/SqlReplicas.ts +234 -0
  57. package/src/storage/sql/migrations/v1.ts +64 -0
  58. package/src/storage/sql/migrations.ts +3 -0
  59. package/src/storage/sql/sqlStorage.ts +59 -0
  60. package/src/storage/sql/tables.ts +45 -0
  61. package/src/types.ts +15 -4
  62. package/bin/server.mjs +0 -115
  63. package/dist/cjs/Baselines.d.ts +0 -16
  64. package/dist/cjs/Baselines.js +0 -128
  65. package/dist/cjs/Baselines.js.map +0 -1
  66. package/dist/cjs/ClientConnection.d.ts +0 -20
  67. package/dist/cjs/ClientConnection.js +0 -139
  68. package/dist/cjs/ClientConnection.js.map +0 -1
  69. package/dist/cjs/MessageSender.d.ts +0 -5
  70. package/dist/cjs/MessageSender.js +0 -3
  71. package/dist/cjs/MessageSender.js.map +0 -1
  72. package/dist/cjs/OperationHistory.d.ts +0 -36
  73. package/dist/cjs/OperationHistory.js +0 -165
  74. package/dist/cjs/OperationHistory.js.map +0 -1
  75. package/dist/cjs/Presence.d.ts +0 -15
  76. package/dist/cjs/Presence.js +0 -60
  77. package/dist/cjs/Presence.js.map +0 -1
  78. package/dist/cjs/Profiles.d.ts +0 -10
  79. package/dist/cjs/Profiles.js +0 -20
  80. package/dist/cjs/Profiles.js.map +0 -1
  81. package/dist/cjs/ReplicaKeepaliveTimers.d.ts +0 -17
  82. package/dist/cjs/ReplicaKeepaliveTimers.js +0 -31
  83. package/dist/cjs/ReplicaKeepaliveTimers.js.map +0 -1
  84. package/dist/cjs/Replicas.d.ts +0 -25
  85. package/dist/cjs/Replicas.js +0 -196
  86. package/dist/cjs/Replicas.js.map +0 -1
  87. package/dist/cjs/Server.d.ts +0 -167
  88. package/dist/cjs/Server.js +0 -552
  89. package/dist/cjs/Server.js.map +0 -1
  90. package/dist/cjs/ServerLibrary.d.ts +0 -65
  91. package/dist/cjs/ServerLibrary.js +0 -505
  92. package/dist/cjs/ServerLibrary.js.map +0 -1
  93. package/dist/cjs/TokenProvider.d.ts +0 -19
  94. package/dist/cjs/TokenProvider.js +0 -27
  95. package/dist/cjs/TokenProvider.js.map +0 -1
  96. package/dist/cjs/TokenVerifier.d.ts +0 -16
  97. package/dist/cjs/TokenVerifier.js +0 -40
  98. package/dist/cjs/TokenVerifier.js.map +0 -1
  99. package/dist/cjs/files/FileMetadata.d.ts +0 -28
  100. package/dist/cjs/files/FileMetadata.js +0 -69
  101. package/dist/cjs/files/FileMetadata.js.map +0 -1
  102. package/dist/cjs/files/FileStorage.d.ts +0 -35
  103. package/dist/cjs/files/FileStorage.js +0 -72
  104. package/dist/cjs/files/FileStorage.js.map +0 -1
  105. package/dist/cjs/index.d.ts +0 -10
  106. package/dist/cjs/index.js +0 -12
  107. package/dist/cjs/index.js.map +0 -1
  108. package/dist/cjs/migrations/v0.d.ts +0 -1
  109. package/dist/cjs/migrations/v0.js +0 -30
  110. package/dist/cjs/migrations/v0.js.map +0 -1
  111. package/dist/cjs/migrations/v1.d.ts +0 -1
  112. package/dist/cjs/migrations/v1.js +0 -32
  113. package/dist/cjs/migrations/v1.js.map +0 -1
  114. package/dist/cjs/migrations/v2.d.ts +0 -1
  115. package/dist/cjs/migrations/v2.js +0 -29
  116. package/dist/cjs/migrations/v2.js.map +0 -1
  117. package/dist/cjs/migrations/v3.d.ts +0 -1
  118. package/dist/cjs/migrations/v3.js +0 -15
  119. package/dist/cjs/migrations/v3.js.map +0 -1
  120. package/dist/cjs/migrations/v4.d.ts +0 -1
  121. package/dist/cjs/migrations/v4.js +0 -9
  122. package/dist/cjs/migrations/v4.js.map +0 -1
  123. package/dist/cjs/migrations/v5.d.ts +0 -2
  124. package/dist/cjs/migrations/v5.js +0 -37
  125. package/dist/cjs/migrations/v5.js.map +0 -1
  126. package/dist/cjs/migrations/v6.d.ts +0 -1
  127. package/dist/cjs/migrations/v6.js +0 -8
  128. package/dist/cjs/migrations/v6.js.map +0 -1
  129. package/dist/cjs/migrations/v7.d.ts +0 -1
  130. package/dist/cjs/migrations/v7.js +0 -10
  131. package/dist/cjs/migrations/v7.js.map +0 -1
  132. package/dist/cjs/migrations.d.ts +0 -6
  133. package/dist/cjs/migrations.js +0 -72
  134. package/dist/cjs/migrations.js.map +0 -1
  135. package/dist/cjs/migrations.test.js +0 -121
  136. package/dist/cjs/migrations.test.js.map +0 -1
  137. package/dist/cjs/types.d.ts +0 -38
  138. package/dist/cjs/types.js +0 -3
  139. package/dist/cjs/types.js.map +0 -1
  140. package/dist/esm/Baselines.d.ts +0 -16
  141. package/dist/esm/Baselines.js +0 -124
  142. package/dist/esm/Baselines.js.map +0 -1
  143. package/dist/esm/OperationHistory.d.ts +0 -36
  144. package/dist/esm/OperationHistory.js +0 -161
  145. package/dist/esm/OperationHistory.js.map +0 -1
  146. package/dist/esm/Replicas.d.ts +0 -25
  147. package/dist/esm/Replicas.js +0 -192
  148. package/dist/esm/Replicas.js.map +0 -1
  149. package/dist/esm/files/FileMetadata.d.ts +0 -28
  150. package/dist/esm/files/FileMetadata.js +0 -65
  151. package/dist/esm/files/FileMetadata.js.map +0 -1
  152. package/dist/esm/migrations/v0.d.ts +0 -1
  153. package/dist/esm/migrations/v0.js +0 -27
  154. package/dist/esm/migrations/v0.js.map +0 -1
  155. package/dist/esm/migrations/v1.d.ts +0 -1
  156. package/dist/esm/migrations/v1.js +0 -29
  157. package/dist/esm/migrations/v1.js.map +0 -1
  158. package/dist/esm/migrations/v2.d.ts +0 -1
  159. package/dist/esm/migrations/v2.js +0 -26
  160. package/dist/esm/migrations/v2.js.map +0 -1
  161. package/dist/esm/migrations/v3.d.ts +0 -1
  162. package/dist/esm/migrations/v3.js +0 -12
  163. package/dist/esm/migrations/v3.js.map +0 -1
  164. package/dist/esm/migrations/v4.d.ts +0 -1
  165. package/dist/esm/migrations/v4.js +0 -6
  166. package/dist/esm/migrations/v4.js.map +0 -1
  167. package/dist/esm/migrations/v5.d.ts +0 -2
  168. package/dist/esm/migrations/v5.js +0 -33
  169. package/dist/esm/migrations/v5.js.map +0 -1
  170. package/dist/esm/migrations/v6.d.ts +0 -1
  171. package/dist/esm/migrations/v6.js +0 -5
  172. package/dist/esm/migrations/v6.js.map +0 -1
  173. package/dist/esm/migrations/v7.d.ts +0 -1
  174. package/dist/esm/migrations/v7.js +0 -7
  175. package/dist/esm/migrations/v7.js.map +0 -1
  176. package/dist/esm/migrations.d.ts +0 -6
  177. package/dist/esm/migrations.js +0 -45
  178. package/dist/esm/migrations.js.map +0 -1
  179. package/dist/esm/migrations.test.d.ts +0 -1
  180. package/dist/esm/migrations.test.js +0 -116
  181. package/dist/esm/migrations.test.js.map +0 -1
  182. package/dist/tsconfig-cjs.tsbuildinfo +0 -1
  183. package/dist/tsconfig.tsbuildinfo +0 -1
  184. package/src/Baselines.ts +0 -198
  185. package/src/OperationHistory.ts +0 -232
  186. package/src/Replicas.ts +0 -274
  187. package/src/files/FileMetadata.ts +0 -112
  188. package/src/migrations/v0.ts +0 -26
  189. package/src/migrations/v1.ts +0 -28
  190. package/src/migrations/v2.ts +0 -26
  191. package/src/migrations/v3.ts +0 -12
  192. package/src/migrations/v4.ts +0 -6
  193. package/src/migrations/v5.ts +0 -49
  194. package/src/migrations/v6.ts +0 -4
  195. package/src/migrations/v7.ts +0 -6
  196. package/src/migrations.test.ts +0 -133
  197. package/src/migrations.ts +0 -61
  198. /package/dist/{cjs/migrations.test.d.ts → esm/ServerLibrary.test.d.ts} +0 -0
@@ -1,121 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const vitest_1 = require("vitest");
7
- const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
8
- const migrations_js_1 = require("./migrations.js");
9
- const fs_1 = __importDefault(require("fs"));
10
- (0, vitest_1.describe)('the v5->v6 migration', () => {
11
- let dbFile;
12
- let db;
13
- (0, vitest_1.beforeAll)(() => {
14
- dbFile = `v5-migration-test-${Math.random()}.sqlite`;
15
- db = (0, better_sqlite3_1.default)(dbFile);
16
- });
17
- (0, vitest_1.afterAll)(() => {
18
- db.close();
19
- fs_1.default.rmSync(dbFile);
20
- });
21
- (0, vitest_1.it)('rewrites legacy oids in all ops and baselines', () => {
22
- // manually migrate to v4 before starting and seed the database with some
23
- // operations and baselines.
24
- (0, migrations_js_1.migrations)(db, 5);
25
- // manually insert some operations and baselines
26
- db.transaction(() => {
27
- [
28
- {
29
- libraryId: 'test-1',
30
- replicaId: 'foo',
31
- oid: 'weirds/b',
32
- data: {
33
- op: 'set',
34
- value: { '@@type': 'ref', id: 'weirds/b.objectMap.one:ghi' },
35
- },
36
- timestamp: '1',
37
- serverOrder: 1,
38
- },
39
- {
40
- libraryId: 'test-1',
41
- replicaId: 'foo',
42
- oid: 'weirds/b.list:ghi',
43
- data: {
44
- op: 'list-push',
45
- value: { '@@type': 'ref', id: 'weirds/b.list.#:abc' },
46
- },
47
- timestamp: '1',
48
- serverOrder: 2,
49
- },
50
- {
51
- libraryId: 'test-1',
52
- replicaId: 'foo',
53
- oid: 'weirds/b.list:ghi',
54
- data: {
55
- op: 'list-remove',
56
- value: { '@@type': 'ref', id: 'weirds/b.list.#:abc' },
57
- },
58
- timestamp: '2',
59
- serverOrder: 3,
60
- },
61
- {
62
- libraryId: 'test-2',
63
- replicaId: 'bar',
64
- oid: 'weirds/b',
65
- data: {
66
- op: 'set',
67
- value: { '@@type': 'ref', id: 'weirds/b.objectMap.one:ghi' },
68
- },
69
- timestamp: '1a',
70
- serverOrder: 1,
71
- },
72
- ].forEach(({ libraryId, replicaId, oid, data, timestamp, serverOrder }) => {
73
- db.prepare(
74
- /* sql */ `
75
- INSERT INTO OperationHistory (libraryId, replicaId, oid, data, timestamp, serverOrder)
76
- VALUES (?, ?, ?, ?, ?, ?);
77
- `).run(libraryId, replicaId, oid, JSON.stringify(data), timestamp, serverOrder);
78
- });
79
- [
80
- {
81
- libraryId: 'test-1',
82
- oid: 'weirds/b.objectMap.one:ghi',
83
- snapshot: { '@@type': 'ref', id: 'weirds/b.list.#:abc' },
84
- timestamp: '1',
85
- },
86
- {
87
- libraryId: 'test-2',
88
- oid: 'weirds/b.objectMap.one:ghi',
89
- snapshot: { '@@type': 'ref', id: 'weirds/b.list.#:abc' },
90
- timestamp: '1a',
91
- },
92
- ].forEach(({ libraryId, oid, snapshot, timestamp }) => {
93
- db.prepare(
94
- /* sql */ `
95
- INSERT INTO DocumentBaseline (libraryId, oid, snapshot, timestamp)
96
- VALUES (?, ?, ?, ?);
97
- `).run(libraryId, oid, JSON.stringify(snapshot), timestamp);
98
- });
99
- })();
100
- (0, migrations_js_1.migrations)(db);
101
- // check that the operations and baselines have been rewritten
102
- db.transaction(() => {
103
- const operations = db
104
- .prepare(
105
- /* sql */ `
106
- SELECT * from OperationHistory;
107
- `)
108
- .all();
109
- (0, vitest_1.expect)(operations).toMatchSnapshot();
110
- const baselines = db
111
- .prepare(
112
- /* sql */ `
113
- SELECT * from DocumentBaseline;
114
- `)
115
- .all();
116
- (0, vitest_1.expect)(baselines).toMatchSnapshot();
117
- })();
118
- db.close();
119
- });
120
- });
121
- //# sourceMappingURL=migrations.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrations.test.js","sourceRoot":"","sources":["../../src/migrations.test.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- import { DocumentBaseline, Operation, ReplicaInfo, ReplicaType } from '@verdant-web/common';
2
- export interface OperationSpec extends Operation {
3
- serverOrder: number;
4
- replicaId: string;
5
- }
6
- export interface DocumentBaselineSpec extends Omit<DocumentBaseline<any>, 'snapshot'> {
7
- snapshot: string;
8
- libraryId: string;
9
- serverOrder: number;
10
- }
11
- export interface ReplicaInfoSpec extends ReplicaInfo {
12
- libraryId: string;
13
- clientId: string;
14
- lastSeenWallClockTime: number | null;
15
- type: ReplicaType;
16
- ackedServerOrder: number;
17
- }
18
- export declare type LibraryInfo<Profile = unknown> = {
19
- id: string;
20
- replicas: {
21
- id: string;
22
- ackedLogicalTime: string | null;
23
- ackedServerOrder: number;
24
- type: ReplicaType;
25
- truant: boolean;
26
- profile: Profile;
27
- }[];
28
- latestServerOrder: number;
29
- operationsCount: number;
30
- baselinesCount: number;
31
- globalAck: string | null;
32
- };
33
- declare global {
34
- interface File {
35
- readonly lastModified: number;
36
- readonly name: string;
37
- }
38
- }
package/dist/cjs/types.js DELETED
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -1,16 +0,0 @@
1
- import { DocumentBaseline, Operation, Ref } from '@verdant-web/common';
2
- import { Database } from 'better-sqlite3';
3
- export declare class Baselines {
4
- private db;
5
- constructor(db: Database);
6
- get: (libraryId: string, oid: string) => DocumentBaseline<any> | null;
7
- getAllWithSubObjects: (libraryId: string, oid: string) => DocumentBaseline<any>[];
8
- set: (libraryId: string, baseline: DocumentBaseline) => import("better-sqlite3").RunResult;
9
- insertAll: (libraryId: string, baselines: DocumentBaseline[]) => void;
10
- private hydrateSnapshot;
11
- getAllAfter: (libraryId: string, timestamp: string | null) => DocumentBaseline<any>[];
12
- getFromServerOrder: (libraryId: string, serverOrder: number) => DocumentBaseline<any>[];
13
- applyOperations: (libraryId: string, oid: string, operations: Operation[], deletedRefs?: Ref[]) => never[] | undefined;
14
- deleteAll: (libraryId: string) => void;
15
- getCount: (libraryId: string) => number;
16
- }
@@ -1,124 +0,0 @@
1
- import { applyPatch, } from '@verdant-web/common';
2
- export class Baselines {
3
- constructor(db) {
4
- this.db = db;
5
- this.get = (libraryId, oid) => {
6
- const row = this.db
7
- .prepare(`
8
- SELECT * FROM DocumentBaseline
9
- WHERE libraryId = ? AND oid = ?
10
- `)
11
- .get(libraryId, oid);
12
- if (!row) {
13
- return null;
14
- }
15
- return this.hydrateSnapshot(row);
16
- };
17
- this.getAllWithSubObjects = (libraryId, oid) => {
18
- const rows = this.db
19
- .prepare(`
20
- SELECT * FROM DocumentBaseline
21
- WHERE libraryId = ? AND oid LIKE ?
22
- `)
23
- .all(libraryId, `${oid}%`);
24
- return rows.map(this.hydrateSnapshot);
25
- };
26
- this.set = (libraryId, baseline) => {
27
- if (!baseline.snapshot) {
28
- return this.db
29
- .prepare(`
30
- DELETE FROM DocumentBaseline
31
- WHERE libraryId = ? AND oid = ?
32
- `)
33
- .run(libraryId, baseline.oid);
34
- }
35
- return this.db
36
- .prepare(`
37
- INSERT OR REPLACE INTO DocumentBaseline (libraryId, oid, snapshot, timestamp)
38
- VALUES (?, ?, ?, ?)
39
- `)
40
- .run(libraryId, baseline.oid, JSON.stringify(baseline.snapshot), baseline.timestamp);
41
- };
42
- this.insertAll = (libraryId, baselines) => {
43
- const tx = this.db.transaction(() => {
44
- for (const baseline of baselines) {
45
- this.db
46
- .prepare(`
47
- INSERT OR REPLACE INTO DocumentBaseline (libraryId, oid, snapshot, timestamp)
48
- VALUES (?, ?, ?, ?)
49
- `)
50
- .run(libraryId, baseline.oid, JSON.stringify(baseline.snapshot), baseline.timestamp);
51
- }
52
- });
53
- tx();
54
- };
55
- this.hydrateSnapshot = (snapshot) => {
56
- return Object.assign(Object.assign({}, snapshot), { snapshot: JSON.parse(snapshot.snapshot) });
57
- };
58
- this.getAllAfter = (libraryId, timestamp) => {
59
- if (!timestamp) {
60
- return this.db
61
- .prepare(`
62
- SELECT * FROM DocumentBaseline
63
- WHERE libraryId = ?
64
- ORDER BY timestamp ASC
65
- `)
66
- .all(libraryId)
67
- .map(this.hydrateSnapshot);
68
- }
69
- return this.db
70
- .prepare(`
71
- SELECT * FROM DocumentBaseline
72
- WHERE libraryId = ? AND timestamp > ?
73
- ORDER BY timestamp ASC
74
- `)
75
- .all(libraryId, timestamp)
76
- .map(this.hydrateSnapshot);
77
- };
78
- this.getFromServerOrder = (libraryId, serverOrder) => {
79
- return this.db
80
- .prepare(`
81
- SELECT * FROM DocumentBaseline
82
- WHERE libraryId = ? AND serverOrder >= ?
83
- ORDER BY serverOrder ASC
84
- `)
85
- .all(libraryId, serverOrder)
86
- .map(this.hydrateSnapshot);
87
- };
88
- this.applyOperations = (libraryId, oid, operations, deletedRefs) => {
89
- if (operations.length === 0)
90
- return [];
91
- let baseline = this.get(libraryId, oid);
92
- if (!baseline) {
93
- baseline = {
94
- oid,
95
- snapshot: {},
96
- timestamp: operations[0].timestamp,
97
- };
98
- }
99
- for (const operation of operations) {
100
- baseline.snapshot = applyPatch(baseline.snapshot, operation.data, deletedRefs);
101
- }
102
- baseline.timestamp = operations[operations.length - 1].timestamp;
103
- this.set(libraryId, baseline);
104
- };
105
- this.deleteAll = (libraryId) => {
106
- this.db
107
- .prepare(`
108
- DELETE FROM DocumentBaseline
109
- WHERE libraryId = ?
110
- `)
111
- .run(libraryId);
112
- };
113
- this.getCount = (libraryId) => {
114
- var _a, _b;
115
- return ((_b = (_a = this.db
116
- .prepare(`
117
- SELECT COUNT(*) AS count FROM DocumentBaseline
118
- WHERE libraryId = ?
119
- `)
120
- .get(libraryId)) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0);
121
- };
122
- }
123
- }
124
- //# sourceMappingURL=Baselines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Baselines.js","sourceRoot":"","sources":["../../src/Baselines.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import { Operation } from '@verdant-web/common';
2
- import { Database } from 'better-sqlite3';
3
- import { OperationSpec } from './types.js';
4
- export declare class OperationHistory {
5
- private db;
6
- constructor(db: Database);
7
- private hydratePatch;
8
- getAllFor: (libraryId: string, oid: string) => OperationSpec[];
9
- getEarliest: (libraryId: string, count: number) => OperationSpec[];
10
- getAfter: (libraryId: string, timestamp?: string | null) => OperationSpec[];
11
- /**
12
- * Returns all operations before the given server order
13
- * in ascending chronological order
14
- */
15
- getBeforeServerOrder: (libraryId: string, beforeServerOrder: number) => OperationSpec[];
16
- /**
17
- * Returns all operations after a given server order. Useful
18
- * for retrieving operations that were created after a client
19
- * last synced.
20
- */
21
- getFromServerOrder: (libraryId: string, serverOrder: number) => OperationSpec[];
22
- getLatestServerOrder: (libraryId: string) => number;
23
- getCount: (libraryId: string) => number;
24
- /**
25
- * Adds a new operation or replaces an existing one.
26
- * The server order will be set to the current max + 1
27
- */
28
- insert: (libraryId: string, replicaId: string, item: Operation) => import("better-sqlite3").RunResult;
29
- /**
30
- * Inserts all operations and updates the server
31
- * order for this library
32
- */
33
- insertAll: (libraryId: string, replicaId: string, items: Operation[]) => Promise<void>;
34
- dropAll: (libraryId: string, items: Pick<OperationSpec, 'replicaId' | 'oid' | 'timestamp'>[]) => Promise<void>;
35
- deleteAll: (libraryId: string) => void;
36
- }
@@ -1,161 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- export class OperationHistory {
13
- constructor(db) {
14
- this.db = db;
15
- this.hydratePatch = (_a) => {
16
- var { libraryId: _, data } = _a, rest = __rest(_a, ["libraryId", "data"]);
17
- return Object.assign(Object.assign({}, rest), { data: JSON.parse(data) });
18
- };
19
- this.getAllFor = (libraryId, oid) => {
20
- return this.db
21
- .prepare(`
22
- SELECT * FROM OperationHistory
23
- WHERE libraryId = ? AND oid = ?
24
- ORDER BY timestamp ASC
25
- `)
26
- .all(libraryId, oid)
27
- .map(this.hydratePatch);
28
- };
29
- this.getEarliest = (libraryId, count) => {
30
- return this.db
31
- .prepare(`
32
- SELECT * FROM OperationHistory
33
- WHERE libraryId = ?
34
- ORDER BY timestamp ASC
35
- LIMIT ?
36
- `)
37
- .all(libraryId, count)
38
- .map(this.hydratePatch);
39
- };
40
- this.getAfter = (libraryId, timestamp = null) => {
41
- if (timestamp === null) {
42
- return this.db
43
- .prepare(`
44
- SELECT * FROM OperationHistory
45
- WHERE libraryId = ?
46
- ORDER BY timestamp ASC
47
- `)
48
- .all(libraryId)
49
- .map(this.hydratePatch);
50
- }
51
- return this.db
52
- .prepare(`
53
- SELECT * FROM OperationHistory
54
- WHERE libraryId = ? AND timestamp > ?
55
- ORDER BY timestamp ASC
56
- `)
57
- .all(libraryId, timestamp)
58
- .map(this.hydratePatch);
59
- };
60
- /**
61
- * Returns all operations before the given server order
62
- * in ascending chronological order
63
- */
64
- this.getBeforeServerOrder = (libraryId, beforeServerOrder) => {
65
- return this.db
66
- .prepare(`
67
- SELECT * FROM OperationHistory
68
- WHERE libraryId = ? AND serverOrder < ?
69
- ORDER BY timestamp ASC
70
- `)
71
- .all(libraryId, beforeServerOrder)
72
- .map(this.hydratePatch);
73
- };
74
- /**
75
- * Returns all operations after a given server order. Useful
76
- * for retrieving operations that were created after a client
77
- * last synced.
78
- */
79
- this.getFromServerOrder = (libraryId, serverOrder) => {
80
- const result = this.db
81
- .prepare(`
82
- SELECT * FROM OperationHistory
83
- WHERE libraryId = ? AND serverOrder > ?
84
- `)
85
- .all(libraryId, serverOrder);
86
- return (result || []).map(this.hydratePatch);
87
- };
88
- this.getLatestServerOrder = (libraryId) => {
89
- const result = this.db
90
- .prepare(`
91
- SELECT MAX(serverOrder) AS serverOrder FROM OperationHistory
92
- WHERE libraryId = ?
93
- `)
94
- .get(libraryId);
95
- return (result === null || result === void 0 ? void 0 : result.serverOrder) || 0;
96
- };
97
- this.getCount = (libraryId) => {
98
- const result = this.db
99
- .prepare(`
100
- SELECT COUNT(*) AS count FROM OperationHistory
101
- WHERE libraryId = ?
102
- `)
103
- .get(libraryId);
104
- return (result === null || result === void 0 ? void 0 : result.count) || 0;
105
- };
106
- /**
107
- * Adds a new operation or replaces an existing one.
108
- * The server order will be set to the current max + 1
109
- */
110
- this.insert = (libraryId, replicaId, item) => {
111
- return this.db
112
- .prepare(`
113
- INSERT OR REPLACE INTO OperationHistory (libraryId, oid, data, timestamp, replicaId, serverOrder)
114
- VALUES (?, ?, ?, ?, ?, (SELECT COALESCE(MAX(serverOrder), 0) FROM OperationHistory WHERE libraryId = ?) + 1)
115
- `)
116
- .run(libraryId, item.oid, JSON.stringify(item.data), item.timestamp, replicaId);
117
- };
118
- /**
119
- * Inserts all operations and updates the server
120
- * order for this library
121
- */
122
- this.insertAll = async (libraryId, replicaId, items) => {
123
- const tx = this.db.transaction(() => {
124
- let orderResult = this.db
125
- .prepare(`
126
- SELECT COALESCE(MAX(serverOrder), 0) AS serverOrder FROM OperationHistory WHERE libraryId = ?
127
- `)
128
- .get(libraryId);
129
- let currentServerOrder = orderResult.serverOrder || 0;
130
- const insertStatement = this.db.prepare(`
131
- INSERT OR REPLACE INTO OperationHistory (libraryId, oid, data, timestamp, replicaId, serverOrder)
132
- VALUES (?, ?, ?, ?, ?, ?)
133
- `);
134
- for (const item of items) {
135
- insertStatement.run(libraryId, item.oid, JSON.stringify(item.data), item.timestamp, replicaId, ++currentServerOrder);
136
- }
137
- });
138
- tx();
139
- };
140
- this.dropAll = async (libraryId, items) => {
141
- const deleteStatement = this.db.prepare(`
142
- DELETE FROM OperationHistory
143
- WHERE libraryId = ? AND replicaId = ? AND oid = ? AND timestamp = ?
144
- `);
145
- this.db.transaction(() => {
146
- for (const item of items) {
147
- deleteStatement.run(libraryId, item.replicaId, item.oid, item.timestamp);
148
- }
149
- })();
150
- };
151
- this.deleteAll = (libraryId) => {
152
- this.db
153
- .prepare(`
154
- DELETE FROM OperationHistory
155
- WHERE libraryId = ?
156
- `)
157
- .run(libraryId);
158
- };
159
- }
160
- }
161
- //# sourceMappingURL=OperationHistory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OperationHistory.js","sourceRoot":"","sources":["../../src/OperationHistory.ts"],"names":[],"mappings":";;;;;;;;;;;AAWA,MAAM,OAAO,gBAAgB;IAC5B,YAAoB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;QAExB,iBAAY,GAAG,CAAC,EAIK,EAAiB,EAAE;gBAJxB,EACvB,SAAS,EAAE,CAAC,EACZ,IAAI,OAEwB,EADzB,IAAI,cAHgB,qBAIvB,CADO;YAEP,uCACI,IAAI,KACP,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IACrB;QACH,CAAC,CAAC;QAEF,cAAS,GAAG,CAAC,SAAiB,EAAE,GAAW,EAAE,EAAE;YAC9C,OAAO,IAAI,CAAC,EAAE;iBACZ,OAAO,CACP;;;;KAIC,CACD;iBACA,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC;iBACnB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,SAAiB,EAAE,KAAa,EAAE,EAAE;YAClD,OAAO,IAAI,CAAC,EAAE;iBACZ,OAAO,CACP;;;;;KAKC,CACD;iBACA,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;iBACrB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,aAAQ,GAAG,CAAC,SAAiB,EAAE,YAA2B,IAAI,EAAE,EAAE;YACjE,IAAI,SAAS,KAAK,IAAI,EAAE;gBACvB,OAAO,IAAI,CAAC,EAAE;qBACZ,OAAO,CACP;;;;KAIA,CACA;qBACA,GAAG,CAAC,SAAS,CAAC;qBACd,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACzB;YACD,OAAO,IAAI,CAAC,EAAE;iBACZ,OAAO,CACP;;;;KAIC,CACD;iBACA,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;iBACzB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF;;;WAGG;QACH,yBAAoB,GAAG,CAAC,SAAiB,EAAE,iBAAyB,EAAE,EAAE;YACvE,OAAO,IAAI,CAAC,EAAE;iBACZ,OAAO,CACP;;;;GAID,CACC;iBACA,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC;iBACjC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF;;;;WAIG;QACH,uBAAkB,GAAG,CAAC,SAAiB,EAAE,WAAmB,EAAE,EAAE;YAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;iBACpB,OAAO,CACP;;;GAGD,CACC;iBACA,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE9B,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,yBAAoB,GAAG,CAAC,SAAiB,EAAU,EAAE;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;iBACpB,OAAO,CACP;;;GAGD,CACC;iBACA,GAAG,CAAC,SAAS,CAAC,CAAC;YAEjB,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,KAAI,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,aAAQ,GAAG,CAAC,SAAiB,EAAU,EAAE;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;iBACpB,OAAO,CACP;;;GAGD,CACC;iBACA,GAAG,CAAC,SAAS,CAAC,CAAC;YAEjB,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,KAAI,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF;;;WAGG;QACH,WAAM,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,IAAe,EAAE,EAAE;YAClE,OAAO,IAAI,CAAC,EAAE;iBACZ,OAAO,CACP;;;KAGC,CACD;iBACA,GAAG,CACH,SAAS,EACT,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EACzB,IAAI,CAAC,SAAS,EACd,SAAS,CACT,CAAC;QACJ,CAAC,CAAC;QAEF;;;WAGG;QACH,cAAS,GAAG,KAAK,EAChB,SAAiB,EACjB,SAAiB,EACjB,KAAkB,EACjB,EAAE;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBACnC,IAAI,WAAW,GAAG,IAAI,CAAC,EAAE;qBACvB,OAAO,CACP;;KAEA,CACA;qBACA,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjB,IAAI,kBAAkB,GAAG,WAAW,CAAC,WAAW,IAAI,CAAC,CAAC;gBACtD,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACtC;;;KAGC,CACD,CAAC;gBACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;oBACzB,eAAe,CAAC,GAAG,CAClB,SAAS,EACT,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EACzB,IAAI,CAAC,SAAS,EACd,SAAS,EACT,EAAE,kBAAkB,CACpB,CAAC;iBACF;YACF,CAAC,CAAC,CAAC;YAEH,EAAE,EAAE,CAAC;QACN,CAAC,CAAC;QAEF,YAAO,GAAG,KAAK,EACd,SAAiB,EACjB,KAA+D,EAC9D,EAAE;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACtC;;;IAGC,CACD,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;oBACzB,eAAe,CAAC,GAAG,CAClB,SAAS,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,SAAS,CACd,CAAC;iBACF;YACF,CAAC,CAAC,EAAE,CAAC;QACN,CAAC,CAAC;QAEF,cAAS,GAAG,CAAC,SAAiB,EAAE,EAAE;YACjC,IAAI,CAAC,EAAE;iBACL,OAAO,CACP;;;IAGA,CACA;iBACA,GAAG,CAAC,SAAS,CAAC,CAAC;QAClB,CAAC,CAAC;IA1NiC,CAAC;CA2NpC"}
@@ -1,25 +0,0 @@
1
- import { Database } from 'better-sqlite3';
2
- import { TokenInfo } from './TokenVerifier.js';
3
- import { ReplicaInfoSpec } from './types.js';
4
- export declare class ReplicaInfos {
5
- private db;
6
- private readonly replicaTruancyMinutes;
7
- constructor(db: Database, replicaTruancyMinutes: number);
8
- get truantCutoff(): number;
9
- get: (libraryId: string, replicaId: string) => ReplicaInfoSpec | null;
10
- getOrCreate: (libraryId: string, replicaId: string, info: TokenInfo) => {
11
- status: 'new' | 'existing' | 'truant';
12
- replicaInfo: ReplicaInfoSpec;
13
- };
14
- getAllNonTruant: (libraryId: string) => ReplicaInfoSpec[];
15
- getAll: (libraryId: string) => ReplicaInfoSpec[];
16
- updateLastSeen: (libraryId: string, replicaId: string) => import("better-sqlite3").RunResult;
17
- updateAcknowledged: (libraryId: string, replicaId: string, timestamp: string) => void;
18
- updateServerOrder: (libraryId: string, replicaId: string, serverOrder: number) => void;
19
- getEarliestAckedServerOrder: (libraryId: string) => number | null;
20
- acknowledgeOperation: (libraryId: string, replicaId: string, timestamp: string) => void;
21
- getGlobalAck: (libraryId: string, onlineReplicaIds?: string[]) => string | undefined;
22
- delete: (libraryId: string, replicaId: string) => import("better-sqlite3").RunResult;
23
- deleteAll: (libraryId: string) => import("better-sqlite3").RunResult;
24
- deleteAllForUser: (libraryId: string, userId: string) => import("better-sqlite3").RunResult;
25
- }