@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.
- package/dist/esm/ClientConnection.d.ts +1 -0
- package/dist/esm/ClientConnection.js.map +1 -1
- package/dist/esm/Presence.js.map +1 -1
- package/dist/esm/Profiles.js.map +1 -1
- package/dist/esm/ReplicaKeepaliveTimers.js.map +1 -1
- package/dist/esm/Server.d.ts +15 -11
- package/dist/esm/Server.js +29 -30
- package/dist/esm/Server.js.map +1 -1
- package/dist/esm/ServerLibrary.d.ts +10 -17
- package/dist/esm/ServerLibrary.js +151 -127
- package/dist/esm/ServerLibrary.js.map +1 -1
- package/dist/esm/ServerLibrary.test.js +369 -0
- package/dist/esm/ServerLibrary.test.js.map +1 -0
- package/dist/esm/TokenVerifier.js.map +1 -1
- package/dist/esm/files/FileStorage.js.map +1 -1
- package/dist/esm/storage/Storage.d.ts +67 -0
- package/dist/esm/storage/Storage.js +2 -0
- package/dist/esm/storage/Storage.js.map +1 -0
- package/dist/esm/storage/index.d.ts +2 -0
- package/dist/esm/storage/index.js +3 -0
- package/dist/esm/storage/index.js.map +1 -0
- package/dist/esm/storage/sql/SqlBaselines.d.ts +22 -0
- package/dist/esm/storage/sql/SqlBaselines.js +101 -0
- package/dist/esm/storage/sql/SqlBaselines.js.map +1 -0
- package/dist/esm/storage/sql/SqlFileMetadata.d.ts +18 -0
- package/dist/esm/storage/sql/SqlFileMetadata.js +69 -0
- package/dist/esm/storage/sql/SqlFileMetadata.js.map +1 -0
- package/dist/esm/storage/sql/SqlOperations.d.ts +19 -0
- package/dist/esm/storage/sql/SqlOperations.js +104 -0
- package/dist/esm/storage/sql/SqlOperations.js.map +1 -0
- package/dist/esm/storage/sql/SqlReplicas.d.ts +32 -0
- package/dist/esm/storage/sql/SqlReplicas.js +163 -0
- package/dist/esm/storage/sql/SqlReplicas.js.map +1 -0
- package/dist/esm/storage/sql/migrations/v1.d.ts +3 -0
- package/dist/esm/storage/sql/migrations/v1.js +59 -0
- package/dist/esm/storage/sql/migrations/v1.js.map +1 -0
- package/dist/esm/storage/sql/migrations.d.ts +5 -0
- package/dist/esm/storage/sql/migrations.js +3 -0
- package/dist/esm/storage/sql/migrations.js.map +1 -0
- package/dist/esm/storage/sql/sqlStorage.d.ts +5 -0
- package/dist/esm/storage/sql/sqlStorage.js +43 -0
- package/dist/esm/storage/sql/sqlStorage.js.map +1 -0
- package/dist/esm/storage/sql/tables.d.ts +40 -0
- package/dist/esm/storage/sql/tables.js +2 -0
- package/dist/esm/storage/sql/tables.js.map +1 -0
- package/dist/esm/types.d.ts +14 -5
- package/package.json +20 -14
- package/src/Server.ts +37 -43
- package/src/ServerLibrary.test.ts +447 -0
- package/src/ServerLibrary.ts +239 -163
- package/src/storage/Storage.ts +118 -0
- package/src/storage/index.ts +2 -0
- package/src/storage/sql/SqlBaselines.ts +141 -0
- package/src/storage/sql/SqlFileMetadata.ts +94 -0
- package/src/storage/sql/SqlOperations.ts +149 -0
- package/src/storage/sql/SqlReplicas.ts +234 -0
- package/src/storage/sql/migrations/v1.ts +64 -0
- package/src/storage/sql/migrations.ts +3 -0
- package/src/storage/sql/sqlStorage.ts +59 -0
- package/src/storage/sql/tables.ts +45 -0
- package/src/types.ts +15 -4
- package/bin/server.mjs +0 -115
- package/dist/cjs/Baselines.d.ts +0 -16
- package/dist/cjs/Baselines.js +0 -128
- package/dist/cjs/Baselines.js.map +0 -1
- package/dist/cjs/ClientConnection.d.ts +0 -20
- package/dist/cjs/ClientConnection.js +0 -139
- package/dist/cjs/ClientConnection.js.map +0 -1
- package/dist/cjs/MessageSender.d.ts +0 -5
- package/dist/cjs/MessageSender.js +0 -3
- package/dist/cjs/MessageSender.js.map +0 -1
- package/dist/cjs/OperationHistory.d.ts +0 -36
- package/dist/cjs/OperationHistory.js +0 -165
- package/dist/cjs/OperationHistory.js.map +0 -1
- package/dist/cjs/Presence.d.ts +0 -15
- package/dist/cjs/Presence.js +0 -60
- package/dist/cjs/Presence.js.map +0 -1
- package/dist/cjs/Profiles.d.ts +0 -10
- package/dist/cjs/Profiles.js +0 -20
- package/dist/cjs/Profiles.js.map +0 -1
- package/dist/cjs/ReplicaKeepaliveTimers.d.ts +0 -17
- package/dist/cjs/ReplicaKeepaliveTimers.js +0 -31
- package/dist/cjs/ReplicaKeepaliveTimers.js.map +0 -1
- package/dist/cjs/Replicas.d.ts +0 -25
- package/dist/cjs/Replicas.js +0 -196
- package/dist/cjs/Replicas.js.map +0 -1
- package/dist/cjs/Server.d.ts +0 -167
- package/dist/cjs/Server.js +0 -552
- package/dist/cjs/Server.js.map +0 -1
- package/dist/cjs/ServerLibrary.d.ts +0 -65
- package/dist/cjs/ServerLibrary.js +0 -505
- package/dist/cjs/ServerLibrary.js.map +0 -1
- package/dist/cjs/TokenProvider.d.ts +0 -19
- package/dist/cjs/TokenProvider.js +0 -27
- package/dist/cjs/TokenProvider.js.map +0 -1
- package/dist/cjs/TokenVerifier.d.ts +0 -16
- package/dist/cjs/TokenVerifier.js +0 -40
- package/dist/cjs/TokenVerifier.js.map +0 -1
- package/dist/cjs/files/FileMetadata.d.ts +0 -28
- package/dist/cjs/files/FileMetadata.js +0 -69
- package/dist/cjs/files/FileMetadata.js.map +0 -1
- package/dist/cjs/files/FileStorage.d.ts +0 -35
- package/dist/cjs/files/FileStorage.js +0 -72
- package/dist/cjs/files/FileStorage.js.map +0 -1
- package/dist/cjs/index.d.ts +0 -10
- package/dist/cjs/index.js +0 -12
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/migrations/v0.d.ts +0 -1
- package/dist/cjs/migrations/v0.js +0 -30
- package/dist/cjs/migrations/v0.js.map +0 -1
- package/dist/cjs/migrations/v1.d.ts +0 -1
- package/dist/cjs/migrations/v1.js +0 -32
- package/dist/cjs/migrations/v1.js.map +0 -1
- package/dist/cjs/migrations/v2.d.ts +0 -1
- package/dist/cjs/migrations/v2.js +0 -29
- package/dist/cjs/migrations/v2.js.map +0 -1
- package/dist/cjs/migrations/v3.d.ts +0 -1
- package/dist/cjs/migrations/v3.js +0 -15
- package/dist/cjs/migrations/v3.js.map +0 -1
- package/dist/cjs/migrations/v4.d.ts +0 -1
- package/dist/cjs/migrations/v4.js +0 -9
- package/dist/cjs/migrations/v4.js.map +0 -1
- package/dist/cjs/migrations/v5.d.ts +0 -2
- package/dist/cjs/migrations/v5.js +0 -37
- package/dist/cjs/migrations/v5.js.map +0 -1
- package/dist/cjs/migrations/v6.d.ts +0 -1
- package/dist/cjs/migrations/v6.js +0 -8
- package/dist/cjs/migrations/v6.js.map +0 -1
- package/dist/cjs/migrations/v7.d.ts +0 -1
- package/dist/cjs/migrations/v7.js +0 -10
- package/dist/cjs/migrations/v7.js.map +0 -1
- package/dist/cjs/migrations.d.ts +0 -6
- package/dist/cjs/migrations.js +0 -72
- package/dist/cjs/migrations.js.map +0 -1
- package/dist/cjs/migrations.test.js +0 -121
- package/dist/cjs/migrations.test.js.map +0 -1
- package/dist/cjs/types.d.ts +0 -38
- package/dist/cjs/types.js +0 -3
- package/dist/cjs/types.js.map +0 -1
- package/dist/esm/Baselines.d.ts +0 -16
- package/dist/esm/Baselines.js +0 -124
- package/dist/esm/Baselines.js.map +0 -1
- package/dist/esm/OperationHistory.d.ts +0 -36
- package/dist/esm/OperationHistory.js +0 -161
- package/dist/esm/OperationHistory.js.map +0 -1
- package/dist/esm/Replicas.d.ts +0 -25
- package/dist/esm/Replicas.js +0 -192
- package/dist/esm/Replicas.js.map +0 -1
- package/dist/esm/files/FileMetadata.d.ts +0 -28
- package/dist/esm/files/FileMetadata.js +0 -65
- package/dist/esm/files/FileMetadata.js.map +0 -1
- package/dist/esm/migrations/v0.d.ts +0 -1
- package/dist/esm/migrations/v0.js +0 -27
- package/dist/esm/migrations/v0.js.map +0 -1
- package/dist/esm/migrations/v1.d.ts +0 -1
- package/dist/esm/migrations/v1.js +0 -29
- package/dist/esm/migrations/v1.js.map +0 -1
- package/dist/esm/migrations/v2.d.ts +0 -1
- package/dist/esm/migrations/v2.js +0 -26
- package/dist/esm/migrations/v2.js.map +0 -1
- package/dist/esm/migrations/v3.d.ts +0 -1
- package/dist/esm/migrations/v3.js +0 -12
- package/dist/esm/migrations/v3.js.map +0 -1
- package/dist/esm/migrations/v4.d.ts +0 -1
- package/dist/esm/migrations/v4.js +0 -6
- package/dist/esm/migrations/v4.js.map +0 -1
- package/dist/esm/migrations/v5.d.ts +0 -2
- package/dist/esm/migrations/v5.js +0 -33
- package/dist/esm/migrations/v5.js.map +0 -1
- package/dist/esm/migrations/v6.d.ts +0 -1
- package/dist/esm/migrations/v6.js +0 -5
- package/dist/esm/migrations/v6.js.map +0 -1
- package/dist/esm/migrations/v7.d.ts +0 -1
- package/dist/esm/migrations/v7.js +0 -7
- package/dist/esm/migrations/v7.js.map +0 -1
- package/dist/esm/migrations.d.ts +0 -6
- package/dist/esm/migrations.js +0 -45
- package/dist/esm/migrations.js.map +0 -1
- package/dist/esm/migrations.test.d.ts +0 -1
- package/dist/esm/migrations.test.js +0 -116
- package/dist/esm/migrations.test.js.map +0 -1
- package/dist/tsconfig-cjs.tsbuildinfo +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/Baselines.ts +0 -198
- package/src/OperationHistory.ts +0 -232
- package/src/Replicas.ts +0 -274
- package/src/files/FileMetadata.ts +0 -112
- package/src/migrations/v0.ts +0 -26
- package/src/migrations/v1.ts +0 -28
- package/src/migrations/v2.ts +0 -26
- package/src/migrations/v3.ts +0 -12
- package/src/migrations/v4.ts +0 -6
- package/src/migrations/v5.ts +0 -49
- package/src/migrations/v6.ts +0 -4
- package/src/migrations/v7.ts +0 -6
- package/src/migrations.test.ts +0 -133
- package/src/migrations.ts +0 -61
- /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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"}
|
package/dist/cjs/types.d.ts
DELETED
|
@@ -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
package/dist/cjs/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
package/dist/esm/Baselines.d.ts
DELETED
|
@@ -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
|
-
}
|
package/dist/esm/Baselines.js
DELETED
|
@@ -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"}
|
package/dist/esm/Replicas.d.ts
DELETED
|
@@ -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
|
-
}
|