velocious 1.0.717 → 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.
@@ -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":"AAEA,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAE/C,OAAO,MAAM,MAAM,cAAc,CAAA;AAQjC,OAAO,kBAAkB,MAAM,2BAA2B,CAAA;AAC1D,OAAO,kBAAkB,MAAM,2BAA2B,CAAA;AAqC1D,qFAAqF;AACrF,qBAAa,6BAA8B,SAAQ,KAAK;IACtD;;;OAGG;IACH,YAAY,OAAO,EAFR,MAEQ,EAGlB;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAyE3B,gEAAgE;IAC3D,MAAM,EADA,OAAO,wBAAwB,EAAE,gBAAgB;IAqBvD,aAAa;IACb,iBAAiB;IACjB,uBAAuB;IAG5B,wCAAwC;IACnC,eAAe,EADT,kBAAkB,GAAG,IAAI;IAEpC,wCAAwC;IACnC,eAAe,EADT,kBAAkB,GAAG,IAAI;IAEpC,sMAAsM;IACjM,eAAe,EADT,OAAO,wBAAwB,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS;IAEzF,mCAAmC;IAC9B,0BAA0B,EADpB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAE/B,4DAA4D;IACvD,eAAe,EADT,YAAY,GAAG,aAAa,GAAG,cAAc;IAExD,6DAA6D;IACxD,WAAW,EADL,OAAO,uBAAuB,EAAE,OAAO,GAAG,IAAI;IAEzD,mCAAmC;IAC9B,gBAAgB,EADV,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAE/B,0EAA0E;IACrE,mBAAmB,EADb,CAAC,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;IAEtE,6FAA6F;IACxF,oBAAoB,EADd,MAAM,CAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,kBAAkB,CAAC,GAAG,IAAI;IAEzF,6OAA6O;IACxO,iBAAiB,EADX,KAAK,CAAC;QAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAAC,YAAY,EAAE,aAAa,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,CAAC;QAAC,UAAU,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAA;KAAC,CAAC;IAEzO,8BAA8B;IACzB,mBAAmB,EADb,OAAO,CAAC,MAAM,CAAC;IAE1B,kCAAkC;IAC7B,kBAAkB,EADZ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAE9B,6DAA6D;IACxD,qBAAqB,EADf,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;IAEpD,qBAAqB;IAC1B,4GAA4G;IACvG,OAAO,EADD,MAAM,GAAG;QAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,GAAG,IAAI;IAExG,oCAAoC;IAC/B,oBAAoB,EADd,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3B,yBAAyB;IACzB,oBAAoB;IACpB,yBAAyB;IAC9B,4BAA4B;IACvB,2BAA2B,EADrB,OAAO,CAAC,IAAI,CAAC;IAEnB,mBAAmB;IACnB,QAAQ;IAvIf;;;;;;;;;;OAUG;IACH,YAAY,OAAO,AAFhB,CACF,EADU,OAAO,wBAAwB,EAAE,iBAEpB,EA6HvB;IAED;;;;;;;OAOG;IACG,KAAK,IAFE,OAAO,CAAC,IAAI,CAAC,CAyCzB;IAED;;;;;;OAMG;IACH,IAAI,CAAC,OAAO,AAHT,CACA,EADQ,OAAO,wBAAwB,EAAE,qBAG3B,GAFJ,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;;;;OAOG;IACG,WAAW,CAAC,MAAM,EAJb,OAAO,wBAAwB,EAAE,mBAAmB,EAIvC,EAAE,OAAO,AAH9B,CACA,EADQ;QAAC,OAAO,CAAC,EAAE,OAAO,wBAAwB,EAAE,sBAAsB,CAAA;KAGvC,GAFzB,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;;;;;OAQG;IACG,eAAe,CAAC,OAAO,EAHlB,OAAO,wBAAwB,EAAE,gCAGf,GAFhB,OAAO,CAAC,IAAI,CAAC,CAmBzB;IAED;;;;;;OAMG;IACG,iBAAiB,CAJV,MAAM,EAIK,QAAQ,EAHrB,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAGlB,GAFnB,OAAO,CAAC,MAAM,CAAC,CAkB3B;IAED;;;;;;;;OAQG;IACG,yBAAyB,CALlB,MAAM,EAKa,mBAAmB,EAJxC,MAIwC,EAAE,QAAQ,EAHlD,MAAM,OAAO,CAAC,MAAM,CAG8B,GAFhD,OAAO,CAAC,MAAM,CAAC,CAU3B;IAED;;;;OAIG;IACH,kCAAkC,CAAC,mBAAmB,EAH3C,MAG2C,GAFzC,IAAI,CAMhB;IAED;;;;;;OAMG;IACH,uBAAuB,CAAC,QAAQ,EAHrB,MAAM,OAAO,CAAC,IAAI,CAGG,GAFnB,OAAO,CAAC,IAAI,CAAC,CA2CzB;IAED;;;;OAIG;IACG,wBAAwB,CAAC,OAAO,EAH3B,OAAO,wBAAwB,EAAE,qBAGN,GAFzB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAHX,OAGW,GAFT,OAAO,CAInB;IAED;;;;OAIG;IACH,wBAAwB,CAAC,MAAM,EAHpB,WAGoB,GAFlB,IAAI,CAMhB;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAC,cAAc,EAAE,YAAY,EAAC,EAHrC;QAAC,cAAc,EAAE,OAAO,wBAAwB,EAAE,wBAAwB,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAG3D,GAFnC,KAAK,CAAC,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,CAoBlD;IAED;;;;;;;;;;;;OAYG;IACH,uBAAuB,CAAC,EAAC,SAAS,EAAE,cAAc,EAAC,EAHxC;QAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,cAAc,EAAE,OAAO,wBAAwB,EAAE,wBAAwB,CAAA;KAG9E,GAFtC,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAmDpE;IAED;;;;;;;;OAQG;IACG,sBAAsB,CAAC,KAAK,EAHvB,KAGuB,GAFrB,OAAO,CAAC,IAAI,CAAC,CAUzB;IAED;;;OAGG;IACH,MAAM,IAFO,MAAM,GAAG;QAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,CAMlG;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAHT,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGnB,GAFP,OAAO,CAInB;IAED;;;;;;;OAOG;IACH,oBAAoB,CAAC,MAAM,EAHhB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGZ,GAFd,OAAO,CAInB;IAED;;;;;;;;;;;;OAYG;IACG,eAAe,CAJR,CAAC,EAIQ,QAAQ,EAHnB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAGA,GAFjB,OAAO,CAAC,CAAC,CAAC,CAUtB;IAED;;;;;;OAMG;IACH,eAAe,CAAC,MAAM,EAHX,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGjB,GAFT,MAAM,IAAI,CAMtB;IAED;;;OAGG;IACH,UAAU,IAFG,IAAI,CAIhB;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,OAAO,EAHd,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,KAAK,OAAO,CAAC,IAAI,CAGnC,GAFZ,MAAM,IAAI,CAWtB;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,MAAM,EAHlB,UAAU,GAAG,UAGK,GAFhB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAIhC;IAED;;;OAGG;IACH,MAAM,CAAC,OAAO,IAFD,UAAU,CAItB;IAED;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,aAAa,AAJnC,CACA,EADQ,aAIqD,EAAE,OAAO,AAHtE,CACA,EADQ,IAAI,CAAC,OAAO,wBAAwB,EAAE,iBAAiB,EAAE,eAAe,CAGL,GAFjE,UAAU,CAItB;IAED;;;;;;;OAOG;IACG,IAAI,CAAC,KAAK,EANL,OAAO,wCAAwC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAMjF,EAAE,EAAC,UAAU,EAAE,eAAe,EAAC,AAL5C,CAGA,EAFA;QAA4F,UAAU,AAAtG,CACA,EADQ,CAAC,QAAQ,EAAE,OAAO,4BAA4B,EAAE,gBAAgB,KAAK,IAAI,CACjF;QAA0B,eAAe,AAAzC,CACA,EADQ,OAAO,CACf;KAEiD,GAFvC,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,wBAAwB,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,iBAAiB,GAAG,IAAI,CAAA;KAAC,CAAC,CAgBzJ;IAED;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAHP,OAAO,wCAAwC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAG/E,GAFL,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;;;;OAMG;IACG,IAAI,CAAC,EAAC,UAAU,EAAE,eAAe,EAAC,AALrC,CAGA,EAFA;QAA4F,UAAU,AAAtG,CACA,EADQ,CAAC,QAAQ,EAAE,OAAO,4BAA4B,EAAE,gBAAgB,KAAK,IAAI,CACjF;QAA0B,eAAe,AAAzC,CACA,EADQ,OAAO,CACf;KAE0C,GAFhC,OAAO,CAAC,OAAO,4BAA4B,EAAE,iBAAiB,GAAG,IAAI,CAAC,CAIlF;IAED;;;;;;;OAOG;IACG,KAAK,CAAC,EAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAC,EAL9C;QAAyF,UAAU,AAAnG,CACA,EADQ,CAAC,QAAQ,EAAE,OAAO,4BAA4B,EAAE,gBAAgB,KAAK,IAAI,CACjF;QAA0B,MAAM,EAAxB,WAAW,CACnB;QAAuB,eAAe,AAAtC,CACA,EADQ,OAAO,CACf;KAE8C,GAFpC,OAAO,CAAC,OAAO,4BAA4B,EAAE,iBAAiB,GAAG,IAAI,CAAC,CA4ElF;IAED;;;;;;;OAOG;IACH,eAAe,CAAC,EAAC,MAAwB,EAAC,AAHvC,CACA,EADQ;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAGoB,GAFlC,CAAC,IAAI,EAAE,OAAO,4BAA4B,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,4BAA4B,EAAE,qBAAqB,CAAC,CAiClJ;IAED;;;;;;;;;;OAUG;IACH,cAAc,IAFD,OAAO,wBAAwB,EAAE,0BAA0B,GAAG,IAAI,CAgB9E;IAED;;;;;OAKG;IACG,iBAAiB,CAAC,OAAO,AAH5B,CACA,EADQ,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGR,GAFlB,OAAO,CAAC,IAAI,CAAC,CAQzB;IAED;;;;;;;;;;OAUG;IACG,kBAAkB,IAFX,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;;OAKG;IACG,iBAAiB,IAFV,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACG,kBAAkB,CAAC,MAAM,EAHpB,WAGoB,GAFlB,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;;;OAKG;IACG,mBAAmB,CAAC,MAAM,EAHrB,WAGqB,GAFnB,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;;OAMG;IACG,oBAAoB,IAFb,OAAO,CAAC,IAAI,CAAC,CASzB;IAED;;;;;;;;OAQG;IACG,SAAS,IAFF,OAAO,CAAC,OAAO,wBAAwB,EAAE,mBAAmB,CAAC,CAIzE;IAED;;;;;;;;;OASG;IACH,sBAAsB,IAFT,MAAM,EAAE,CAIpB;IAED;;;;;;;;;OASG;IACG,cAAc,IAFP,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;OAGG;IACG,mBAAmB,IAFZ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,cAAc,IAFD,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAIpD;IAED;;;;OAIG;IACG,sBAAsB,IAFf,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,cAAc,IAFD,kBAAkB,CAM9B;IAED;;;;;OAKG;IACG,KAAK,CAAC,EAAC,WAAW,EAAE,IAAI,EAAE,SAAoB,EAAE,QAAQ,EAAE,QAAQ,EAAC,EAH9D;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAGtI,GAF5D,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,yBAAyB,EAAE,sBAAsB,CAAC,CA+C7G;IAED;;;;OAIG;IACG,aAAa,IAFN,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAHhB,WAGgB,GAFd,OAAO,CAAC,IAAI,CAAC,CA6CzB;IAED;;;;;;;OAOG;IACG,yBAAyB,CAAC,EAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAC,EAHnD;QAAC,MAAM,EAAE,OAAO,yBAAyB,EAAE,sBAAsB,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,cAAc,CAAA;KAGjG,GAFjD,OAAO,CAAC,IAAI,CAAC,CAyBzB;IAED;;;;OAIG;IACG,gBAAgB,IAFT,OAAO,CAAC,OAAO,6BAA6B,EAAE,oBAAoB,CAAC,CAgC/E;IAED;;;;;OAKG;IACG,eAAe,CAAC,EAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAC,EAH/C;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,aAAa,GAAG,aAAa,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAGnC,GAF7C,OAAO,CAAC,OAAO,yBAAyB,EAAE,sBAAsB,CAAC,CAe7E;IAED;;;;;OAKG;IACH,cAAc,IAFD,kBAAkB,CAiB9B;IAED;;;;;OAKG;IACH,mBAAmB,IAFN,KAAK,CAAC,OAAO,yBAAyB,EAAE,OAAO,CAAC,CAoB5D;IAED;;;;;;OAMG;IACG,mBAAmB,IAFZ,OAAO,CAAC,OAAO,2BAA2B,EAAE,yBAAyB,CAAC,CAYlF;IAED;;;;;OAKG;IACG,kBAAkB,IAFX,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;;OAKG;IACG,mBAAmB,IAFZ,OAAO,CAAC,OAAO,2BAA2B,EAAE,yBAAyB,CAAC,CAYlF;IAED;;;;;;;;;;;OAWG;IACG,oBAAoB,CAAC,OAAO,AAJ/B,CAEA,EADA;QAAyB,SAAS,AAAlC,CACA,EADQ,MAAM,CACd;KAEoC,GAF1B,OAAO,CAAC,OAAO,2BAA2B,EAAE,uBAAuB,CAAC,CAIhF;IAED;;;;;;OAMG;IACG,qBAAqB,CAAC,OAAO,AALhC,CAGA,EAFA;QAAyB,SAAS,AAAlC,CACA,EADQ,MAAM,CACd;QAA8B,MAAM,AAApC,CACA,EADQ,WAAW,CACnB;KAEqC,GAF3B,OAAO,CAAC,OAAO,2BAA2B,EAAE,uBAAuB,CAAC,CAmBhF;IAED;;;;;OAKG;IACG,gCAAgC,CAAC,KAAK,EAHjC;QAAC,QAAQ,EAAE,OAAO,sBAAsB,EAAE,YAAY,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAGzG,GAF/B,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;;;OAOG;IACG,gBAAgB,CAAC,OAAO,AAL3B,CAGA,EAFA;QAA0E,QAAQ,AAAlF,CACA,EADQ,OAAO,yBAAyB,EAAE,mBAAmB,EAAE,CAC/D;QAA6B,GAAG,AAAhC,CACA,EADQ,MAAM,IAAI,CAClB;KAEgC,GAFtB,OAAO,CAAC,OAAO,2BAA2B,EAAE,kBAAkB,CAAC,CAQ3E;IAED;;;;;;;;OAQG;IACG,gBAAgB,CAAC,EAAC,MAAM,EAAE,WAAW,EAAC,EAJzC;QAAqE,MAAM,EAAnE,OAAO,2BAA2B,EAAE,kBAAkB,CAC9D;QAAyD,WAAW,AAApE,CACA,EADQ,OAAO,yBAAyB,EAAE,OAAO,CACjD;KAEyC,GAF/B,OAAO,CAAC,OAAO,2BAA2B,EAAE,8BAA8B,CAAC,CAQvF;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,EAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAC,EAH1C;QAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAG1C,GAFxC,IAAI,CAOhB;IAED;;;;OAIG;IACH,cAAc,CAAC,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,EAHvC;QAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,cAAc,EAAE,OAAO,wBAAwB,EAAE,wBAAwB,CAAA;KAGtH,GAFrC,MAAM,GAAG,MAAM,GAAG,IAAI,CAelC;IAED;;;;;OAKG;IACH,yBAAyB,CAAC,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,EAHlD;QAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,cAAc,EAAE,OAAO,wBAAwB,EAAE,wBAAwB,CAAA;KAG3G,GAFhD,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBlC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,EAH/C;QAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,cAAc,EAAE,OAAO,wBAAwB,EAAE,wBAAwB,CAAA;KAG9G,GAF7C,MAAM,GAAG,MAAM,GAAG,IAAI,CAYlC;IAED;;;;OAIG;IACH,cAAc,IAFD,IAAI,CAmBhB;IAED;;;OAGG;IACG,sBAAsB,IAFf,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAHN,KAGM,GAFJ,IAAI,CAShB;IAED;;;OAGG;IACG,QAAQ,IAFD,OAAO,CAAC,OAAO,CAAC,CAM5B;IAED;;;OAGG;IACH,UAAU,IAFG,OAAO,uBAAuB,EAAE,OAAO,CAgBnD;IAED;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAHf,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGb,GAFb,OAAO,wBAAwB,EAAE,wBAAwB,CAerE;IAED;;;;;;OAMG;IACH,eAAe,CAAC,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,EAHxC;QAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,cAAc,EAAE,OAAO,wBAAwB,EAAE,wBAAwB,CAAA;KAGrH,GAFtC,MAAM,CAQlB;IAED;;;;OAIG;IACH,mBAAmB,CAAC,SAAS,AAH1B,CACA,EADQ,OAAO,0BAA0B,EAAE,OAAO,GAAG,IAG3B,GAFhB,MAAM,CAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,kBAAkB,CAAC,CA+BnF;IAED;;;;;OAKG;IACG,mBAAmB,CAJZ,CAAC,EAIY,QAAQ,EAHvB,CAAC,SAAS,EAAE,OAAO,0BAA0B,EAAE,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAGpD,GAFrB,OAAO,CAAC,CAAC,CAAC,CActB;IAED;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAHN,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGtB,GAFJ,OAAO,CASnB;IAED;;;;OAIG;IACH,qBAAqB,CAAC,MAAM,EAHjB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGX,GAFf,IAAI,CAIhB;IAED;;;;OAIG;IACH,oBAAoB,CAAC,KAAK,EAHf,OAAO,wCAAwC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGvE,GAFb,IAAI,CAchB;IAED;;;OAGG;IACH,iBAAiB,IAFJ,IAAI,CAUhB;IAED;;;;OAIG;IACH,gBAAgB,CAAC,EAAC,SAAS,EAAE,MAAM,EAAC,EAHzB;QAAC,SAAS,EAAE,OAAO,0BAA0B,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAA;KAGpE,GAFvB,IAAI,CAMhB;CACF;AAwOD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,aAAa,AAHrC,CACA,EADQ,aAGuD,GAFrD,UAAU,CAYtB;AAED;;;;GAIG;AACH,wBAAsB,IAAI,CAAC,KAAK,EAHrB,OAAO,wCAAwC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGjE,GAFnB,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,wBAAwB,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAC,CAAC,CAIzJ"}
1
+ {"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client.js"],"names":[],"mappings":"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"}