velocious 1.0.716 → 1.0.718
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/README.md +1 -0
- package/build/configuration.js +2 -3
- package/build/database/query/model-class-query.js +49 -14
- package/build/database/record/attachments/store.js +13 -2
- package/build/database/record/index.js +3 -2
- package/build/environment-handlers/base.js +11 -0
- package/build/environment-handlers/node.js +10 -0
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +3 -4
- package/build/src/database/query/model-class-query.d.ts +13 -3
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +45 -15
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +12 -3
- package/build/src/database/record/index.d.ts +4 -2
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +4 -3
- package/build/src/environment-handlers/base.d.ts +8 -0
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +11 -1
- package/build/src/environment-handlers/node.d.ts +7 -0
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +10 -1
- package/build/src/sync/sync-api-client-types.d.ts +10 -0
- package/build/src/sync/sync-api-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-api-client-types.js +3 -1
- package/build/src/sync/sync-api-client.d.ts +6 -0
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +17 -2
- package/build/src/sync/sync-applied-sequence-store.d.ts +138 -0
- package/build/src/sync/sync-applied-sequence-store.d.ts.map +1 -0
- package/build/src/sync/sync-applied-sequence-store.js +267 -0
- package/build/src/sync/sync-client.d.ts +15 -0
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +43 -3
- package/build/src/tenants/tenant-model-scope.d.ts +2 -1
- package/build/src/tenants/tenant-model-scope.d.ts.map +1 -1
- package/build/src/tenants/tenant-model-scope.js +4 -3
- package/build/sync/sync-api-client-types.js +2 -0
- package/build/sync/sync-api-client.js +18 -1
- package/build/sync/sync-applied-sequence-store.js +298 -0
- package/build/sync/sync-client.js +51 -2
- package/build/tenants/tenant-model-scope.js +3 -2
- package/package.json +1 -1
- package/src/configuration.js +2 -3
- package/src/database/query/model-class-query.js +49 -14
- package/src/database/record/attachments/store.js +13 -2
- package/src/database/record/index.js +3 -2
- package/src/environment-handlers/base.js +11 -0
- package/src/environment-handlers/node.js +10 -0
- package/src/sync/sync-api-client-types.js +2 -0
- package/src/sync/sync-api-client.js +18 -1
- package/src/sync/sync-applied-sequence-store.js +298 -0
- package/src/sync/sync-client.js +51 -2
- package/src/tenants/tenant-model-scope.js +3 -2
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
export type SyncAppliedSequenceRow = {
|
|
2
|
+
/**
|
|
3
|
+
* - Resource identifier the change applied to.
|
|
4
|
+
*/
|
|
5
|
+
resourceId: string;
|
|
6
|
+
/**
|
|
7
|
+
* - Resource/model name the change applied to.
|
|
8
|
+
*/
|
|
9
|
+
resourceType: string;
|
|
10
|
+
/**
|
|
11
|
+
* - Highest applied server sequence for the resource.
|
|
12
|
+
*/
|
|
13
|
+
serverSequence: number;
|
|
14
|
+
/**
|
|
15
|
+
* - Physical store identity owning this row.
|
|
16
|
+
*/
|
|
17
|
+
storeIdentity: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Framework-owned local bookkeeping of the newest server change sequence
|
|
21
|
+
* already applied to each record.
|
|
22
|
+
*
|
|
23
|
+
* The server change feed is at-least-once: a realtime push does not advance a
|
|
24
|
+
* pull cursor, so the next pull re-delivers the same `serverSequence`, and a
|
|
25
|
+
* resumed page can repeat a row. Applying such a duplicate after a newer local
|
|
26
|
+
* provisional write used to let the older server payload win. Tracking the
|
|
27
|
+
* highest applied sequence per record makes the applier idempotent: a change at
|
|
28
|
+
* or below the recorded sequence is skipped, while any higher sequence still
|
|
29
|
+
* applies.
|
|
30
|
+
*
|
|
31
|
+
* Backed by an auto-created `velocious_sync_applied_sequences` table on the
|
|
32
|
+
* configured database, with a process-local memory fallback when no database is
|
|
33
|
+
* configured (mirroring the scope store).
|
|
34
|
+
*/
|
|
35
|
+
export default class SyncAppliedSequenceStore {
|
|
36
|
+
configuration: import("../configuration.js").default;
|
|
37
|
+
databaseIdentifier: string;
|
|
38
|
+
tenantHandle: import("../tenants/tenant-handle.js").default | undefined;
|
|
39
|
+
storeIdentity: string;
|
|
40
|
+
/** @type {Map<string, number>} */
|
|
41
|
+
_memorySequences: Map<string, number>;
|
|
42
|
+
/** @type {Map<string, Promise<void>>} */
|
|
43
|
+
_writeQueues: Map<string, Promise<void>>;
|
|
44
|
+
_isReady: boolean;
|
|
45
|
+
/** @type {Promise<void> | null} */
|
|
46
|
+
_readyPromise: Promise<void> | null;
|
|
47
|
+
/** @type {WeakMap<import("../database/drivers/base.js").default, {completion: Promise<void>, promise: Promise<void>}>} */
|
|
48
|
+
_transactionReadyPromises: WeakMap<import("../database/drivers/base.js").default, {
|
|
49
|
+
completion: Promise<void>;
|
|
50
|
+
promise: Promise<void>;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Creates an applied-sequence store.
|
|
54
|
+
* @param {object} args - Options.
|
|
55
|
+
* @param {import("../configuration.js").default} args.configuration - Configuration owning the database.
|
|
56
|
+
* @param {string} [args.databaseIdentifier] - Database identifier.
|
|
57
|
+
* @param {import("../tenants/tenant-handle.js").default} [args.tenantHandle] - Immutable tenant handle owning the physical store.
|
|
58
|
+
*/
|
|
59
|
+
constructor({ configuration, databaseIdentifier, tenantHandle }: {
|
|
60
|
+
configuration: import("../configuration.js").default;
|
|
61
|
+
databaseIdentifier?: string;
|
|
62
|
+
tenantHandle?: import("../tenants/tenant-handle.js").default;
|
|
63
|
+
});
|
|
64
|
+
/**
|
|
65
|
+
* Ensures the backing table exists.
|
|
66
|
+
* @returns {Promise<void>} Resolves when ready.
|
|
67
|
+
*/
|
|
68
|
+
ensureReady(): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Returns the highest server sequence already applied to a record.
|
|
71
|
+
* @param {{resourceType: string, resourceId: string}} identity - Resource identity.
|
|
72
|
+
* @returns {Promise<number | null>} Applied sequence, or null when none is recorded.
|
|
73
|
+
*/
|
|
74
|
+
lastAppliedSequence(identity: {
|
|
75
|
+
resourceType: string;
|
|
76
|
+
resourceId: string;
|
|
77
|
+
}): Promise<number | null>;
|
|
78
|
+
/**
|
|
79
|
+
* Records a successfully applied server sequence for a record, keeping only
|
|
80
|
+
* the highest value. Writes for the same record are serialized in-process so
|
|
81
|
+
* concurrent pull/realtime applies cannot move the watermark backwards.
|
|
82
|
+
* @param {{resourceType: string, resourceId: string, serverSequence: number}} args - Applied change identity and sequence.
|
|
83
|
+
* @returns {Promise<void>} Resolves when recorded.
|
|
84
|
+
*/
|
|
85
|
+
recordAppliedSequence({ resourceId, resourceType, serverSequence }: {
|
|
86
|
+
resourceType: string;
|
|
87
|
+
resourceId: string;
|
|
88
|
+
serverSequence: number;
|
|
89
|
+
}): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Applies one serialized watermark write.
|
|
92
|
+
* @param {{identity: {resourceType: string, resourceId: string}, key: string, serverSequence: number}} args - Write args.
|
|
93
|
+
* @returns {Promise<void>} Resolves when written.
|
|
94
|
+
*/
|
|
95
|
+
_recordSequential({ identity, key, serverSequence }: {
|
|
96
|
+
identity: {
|
|
97
|
+
resourceType: string;
|
|
98
|
+
resourceId: string;
|
|
99
|
+
};
|
|
100
|
+
key: string;
|
|
101
|
+
serverSequence: number;
|
|
102
|
+
}): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Coordinates durable and transaction-local readiness on one connection.
|
|
105
|
+
* @param {import("../database/drivers/base.js").default} db - Database connection.
|
|
106
|
+
* @returns {Promise<void>} Resolves when this caller can use the table.
|
|
107
|
+
*/
|
|
108
|
+
_ensureReadyWithDb(db: import("../database/drivers/base.js").default): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Whether the store runs without a configured database.
|
|
111
|
+
* @returns {boolean} Whether memory storage is used.
|
|
112
|
+
*/
|
|
113
|
+
_usesMemoryStorage(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Runs a callback with a database connection.
|
|
116
|
+
* @template Result
|
|
117
|
+
* @param {(db: import("../database/drivers/base.js").default) => Promise<Result>} callback - Database callback.
|
|
118
|
+
* @returns {Promise<Result>} Callback result.
|
|
119
|
+
*/
|
|
120
|
+
_withDb<Result>(callback: (db: import("../database/drivers/base.js").default) => Promise<Result>): Promise<Result>;
|
|
121
|
+
/**
|
|
122
|
+
* Ensures the applied-sequences table exists.
|
|
123
|
+
* @param {import("../database/drivers/base.js").default} db - Database connection.
|
|
124
|
+
* @returns {Promise<boolean>} Whether the table had to be created.
|
|
125
|
+
*/
|
|
126
|
+
_ensureTable(db: import("../database/drivers/base.js").default): Promise<boolean>;
|
|
127
|
+
/**
|
|
128
|
+
* Resolves the stored row for one resource identity.
|
|
129
|
+
* @param {import("../database/drivers/base.js").default} db - Database connection.
|
|
130
|
+
* @param {{resourceType: string, resourceId: string}} identity - Resource identity.
|
|
131
|
+
* @returns {Promise<SyncAppliedSequenceRow | null>} Stored row, or null.
|
|
132
|
+
*/
|
|
133
|
+
_rowByResource(db: import("../database/drivers/base.js").default, identity: {
|
|
134
|
+
resourceType: string;
|
|
135
|
+
resourceId: string;
|
|
136
|
+
}): Promise<SyncAppliedSequenceRow | null>;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=sync-applied-sequence-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-applied-sequence-store.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-applied-sequence-store.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import TableData from "../database/table-data/index.js";
|
|
3
|
+
import TableIndex from "../database/table-data/table-index.js";
|
|
4
|
+
import UUID from "pure-uuid";
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {object} SyncAppliedSequenceRow
|
|
7
|
+
* @property {string} resourceId - Resource identifier the change applied to.
|
|
8
|
+
* @property {string} resourceType - Resource/model name the change applied to.
|
|
9
|
+
* @property {number} serverSequence - Highest applied server sequence for the resource.
|
|
10
|
+
* @property {string} storeIdentity - Physical store identity owning this row.
|
|
11
|
+
*/
|
|
12
|
+
const TABLE_NAME = "velocious_sync_applied_sequences";
|
|
13
|
+
const IDENTITY_INDEX_NAME = "index_velocious_sync_applied_sequences_on_identity";
|
|
14
|
+
/**
|
|
15
|
+
* Builds the stable in-memory key for one resource identity.
|
|
16
|
+
* @param {{resourceType: string, resourceId: string}} args - Resource identity.
|
|
17
|
+
* @returns {string} Memory key.
|
|
18
|
+
*/
|
|
19
|
+
function memoryKey({ resourceId, resourceType }) {
|
|
20
|
+
return `${resourceType}:${resourceId}`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Framework-owned local bookkeeping of the newest server change sequence
|
|
24
|
+
* already applied to each record.
|
|
25
|
+
*
|
|
26
|
+
* The server change feed is at-least-once: a realtime push does not advance a
|
|
27
|
+
* pull cursor, so the next pull re-delivers the same `serverSequence`, and a
|
|
28
|
+
* resumed page can repeat a row. Applying such a duplicate after a newer local
|
|
29
|
+
* provisional write used to let the older server payload win. Tracking the
|
|
30
|
+
* highest applied sequence per record makes the applier idempotent: a change at
|
|
31
|
+
* or below the recorded sequence is skipped, while any higher sequence still
|
|
32
|
+
* applies.
|
|
33
|
+
*
|
|
34
|
+
* Backed by an auto-created `velocious_sync_applied_sequences` table on the
|
|
35
|
+
* configured database, with a process-local memory fallback when no database is
|
|
36
|
+
* configured (mirroring the scope store).
|
|
37
|
+
*/
|
|
38
|
+
export default class SyncAppliedSequenceStore {
|
|
39
|
+
/**
|
|
40
|
+
* Creates an applied-sequence store.
|
|
41
|
+
* @param {object} args - Options.
|
|
42
|
+
* @param {import("../configuration.js").default} args.configuration - Configuration owning the database.
|
|
43
|
+
* @param {string} [args.databaseIdentifier] - Database identifier.
|
|
44
|
+
* @param {import("../tenants/tenant-handle.js").default} [args.tenantHandle] - Immutable tenant handle owning the physical store.
|
|
45
|
+
*/
|
|
46
|
+
constructor({ configuration, databaseIdentifier = "default", tenantHandle }) {
|
|
47
|
+
if (tenantHandle)
|
|
48
|
+
tenantHandle.assertConfiguration(configuration);
|
|
49
|
+
this.configuration = configuration;
|
|
50
|
+
this.databaseIdentifier = databaseIdentifier;
|
|
51
|
+
this.tenantHandle = tenantHandle;
|
|
52
|
+
this.storeIdentity = tenantHandle
|
|
53
|
+
? tenantHandle.databaseIdentity(databaseIdentifier)
|
|
54
|
+
: `configuration:${databaseIdentifier}`;
|
|
55
|
+
/** @type {Map<string, number>} */
|
|
56
|
+
this._memorySequences = new Map();
|
|
57
|
+
/** @type {Map<string, Promise<void>>} */
|
|
58
|
+
this._writeQueues = new Map();
|
|
59
|
+
this._isReady = false;
|
|
60
|
+
/** @type {Promise<void> | null} */
|
|
61
|
+
this._readyPromise = null;
|
|
62
|
+
/** @type {WeakMap<import("../database/drivers/base.js").default, {completion: Promise<void>, promise: Promise<void>}>} */
|
|
63
|
+
this._transactionReadyPromises = new WeakMap();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Ensures the backing table exists.
|
|
67
|
+
* @returns {Promise<void>} Resolves when ready.
|
|
68
|
+
*/
|
|
69
|
+
async ensureReady() {
|
|
70
|
+
if (this._isReady)
|
|
71
|
+
return;
|
|
72
|
+
if (this._usesMemoryStorage()) {
|
|
73
|
+
this._isReady = true;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
await this._withDb(async (db) => await this._ensureReadyWithDb(db));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Returns the highest server sequence already applied to a record.
|
|
80
|
+
* @param {{resourceType: string, resourceId: string}} identity - Resource identity.
|
|
81
|
+
* @returns {Promise<number | null>} Applied sequence, or null when none is recorded.
|
|
82
|
+
*/
|
|
83
|
+
async lastAppliedSequence(identity) {
|
|
84
|
+
await this.ensureReady();
|
|
85
|
+
if (this._usesMemoryStorage()) {
|
|
86
|
+
return this._memorySequences.get(memoryKey(identity)) ?? null;
|
|
87
|
+
}
|
|
88
|
+
return await this._withDb(async (db) => {
|
|
89
|
+
const row = await this._rowByResource(db, identity);
|
|
90
|
+
return row ? row.serverSequence : null;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Records a successfully applied server sequence for a record, keeping only
|
|
95
|
+
* the highest value. Writes for the same record are serialized in-process so
|
|
96
|
+
* concurrent pull/realtime applies cannot move the watermark backwards.
|
|
97
|
+
* @param {{resourceType: string, resourceId: string, serverSequence: number}} args - Applied change identity and sequence.
|
|
98
|
+
* @returns {Promise<void>} Resolves when recorded.
|
|
99
|
+
*/
|
|
100
|
+
async recordAppliedSequence({ resourceId, resourceType, serverSequence }) {
|
|
101
|
+
await this.ensureReady();
|
|
102
|
+
const identity = { resourceId, resourceType };
|
|
103
|
+
const key = memoryKey(identity);
|
|
104
|
+
const previousWrite = this._writeQueues.get(key) || Promise.resolve();
|
|
105
|
+
const write = previousWrite
|
|
106
|
+
.then(async () => await this._recordSequential({ identity, key, serverSequence }))
|
|
107
|
+
.finally(() => {
|
|
108
|
+
if (this._writeQueues.get(key) === write)
|
|
109
|
+
this._writeQueues.delete(key);
|
|
110
|
+
});
|
|
111
|
+
this._writeQueues.set(key, write);
|
|
112
|
+
await write;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Applies one serialized watermark write.
|
|
116
|
+
* @param {{identity: {resourceType: string, resourceId: string}, key: string, serverSequence: number}} args - Write args.
|
|
117
|
+
* @returns {Promise<void>} Resolves when written.
|
|
118
|
+
*/
|
|
119
|
+
async _recordSequential({ identity, key, serverSequence }) {
|
|
120
|
+
const currentSequence = await this.lastAppliedSequence(identity);
|
|
121
|
+
if (currentSequence !== null && currentSequence >= serverSequence)
|
|
122
|
+
return;
|
|
123
|
+
if (this._usesMemoryStorage()) {
|
|
124
|
+
this._memorySequences.set(key, serverSequence);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
await this._withDb(async (db) => {
|
|
128
|
+
await db.upsert({
|
|
129
|
+
conflictColumns: ["resource_type", "resource_id"],
|
|
130
|
+
data: {
|
|
131
|
+
created_at: new Date(),
|
|
132
|
+
id: new UUID(4).format(),
|
|
133
|
+
resource_id: identity.resourceId,
|
|
134
|
+
resource_type: identity.resourceType,
|
|
135
|
+
server_sequence: serverSequence,
|
|
136
|
+
updated_at: new Date()
|
|
137
|
+
},
|
|
138
|
+
tableName: TABLE_NAME,
|
|
139
|
+
updateColumns: ["server_sequence", "updated_at"]
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Coordinates durable and transaction-local readiness on one connection.
|
|
145
|
+
* @param {import("../database/drivers/base.js").default} db - Database connection.
|
|
146
|
+
* @returns {Promise<void>} Resolves when this caller can use the table.
|
|
147
|
+
*/
|
|
148
|
+
async _ensureReadyWithDb(db) {
|
|
149
|
+
if (this._isReady)
|
|
150
|
+
return;
|
|
151
|
+
const transactionCompletion = db.insideTransaction() ? db.transactionCompletion() : null;
|
|
152
|
+
const transactionReady = this._transactionReadyPromises.get(db);
|
|
153
|
+
if (transactionCompletion && transactionReady?.completion === transactionCompletion) {
|
|
154
|
+
await transactionReady.promise;
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (this._readyPromise) {
|
|
158
|
+
const readyPromise = this._readyPromise;
|
|
159
|
+
await readyPromise;
|
|
160
|
+
if (this._readyPromise === readyPromise)
|
|
161
|
+
this._readyPromise = null;
|
|
162
|
+
if (this._isReady)
|
|
163
|
+
return;
|
|
164
|
+
await this.ensureReady();
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
if (transactionCompletion) {
|
|
168
|
+
const tableReadyPromise = this._ensureTable(db);
|
|
169
|
+
const transactionReadyPromise = tableReadyPromise.then(() => undefined);
|
|
170
|
+
const durableReadyPromise = tableReadyPromise.then(async (created) => {
|
|
171
|
+
if (!created) {
|
|
172
|
+
this._isReady = true;
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
await transactionCompletion;
|
|
176
|
+
});
|
|
177
|
+
this._transactionReadyPromises.set(db, { completion: transactionCompletion, promise: transactionReadyPromise });
|
|
178
|
+
this._readyPromise = durableReadyPromise;
|
|
179
|
+
await transactionReadyPromise;
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
this._readyPromise = this._ensureTable(db).then(() => {
|
|
183
|
+
this._isReady = true;
|
|
184
|
+
});
|
|
185
|
+
try {
|
|
186
|
+
await this._readyPromise;
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
if (!this._isReady)
|
|
190
|
+
this._readyPromise = null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Whether the store runs without a configured database.
|
|
195
|
+
* @returns {boolean} Whether memory storage is used.
|
|
196
|
+
*/
|
|
197
|
+
_usesMemoryStorage() {
|
|
198
|
+
try {
|
|
199
|
+
return !this.configuration.getDatabaseConfiguration()[this.databaseIdentifier];
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Runs a callback with a database connection.
|
|
207
|
+
* @template Result
|
|
208
|
+
* @param {(db: import("../database/drivers/base.js").default) => Promise<Result>} callback - Database callback.
|
|
209
|
+
* @returns {Promise<Result>} Callback result.
|
|
210
|
+
*/
|
|
211
|
+
async _withDb(callback) {
|
|
212
|
+
if (this.tenantHandle) {
|
|
213
|
+
return await this.tenantHandle.databaseOperation({ databaseIdentifier: this.databaseIdentifier, name: "Tenant sync applied-sequence store" }, async (operation) => {
|
|
214
|
+
return await callback(operation.connection());
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return await this.configuration.ensureConnections({ databaseIdentifiers: [this.databaseIdentifier], name: "Sync applied-sequence store" }, async (dbs) => {
|
|
218
|
+
const db = dbs[this.databaseIdentifier];
|
|
219
|
+
if (!db)
|
|
220
|
+
throw new Error(`No database connection available for identifier: ${this.databaseIdentifier}`);
|
|
221
|
+
return await callback(db);
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Ensures the applied-sequences table exists.
|
|
226
|
+
* @param {import("../database/drivers/base.js").default} db - Database connection.
|
|
227
|
+
* @returns {Promise<boolean>} Whether the table had to be created.
|
|
228
|
+
*/
|
|
229
|
+
async _ensureTable(db) {
|
|
230
|
+
if (await db.tableExists(TABLE_NAME))
|
|
231
|
+
return false;
|
|
232
|
+
const table = new TableData(TABLE_NAME, { ifNotExists: true });
|
|
233
|
+
table.string("id", { null: false, primaryKey: true });
|
|
234
|
+
table.string("resource_type", { null: false });
|
|
235
|
+
table.string("resource_id", { null: false });
|
|
236
|
+
table.bigint("server_sequence", { null: false });
|
|
237
|
+
table.datetime("created_at", { null: false });
|
|
238
|
+
table.datetime("updated_at", { null: false });
|
|
239
|
+
table.addIndex(new TableIndex(["resource_type", "resource_id"], { name: IDENTITY_INDEX_NAME, unique: true }));
|
|
240
|
+
await db.createTable(table);
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Resolves the stored row for one resource identity.
|
|
245
|
+
* @param {import("../database/drivers/base.js").default} db - Database connection.
|
|
246
|
+
* @param {{resourceType: string, resourceId: string}} identity - Resource identity.
|
|
247
|
+
* @returns {Promise<SyncAppliedSequenceRow | null>} Stored row, or null.
|
|
248
|
+
*/
|
|
249
|
+
async _rowByResource(db, identity) {
|
|
250
|
+
const rows = /** @type {Array<Record<string, ReturnType<typeof JSON.parse>>>} */ (await db
|
|
251
|
+
.newQuery()
|
|
252
|
+
.from(TABLE_NAME)
|
|
253
|
+
.where({ resource_id: identity.resourceId, resource_type: identity.resourceType })
|
|
254
|
+
.limit(1)
|
|
255
|
+
.results());
|
|
256
|
+
const row = rows[0];
|
|
257
|
+
if (!row)
|
|
258
|
+
return null;
|
|
259
|
+
return {
|
|
260
|
+
resourceId: String(row.resource_id),
|
|
261
|
+
resourceType: String(row.resource_type),
|
|
262
|
+
serverSequence: Number(row.server_sequence),
|
|
263
|
+
storeIdentity: this.storeIdentity
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1hcHBsaWVkLXNlcXVlbmNlLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvc3luYy1hcHBsaWVkLXNlcXVlbmNlLXN0b3JlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN2RCxPQUFPLFVBQVUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUM5RCxPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFFNUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLEdBQUcsa0NBQWtDLENBQUE7QUFDckQsTUFBTSxtQkFBbUIsR0FBRyxvREFBb0QsQ0FBQTtBQUVoRjs7OztHQUlHO0FBQ0gsU0FBUyxTQUFTLENBQUMsRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFDO0lBQzNDLE9BQU8sR0FBRyxZQUFZLElBQUksVUFBVSxFQUFFLENBQUE7QUFDeEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sd0JBQXdCO0lBQzNDOzs7Ozs7T0FNRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUsa0JBQWtCLEdBQUcsU0FBUyxFQUFFLFlBQVksRUFBQztRQUN2RSxJQUFJLFlBQVk7WUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFakUsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWTtZQUMvQixDQUFDLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO1lBQ25ELENBQUMsQ0FBQyxpQkFBaUIsa0JBQWtCLEVBQUUsQ0FBQTtRQUN6QyxrQ0FBa0M7UUFDbEMsSUFBSSxD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LEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7UUFDM0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTNHLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUUzQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLFFBQVE7UUFDL0IsTUFBTSxJQUFJLEdBQUcsbUVBQW1FLENBQUMsQ0FBQyxNQUFNLEVBQUU7YUFDdkYsUUFBUSxFQUFFO2FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUNoQixLQUFLLENBQUMsRUFBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBQyxDQUFDO2FBQy9FLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDUixPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBRWIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRW5CLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFckIsT0FBTztZQUNMLFVBQVUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztZQUNuQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7WUFDdkMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQzNDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNsQyxDQUFBO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL2RhdGFiYXNlL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuaW1wb3J0IFRhYmxlSW5kZXggZnJvbSBcIi4uL2RhdGFiYXNlL3RhYmxlLWRhdGEvdGFibGUtaW5kZXguanNcIlxuaW1wb3J0IFVVSUQgZnJvbSBcInB1cmUtdXVpZFwiXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0FwcGxpZWRTZXF1ZW5jZVJvd1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlc291cmNlSWQgLSBSZXNvdXJjZSBpZGVudGlmaWVyIHRoZSBjaGFuZ2UgYXBwbGllZCB0by5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXNvdXJjZVR5cGUgLSBSZXNvdXJjZS9tb2RlbCBuYW1lIHRoZSBjaGFuZ2UgYXBwbGllZCB0by5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZXJ2ZXJTZXF1ZW5jZSAtIEhpZ2hlc3QgYXBwbGllZCBzZXJ2ZXIgc2VxdWVuY2UgZm9yIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdG9yZUlkZW50aXR5IC0gUGh5c2ljYWwgc3RvcmUgaWRlbnRpdHkgb3duaW5nIHRoaXMgcm93LlxuICovXG5jb25zdCBUQUJMRV9OQU1FID0gXCJ2ZWxvY2lvdXNfc3luY19hcHBsaWVkX3NlcXVlbmNlc1wiXG5jb25zdCBJREVOVElUWV9JTkRFWF9OQU1FID0gXCJpbmRleF92ZWxvY2lvdXNfc3luY19hcHBsaWVkX3NlcXVlbmNlc19vbl9pZGVudGl0eVwiXG5cbi8qKlxuICogQnVpbGRzIHRoZSBzdGFibGUgaW4tbWVtb3J5IGtleSBmb3Igb25lIHJlc291cmNlIGlkZW50aXR5LlxuICogQHBhcmFtIHt7cmVzb3VyY2VUeXBlOiBzdHJpbmcsIHJlc291cmNlSWQ6IHN0cmluZ319IGFyZ3MgLSBSZXNvdXJjZSBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IE1lbW9yeSBrZXkuXG4gKi9cbmZ1bmN0aW9uIG1lbW9yeUtleSh7cmVzb3VyY2VJZCwgcmVzb3VyY2VUeXBlfSkge1xuICByZXR1cm4gYCR7cmVzb3VyY2VUeXBlfToke3Jlc291cmNlSWR9YFxufVxuXG4vKipcbiAqIEZyYW1ld29yay1vd25lZCBsb2NhbCBib29ra2VlcGluZyBvZiB0aGUgbmV3ZXN0IHNlcnZlciBjaGFuZ2Ugc2VxdWVuY2VcbiAqIGFscmVhZHkgYXBwbGllZCB0byBlYWNoIHJlY29yZC5cbiAqXG4gKiBUaGUgc2VydmVyIGNoYW5nZSBmZWVkIGlzIGF0LWxlYXN0LW9uY2U6IGEgcmVhbHRpbWUgcHVzaCBkb2VzIG5vdCBhZHZhbmNlIGFcbiAqIHB1bGwgY3Vyc29yLCBzbyB0aGUgbmV4dCBwdWxsIHJlLWRlbGl2ZXJzIHRoZSBzYW1lIGBzZXJ2ZXJTZXF1ZW5jZWAsIGFuZCBhXG4gKiByZXN1bWVkIHBhZ2UgY2FuIHJlcGVhdCBhIHJvdy4gQXBwbHlpbmcgc3VjaCBhIGR1cGxpY2F0ZSBhZnRlciBhIG5ld2VyIGxvY2FsXG4gKiBwcm92aXNpb25hbCB3cml0ZSB1c2VkIHRvIGxldCB0aGUgb2xkZXIgc2VydmVyIHBheWxvYWQgd2luLiBUcmFja2luZyB0aGVcbiAqIGhpZ2hlc3QgYXBwbGllZCBzZXF1ZW5jZSBwZXIgcmVjb3JkIG1ha2VzIHRoZSBhcHBsaWVyIGlkZW1wb3RlbnQ6IGEgY2hhbmdlIGF0XG4gKiBvciBiZWxvdyB0aGUgcmVjb3JkZWQgc2VxdWVuY2UgaXMgc2tpcHBlZCwgd2hpbGUgYW55IGhpZ2hlciBzZXF1ZW5jZSBzdGlsbFxuICogYXBwbGllcy5cbiAqXG4gKiBCYWNrZWQgYnkgYW4gYXV0by1jcmVhdGVkIGB2ZWxvY2lvdXNfc3luY19hcHBsaWVkX3NlcXVlbmNlc2AgdGFibGUgb24gdGhlXG4gKiBjb25maWd1cmVkIGRhdGFiYXNlLCB3aXRoIGEgcHJvY2Vzcy1sb2NhbCBtZW1vcnkgZmFsbGJhY2sgd2hlbiBubyBkYXRhYmFzZSBpc1xuICogY29uZmlndXJlZCAobWlycm9yaW5nIHRoZSBzY29wZSBzdG9yZSkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bmNBcHBsaWVkU2VxdWVuY2VTdG9yZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGFwcGxpZWQtc2VxdWVuY2Ugc3RvcmUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gb3duaW5nIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmRhdGFiYXNlSWRlbnRpZmllcl0gLSBEYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3RlbmFudHMvdGVuYW50LWhhbmRsZS5qc1wiKS5kZWZhdWx0fSBbYXJncy50ZW5hbnRIYW5kbGVdIC0gSW1tdXRhYmxlIHRlbmFudCBoYW5kbGUgb3duaW5nIHRoZSBwaHlzaWNhbCBzdG9yZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBkYXRhYmFzZUlkZW50aWZpZXIgPSBcImRlZmF1bHRcIiwgdGVuYW50SGFuZGxlfSkge1xuICAgIGlmICh0ZW5hbnRIYW5kbGUpIHRlbmFudEhhbmRsZS5hc3NlcnRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5kYXRhYmFzZUlkZW50aWZpZXIgPSBkYXRhYmFzZUlkZW50aWZpZXJcbiAgICB0aGlzLnRlbmFudEhhbmRsZSA9IHRlbmFudEhhbmRsZVxuICAgIHRoaXMuc3RvcmVJZGVudGl0eSA9IHRlbmFudEhhbmRsZVxuICAgICAgPyB0ZW5hbnRIYW5kbGUuZGF0YWJhc2VJZGVudGl0eShkYXRhYmFzZUlkZW50aWZpZXIpXG4gICAgICA6IGBjb25maWd1cmF0aW9uOiR7ZGF0YWJhc2VJZGVudGlmaWVyfWBcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIG51bWJlcj59ICovXG4gICAgdGhpcy5fbWVtb3J5U2VxdWVuY2VzID0gbmV3IE1hcCgpXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+Pn0gKi9cbiAgICB0aGlzLl93cml0ZVF1ZXVlcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZVxuICAgIC8qKiBAdHlwZSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9ICovXG4gICAgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICAgIC8qKiBAdHlwZSB7V2Vha01hcDxpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCwge2NvbXBsZXRpb246IFByb21pc2U8dm9pZD4sIHByb21pc2U6IFByb21pc2U8dm9pZD59Pn0gKi9cbiAgICB0aGlzLl90cmFuc2FjdGlvblJlYWR5UHJvbWlzZXMgPSBuZXcgV2Vha01hcCgpXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgYmFja2luZyB0YWJsZSBleGlzdHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBSZXNvbHZlcyB3aGVuIHJlYWR5LlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlUmVhZHkoKSB7XG4gICAgaWYgKHRoaXMuX2lzUmVhZHkpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHtcbiAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiBhd2FpdCB0aGlzLl9lbnN1cmVSZWFkeVdpdGhEYihkYikpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaGlnaGVzdCBzZXJ2ZXIgc2VxdWVuY2UgYWxyZWFkeSBhcHBsaWVkIHRvIGEgcmVjb3JkLlxuICAgKiBAcGFyYW0ge3tyZXNvdXJjZVR5cGU6IHN0cmluZywgcmVzb3VyY2VJZDogc3RyaW5nfX0gaWRlbnRpdHkgLSBSZXNvdXJjZSBpZGVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyIHwgbnVsbD59IEFwcGxpZWQgc2VxdWVuY2UsIG9yIG51bGwgd2hlbiBub25lIGlzIHJlY29yZGVkLlxuICAgKi9cbiAgYXN5bmMgbGFzdEFwcGxpZWRTZXF1ZW5jZShpZGVudGl0eSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tZW1vcnlTZXF1ZW5jZXMuZ2V0KG1lbW9yeUtleShpZGVudGl0eSkpID8/IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fcm93QnlSZXNvdXJjZShkYiwgaWRlbnRpdHkpXG5cbiAgICAgIHJldHVybiByb3cgPyByb3cuc2VydmVyU2VxdWVuY2UgOiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgc3VjY2Vzc2Z1bGx5IGFwcGxpZWQgc2VydmVyIHNlcXVlbmNlIGZvciBhIHJlY29yZCwga2VlcGluZyBvbmx5XG4gICAqIHRoZSBoaWdoZXN0IHZhbHVlLiBXcml0ZXMgZm9yIHRoZSBzYW1lIHJlY29yZCBhcmUgc2VyaWFsaXplZCBpbi1wcm9jZXNzIHNvXG4gICAqIGNvbmN1cnJlbnQgcHVsbC9yZWFsdGltZSBhcHBsaWVzIGNhbm5vdCBtb3ZlIHRoZSB3YXRlcm1hcmsgYmFja3dhcmRzLlxuICAgKiBAcGFyYW0ge3tyZXNvdXJjZVR5cGU6IHN0cmluZywgcmVzb3VyY2VJZDogc3RyaW5nLCBzZXJ2ZXJTZXF1ZW5jZTogbnVtYmVyfX0gYXJncyAtIEFwcGxpZWQgY2hhbmdlIGlkZW50aXR5IGFuZCBzZXF1ZW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IFJlc29sdmVzIHdoZW4gcmVjb3JkZWQuXG4gICAqL1xuICBhc3luYyByZWNvcmRBcHBsaWVkU2VxdWVuY2Uoe3Jlc291cmNlSWQsIHJlc291cmNlVHlwZSwgc2VydmVyU2VxdWVuY2V9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICBjb25zdCBpZGVudGl0eSA9IHtyZXNvdXJjZUlkLCByZXNvdXJjZVR5cGV9XG4gICAgY29uc3Qga2V5ID0gbWVtb3J5S2V5KGlkZW50aXR5KVxuICAgIGNvbnN0IHByZXZpb3VzV3JpdGUgPSB0aGlzLl93cml0ZVF1ZXVlcy5nZXQoa2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKVxuICAgIGNvbnN0IHdyaXRlID0gcHJldmlvdXNXcml0ZVxuICAgICAgLnRoZW4oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fcmVjb3JkU2VxdWVudGlhbCh7aWRlbnRpdHksIGtleSwgc2VydmVyU2VxdWVuY2V9KSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3dyaXRlUXVldWVzLmdldChrZXkpID09PSB3cml0ZSkgdGhpcy5fd3JpdGVRdWV1ZXMuZGVsZXRlKGtleSlcbiAgICAgIH0pXG5cbiAgICB0aGlzLl93cml0ZVF1ZXVlcy5zZXQoa2V5LCB3cml0ZSlcbiAgICBhd2FpdCB3cml0ZVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgb25lIHNlcmlhbGl6ZWQgd2F0ZXJtYXJrIHdyaXRlLlxuICAgKiBAcGFyYW0ge3tpZGVudGl0eToge3Jlc291cmNlVHlwZTogc3RyaW5nLCByZXNvdXJjZUlkOiBzdHJpbmd9LCBrZXk6IHN0cmluZywgc2VydmVyU2VxdWVuY2U6IG51bWJlcn19IGFyZ3MgLSBXcml0ZSBhcmdzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gUmVzb2x2ZXMgd2hlbiB3cml0dGVuLlxuICAgKi9cbiAgYXN5bmMgX3JlY29yZFNlcXVlbnRpYWwoe2lkZW50aXR5LCBrZXksIHNlcnZlclNlcXVlbmNlfSkge1xuICAgIGNvbnN0IGN1cnJlbnRTZXF1ZW5jZSA9IGF3YWl0IHRoaXMubGFzdEFwcGxpZWRTZXF1ZW5jZShpZGVudGl0eSlcblxuICAgIGlmIChjdXJyZW50U2VxdWVuY2UgIT09IG51bGwgJiYgY3VycmVudFNlcXVlbmNlID49IHNlcnZlclNlcXVlbmNlKSByZXR1cm5cblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICB0aGlzLl9tZW1vcnlTZXF1ZW5jZXMuc2V0KGtleSwgc2VydmVyU2VxdWVuY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBhd2FpdCBkYi51cHNlcnQoe1xuICAgICAgICBjb25mbGljdENvbHVtbnM6IFtcInJlc291cmNlX3R5cGVcIiwgXCJyZXNvdXJjZV9pZFwiXSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgaWQ6IG5ldyBVVUlEKDQpLmZvcm1hdCgpLFxuICAgICAgICAgIHJlc291cmNlX2lkOiBpZGVudGl0eS5yZXNvdXJjZUlkLFxuICAgICAgICAgIHJlc291cmNlX3R5cGU6IGlkZW50aXR5LnJlc291cmNlVHlwZSxcbiAgICAgICAgICBzZXJ2ZXJfc2VxdWVuY2U6IHNlcnZlclNlcXVlbmNlLFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgdGFibGVOYW1lOiBUQUJMRV9OQU1FLFxuICAgICAgICB1cGRhdGVDb2x1bW5zOiBbXCJzZXJ2ZXJfc2VxdWVuY2VcIiwgXCJ1cGRhdGVkX2F0XCJdXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ29vcmRpbmF0ZXMgZHVyYWJsZSBhbmQgdHJhbnNhY3Rpb24tbG9jYWwgcmVhZGluZXNzIG9uIG9uZSBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBSZXNvbHZlcyB3aGVuIHRoaXMgY2FsbGVyIGNhbiB1c2UgdGhlIHRhYmxlLlxuICAgKi9cbiAgYXN5bmMgX2Vuc3VyZVJlYWR5V2l0aERiKGRiKSB7XG4gICAgaWYgKHRoaXMuX2lzUmVhZHkpIHJldHVyblxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25Db21wbGV0aW9uID0gZGIuaW5zaWRlVHJhbnNhY3Rpb24oKSA/IGRiLnRyYW5zYWN0aW9uQ29tcGxldGlvbigpIDogbnVsbFxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVhZHkgPSB0aGlzLl90cmFuc2FjdGlvblJlYWR5UHJvbWlzZXMuZ2V0KGRiKVxuXG4gICAgaWYgKHRyYW5zYWN0aW9uQ29tcGxldGlvbiAmJiB0cmFuc2FjdGlvblJlYWR5Py5jb21wbGV0aW9uID09PSB0cmFuc2FjdGlvbkNvbXBsZXRpb24pIHtcbiAgICAgIGF3YWl0IHRyYW5zYWN0aW9uUmVhZHkucHJvbWlzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3JlYWR5UHJvbWlzZSkge1xuICAgICAgY29uc3QgcmVhZHlQcm9taXNlID0gdGhpcy5fcmVhZHlQcm9taXNlXG5cbiAgICAgIGF3YWl0IHJlYWR5UHJvbWlzZVxuICAgICAgaWYgKHRoaXMuX3JlYWR5UHJvbWlzZSA9PT0gcmVhZHlQcm9taXNlKSB0aGlzLl9yZWFkeVByb21pc2UgPSBudWxsXG4gICAgICBpZiAodGhpcy5faXNSZWFkeSkgcmV0dXJuXG5cbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRyYW5zYWN0aW9uQ29tcGxldGlvbikge1xuICAgICAgY29uc3QgdGFibGVSZWFkeVByb21pc2UgPSB0aGlzLl9lbnN1cmVUYWJsZShkYilcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVhZHlQcm9taXNlID0gdGFibGVSZWFkeVByb21pc2UudGhlbigoKSA9PiB1bmRlZmluZWQpXG5cbiAgICAgIGNvbnN0IGR1cmFibGVSZWFkeVByb21pc2UgPSB0YWJsZVJlYWR5UHJvbWlzZS50aGVuKGFzeW5jIChjcmVhdGVkKSA9PiB7XG4gICAgICAgIGlmICghY3JlYXRlZCkge1xuICAgICAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0cmFuc2FjdGlvbkNvbXBsZXRpb25cbiAgICAgIH0pXG5cbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uUmVhZHlQcm9taXNlcy5zZXQoZGIsIHtjb21wbGV0aW9uOiB0cmFuc2FjdGlvbkNvbXBsZXRpb24sIHByb21pc2U6IHRyYW5zYWN0aW9uUmVhZHlQcm9taXNlfSlcbiAgICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IGR1cmFibGVSZWFkeVByb21pc2VcbiAgICAgIGF3YWl0IHRyYW5zYWN0aW9uUmVhZHlQcm9taXNlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkeVByb21pc2UgPSB0aGlzLl9lbnN1cmVUYWJsZShkYikudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZHlQcm9taXNlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghdGhpcy5faXNSZWFkeSkgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzdG9yZSBydW5zIHdpdGhvdXQgYSBjb25maWd1cmVkIGRhdGFiYXNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBtZW1vcnkgc3RvcmFnZSBpcyB1c2VkLlxuICAgKi9cbiAgX3VzZXNNZW1vcnlTdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gIXRoaXMuY29uZmlndXJhdGlvbi5nZXREYXRhYmFzZUNvbmZpZ3VyYXRpb24oKVt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBjYWxsYmFjayB3aXRoIGEgZGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFJlc3VsdFxuICAgKiBAcGFyYW0geyhkYjogaW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQpID0+IFByb21pc2U8UmVzdWx0Pn0gY2FsbGJhY2sgLSBEYXRhYmFzZSBjYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVzdWx0Pn0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgX3dpdGhEYihjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLnRlbmFudEhhbmRsZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudGVuYW50SGFuZGxlLmRhdGFiYXNlT3BlcmF0aW9uKHtkYXRhYmFzZUlkZW50aWZpZXI6IHRoaXMuZGF0YWJhc2VJZGVudGlmaWVyLCBuYW1lOiBcIlRlbmFudCBzeW5jIGFwcGxpZWQtc2VxdWVuY2Ugc3RvcmVcIn0sIGFzeW5jIChvcGVyYXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKG9wZXJhdGlvbi5jb25uZWN0aW9uKCkpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uZW5zdXJlQ29ubmVjdGlvbnMoe2RhdGFiYXNlSWRlbnRpZmllcnM6IFt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl0sIG5hbWU6IFwiU3luYyBhcHBsaWVkLXNlcXVlbmNlIHN0b3JlXCJ9LCBhc3luYyAoZGJzKSA9PiB7XG4gICAgICBjb25zdCBkYiA9IGRic1t0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cblxuICAgICAgaWYgKCFkYikgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhYmFzZSBjb25uZWN0aW9uIGF2YWlsYWJsZSBmb3IgaWRlbnRpZmllcjogJHt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcn1gKVxuXG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soZGIpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBhcHBsaWVkLXNlcXVlbmNlcyB0YWJsZSBleGlzdHMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFdoZXRoZXIgdGhlIHRhYmxlIGhhZCB0byBiZSBjcmVhdGVkLlxuICAgKi9cbiAgYXN5bmMgX2Vuc3VyZVRhYmxlKGRiKSB7XG4gICAgaWYgKGF3YWl0IGRiLnRhYmxlRXhpc3RzKFRBQkxFX05BTUUpKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlRGF0YShUQUJMRV9OQU1FLCB7aWZOb3RFeGlzdHM6IHRydWV9KVxuXG4gICAgdGFibGUuc3RyaW5nKFwiaWRcIiwge251bGw6IGZhbHNlLCBwcmltYXJ5S2V5OiB0cnVlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJyZXNvdXJjZV90eXBlXCIsIHtudWxsOiBmYWxzZX0pXG4gICAgdGFibGUuc3RyaW5nKFwicmVzb3VyY2VfaWRcIiwge251bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5iaWdpbnQoXCJzZXJ2ZXJfc2VxdWVuY2VcIiwge251bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5kYXRldGltZShcImNyZWF0ZWRfYXRcIiwge251bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5kYXRldGltZShcInVwZGF0ZWRfYXRcIiwge251bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5hZGRJbmRleChuZXcgVGFibGVJbmRleChbXCJyZXNvdXJjZV90eXBlXCIsIFwicmVzb3VyY2VfaWRcIl0sIHtuYW1lOiBJREVOVElUWV9JTkRFWF9OQU1FLCB1bmlxdWU6IHRydWV9KSlcblxuICAgIGF3YWl0IGRiLmNyZWF0ZVRhYmxlKHRhYmxlKVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgc3RvcmVkIHJvdyBmb3Igb25lIHJlc291cmNlIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7e3Jlc291cmNlVHlwZTogc3RyaW5nLCByZXNvdXJjZUlkOiBzdHJpbmd9fSBpZGVudGl0eSAtIFJlc291cmNlIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTeW5jQXBwbGllZFNlcXVlbmNlUm93IHwgbnVsbD59IFN0b3JlZCByb3csIG9yIG51bGwuXG4gICAqL1xuICBhc3luYyBfcm93QnlSZXNvdXJjZShkYiwgaWRlbnRpdHkpIHtcbiAgICBjb25zdCByb3dzID0gLyoqIEB0eXBlIHtBcnJheTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSAqLyAoYXdhaXQgZGJcbiAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAuZnJvbShUQUJMRV9OQU1FKVxuICAgICAgLndoZXJlKHtyZXNvdXJjZV9pZDogaWRlbnRpdHkucmVzb3VyY2VJZCwgcmVzb3VyY2VfdHlwZTogaWRlbnRpdHkucmVzb3VyY2VUeXBlfSlcbiAgICAgIC5saW1pdCgxKVxuICAgICAgLnJlc3VsdHMoKSlcblxuICAgIGNvbnN0IHJvdyA9IHJvd3NbMF1cblxuICAgIGlmICghcm93KSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc291cmNlSWQ6IFN0cmluZyhyb3cucmVzb3VyY2VfaWQpLFxuICAgICAgcmVzb3VyY2VUeXBlOiBTdHJpbmcocm93LnJlc291cmNlX3R5cGUpLFxuICAgICAgc2VydmVyU2VxdWVuY2U6IE51bWJlcihyb3cuc2VydmVyX3NlcXVlbmNlKSxcbiAgICAgIHN0b3JlSWRlbnRpdHk6IHRoaXMuc3RvcmVJZGVudGl0eVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -40,6 +40,8 @@ export default class SyncClient {
|
|
|
40
40
|
_userScopeState: "subscribed" | "subscribing" | "unsubscribed";
|
|
41
41
|
/** @type {import("./sync-scope-store.js").default | null} */
|
|
42
42
|
_scopeStore: import("./sync-scope-store.js").default | null;
|
|
43
|
+
/** @type {import("./sync-applied-sequence-store.js").default | null} */
|
|
44
|
+
_appliedSequenceStore: import("./sync-applied-sequence-store.js").default | null;
|
|
43
45
|
/** @type {Promise<void> | null} */
|
|
44
46
|
_scheduledReplay: Promise<void> | null;
|
|
45
47
|
/** @type {((reason: "mutation" | "realtime") => Promise<void>) | null} */
|
|
@@ -337,6 +339,13 @@ export default class SyncClient {
|
|
|
337
339
|
* applies through the declared resource configs, registers each written record
|
|
338
340
|
* for echo suppression (tracked resources do not re-queue applied changes), and
|
|
339
341
|
* fails loudly instead of silently skipping unconfigured resources.
|
|
342
|
+
*
|
|
343
|
+
* Applies are idempotent per record: the feed is at-least-once (a realtime push
|
|
344
|
+
* does not advance the pull cursor, so the same `serverSequence` arrives again
|
|
345
|
+
* on the next pull). A change whose sequence is not greater than the newest one
|
|
346
|
+
* already applied to that record is skipped, so a duplicate cannot overwrite
|
|
347
|
+
* newer local state. Sources without a sequence (e.g. legacy broadcasts) keep
|
|
348
|
+
* applying unchanged.
|
|
340
349
|
* @param {{source?: string}} [args] - Error context describing where the change came from.
|
|
341
350
|
* @returns {(sync: import("./sync-api-client-types.js").SyncChangeEnvelope) => Promise<import("./sync-api-client-types.js").SyncChangeApplyResult>} Loud remote-change applier.
|
|
342
351
|
*/
|
|
@@ -678,6 +687,12 @@ export default class SyncClient {
|
|
|
678
687
|
* @returns {import("./sync-scope-store.js").default} Scope store.
|
|
679
688
|
*/
|
|
680
689
|
scopeStore(): import("./sync-scope-store.js").default;
|
|
690
|
+
/**
|
|
691
|
+
* Returns the per-record applied-sequence store that keeps remote applies
|
|
692
|
+
* idempotent across pull/realtime duplication.
|
|
693
|
+
* @returns {import("./sync-applied-sequence-store.js").default} Applied-sequence store.
|
|
694
|
+
*/
|
|
695
|
+
appliedSequenceStore(): import("./sync-applied-sequence-store.js").default;
|
|
681
696
|
/**
|
|
682
697
|
* Resolves the declared resource config for a local record.
|
|
683
698
|
* @param {ReturnType<typeof JSON.parse>} resource - Local model record.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client.js"],"names":[],"mappings":"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"}
|