@nanolink/mirrors 1.0.22 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MirrorSync.d.ts +1 -1
- package/dist/MirrorSync.js +10 -10
- package/dist/MirrorSync.js.map +1 -1
- package/dist-compat/index.js +10 -12
- package/dist-compat/index.js.map +1 -1
- package/package.json +1 -1
package/dist/MirrorSync.d.ts
CHANGED
|
@@ -56,6 +56,7 @@ export interface MirrorItem {
|
|
|
56
56
|
version?: number;
|
|
57
57
|
opVersion?: string;
|
|
58
58
|
[k: string]: any;
|
|
59
|
+
deleted?: boolean;
|
|
59
60
|
}
|
|
60
61
|
/**
|
|
61
62
|
* MirrorSync maintains an in-memory mirror of server state based on CacheSyncResult messages.
|
|
@@ -85,7 +86,6 @@ export declare class MirrorSync extends EventEmitter {
|
|
|
85
86
|
private l;
|
|
86
87
|
private attachClientEvents;
|
|
87
88
|
private detachClientEvents;
|
|
88
|
-
private needsFullSync;
|
|
89
89
|
private targetMap;
|
|
90
90
|
private advanceNumeric;
|
|
91
91
|
private advanceOp;
|
package/dist/MirrorSync.js
CHANGED
|
@@ -104,7 +104,6 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
104
104
|
this.__onConnected = undefined;
|
|
105
105
|
}
|
|
106
106
|
};
|
|
107
|
-
MirrorSync.prototype.needsFullSync = function () { return this.currentVersion === -1 || this.currentOpVersion === null; };
|
|
108
107
|
MirrorSync.prototype.targetMap = function () { return (this.fullSyncPhase && this.buffer) ? this.buffer : this.mirror; };
|
|
109
108
|
MirrorSync.prototype.advanceNumeric = function (v) { if (typeof v === 'number' && v > this.currentVersion)
|
|
110
109
|
this.currentVersion = v; };
|
|
@@ -170,16 +169,14 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
170
169
|
var type = msg.type;
|
|
171
170
|
switch (type) {
|
|
172
171
|
case SyncType.START: {
|
|
173
|
-
var isFull = this.needsFullSync();
|
|
174
|
-
this.fullSyncPhase = isFull;
|
|
175
172
|
// Only allocate a new buffer for a true full sync; for delta/resubscribe we append directly
|
|
176
|
-
this.buffer =
|
|
177
|
-
var payload = { full:
|
|
173
|
+
this.buffer = this.fullSyncPhase ? new Map() : null;
|
|
174
|
+
var payload = { full: this.fullSyncPhase };
|
|
178
175
|
this.emit('start', payload);
|
|
179
176
|
break;
|
|
180
177
|
}
|
|
181
178
|
case SyncType.UPDATED:
|
|
182
|
-
this.applyUpdated(msg.data
|
|
179
|
+
this.applyUpdated(msg.data);
|
|
183
180
|
break;
|
|
184
181
|
case SyncType.DELETED:
|
|
185
182
|
this.applyDeleted(msg.deleteId, msg.deleteVersion, msg.deleteOpVersion);
|
|
@@ -187,7 +184,6 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
187
184
|
case SyncType.DONE: {
|
|
188
185
|
var wasFull = this.fullSyncPhase;
|
|
189
186
|
if (wasFull && this.buffer) {
|
|
190
|
-
console.log('Applying full buffer with', this.buffer.size, 'items');
|
|
191
187
|
this._mirror = this.buffer;
|
|
192
188
|
this.buffer = null;
|
|
193
189
|
}
|
|
@@ -236,12 +232,16 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
236
232
|
return [];
|
|
237
233
|
return Array.isArray(data) ? data : [data];
|
|
238
234
|
};
|
|
239
|
-
MirrorSync.prototype.applyUpdated = function (data
|
|
235
|
+
MirrorSync.prototype.applyUpdated = function (data) {
|
|
240
236
|
var e_2, _a;
|
|
241
237
|
var _this = this;
|
|
242
238
|
var _loop_1 = function (item) {
|
|
243
239
|
if (!item || typeof item.id !== 'string')
|
|
244
240
|
return "continue";
|
|
241
|
+
if (item.deleted) {
|
|
242
|
+
this_1.applyDeleted(item.id, item.version, item.opVersion);
|
|
243
|
+
return "continue";
|
|
244
|
+
}
|
|
245
245
|
var hasNumeric = typeof item.version === 'number';
|
|
246
246
|
var hasOp = typeof item.opVersion === 'string';
|
|
247
247
|
if (!hasNumeric && !hasOp)
|
|
@@ -254,10 +254,10 @@ var MirrorSync = /** @class */ (function (_super) {
|
|
|
254
254
|
this_1.advanceNumeric(item.version);
|
|
255
255
|
this_1.advanceOp(item.opVersion);
|
|
256
256
|
if (this_1.fullSyncPhase) {
|
|
257
|
-
this_1.backlog.push(function () { return _this.emit('updated', item,
|
|
257
|
+
this_1.backlog.push(function () { return _this.emit('updated', item, _this.fullSyncPhase); });
|
|
258
258
|
}
|
|
259
259
|
else {
|
|
260
|
-
this_1.emit('updated', item,
|
|
260
|
+
this_1.emit('updated', item, this_1.fullSyncPhase);
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
};
|
package/dist/MirrorSync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MirrorSync.js","sourceRoot":"","sources":["../src/MirrorSync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MirrorSync.js","sourceRoot":"","sources":["../src/MirrorSync.ts"],"names":[],"mappings":"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"}
|
package/dist-compat/index.js
CHANGED
|
@@ -122,9 +122,6 @@ var MirrorSync = class extends import_eventemitter3.default {
|
|
|
122
122
|
this.__onConnected = void 0;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
needsFullSync() {
|
|
126
|
-
return this.currentVersion === -1 || this.currentOpVersion === null;
|
|
127
|
-
}
|
|
128
125
|
targetMap() {
|
|
129
126
|
return this.fullSyncPhase && this.buffer ? this.buffer : this.mirror;
|
|
130
127
|
}
|
|
@@ -186,15 +183,13 @@ var MirrorSync = class extends import_eventemitter3.default {
|
|
|
186
183
|
const { type } = msg;
|
|
187
184
|
switch (type) {
|
|
188
185
|
case "START" /* START */: {
|
|
189
|
-
|
|
190
|
-
this.fullSyncPhase
|
|
191
|
-
this.buffer = isFull ? /* @__PURE__ */ new Map() : null;
|
|
192
|
-
const payload = { full: isFull };
|
|
186
|
+
this.buffer = this.fullSyncPhase ? /* @__PURE__ */ new Map() : null;
|
|
187
|
+
const payload = { full: this.fullSyncPhase };
|
|
193
188
|
this.emit("start", payload);
|
|
194
189
|
break;
|
|
195
190
|
}
|
|
196
191
|
case "UPDATED" /* UPDATED */:
|
|
197
|
-
this.applyUpdated(msg.data
|
|
192
|
+
this.applyUpdated(msg.data);
|
|
198
193
|
break;
|
|
199
194
|
case "DELETED" /* DELETED */:
|
|
200
195
|
this.applyDeleted(msg.deleteId, msg.deleteVersion, msg.deleteOpVersion);
|
|
@@ -202,7 +197,6 @@ var MirrorSync = class extends import_eventemitter3.default {
|
|
|
202
197
|
case "DONE" /* DONE */: {
|
|
203
198
|
const wasFull = this.fullSyncPhase;
|
|
204
199
|
if (wasFull && this.buffer) {
|
|
205
|
-
console.log("Applying full buffer with", this.buffer.size, "items");
|
|
206
200
|
this._mirror = this.buffer;
|
|
207
201
|
this.buffer = null;
|
|
208
202
|
}
|
|
@@ -236,9 +230,13 @@ var MirrorSync = class extends import_eventemitter3.default {
|
|
|
236
230
|
if (!data) return [];
|
|
237
231
|
return Array.isArray(data) ? data : [data];
|
|
238
232
|
}
|
|
239
|
-
applyUpdated(data
|
|
233
|
+
applyUpdated(data) {
|
|
240
234
|
for (const item of this.normalizeItems(data)) {
|
|
241
235
|
if (!item || typeof item.id !== "string") continue;
|
|
236
|
+
if (item.deleted) {
|
|
237
|
+
this.applyDeleted(item.id, item.version, item.opVersion);
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
242
240
|
const hasNumeric = typeof item.version === "number";
|
|
243
241
|
const hasOp = typeof item.opVersion === "string";
|
|
244
242
|
if (!hasNumeric && !hasOp) continue;
|
|
@@ -250,9 +248,9 @@ var MirrorSync = class extends import_eventemitter3.default {
|
|
|
250
248
|
this.advanceNumeric(item.version);
|
|
251
249
|
this.advanceOp(item.opVersion);
|
|
252
250
|
if (this.fullSyncPhase) {
|
|
253
|
-
this.backlog.push(() => this.emit("updated", item,
|
|
251
|
+
this.backlog.push(() => this.emit("updated", item, this.fullSyncPhase));
|
|
254
252
|
} else {
|
|
255
|
-
this.emit("updated", item,
|
|
253
|
+
this.emit("updated", item, this.fullSyncPhase);
|
|
256
254
|
}
|
|
257
255
|
}
|
|
258
256
|
}
|
package/dist-compat/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/MirrorSync.ts","../src/DelegateMap.ts","../node_modules/graphql-ws/dist/common-CGW11Fyb.js","../node_modules/graphql-ws/dist/client.js","../src/SubscriptionClient.ts"],"sourcesContent":["import { MirrorSync } from \"./MirrorSync\";\r\nimport { ReadonlyMapView, DelegatingObject, DelegatingMap } from \"./DelegateMap\";\r\nimport SubscriptionClient from \"./SubscriptionClient\";\r\nimport { symlink } from \"fs\";\r\nimport { create } from \"domain\";\r\n\r\nexport { SubscriptionClient, MirrorSync, DelegatingObject };\r\nexport type { ReadonlyMapView };\r\n\r\nexport class Connection extends SubscriptionClient {\r\n public Mirrors: Map<string, MirrorSync> = new Map();\r\n constructor() {\r\n super();\r\n }\r\n InitConnection(url: string, connectionParams: () => Promise<Record<string, unknown> | Record<string, unknown>>) {\r\n this.InitClient({\r\n url: url,\r\n connectionParams: connectionParams\r\n });\r\n }\r\n\r\n getMirror(name: string, subscription: string, baseVariables: Record<string, unknown>): MirrorSync {\r\n let entry = this.Mirrors.get(name);\r\n if (!entry) {\r\n const sync = this.createMirror(subscription, baseVariables);\r\n const forward = (event: string, payload: any) => {\r\n this.emit(`mirror:${event}`, { mirrorName: name, ...payload });\r\n };\r\n const handlers: Array<[string, (...args: any[]) => void]> = [\r\n ['start', (p) => forward('start', p)],\r\n ['updated', (item, fullPhase) => forward('updated', { item, fullPhase })],\r\n ['deleted', (p) => forward('deleted', p)],\r\n ['done', (p) => forward('done', p)],\r\n ['versionError', (p) => forward('versionError', p)],\r\n ['resubscribe', (p) => forward('resubscribe', p)],\r\n ['error', (p) => forward('error', p)],\r\n ];\r\n handlers.forEach(([e, h]) => sync.on(e as any, h)); \r\n this.Mirrors.set(name, sync);\r\n entry = sync;\r\n }\r\n return entry;\r\n }\r\n createMirror(subscription: string, baseVariables: Record<string, unknown>): MirrorSync {\r\n return new MirrorSync(this, { subscription, baseVariables });\r\n }\r\n\r\n removeMirror(name: string) {\r\n const entry = this.Mirrors.get(name);\r\n if (!entry) return;\r\n entry.removeAllListeners();\r\n entry.stop();\r\n this.Mirrors.delete(name);\r\n this.emit('mirror:removed', { mirrorName: name });\r\n }\r\n\r\n clearMirrors() {\r\n for (const name of Array.from(this.Mirrors.keys())) {\r\n this.removeMirror(name);\r\n }\r\n this.emit('mirror:cleared');\r\n }\r\n}\r\n","import { DelegatingMap, ReadonlyMapView } from './DelegateMap';\r\nimport { SubscriptionClient } from './SubscriptionClient';\r\nimport EventEmitter from 'eventemitter3';\r\n\r\n// SyncType enum as described\r\nexport enum SyncType {\r\n DELETED = 'DELETED',\r\n UPDATED = 'UPDATED',\r\n START = 'START',\r\n DONE = 'DONE',\r\n VERSION_ERROR = 'VERSION_ERROR',\r\n}\r\n\r\n// Shape of the subscription payload (generic)\r\nexport interface CacheSyncResult {\r\n type: SyncType;\r\n total?: number | null;\r\n deleteId?: string; // ObjectId as string\r\n data?: any;\r\n deleteVersion?: number;\r\n // Optional operation-based versioning (string) for hybrid mode\r\n deleteOpVersion?: string;\r\n opVersion?: string; // May appear on items inside data\r\n}\r\n\r\nexport interface MirrorSyncOptions {\r\n /** Subscription document (query string) */\r\n subscription: string;\r\n /** Optional logger */\r\n /** Custom variables base (besides version) */\r\n baseVariables?: Record<string, unknown>;\r\n}\r\n\r\nexport interface MirrorStats {\r\n version: number; // numeric version cursor\r\n opVersion?: string | null; // operation (ObjectId) cursor\r\n size: number;\r\n fullSyncInProgress: boolean;\r\n totalHint?: number | null;\r\n}\r\n\r\nexport interface MirrorSyncEvents {\r\n start: (info: { full: boolean }) => void;\r\n updated: (item: MirrorItem, isFullPhase: boolean) => void;\r\n deleted: (info: { id: string; version: number | undefined }) => void;\r\n done: (info: { full: boolean }) => void;\r\n versionError: (info: { currentVersion: number }) => void;\r\n resubscribe: (info: { fromVersion: number }) => void;\r\n error?: (errors: any) => void;\r\n}\r\n\r\n\r\nexport interface MirrorItem { id: string; version?: number; opVersion?: string;[k: string]: any }\r\n\r\n/**\r\n * MirrorSync maintains an in-memory mirror of server state based on CacheSyncResult messages.\r\n * Generic TBase is the item shape (must include id & version).\r\n */\r\nexport class MirrorSync extends EventEmitter {\r\n private client: SubscriptionClient;\r\n private options: MirrorSyncOptions;\r\n private _mirror = new Map<string, MirrorItem>();\r\n private get mirror() { return this._mirror; } \r\n private buffer: Map<string, MirrorItem> | null = null; // used during full/resubscription phase\r\n private currentVersion = -1; // numeric cursor (-1 => full sync needed)\r\n private currentOpVersion: string | null = null; // op cursor (null => full sync needed)\r\n private unsub: (() => void) | null = null;\r\n private fullSyncPhase = false; // only true during START..DONE when initiating from version -1\r\n private log?: (msg: string, meta?: any) => void;\r\n /** Deferred promise resolved on first DONE after a (re)start full sync cycle. Reset on constructor, start(), and VERSION_ERROR re-init. */\r\n public loaded!: Promise<ReadonlyMapView<string, any>>; // set via resetLoaded()\r\n private resolveLoaded?: (ref: ReadonlyMapView<string, any>) => void;\r\n // Stored client event handlers to allow proper detachment\r\n private __onReconnected?: () => void;\r\n private __onConnected?: () => void;\r\n private backlog: (() => void)[] = [];\r\n\r\n get Storage(): ReadonlyMapView<string, any> { return this.mirror; }\r\n\r\n constructor(client: SubscriptionClient, options: MirrorSyncOptions & { log?: (msg: string, meta?: any) => void }) {\r\n super();\r\n this.client = client;\r\n this.options = options;\r\n this.log = options.log;\r\n this.attachClientEvents();\r\n this.resetLoaded();\r\n }\r\n\r\n private l(msg: string, meta?: any) { if (this.log) this.log(msg, meta); }\r\n\r\n private attachClientEvents() {\r\n this.__onReconnected = () => {\r\n this.emit('resubscribe', { fromVersion: this.currentVersion });\r\n this.resubscribe();\r\n };\r\n this.__onConnected = () => {\r\n if ((this.currentVersion === -1 || this.currentOpVersion === null) && !this.unsub) {\r\n this.l('initial connected subscribe', { version: this.currentVersion, opVersion: this.currentOpVersion });\r\n this.subscribeInternal(this.currentVersion, this.currentOpVersion);\r\n }\r\n };\r\n this.client.on('reconnected', this.__onReconnected);\r\n this.client.on('connected', this.__onConnected);\r\n }\r\n\r\n private detachClientEvents() {\r\n if (this.__onReconnected) {\r\n this.client.off('reconnected', this.__onReconnected);\r\n this.__onReconnected = undefined;\r\n }\r\n if (this.__onConnected) {\r\n this.client.off('connected', this.__onConnected);\r\n this.__onConnected = undefined;\r\n }\r\n }\r\n\r\n private needsFullSync(): boolean { return this.currentVersion === -1 || this.currentOpVersion === null; }\r\n private targetMap(): Map<string, MirrorItem> { return (this.fullSyncPhase && this.buffer) ? this.buffer! : this.mirror; }\r\n private advanceNumeric(v?: number) { if (typeof v === 'number' && v > this.currentVersion) this.currentVersion = v; }\r\n private advanceOp(v?: string) { if (v && (!this.currentOpVersion || v > this.currentOpVersion)) this.currentOpVersion = v; }\r\n\r\n private subscribeInternal(version: number, opVersion: string | null) {\r\n if (!this.client) throw new Error('SubscriptionClient missing');\r\n if (this.unsub) { this.unsub(); this.unsub = null; }\r\n const variables = { version, opVersion, ...(this.options.baseVariables || {}) };\r\n this.l('subscribe', { version, opVersion });\r\n this.unsub = this.client.clientsubscribe<{ [k: string]: CacheSyncResult }>(\r\n { query: this.options.subscription, variables },\r\n {\r\n next: (envelope: { data?: { [k: string]: CacheSyncResult }; errors?: any }) => {\r\n if (envelope.errors) {\r\n this.l('graphql errors', envelope.errors);\r\n this.emit('error', envelope.errors);\r\n }\r\n const payload = envelope.data as { [k: string]: CacheSyncResult } | undefined;\r\n if (payload) this.handlePayload(payload);\r\n },\r\n error: (err: unknown) => this.l('subscription error', err),\r\n complete: () => this.l('subscription complete'),\r\n }\r\n );\r\n }\r\n\r\n private resubscribe() {\r\n // Resubscribe starting from current cursors\r\n this.subscribeInternal(this.currentVersion, this.currentOpVersion);\r\n }\r\n\r\n private start() {\r\n if (!this.client.isConnected()) { this.l('start deferred (not connected)'); return; }\r\n this.subscribeInternal(this.currentVersion, this.currentOpVersion);\r\n }\r\n\r\n load(): Promise<ReadonlyMapView<string, any>> {\r\n if (!this.unsub) this.start();\r\n return this.loaded;\r\n }\r\n private resetLoaded() {\r\n this.loaded = new Promise<ReadonlyMapView<string, any>>(resolve => {\r\n this.resolveLoaded = resolve;\r\n });\r\n }\r\n\r\n private handlePayload(raw: { [k: string]: CacheSyncResult } | undefined) {\r\n if (!raw) return;\r\n // Always pick the first field in the payload object regardless of configured rootField\r\n const firstKey = Object.keys(raw)[0];\r\n if (!firstKey) return;\r\n const msg = raw[firstKey];\r\n if (!msg) return;\r\n const { type } = msg;\r\n switch (type) {\r\n case SyncType.START: {\r\n const isFull = this.needsFullSync();\r\n this.fullSyncPhase = isFull;\r\n // Only allocate a new buffer for a true full sync; for delta/resubscribe we append directly\r\n this.buffer = isFull ? new Map() : null;\r\n const payload = { full: isFull };\r\n this.emit('start', payload);\r\n break;\r\n }\r\n case SyncType.UPDATED:\r\n this.applyUpdated(msg.data, this.fullSyncPhase);\r\n break;\r\n case SyncType.DELETED:\r\n this.applyDeleted(msg.deleteId, msg.deleteVersion, msg.deleteOpVersion);\r\n break;\r\n case SyncType.DONE: {\r\n const wasFull = this.fullSyncPhase;\r\n if (wasFull && this.buffer) {\r\n console.log('Applying full buffer with', this.buffer.size, 'items');\r\n this._mirror = this.buffer;\r\n this.buffer = null;\r\n }\r\n this.fullSyncPhase = false;\r\n const d = { full: wasFull };\r\n if (wasFull) {\r\n for (const b of this.backlog) b();\r\n this.backlog = [];\r\n }\r\n this.emit('done', d);\r\n // Resolve deferred if pending\r\n if (this.resolveLoaded) {\r\n const r = this.resolveLoaded; this.resolveLoaded = undefined; r(this.mirror);\r\n }\r\n break;\r\n }\r\n case SyncType.VERSION_ERROR:\r\n const ve = { currentVersion: this.currentVersion };\r\n this.emit('versionError', ve);\r\n // restart as full sync\r\n this.currentVersion = -1;\r\n this.currentOpVersion = null;\r\n this.buffer = new Map();\r\n this.fullSyncPhase = true;\r\n this.resetLoaded();\r\n this.subscribeInternal(this.currentVersion, this.currentOpVersion);\r\n break;\r\n }\r\n }\r\n\r\n private normalizeItems(data: any): MirrorItem[] {\r\n if (!data) return [];\r\n return Array.isArray(data) ? data : [data];\r\n }\r\n\r\n private applyUpdated(data: any, isFullPhase: boolean) {\r\n for (const item of this.normalizeItems(data)) {\r\n if (!item || typeof item.id !== 'string') continue;\r\n const hasNumeric = typeof item.version === 'number';\r\n const hasOp = typeof item.opVersion === 'string';\r\n if (!hasNumeric && !hasOp) continue;\r\n const existing = this.targetMap().get(item.id);\r\n const newerNumeric = hasNumeric && (!existing?.version || item.version! >= existing.version);\r\n const newerOp = hasOp && (!existing?.opVersion || item.opVersion! >= existing.opVersion);\r\n if (!existing || newerNumeric || newerOp) {\r\n this.targetMap().set(item.id, item);\r\n this.advanceNumeric(item.version);\r\n this.advanceOp(item.opVersion);\r\n if (this.fullSyncPhase) {\r\n this.backlog.push(() => this.emit('updated', item, isFullPhase));\r\n } else {\r\n this.emit('updated', item, isFullPhase);\r\n }\r\n }\r\n }\r\n }\r\n private applyDeleted(id?: string, deleteVersion?: number, deleteOpVersion?: string) {\r\n if (!id) return;\r\n const numericStale = !this.fullSyncPhase && typeof deleteVersion === 'number' && this.currentVersion >= 0 && deleteVersion < this.currentVersion;\r\n const opStale = !this.fullSyncPhase && deleteOpVersion && this.currentOpVersion && deleteOpVersion < this.currentOpVersion;\r\n if (numericStale && opStale) {\r\n this.l?.('skip stale delete', { id, deleteVersion, deleteOpVersion });\r\n return;\r\n }\r\n this.targetMap().delete(id);\r\n this.advanceNumeric(deleteVersion);\r\n this.advanceOp(deleteOpVersion);\r\n const del: any = { id, version: deleteVersion };\r\n if (deleteOpVersion) del.opVersion = deleteOpVersion;\r\n if (this.fullSyncPhase) {\r\n this.backlog.push(() => this.emit('deleted', del));\r\n } else {\r\n this.emit('deleted', del);\r\n }\r\n }\r\n\r\n get(id: string): any | undefined { return this.mirror.get(id); }\r\n values(): any[] { return Array.from(this.mirror.values()); }\r\n stats(): MirrorStats { return { version: this.currentVersion, opVersion: this.currentOpVersion, size: this.mirror.size, fullSyncInProgress: this.fullSyncPhase }; }\r\n\r\n stop() {\r\n if (this.unsub) { this.unsub(); this.unsub = null; }\r\n this.detachClientEvents();\r\n this.currentVersion = -1;\r\n this.currentOpVersion = null;\r\n this.buffer = null;\r\n if (this.resolveLoaded) {\r\n const r = this.resolveLoaded; this.resolveLoaded = undefined; r(this.mirror);\r\n }\r\n this.resetLoaded();\r\n }\r\n}\r\n","// Restored specialized read-only view interface (runtime enforced via absence of mutators)\r\nexport interface ReadonlyMapView<K, V> extends Iterable<[K, V]> {\r\n readonly size: number;\r\n get(key: K): V | undefined;\r\n has(key: K): boolean;\r\n entries(): IterableIterator<[K, V]>;\r\n keys(): IterableIterator<K>;\r\n values(): IterableIterator<V>;\r\n forEach(callbackfn: (value: V, key: K, map: ReadonlyMapView<K, V>) => void, thisArg?: any): void;\r\n [Symbol.iterator](): IterableIterator<[K, V]>;\r\n}\r\n\r\nexport class DelegatingMap<K, V> implements ReadonlyMapView<K, V> {\r\n constructor(private readonly resolver: () => Map<K, V>) { }\r\n private t(): Map<K, V> { return this.resolver(); }\r\n get size(): number { return this.t().size; }\r\n get(key: K): V | undefined { return this.t().get(key); }\r\n has(key: K): boolean { return this.t().has(key); }\r\n entries(): IterableIterator<[K, V]> { return this.t().entries(); }\r\n keys(): IterableIterator<K> { return this.t().keys(); }\r\n values(): IterableIterator<V> { return this.t().values(); }\r\n forEach(callbackfn: (value: V, key: K, map: ReadonlyMapView<K, V>) => void, thisArg?: any): void {\r\n this.t().forEach(((v: V, k: K) => callbackfn(v, k, this)) as any, thisArg);\r\n }\r\n [Symbol.iterator](): IterableIterator<[K, V]> { return this.t()[Symbol.iterator](); }\r\n}\r\n\r\n/**\r\n * Presents a ReadonlyMapView<K,V> as an immutable plain object via Proxy.\r\n * Optionally maps values through a mapper function on access.\r\n */\r\nexport class DelegatingObject<K extends string, V, R = V> {\r\n private readonly proxy: Record<K, R>;\r\n constructor(private readonly source: ReadonlyMapView<K, V>, private readonly mapFn?: (value: V, key: K) => R) {\r\n const mapper = (v: V, k: K): R => (this.mapFn ? this.mapFn(v, k) : (v as unknown as R));\r\n const handler: ProxyHandler<any> = {\r\n get: (_target, prop: PropertyKey, receiver) => {\r\n if (prop === Symbol.toStringTag) return 'Object';\r\n if (typeof prop !== 'string') return Reflect.get(Object.prototype, prop, receiver);\r\n const key = prop as K;\r\n const v = this.source.get(key);\r\n return v === undefined ? undefined : mapper(v, key);\r\n },\r\n set: () => false, // immutable\r\n has: (_target, prop: PropertyKey) => typeof prop === 'string' && this.source.has(prop as K),\r\n deleteProperty: () => false, // immutable\r\n ownKeys: () => Array.from(this.source.keys() as unknown as IterableIterator<string>),\r\n getOwnPropertyDescriptor: (_target, prop: PropertyKey) => {\r\n if (typeof prop === 'string' && this.source.has(prop as K)) {\r\n const key = prop as K;\r\n const v = this.source.get(key)!;\r\n return { configurable: true, enumerable: true, value: mapper(v, key) };\r\n }\r\n return undefined;\r\n },\r\n defineProperty: () => false, // immutable\r\n };\r\n this.proxy = new Proxy(Object.create(null), handler);\r\n }\r\n asObject(): Record<K, R> { return this.proxy; }\r\n}\r\n","function extendedTypeof(val) {\n if (val === null) {\n return \"null\";\n }\n if (Array.isArray(val)) {\n return \"array\";\n }\n return typeof val;\n}\nfunction isObject(val) {\n return extendedTypeof(val) === \"object\";\n}\nfunction isAsyncIterable(val) {\n return typeof Object(val)[Symbol.asyncIterator] === \"function\";\n}\nfunction isAsyncGenerator(val) {\n return isObject(val) && typeof Object(val)[Symbol.asyncIterator] === \"function\" && typeof val.return === \"function\";\n}\nfunction areGraphQLFormattedErrors(obj) {\n return Array.isArray(obj) && // must be at least one error\n obj.length > 0 && // error has at least a message\n obj.every((ob) => \"message\" in ob);\n}\nfunction limitCloseReason(reason, whenTooLong) {\n return reason.length < 124 ? reason : whenTooLong;\n}\n\nconst GRAPHQL_TRANSPORT_WS_PROTOCOL = \"graphql-transport-ws\";\nconst DEPRECATED_GRAPHQL_WS_PROTOCOL = \"graphql-ws\";\nvar CloseCode = /* @__PURE__ */ ((CloseCode2) => {\n CloseCode2[CloseCode2[\"InternalServerError\"] = 4500] = \"InternalServerError\";\n CloseCode2[CloseCode2[\"InternalClientError\"] = 4005] = \"InternalClientError\";\n CloseCode2[CloseCode2[\"BadRequest\"] = 4400] = \"BadRequest\";\n CloseCode2[CloseCode2[\"BadResponse\"] = 4004] = \"BadResponse\";\n CloseCode2[CloseCode2[\"Unauthorized\"] = 4401] = \"Unauthorized\";\n CloseCode2[CloseCode2[\"Forbidden\"] = 4403] = \"Forbidden\";\n CloseCode2[CloseCode2[\"SubprotocolNotAcceptable\"] = 4406] = \"SubprotocolNotAcceptable\";\n CloseCode2[CloseCode2[\"ConnectionInitialisationTimeout\"] = 4408] = \"ConnectionInitialisationTimeout\";\n CloseCode2[CloseCode2[\"ConnectionAcknowledgementTimeout\"] = 4504] = \"ConnectionAcknowledgementTimeout\";\n CloseCode2[CloseCode2[\"SubscriberAlreadyExists\"] = 4409] = \"SubscriberAlreadyExists\";\n CloseCode2[CloseCode2[\"TooManyInitialisationRequests\"] = 4429] = \"TooManyInitialisationRequests\";\n return CloseCode2;\n})(CloseCode || {});\nvar MessageType = /* @__PURE__ */ ((MessageType2) => {\n MessageType2[\"ConnectionInit\"] = \"connection_init\";\n MessageType2[\"ConnectionAck\"] = \"connection_ack\";\n MessageType2[\"Ping\"] = \"ping\";\n MessageType2[\"Pong\"] = \"pong\";\n MessageType2[\"Subscribe\"] = \"subscribe\";\n MessageType2[\"Next\"] = \"next\";\n MessageType2[\"Error\"] = \"error\";\n MessageType2[\"Complete\"] = \"complete\";\n return MessageType2;\n})(MessageType || {});\nfunction validateMessage(val) {\n if (!isObject(val)) {\n throw new Error(\n `Message is expected to be an object, but got ${extendedTypeof(val)}`\n );\n }\n if (!val.type) {\n throw new Error(`Message is missing the 'type' property`);\n }\n if (typeof val.type !== \"string\") {\n throw new Error(\n `Message is expects the 'type' property to be a string, but got ${extendedTypeof(\n val.type\n )}`\n );\n }\n switch (val.type) {\n case \"connection_init\" /* ConnectionInit */:\n case \"connection_ack\" /* ConnectionAck */:\n case \"ping\" /* Ping */:\n case \"pong\" /* Pong */: {\n if (val.payload != null && !isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object or nullish or missing, but got \"${val.payload}\"`\n );\n }\n break;\n }\n case \"subscribe\" /* Subscribe */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n if (typeof val.payload.query !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'query' property to be a string, but got ${extendedTypeof(\n val.payload.query\n )}`\n );\n }\n if (val.payload.variables != null && !isObject(val.payload.variables)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'variables' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.variables\n )}`\n );\n }\n if (val.payload.operationName != null && extendedTypeof(val.payload.operationName) !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'operationName' property to be a string or nullish or missing, but got ${extendedTypeof(\n val.payload.operationName\n )}`\n );\n }\n if (val.payload.extensions != null && !isObject(val.payload.extensions)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'extensions' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.extensions\n )}`\n );\n }\n break;\n }\n case \"next\" /* Next */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"error\" /* Error */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!areGraphQLFormattedErrors(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an array of GraphQL errors, but got ${JSON.stringify(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"complete\" /* Complete */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n break;\n }\n default:\n throw new Error(`Invalid message 'type' property \"${val.type}\"`);\n }\n return val;\n}\nfunction parseMessage(data, reviver) {\n return validateMessage(\n typeof data === \"string\" ? JSON.parse(data, reviver) : data\n );\n}\nfunction stringifyMessage(msg, replacer) {\n validateMessage(msg);\n return JSON.stringify(msg, replacer);\n}\n\nexport { CloseCode as C, DEPRECATED_GRAPHQL_WS_PROTOCOL as D, GRAPHQL_TRANSPORT_WS_PROTOCOL as G, MessageType as M, isAsyncGenerator as a, isAsyncIterable as b, isObject as i, limitCloseReason as l, parseMessage as p, stringifyMessage as s, validateMessage as v };\n","import { i as isObject, G as GRAPHQL_TRANSPORT_WS_PROTOCOL, s as stringifyMessage, M as MessageType, C as CloseCode, l as limitCloseReason, p as parseMessage } from './common-CGW11Fyb.js';\nexport { D as DEPRECATED_GRAPHQL_WS_PROTOCOL, v as validateMessage } from './common-CGW11Fyb.js';\n\nfunction createClient(options) {\n const {\n url,\n connectionParams,\n lazy = true,\n onNonLazyError = console.error,\n lazyCloseTimeout: lazyCloseTimeoutMs = 0,\n keepAlive = 0,\n disablePong,\n connectionAckWaitTimeout = 0,\n retryAttempts = 5,\n retryWait = async function randomisedExponentialBackoff(retries2) {\n const retryDelaySeconds = Math.pow(2, retries2);\n await new Promise(\n (resolve) => setTimeout(\n resolve,\n retryDelaySeconds * 1e3 + // add random timeout from 300ms to 3s\n Math.floor(Math.random() * (3e3 - 300) + 300)\n )\n );\n },\n shouldRetry = isLikeCloseEvent,\n on,\n webSocketImpl,\n /**\n * Generates a v4 UUID to be used as the ID using `Math`\n * as the random number generator. Supply your own generator\n * in case you need more uniqueness.\n *\n * Reference: https://gist.github.com/jed/982883\n */\n generateID = function generateUUID() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n },\n jsonMessageReplacer: replacer,\n jsonMessageReviver: reviver\n } = options;\n let ws;\n if (webSocketImpl) {\n if (!isWebSocket(webSocketImpl)) {\n throw new Error(\"Invalid WebSocket implementation provided\");\n }\n ws = webSocketImpl;\n } else if (typeof WebSocket !== \"undefined\") {\n ws = WebSocket;\n } else if (typeof global !== \"undefined\") {\n ws = global.WebSocket || // @ts-expect-error: Support more browsers\n global.MozWebSocket;\n } else if (typeof window !== \"undefined\") {\n ws = window.WebSocket || // @ts-expect-error: Support more browsers\n window.MozWebSocket;\n }\n if (!ws)\n throw new Error(\n \"WebSocket implementation missing; on Node you can `import WebSocket from 'ws';` and pass `webSocketImpl: WebSocket` to `createClient`\"\n );\n const WebSocketImpl = ws;\n const emitter = (() => {\n const message = /* @__PURE__ */ (() => {\n const listeners2 = {};\n return {\n on(id, listener) {\n listeners2[id] = listener;\n return () => {\n delete listeners2[id];\n };\n },\n emit(message2) {\n if (\"id\" in message2) listeners2[message2.id]?.(message2);\n }\n };\n })();\n const listeners = {\n connecting: on?.connecting ? [on.connecting] : [],\n opened: on?.opened ? [on.opened] : [],\n connected: on?.connected ? [on.connected] : [],\n ping: on?.ping ? [on.ping] : [],\n pong: on?.pong ? [on.pong] : [],\n message: on?.message ? [message.emit, on.message] : [message.emit],\n closed: on?.closed ? [on.closed] : [],\n error: on?.error ? [on.error] : []\n };\n return {\n onMessage: message.on,\n on(event, listener) {\n const l = listeners[event];\n l.push(listener);\n return () => {\n l.splice(l.indexOf(listener), 1);\n };\n },\n emit(event, ...args) {\n for (const listener of [...listeners[event]]) {\n listener(...args);\n }\n }\n };\n })();\n function errorOrClosed(cb) {\n const listening = [\n // errors are fatal and more critical than close events, throw them first\n emitter.on(\"error\", (err) => {\n listening.forEach((unlisten) => unlisten());\n cb(err);\n }),\n // closes can be graceful and not fatal, throw them second (if error didnt throw)\n emitter.on(\"closed\", (event) => {\n listening.forEach((unlisten) => unlisten());\n cb(event);\n })\n ];\n }\n let connecting, locks = 0, lazyCloseTimeout, retrying = false, retries = 0, disposed = false;\n async function connect() {\n clearTimeout(lazyCloseTimeout);\n const [socket, throwOnClose] = await (connecting ?? (connecting = new Promise(\n (connected, denied) => (async () => {\n if (retrying) {\n await retryWait(retries);\n if (!locks) {\n connecting = void 0;\n return denied({ code: 1e3, reason: \"All Subscriptions Gone\" });\n }\n retries++;\n }\n emitter.emit(\"connecting\", retrying);\n const socket2 = new WebSocketImpl(\n typeof url === \"function\" ? await url() : url,\n GRAPHQL_TRANSPORT_WS_PROTOCOL\n );\n let connectionAckTimeout, queuedPing;\n function enqueuePing() {\n if (isFinite(keepAlive) && keepAlive > 0) {\n clearTimeout(queuedPing);\n queuedPing = setTimeout(() => {\n if (socket2.readyState === WebSocketImpl.OPEN) {\n socket2.send(stringifyMessage({ type: MessageType.Ping }));\n emitter.emit(\"ping\", false, void 0);\n }\n }, keepAlive);\n }\n }\n errorOrClosed((errOrEvent) => {\n connecting = void 0;\n clearTimeout(connectionAckTimeout);\n clearTimeout(queuedPing);\n denied(errOrEvent);\n if (errOrEvent instanceof TerminatedCloseEvent) {\n socket2.close(4499, \"Terminated\");\n socket2.onerror = null;\n socket2.onclose = null;\n }\n });\n socket2.onerror = (err) => emitter.emit(\"error\", err);\n socket2.onclose = (event) => emitter.emit(\"closed\", event);\n socket2.onopen = async () => {\n try {\n emitter.emit(\"opened\", socket2);\n const payload = typeof connectionParams === \"function\" ? await connectionParams() : connectionParams;\n if (socket2.readyState !== WebSocketImpl.OPEN) return;\n socket2.send(\n stringifyMessage(\n payload ? {\n type: MessageType.ConnectionInit,\n payload\n } : {\n type: MessageType.ConnectionInit\n // payload is completely absent if not provided\n },\n replacer\n )\n );\n if (isFinite(connectionAckWaitTimeout) && connectionAckWaitTimeout > 0) {\n connectionAckTimeout = setTimeout(() => {\n socket2.close(\n CloseCode.ConnectionAcknowledgementTimeout,\n \"Connection acknowledgement timeout\"\n );\n }, connectionAckWaitTimeout);\n }\n enqueuePing();\n } catch (err) {\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.InternalClientError,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Internal client error\"\n )\n );\n }\n };\n let acknowledged = false;\n socket2.onmessage = ({ data }) => {\n try {\n const message = parseMessage(data, reviver);\n emitter.emit(\"message\", message);\n if (message.type === \"ping\" || message.type === \"pong\") {\n emitter.emit(message.type, true, message.payload);\n if (message.type === \"pong\") {\n enqueuePing();\n } else if (!disablePong) {\n socket2.send(\n stringifyMessage(\n message.payload ? {\n type: MessageType.Pong,\n payload: message.payload\n } : {\n type: MessageType.Pong\n // payload is completely absent if not provided\n }\n )\n );\n emitter.emit(\"pong\", false, message.payload);\n }\n return;\n }\n if (acknowledged) return;\n if (message.type !== MessageType.ConnectionAck)\n throw new Error(\n `First message cannot be of type ${message.type}`\n );\n clearTimeout(connectionAckTimeout);\n acknowledged = true;\n emitter.emit(\"connected\", socket2, message.payload, retrying);\n retrying = false;\n retries = 0;\n connected([\n socket2,\n new Promise((_, reject) => errorOrClosed(reject))\n ]);\n } catch (err) {\n socket2.onmessage = null;\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.BadResponse,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Bad response\"\n )\n );\n }\n };\n })()\n )));\n if (socket.readyState === WebSocketImpl.CLOSING) await throwOnClose;\n let release = () => {\n };\n const released = new Promise((resolve) => release = resolve);\n return [\n socket,\n release,\n Promise.race([\n // wait for\n released.then(() => {\n if (!locks) {\n const complete = () => socket.close(1e3, \"Normal Closure\");\n if (isFinite(lazyCloseTimeoutMs) && lazyCloseTimeoutMs > 0) {\n lazyCloseTimeout = setTimeout(() => {\n if (socket.readyState === WebSocketImpl.OPEN) complete();\n }, lazyCloseTimeoutMs);\n } else {\n complete();\n }\n }\n }),\n // or\n throwOnClose\n ])\n ];\n }\n function shouldRetryConnectOrThrow(errOrCloseEvent) {\n if (isLikeCloseEvent(errOrCloseEvent) && (isFatalInternalCloseCode(errOrCloseEvent.code) || [\n CloseCode.InternalServerError,\n CloseCode.InternalClientError,\n CloseCode.BadRequest,\n CloseCode.BadResponse,\n CloseCode.Unauthorized,\n // CloseCode.Forbidden, might grant access out after retry\n CloseCode.SubprotocolNotAcceptable,\n // CloseCode.ConnectionInitialisationTimeout, might not time out after retry\n // CloseCode.ConnectionAcknowledgementTimeout, might not time out after retry\n CloseCode.SubscriberAlreadyExists,\n CloseCode.TooManyInitialisationRequests\n // 4499, // Terminated, probably because the socket froze, we want to retry\n ].includes(errOrCloseEvent.code)))\n throw errOrCloseEvent;\n if (disposed) return false;\n if (isLikeCloseEvent(errOrCloseEvent) && errOrCloseEvent.code === 1e3)\n return locks > 0;\n if (!retryAttempts || retries >= retryAttempts) throw errOrCloseEvent;\n if (!shouldRetry(errOrCloseEvent)) throw errOrCloseEvent;\n return retrying = true;\n }\n if (!lazy) {\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [, , throwOnClose] = await connect();\n await throwOnClose;\n } catch (errOrCloseEvent) {\n try {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n } catch (errOrCloseEvent2) {\n return onNonLazyError?.(errOrCloseEvent2);\n }\n }\n }\n })();\n }\n function subscribe(payload, sink) {\n const id = generateID(payload);\n let done = false, errored = false, releaser = () => {\n locks--;\n done = true;\n };\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [socket, release, waitForReleaseOrThrowOnClose] = await connect();\n if (done) return release();\n const unlisten = emitter.onMessage(id, (message) => {\n switch (message.type) {\n case MessageType.Next: {\n sink.next(message.payload);\n return;\n }\n case MessageType.Error: {\n errored = true, done = true;\n sink.error(message.payload);\n releaser();\n return;\n }\n case MessageType.Complete: {\n done = true;\n releaser();\n return;\n }\n }\n });\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Subscribe,\n payload\n },\n replacer\n )\n );\n releaser = () => {\n if (!done && socket.readyState === WebSocketImpl.OPEN)\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Complete\n },\n replacer\n )\n );\n locks--;\n done = true;\n release();\n };\n await waitForReleaseOrThrowOnClose.finally(unlisten);\n return;\n } catch (errOrCloseEvent) {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n }\n }\n })().then(() => {\n if (!errored) sink.complete();\n }).catch((err) => {\n sink.error(err);\n });\n return () => {\n if (!done) releaser();\n };\n }\n return {\n on: emitter.on,\n subscribe,\n iterate(request) {\n const pending = [];\n const deferred = {\n done: false,\n error: null,\n resolve: () => {\n }\n };\n const dispose = subscribe(request, {\n next(val) {\n pending.push(val);\n deferred.resolve();\n },\n error(err) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n },\n complete() {\n deferred.done = true;\n deferred.resolve();\n }\n });\n const iterator = async function* iterator2() {\n for (; ; ) {\n if (!pending.length) {\n await new Promise((resolve) => deferred.resolve = resolve);\n }\n while (pending.length) {\n yield pending.shift();\n }\n if (deferred.error) {\n throw deferred.error;\n }\n if (deferred.done) {\n return;\n }\n }\n }();\n iterator.throw = async (err) => {\n if (!deferred.done) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n }\n return { done: true, value: void 0 };\n };\n iterator.return = async () => {\n dispose();\n return { done: true, value: void 0 };\n };\n return iterator;\n },\n async dispose() {\n disposed = true;\n if (connecting) {\n const [socket] = await connecting;\n socket.close(1e3, \"Normal Closure\");\n }\n },\n terminate() {\n if (connecting) {\n emitter.emit(\"closed\", new TerminatedCloseEvent());\n }\n }\n };\n}\nclass TerminatedCloseEvent extends Error {\n name = \"TerminatedCloseEvent\";\n message = \"4499: Terminated\";\n code = 4499;\n reason = \"Terminated\";\n wasClean = false;\n}\nfunction isLikeCloseEvent(val) {\n return isObject(val) && \"code\" in val && \"reason\" in val;\n}\nfunction isFatalInternalCloseCode(code) {\n if ([\n 1e3,\n // Normal Closure is not an erroneous close code\n 1001,\n // Going Away\n 1006,\n // Abnormal Closure\n 1005,\n // No Status Received\n 1012,\n // Service Restart\n 1013,\n // Try Again Later\n 1014\n // Bad Gateway\n ].includes(code))\n return false;\n return code >= 1e3 && code <= 1999;\n}\nfunction isWebSocket(val) {\n return typeof val === \"function\" && \"constructor\" in val && \"CLOSED\" in val && \"CLOSING\" in val && \"CONNECTING\" in val && \"OPEN\" in val;\n}\n\nexport { CloseCode, GRAPHQL_TRANSPORT_WS_PROTOCOL, MessageType, TerminatedCloseEvent, createClient, parseMessage, stringifyMessage };\n","import { createClient, Client, ClientOptions, SubscribePayload } from 'graphql-ws';\r\n// Removed direct 'ws' import for browser compatibility; will resolve at runtime if needed.\r\nimport EventEmitter from 'eventemitter3';\r\n\r\n/** Events emitted by SubscriptionClient\r\n * connecting - before opening a socket (initial or reconnect attempt)\r\n * connected - first successful connection\r\n * reconnected - a subsequent successful connection after a disconnect\r\n * disconnected - socket closed ( { code, reason, wasClean } )\r\n * error - protocol or network error (Error)\r\n * retry - about to attempt reconnect ( { attempt } )\r\n */\r\nexport interface SubscriptionClientEvents {\r\n connecting: () => void;\r\n connected: () => void;\r\n reconnected: () => void;\r\n disconnected: (info: { code: number; reason: string; wasClean: boolean }) => void;\r\n error: (err: unknown) => void;\r\n retry: (info: { attempt: number }) => void;\r\n}\r\n\r\nexport interface SubscriptionClientOptions {\r\n url: string;\r\n /** optional async or sync connection params */\r\n connectionParams?: ClientOptions['connectionParams'];\r\n /** number of reconnect attempts, default Infinity */\r\n maxReconnectAttempts?: number;\r\n /** initial delay ms before first retry (exponential backoff) */\r\n retryDelayMs?: number;\r\n /** max backoff cap */\r\n maxRetryDelayMs?: number;\r\n /** idle timeout for operations (optional) */\r\n operationTimeoutMs?: number;\r\n /** optional custom WebSocket implementation */\r\n webSocketImpl?: any; // generic to avoid pulling node 'ws' types into browser bundle\r\n /** optional logger */\r\n log?: (msg: string, meta?: any) => void;\r\n}\r\n\r\nexport interface SubscribeOptions<TData = any, TVars = Record<string, unknown>> {\r\n query: string;\r\n variables?: TVars;\r\n /** optional per-subscription timeout override */\r\n timeoutMs?: number;\r\n operationName?: string;\r\n extensions?: Record<string, any>;\r\n}\r\n\r\nexport interface Observer<T> {\r\n next?: (data: T) => void;\r\n error?: (err: unknown) => void;\r\n complete?: () => void;\r\n}\r\n\r\nexport class SubscriptionClient extends EventEmitter {\r\n private options?: Required<Omit<SubscriptionClientOptions, 'connectionParams' | 'log' | 'webSocketImpl'>> & Pick<SubscriptionClientOptions, 'connectionParams' | 'log' | 'webSocketImpl'>;\r\n private client: Client | null = null;\r\n private connectAttempt = 0;\r\n private closedExplicitly = false;\r\n private reconnecting = false;\r\n private reconnectTimer: NodeJS.Timeout | null = null;\r\n private hasEverConnected = false; \r\n\r\n constructor() {\r\n super();\r\n }\r\n InitClient(opts: SubscriptionClientOptions) {\r\n this.options = {\r\n url: opts.url,\r\n connectionParams: opts.connectionParams,\r\n maxReconnectAttempts: opts.maxReconnectAttempts ?? Infinity,\r\n retryDelayMs: opts.retryDelayMs ?? 500,\r\n maxRetryDelayMs: opts.maxRetryDelayMs ?? 10_000,\r\n operationTimeoutMs: opts.operationTimeoutMs ?? 0,\r\n webSocketImpl: opts.webSocketImpl ?? undefined,\r\n log: opts.log,\r\n } as any;\r\n }\r\n\r\n private resolveWebSocketImpl(): any {\r\n if (!this.options) throw new Error('SubscriptionClient not initialized - call InitConnection first');\r\n // Proxy-aware priority:\r\n // 1. Explicit user-supplied impl\r\n // 2. Browser bundle: never load 'ws' — use global WebSocket\r\n // 3. If proxy env detected (Node) -> prefer 'ws'\r\n // 4. Global WebSocket (browser / Node >= 18 native)\r\n // 5. Fallback to require('ws') (Node)\r\n if (this.options.webSocketImpl) return this.options.webSocketImpl;\r\n\r\n if (process.env.BUILD_TARGET === 'browser') {\r\n const g: any = (globalThis as any);\r\n if (typeof g.WebSocket === 'function') return g.WebSocket;\r\n throw new Error('No WebSocket implementation found in browser. Provide webSocketImpl.');\r\n } else {\r\n const proxyEnv = process.env.ALL_PROXY || process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.GLOBAL_AGENT_HTTP_PROXY;\r\n if (proxyEnv) {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n return require('ws');\r\n } catch (e) {\r\n this.log('Proxy detected but failed to load ws package', e);\r\n }\r\n }\r\n const g: any = (globalThis as any);\r\n if (typeof g.WebSocket === 'function') return g.WebSocket;\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n return require('ws');\r\n } catch {\r\n throw new Error('No WebSocket implementation found. Provide webSocketImpl in SubscriptionClientOptions.');\r\n }\r\n }\r\n }\r\n\r\n /** Returns true if an underlying websocket client exists (connected or in-flight). */\r\n isConnected(): boolean {\r\n return !!this.client; // createClientIfNeeded only after socket open attempt\r\n }\r\n\r\n private log(msg: string, meta?: any) {\r\n if (this.options?.log) this.options.log(msg, meta);\r\n }\r\n\r\n private createClientIfNeeded(isReconnect: boolean) {\r\n if (!this.options) throw new Error('SubscriptionClient not initialized - call InitConnection first');\r\n if (this.client) return; // already have client\r\n const { url, connectionParams } = this.options;\r\n const webSocketImpl = this.resolveWebSocketImpl();\r\n this.client = createClient({\r\n url,\r\n connectionParams,\r\n webSocketImpl: webSocketImpl as any,\r\n lazy: false,\r\n keepAlive: 12000,\r\n retryAttempts: 0,\r\n shouldRetry: () => false,\r\n on: {\r\n connected: () => {\r\n const wasReconnect = isReconnect && this.connectAttempt > 0;\r\n this.connectAttempt = 0;\r\n if (wasReconnect && this.hasEverConnected) {\r\n this.emit('reconnected');\r\n this.log('reconnected');\r\n } else {\r\n this.emit('connected');\r\n this.log('connected');\r\n }\r\n this.hasEverConnected = true;\r\n },\r\n error: (err) => {\r\n this.emit('error', err);\r\n this.log('socket error', err);\r\n },\r\n closed: (ev) => {\r\n const e = ev as CloseEvent | { code: number; reason: string; wasClean: boolean };\r\n this.log('closed', e);\r\n this.emit('disconnected', { code: (e as any).code, reason: (e as any).reason?.toString?.() ?? '', wasClean: (e as any).wasClean ?? false });\r\n this.client?.dispose();\r\n this.client = null; // allow recreate\r\n if (!this.closedExplicitly) this.scheduleReconnect();\r\n },\r\n },\r\n });\r\n }\r\n\r\n // assureConnected removed per revert request\r\n\r\n /** Establish the WebSocket connection if not already created. Idempotent. */\r\n connect(): void {\r\n if (this.client) return; // already created\r\n this.emit('connecting');\r\n this.log('connecting');\r\n this.createClientIfNeeded(false);\r\n }\r\n\r\n private scheduleReconnect() {\r\n if (!this.options) throw new Error('SubscriptionClient not initialized - call InitConnection first');\r\n if (this.reconnecting) return;\r\n if (this.closedExplicitly) {\r\n this.log('Reconnect prevented: client closed explicitly');\r\n return;\r\n }\r\n if (this.connectAttempt >= this.options.maxReconnectAttempts) {\r\n this.log('max reconnect attempts reached');\r\n return;\r\n }\r\n this.reconnecting = true;\r\n const delay = Math.min(\r\n this.options.retryDelayMs * Math.pow(2, this.connectAttempt),\r\n this.options.maxRetryDelayMs,\r\n );\r\n this.emit('retry', { attempt: this.connectAttempt });\r\n this.log('reconnect scheduled', { attempt: this.connectAttempt, delay });\r\n if (this.reconnectTimer) clearTimeout(this.reconnectTimer);\r\n this.reconnectTimer = setTimeout(() => {\r\n this.reconnecting = false;\r\n this.connectAttempt++;\r\n this.emit('connecting');\r\n this.log('connecting');\r\n this.createClientIfNeeded(true);\r\n }, delay);\r\n }\r\n\r\n clientsubscribe<TData = any, TVars extends Record<string, unknown> = Record<string, unknown>>(options: SubscribeOptions<TData, TVars>, observer: Observer<{ data?: TData; errors?: any }>): () => void {\r\n if (!this.options) throw new Error('SubscriptionClient not initialized - call InitConnection first');\r\n if (!this.client) throw new Error('Client not connected - call connect() first');\r\n const payload: SubscribePayload = {\r\n query: options.query,\r\n variables: options.variables as any,\r\n operationName: options.operationName,\r\n extensions: options.extensions,\r\n };\r\n let finished = false;\r\n const timeoutMs = options.timeoutMs ?? this.options.operationTimeoutMs;\r\n let timeout: NodeJS.Timeout | undefined;\r\n if (timeoutMs > 0) {\r\n timeout = setTimeout(() => {\r\n if (finished) return;\r\n finished = true;\r\n observer.error?.(new Error('Operation timed out'));\r\n dispose();\r\n }, timeoutMs);\r\n }\r\n const dispose = this.client.subscribe(payload, {\r\n next: (data) => observer.next?.(data as any),\r\n error: (err) => {\r\n if (finished) return;\r\n finished = true;\r\n if (timeout) clearTimeout(timeout);\r\n observer.error?.(err);\r\n },\r\n complete: () => {\r\n if (finished) return;\r\n finished = true;\r\n if (timeout) clearTimeout(timeout);\r\n observer.complete?.();\r\n },\r\n });\r\n return () => {\r\n if (finished) return;\r\n finished = true;\r\n if (timeout) clearTimeout(timeout);\r\n dispose();\r\n };\r\n }\r\n\r\n /** Async iterator variant (convenience wrapper around underlying client.iterate). */\r\n clientiterate<TData = any, TVars extends Record<string, unknown> = Record<string, unknown>>(options: SubscribeOptions<TData, TVars>): AsyncIterable<{ data?: TData; errors?: any }> {\r\n if (!this.client) throw new Error('Client not connected - call connect() first');\r\n const payload: SubscribePayload = {\r\n query: options.query,\r\n variables: options.variables as any,\r\n operationName: options.operationName,\r\n extensions: options.extensions,\r\n };\r\n // graphql-ws client.iterate returns AsyncIterableExecutionResult\r\n // We forward it directly (user can for-await over it).\r\n return (this.client as any).iterate(payload);\r\n }\r\n\r\n async close(code = 1000, reason = 'Normal Closure') {\r\n this.closedExplicitly = true;\r\n this.log('closing client');\r\n if (this.reconnectTimer) {\r\n clearTimeout(this.reconnectTimer);\r\n this.reconnectTimer = null;\r\n }\r\n const c = this.client as any;\r\n if (c) { try { c.dispose(); } catch { } }\r\n this.client = null;\r\n this.removeAllListeners();\r\n }\r\n}\r\n\r\nexport default SubscriptionClient;\r\n"],"mappings":"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","names":["EventEmitter","import_eventemitter3","EventEmitter","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/MirrorSync.ts","../src/DelegateMap.ts","../node_modules/graphql-ws/dist/common-CGW11Fyb.js","../node_modules/graphql-ws/dist/client.js","../src/SubscriptionClient.ts"],"sourcesContent":["import { MirrorSync } from \"./MirrorSync\";\r\nimport { ReadonlyMapView, DelegatingObject, DelegatingMap } from \"./DelegateMap\";\r\nimport SubscriptionClient from \"./SubscriptionClient\";\r\nimport { symlink } from \"fs\";\r\nimport { create } from \"domain\";\r\n\r\nexport { SubscriptionClient, MirrorSync, DelegatingObject };\r\nexport type { ReadonlyMapView };\r\n\r\nexport class Connection extends SubscriptionClient {\r\n public Mirrors: Map<string, MirrorSync> = new Map();\r\n constructor() {\r\n super();\r\n }\r\n InitConnection(url: string, connectionParams: () => Promise<Record<string, unknown> | Record<string, unknown>>) {\r\n this.InitClient({\r\n url: url,\r\n connectionParams: connectionParams\r\n });\r\n }\r\n\r\n getMirror(name: string, subscription: string, baseVariables: Record<string, unknown>): MirrorSync {\r\n let entry = this.Mirrors.get(name);\r\n if (!entry) {\r\n const sync = this.createMirror(subscription, baseVariables);\r\n const forward = (event: string, payload: any) => {\r\n this.emit(`mirror:${event}`, { mirrorName: name, ...payload });\r\n };\r\n const handlers: Array<[string, (...args: any[]) => void]> = [\r\n ['start', (p) => forward('start', p)],\r\n ['updated', (item, fullPhase) => forward('updated', { item, fullPhase })],\r\n ['deleted', (p) => forward('deleted', p)],\r\n ['done', (p) => forward('done', p)],\r\n ['versionError', (p) => forward('versionError', p)],\r\n ['resubscribe', (p) => forward('resubscribe', p)],\r\n ['error', (p) => forward('error', p)],\r\n ];\r\n handlers.forEach(([e, h]) => sync.on(e as any, h)); \r\n this.Mirrors.set(name, sync);\r\n entry = sync;\r\n }\r\n return entry;\r\n }\r\n createMirror(subscription: string, baseVariables: Record<string, unknown>): MirrorSync {\r\n return new MirrorSync(this, { subscription, baseVariables });\r\n }\r\n\r\n removeMirror(name: string) {\r\n const entry = this.Mirrors.get(name);\r\n if (!entry) return;\r\n entry.removeAllListeners();\r\n entry.stop();\r\n this.Mirrors.delete(name);\r\n this.emit('mirror:removed', { mirrorName: name });\r\n }\r\n\r\n clearMirrors() {\r\n for (const name of Array.from(this.Mirrors.keys())) {\r\n this.removeMirror(name);\r\n }\r\n this.emit('mirror:cleared');\r\n }\r\n}\r\n","import { DelegatingMap, ReadonlyMapView } from './DelegateMap';\r\nimport { SubscriptionClient } from './SubscriptionClient';\r\nimport EventEmitter from 'eventemitter3';\r\n\r\n// SyncType enum as described\r\nexport enum SyncType {\r\n DELETED = 'DELETED',\r\n UPDATED = 'UPDATED',\r\n START = 'START',\r\n DONE = 'DONE',\r\n VERSION_ERROR = 'VERSION_ERROR',\r\n}\r\n\r\n// Shape of the subscription payload (generic)\r\nexport interface CacheSyncResult {\r\n type: SyncType;\r\n total?: number | null;\r\n deleteId?: string; // ObjectId as string\r\n data?: any;\r\n deleteVersion?: number;\r\n // Optional operation-based versioning (string) for hybrid mode\r\n deleteOpVersion?: string;\r\n opVersion?: string; // May appear on items inside data\r\n}\r\n\r\nexport interface MirrorSyncOptions {\r\n /** Subscription document (query string) */\r\n subscription: string;\r\n /** Optional logger */\r\n /** Custom variables base (besides version) */\r\n baseVariables?: Record<string, unknown>;\r\n}\r\n\r\nexport interface MirrorStats {\r\n version: number; // numeric version cursor\r\n opVersion?: string | null; // operation (ObjectId) cursor\r\n size: number;\r\n fullSyncInProgress: boolean;\r\n totalHint?: number | null;\r\n}\r\n\r\nexport interface MirrorSyncEvents {\r\n start: (info: { full: boolean }) => void;\r\n updated: (item: MirrorItem, isFullPhase: boolean) => void;\r\n deleted: (info: { id: string; version: number | undefined }) => void;\r\n done: (info: { full: boolean }) => void;\r\n versionError: (info: { currentVersion: number }) => void;\r\n resubscribe: (info: { fromVersion: number }) => void;\r\n error?: (errors: any) => void;\r\n}\r\n\r\n\r\nexport interface MirrorItem { id: string; version?: number; opVersion?: string;[k: string]: any, deleted?: boolean; }\r\n\r\n/**\r\n * MirrorSync maintains an in-memory mirror of server state based on CacheSyncResult messages.\r\n * Generic TBase is the item shape (must include id & version).\r\n */\r\nexport class MirrorSync extends EventEmitter {\r\n private client: SubscriptionClient;\r\n private options: MirrorSyncOptions;\r\n private _mirror = new Map<string, MirrorItem>();\r\n private get mirror() { return this._mirror; } \r\n private buffer: Map<string, MirrorItem> | null = null; // used during full/resubscription phase\r\n private currentVersion = -1; // numeric cursor (-1 => full sync needed)\r\n private currentOpVersion: string | null = null; // op cursor (null => full sync needed)\r\n private unsub: (() => void) | null = null;\r\n private fullSyncPhase = false; // only true during START..DONE when initiating from version -1\r\n private log?: (msg: string, meta?: any) => void;\r\n /** Deferred promise resolved on first DONE after a (re)start full sync cycle. Reset on constructor, start(), and VERSION_ERROR re-init. */\r\n public loaded!: Promise<ReadonlyMapView<string, any>>; // set via resetLoaded()\r\n private resolveLoaded?: (ref: ReadonlyMapView<string, any>) => void;\r\n // Stored client event handlers to allow proper detachment\r\n private __onReconnected?: () => void;\r\n private __onConnected?: () => void;\r\n private backlog: (() => void)[] = [];\r\n\r\n get Storage(): ReadonlyMapView<string, any> { return this.mirror; }\r\n\r\n constructor(client: SubscriptionClient, options: MirrorSyncOptions & { log?: (msg: string, meta?: any) => void }) {\r\n super();\r\n this.client = client;\r\n this.options = options;\r\n this.log = options.log;\r\n this.attachClientEvents();\r\n this.resetLoaded();\r\n }\r\n\r\n private l(msg: string, meta?: any) { if (this.log) this.log(msg, meta); }\r\n\r\n private attachClientEvents() {\r\n this.__onReconnected = () => {\r\n this.emit('resubscribe', { fromVersion: this.currentVersion });\r\n this.resubscribe();\r\n };\r\n this.__onConnected = () => {\r\n if ((this.currentVersion === -1 || this.currentOpVersion === null) && !this.unsub) {\r\n this.l('initial connected subscribe', { version: this.currentVersion, opVersion: this.currentOpVersion });\r\n this.subscribeInternal(this.currentVersion, this.currentOpVersion);\r\n }\r\n };\r\n this.client.on('reconnected', this.__onReconnected);\r\n this.client.on('connected', this.__onConnected);\r\n }\r\n\r\n private detachClientEvents() {\r\n if (this.__onReconnected) {\r\n this.client.off('reconnected', this.__onReconnected);\r\n this.__onReconnected = undefined;\r\n }\r\n if (this.__onConnected) {\r\n this.client.off('connected', this.__onConnected);\r\n this.__onConnected = undefined;\r\n }\r\n }\r\n\r\n private targetMap(): Map<string, MirrorItem> { return (this.fullSyncPhase && this.buffer) ? this.buffer! : this.mirror; }\r\n private advanceNumeric(v?: number) { if (typeof v === 'number' && v > this.currentVersion) this.currentVersion = v; }\r\n private advanceOp(v?: string) { if (v && (!this.currentOpVersion || v > this.currentOpVersion)) this.currentOpVersion = v; }\r\n\r\n private subscribeInternal(version: number, opVersion: string | null) {\r\n if (!this.client) throw new Error('SubscriptionClient missing');\r\n if (this.unsub) { this.unsub(); this.unsub = null; }\r\n const variables = { version, opVersion, ...(this.options.baseVariables || {}) };\r\n this.l('subscribe', { version, opVersion });\r\n this.unsub = this.client.clientsubscribe<{ [k: string]: CacheSyncResult }>(\r\n { query: this.options.subscription, variables },\r\n {\r\n next: (envelope: { data?: { [k: string]: CacheSyncResult }; errors?: any }) => {\r\n if (envelope.errors) {\r\n this.l('graphql errors', envelope.errors);\r\n this.emit('error', envelope.errors);\r\n }\r\n const payload = envelope.data as { [k: string]: CacheSyncResult } | undefined;\r\n if (payload) this.handlePayload(payload);\r\n },\r\n error: (err: unknown) => this.l('subscription error', err),\r\n complete: () => this.l('subscription complete'),\r\n }\r\n );\r\n }\r\n\r\n private resubscribe() {\r\n // Resubscribe starting from current cursors\r\n this.subscribeInternal(this.currentVersion, this.currentOpVersion);\r\n }\r\n\r\n private start() {\r\n if (!this.client.isConnected()) { this.l('start deferred (not connected)'); return; }\r\n this.subscribeInternal(this.currentVersion, this.currentOpVersion);\r\n }\r\n\r\n load(): Promise<ReadonlyMapView<string, any>> {\r\n if (!this.unsub) this.start();\r\n return this.loaded;\r\n }\r\n private resetLoaded() {\r\n this.loaded = new Promise<ReadonlyMapView<string, any>>(resolve => {\r\n this.resolveLoaded = resolve;\r\n });\r\n }\r\n\r\n private handlePayload(raw: { [k: string]: CacheSyncResult } | undefined) {\r\n if (!raw) return;\r\n // Always pick the first field in the payload object regardless of configured rootField\r\n const firstKey = Object.keys(raw)[0];\r\n if (!firstKey) return;\r\n const msg = raw[firstKey];\r\n if (!msg) return;\r\n const { type } = msg;\r\n switch (type) {\r\n case SyncType.START: {\r\n // Only allocate a new buffer for a true full sync; for delta/resubscribe we append directly\r\n this.buffer = this.fullSyncPhase ? new Map() : null;\r\n const payload = { full: this.fullSyncPhase };\r\n this.emit('start', payload);\r\n break;\r\n }\r\n case SyncType.UPDATED:\r\n this.applyUpdated(msg.data);\r\n break;\r\n case SyncType.DELETED:\r\n this.applyDeleted(msg.deleteId, msg.deleteVersion, msg.deleteOpVersion);\r\n break;\r\n case SyncType.DONE: {\r\n const wasFull = this.fullSyncPhase;\r\n if (wasFull && this.buffer) {\r\n this._mirror = this.buffer;\r\n this.buffer = null;\r\n }\r\n this.fullSyncPhase = false;\r\n const d = { full: wasFull };\r\n if (wasFull) {\r\n for (const b of this.backlog) b();\r\n this.backlog = [];\r\n }\r\n this.emit('done', d);\r\n // Resolve deferred if pending\r\n if (this.resolveLoaded) {\r\n const r = this.resolveLoaded; this.resolveLoaded = undefined; r(this.mirror);\r\n }\r\n break;\r\n }\r\n case SyncType.VERSION_ERROR:\r\n const ve = { currentVersion: this.currentVersion };\r\n this.emit('versionError', ve);\r\n // restart as full sync\r\n this.currentVersion = -1;\r\n this.currentOpVersion = null;\r\n this.buffer = new Map();\r\n this.fullSyncPhase = true;\r\n this.resetLoaded();\r\n this.subscribeInternal(this.currentVersion, this.currentOpVersion);\r\n break;\r\n }\r\n }\r\n\r\n private normalizeItems(data: any): MirrorItem[] {\r\n if (!data) return [];\r\n return Array.isArray(data) ? data : [data];\r\n }\r\n\r\n private applyUpdated(data: any) {\r\n for (const item of this.normalizeItems(data)) {\r\n if (!item || typeof item.id !== 'string') continue;\r\n if (item.deleted) {\r\n this.applyDeleted(item.id, item.version, item.opVersion);\r\n continue;\r\n }\r\n const hasNumeric = typeof item.version === 'number';\r\n const hasOp = typeof item.opVersion === 'string';\r\n if (!hasNumeric && !hasOp) continue;\r\n const existing = this.targetMap().get(item.id);\r\n const newerNumeric = hasNumeric && (!existing?.version || item.version! >= existing.version);\r\n const newerOp = hasOp && (!existing?.opVersion || item.opVersion! >= existing.opVersion);\r\n if (!existing || newerNumeric || newerOp) {\r\n this.targetMap().set(item.id, item);\r\n this.advanceNumeric(item.version);\r\n this.advanceOp(item.opVersion);\r\n if (this.fullSyncPhase) {\r\n this.backlog.push(() => this.emit('updated', item, this.fullSyncPhase));\r\n } else {\r\n this.emit('updated', item, this.fullSyncPhase);\r\n }\r\n }\r\n }\r\n }\r\n private applyDeleted(id?: string, deleteVersion?: number, deleteOpVersion?: string) {\r\n if (!id) return;\r\n const numericStale = !this.fullSyncPhase && typeof deleteVersion === 'number' && this.currentVersion >= 0 && deleteVersion < this.currentVersion;\r\n const opStale = !this.fullSyncPhase && deleteOpVersion && this.currentOpVersion && deleteOpVersion < this.currentOpVersion;\r\n if (numericStale && opStale) {\r\n this.l?.('skip stale delete', { id, deleteVersion, deleteOpVersion });\r\n return;\r\n }\r\n this.targetMap().delete(id);\r\n this.advanceNumeric(deleteVersion);\r\n this.advanceOp(deleteOpVersion);\r\n const del: any = { id, version: deleteVersion };\r\n if (deleteOpVersion) del.opVersion = deleteOpVersion;\r\n if (this.fullSyncPhase) {\r\n this.backlog.push(() => this.emit('deleted', del));\r\n } else {\r\n this.emit('deleted', del);\r\n }\r\n }\r\n\r\n get(id: string): any | undefined { return this.mirror.get(id); }\r\n values(): any[] { return Array.from(this.mirror.values()); }\r\n stats(): MirrorStats { return { version: this.currentVersion, opVersion: this.currentOpVersion, size: this.mirror.size, fullSyncInProgress: this.fullSyncPhase }; }\r\n\r\n stop() {\r\n if (this.unsub) { this.unsub(); this.unsub = null; }\r\n this.detachClientEvents();\r\n this.currentVersion = -1;\r\n this.currentOpVersion = null;\r\n this.buffer = null;\r\n if (this.resolveLoaded) {\r\n const r = this.resolveLoaded; this.resolveLoaded = undefined; r(this.mirror);\r\n }\r\n this.resetLoaded();\r\n }\r\n}\r\n","// Restored specialized read-only view interface (runtime enforced via absence of mutators)\r\nexport interface ReadonlyMapView<K, V> extends Iterable<[K, V]> {\r\n readonly size: number;\r\n get(key: K): V | undefined;\r\n has(key: K): boolean;\r\n entries(): IterableIterator<[K, V]>;\r\n keys(): IterableIterator<K>;\r\n values(): IterableIterator<V>;\r\n forEach(callbackfn: (value: V, key: K, map: ReadonlyMapView<K, V>) => void, thisArg?: any): void;\r\n [Symbol.iterator](): IterableIterator<[K, V]>;\r\n}\r\n\r\nexport class DelegatingMap<K, V> implements ReadonlyMapView<K, V> {\r\n constructor(private readonly resolver: () => Map<K, V>) { }\r\n private t(): Map<K, V> { return this.resolver(); }\r\n get size(): number { return this.t().size; }\r\n get(key: K): V | undefined { return this.t().get(key); }\r\n has(key: K): boolean { return this.t().has(key); }\r\n entries(): IterableIterator<[K, V]> { return this.t().entries(); }\r\n keys(): IterableIterator<K> { return this.t().keys(); }\r\n values(): IterableIterator<V> { return this.t().values(); }\r\n forEach(callbackfn: (value: V, key: K, map: ReadonlyMapView<K, V>) => void, thisArg?: any): void {\r\n this.t().forEach(((v: V, k: K) => callbackfn(v, k, this)) as any, thisArg);\r\n }\r\n [Symbol.iterator](): IterableIterator<[K, V]> { return this.t()[Symbol.iterator](); }\r\n}\r\n\r\n/**\r\n * Presents a ReadonlyMapView<K,V> as an immutable plain object via Proxy.\r\n * Optionally maps values through a mapper function on access.\r\n */\r\nexport class DelegatingObject<K extends string, V, R = V> {\r\n private readonly proxy: Record<K, R>;\r\n constructor(private readonly source: ReadonlyMapView<K, V>, private readonly mapFn?: (value: V, key: K) => R) {\r\n const mapper = (v: V, k: K): R => (this.mapFn ? this.mapFn(v, k) : (v as unknown as R));\r\n const handler: ProxyHandler<any> = {\r\n get: (_target, prop: PropertyKey, receiver) => {\r\n if (prop === Symbol.toStringTag) return 'Object';\r\n if (typeof prop !== 'string') return Reflect.get(Object.prototype, prop, receiver);\r\n const key = prop as K;\r\n const v = this.source.get(key);\r\n return v === undefined ? undefined : mapper(v, key);\r\n },\r\n set: () => false, // immutable\r\n has: (_target, prop: PropertyKey) => typeof prop === 'string' && this.source.has(prop as K),\r\n deleteProperty: () => false, // immutable\r\n ownKeys: () => Array.from(this.source.keys() as unknown as IterableIterator<string>),\r\n getOwnPropertyDescriptor: (_target, prop: PropertyKey) => {\r\n if (typeof prop === 'string' && this.source.has(prop as K)) {\r\n const key = prop as K;\r\n const v = this.source.get(key)!;\r\n return { configurable: true, enumerable: true, value: mapper(v, key) };\r\n }\r\n return undefined;\r\n },\r\n defineProperty: () => false, // immutable\r\n };\r\n this.proxy = new Proxy(Object.create(null), handler);\r\n }\r\n asObject(): Record<K, R> { return this.proxy; }\r\n}\r\n","function extendedTypeof(val) {\n if (val === null) {\n return \"null\";\n }\n if (Array.isArray(val)) {\n return \"array\";\n }\n return typeof val;\n}\nfunction isObject(val) {\n return extendedTypeof(val) === \"object\";\n}\nfunction isAsyncIterable(val) {\n return typeof Object(val)[Symbol.asyncIterator] === \"function\";\n}\nfunction isAsyncGenerator(val) {\n return isObject(val) && typeof Object(val)[Symbol.asyncIterator] === \"function\" && typeof val.return === \"function\";\n}\nfunction areGraphQLFormattedErrors(obj) {\n return Array.isArray(obj) && // must be at least one error\n obj.length > 0 && // error has at least a message\n obj.every((ob) => \"message\" in ob);\n}\nfunction limitCloseReason(reason, whenTooLong) {\n return reason.length < 124 ? reason : whenTooLong;\n}\n\nconst GRAPHQL_TRANSPORT_WS_PROTOCOL = \"graphql-transport-ws\";\nconst DEPRECATED_GRAPHQL_WS_PROTOCOL = \"graphql-ws\";\nvar CloseCode = /* @__PURE__ */ ((CloseCode2) => {\n CloseCode2[CloseCode2[\"InternalServerError\"] = 4500] = \"InternalServerError\";\n CloseCode2[CloseCode2[\"InternalClientError\"] = 4005] = \"InternalClientError\";\n CloseCode2[CloseCode2[\"BadRequest\"] = 4400] = \"BadRequest\";\n CloseCode2[CloseCode2[\"BadResponse\"] = 4004] = \"BadResponse\";\n CloseCode2[CloseCode2[\"Unauthorized\"] = 4401] = \"Unauthorized\";\n CloseCode2[CloseCode2[\"Forbidden\"] = 4403] = \"Forbidden\";\n CloseCode2[CloseCode2[\"SubprotocolNotAcceptable\"] = 4406] = \"SubprotocolNotAcceptable\";\n CloseCode2[CloseCode2[\"ConnectionInitialisationTimeout\"] = 4408] = \"ConnectionInitialisationTimeout\";\n CloseCode2[CloseCode2[\"ConnectionAcknowledgementTimeout\"] = 4504] = \"ConnectionAcknowledgementTimeout\";\n CloseCode2[CloseCode2[\"SubscriberAlreadyExists\"] = 4409] = \"SubscriberAlreadyExists\";\n CloseCode2[CloseCode2[\"TooManyInitialisationRequests\"] = 4429] = \"TooManyInitialisationRequests\";\n return CloseCode2;\n})(CloseCode || {});\nvar MessageType = /* @__PURE__ */ ((MessageType2) => {\n MessageType2[\"ConnectionInit\"] = \"connection_init\";\n MessageType2[\"ConnectionAck\"] = \"connection_ack\";\n MessageType2[\"Ping\"] = \"ping\";\n MessageType2[\"Pong\"] = \"pong\";\n MessageType2[\"Subscribe\"] = \"subscribe\";\n MessageType2[\"Next\"] = \"next\";\n MessageType2[\"Error\"] = \"error\";\n MessageType2[\"Complete\"] = \"complete\";\n return MessageType2;\n})(MessageType || {});\nfunction validateMessage(val) {\n if (!isObject(val)) {\n throw new Error(\n `Message is expected to be an object, but got ${extendedTypeof(val)}`\n );\n }\n if (!val.type) {\n throw new Error(`Message is missing the 'type' property`);\n }\n if (typeof val.type !== \"string\") {\n throw new Error(\n `Message is expects the 'type' property to be a string, but got ${extendedTypeof(\n val.type\n )}`\n );\n }\n switch (val.type) {\n case \"connection_init\" /* ConnectionInit */:\n case \"connection_ack\" /* ConnectionAck */:\n case \"ping\" /* Ping */:\n case \"pong\" /* Pong */: {\n if (val.payload != null && !isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object or nullish or missing, but got \"${val.payload}\"`\n );\n }\n break;\n }\n case \"subscribe\" /* Subscribe */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n if (typeof val.payload.query !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'query' property to be a string, but got ${extendedTypeof(\n val.payload.query\n )}`\n );\n }\n if (val.payload.variables != null && !isObject(val.payload.variables)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'variables' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.variables\n )}`\n );\n }\n if (val.payload.operationName != null && extendedTypeof(val.payload.operationName) !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'operationName' property to be a string or nullish or missing, but got ${extendedTypeof(\n val.payload.operationName\n )}`\n );\n }\n if (val.payload.extensions != null && !isObject(val.payload.extensions)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'extensions' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.extensions\n )}`\n );\n }\n break;\n }\n case \"next\" /* Next */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"error\" /* Error */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!areGraphQLFormattedErrors(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an array of GraphQL errors, but got ${JSON.stringify(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"complete\" /* Complete */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n break;\n }\n default:\n throw new Error(`Invalid message 'type' property \"${val.type}\"`);\n }\n return val;\n}\nfunction parseMessage(data, reviver) {\n return validateMessage(\n typeof data === \"string\" ? JSON.parse(data, reviver) : data\n );\n}\nfunction stringifyMessage(msg, replacer) {\n validateMessage(msg);\n return JSON.stringify(msg, replacer);\n}\n\nexport { CloseCode as C, DEPRECATED_GRAPHQL_WS_PROTOCOL as D, GRAPHQL_TRANSPORT_WS_PROTOCOL as G, MessageType as M, isAsyncGenerator as a, isAsyncIterable as b, isObject as i, limitCloseReason as l, parseMessage as p, stringifyMessage as s, validateMessage as v };\n","import { i as isObject, G as GRAPHQL_TRANSPORT_WS_PROTOCOL, s as stringifyMessage, M as MessageType, C as CloseCode, l as limitCloseReason, p as parseMessage } from './common-CGW11Fyb.js';\nexport { D as DEPRECATED_GRAPHQL_WS_PROTOCOL, v as validateMessage } from './common-CGW11Fyb.js';\n\nfunction createClient(options) {\n const {\n url,\n connectionParams,\n lazy = true,\n onNonLazyError = console.error,\n lazyCloseTimeout: lazyCloseTimeoutMs = 0,\n keepAlive = 0,\n disablePong,\n connectionAckWaitTimeout = 0,\n retryAttempts = 5,\n retryWait = async function randomisedExponentialBackoff(retries2) {\n const retryDelaySeconds = Math.pow(2, retries2);\n await new Promise(\n (resolve) => setTimeout(\n resolve,\n retryDelaySeconds * 1e3 + // add random timeout from 300ms to 3s\n Math.floor(Math.random() * (3e3 - 300) + 300)\n )\n );\n },\n shouldRetry = isLikeCloseEvent,\n on,\n webSocketImpl,\n /**\n * Generates a v4 UUID to be used as the ID using `Math`\n * as the random number generator. Supply your own generator\n * in case you need more uniqueness.\n *\n * Reference: https://gist.github.com/jed/982883\n */\n generateID = function generateUUID() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n },\n jsonMessageReplacer: replacer,\n jsonMessageReviver: reviver\n } = options;\n let ws;\n if (webSocketImpl) {\n if (!isWebSocket(webSocketImpl)) {\n throw new Error(\"Invalid WebSocket implementation provided\");\n }\n ws = webSocketImpl;\n } else if (typeof WebSocket !== \"undefined\") {\n ws = WebSocket;\n } else if (typeof global !== \"undefined\") {\n ws = global.WebSocket || // @ts-expect-error: Support more browsers\n global.MozWebSocket;\n } else if (typeof window !== \"undefined\") {\n ws = window.WebSocket || // @ts-expect-error: Support more browsers\n window.MozWebSocket;\n }\n if (!ws)\n throw new Error(\n \"WebSocket implementation missing; on Node you can `import WebSocket from 'ws';` and pass `webSocketImpl: WebSocket` to `createClient`\"\n );\n const WebSocketImpl = ws;\n const emitter = (() => {\n const message = /* @__PURE__ */ (() => {\n const listeners2 = {};\n return {\n on(id, listener) {\n listeners2[id] = listener;\n return () => {\n delete listeners2[id];\n };\n },\n emit(message2) {\n if (\"id\" in message2) listeners2[message2.id]?.(message2);\n }\n };\n })();\n const listeners = {\n connecting: on?.connecting ? [on.connecting] : [],\n opened: on?.opened ? [on.opened] : [],\n connected: on?.connected ? [on.connected] : [],\n ping: on?.ping ? [on.ping] : [],\n pong: on?.pong ? [on.pong] : [],\n message: on?.message ? [message.emit, on.message] : [message.emit],\n closed: on?.closed ? [on.closed] : [],\n error: on?.error ? [on.error] : []\n };\n return {\n onMessage: message.on,\n on(event, listener) {\n const l = listeners[event];\n l.push(listener);\n return () => {\n l.splice(l.indexOf(listener), 1);\n };\n },\n emit(event, ...args) {\n for (const listener of [...listeners[event]]) {\n listener(...args);\n }\n }\n };\n })();\n function errorOrClosed(cb) {\n const listening = [\n // errors are fatal and more critical than close events, throw them first\n emitter.on(\"error\", (err) => {\n listening.forEach((unlisten) => unlisten());\n cb(err);\n }),\n // closes can be graceful and not fatal, throw them second (if error didnt throw)\n emitter.on(\"closed\", (event) => {\n listening.forEach((unlisten) => unlisten());\n cb(event);\n })\n ];\n }\n let connecting, locks = 0, lazyCloseTimeout, retrying = false, retries = 0, disposed = false;\n async function connect() {\n clearTimeout(lazyCloseTimeout);\n const [socket, throwOnClose] = await (connecting ?? (connecting = new Promise(\n (connected, denied) => (async () => {\n if (retrying) {\n await retryWait(retries);\n if (!locks) {\n connecting = void 0;\n return denied({ code: 1e3, reason: \"All Subscriptions Gone\" });\n }\n retries++;\n }\n emitter.emit(\"connecting\", retrying);\n const socket2 = new WebSocketImpl(\n typeof url === \"function\" ? await url() : url,\n GRAPHQL_TRANSPORT_WS_PROTOCOL\n );\n let connectionAckTimeout, queuedPing;\n function enqueuePing() {\n if (isFinite(keepAlive) && keepAlive > 0) {\n clearTimeout(queuedPing);\n queuedPing = setTimeout(() => {\n if (socket2.readyState === WebSocketImpl.OPEN) {\n socket2.send(stringifyMessage({ type: MessageType.Ping }));\n emitter.emit(\"ping\", false, void 0);\n }\n }, keepAlive);\n }\n }\n errorOrClosed((errOrEvent) => {\n connecting = void 0;\n clearTimeout(connectionAckTimeout);\n clearTimeout(queuedPing);\n denied(errOrEvent);\n if (errOrEvent instanceof TerminatedCloseEvent) {\n socket2.close(4499, \"Terminated\");\n socket2.onerror = null;\n socket2.onclose = null;\n }\n });\n socket2.onerror = (err) => emitter.emit(\"error\", err);\n socket2.onclose = (event) => emitter.emit(\"closed\", event);\n socket2.onopen = async () => {\n try {\n emitter.emit(\"opened\", socket2);\n const payload = typeof connectionParams === \"function\" ? await connectionParams() : connectionParams;\n if (socket2.readyState !== WebSocketImpl.OPEN) return;\n socket2.send(\n stringifyMessage(\n payload ? {\n type: MessageType.ConnectionInit,\n payload\n } : {\n type: MessageType.ConnectionInit\n // payload is completely absent if not provided\n },\n replacer\n )\n );\n if (isFinite(connectionAckWaitTimeout) && connectionAckWaitTimeout > 0) {\n connectionAckTimeout = setTimeout(() => {\n socket2.close(\n CloseCode.ConnectionAcknowledgementTimeout,\n \"Connection acknowledgement timeout\"\n );\n }, connectionAckWaitTimeout);\n }\n enqueuePing();\n } catch (err) {\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.InternalClientError,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Internal client error\"\n )\n );\n }\n };\n let acknowledged = false;\n socket2.onmessage = ({ data }) => {\n try {\n const message = parseMessage(data, reviver);\n emitter.emit(\"message\", message);\n if (message.type === \"ping\" || message.type === \"pong\") {\n emitter.emit(message.type, true, message.payload);\n if (message.type === \"pong\") {\n enqueuePing();\n } else if (!disablePong) {\n socket2.send(\n stringifyMessage(\n message.payload ? {\n type: MessageType.Pong,\n payload: message.payload\n } : {\n type: MessageType.Pong\n // payload is completely absent if not provided\n }\n )\n );\n emitter.emit(\"pong\", false, message.payload);\n }\n return;\n }\n if (acknowledged) return;\n if (message.type !== MessageType.ConnectionAck)\n throw new Error(\n `First message cannot be of type ${message.type}`\n );\n clearTimeout(connectionAckTimeout);\n acknowledged = true;\n emitter.emit(\"connected\", socket2, message.payload, retrying);\n retrying = false;\n retries = 0;\n connected([\n socket2,\n new Promise((_, reject) => errorOrClosed(reject))\n ]);\n } catch (err) {\n socket2.onmessage = null;\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.BadResponse,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Bad response\"\n )\n );\n }\n };\n })()\n )));\n if (socket.readyState === WebSocketImpl.CLOSING) await throwOnClose;\n let release = () => {\n };\n const released = new Promise((resolve) => release = resolve);\n return [\n socket,\n release,\n Promise.race([\n // wait for\n released.then(() => {\n if (!locks) {\n const complete = () => socket.close(1e3, \"Normal Closure\");\n if (isFinite(lazyCloseTimeoutMs) && lazyCloseTimeoutMs > 0) {\n lazyCloseTimeout = setTimeout(() => {\n if (socket.readyState === WebSocketImpl.OPEN) complete();\n }, lazyCloseTimeoutMs);\n } else {\n complete();\n }\n }\n }),\n // or\n throwOnClose\n ])\n ];\n }\n function shouldRetryConnectOrThrow(errOrCloseEvent) {\n if (isLikeCloseEvent(errOrCloseEvent) && (isFatalInternalCloseCode(errOrCloseEvent.code) || [\n CloseCode.InternalServerError,\n CloseCode.InternalClientError,\n CloseCode.BadRequest,\n CloseCode.BadResponse,\n CloseCode.Unauthorized,\n // CloseCode.Forbidden, might grant access out after retry\n CloseCode.SubprotocolNotAcceptable,\n // CloseCode.ConnectionInitialisationTimeout, might not time out after retry\n // CloseCode.ConnectionAcknowledgementTimeout, might not time out after retry\n CloseCode.SubscriberAlreadyExists,\n CloseCode.TooManyInitialisationRequests\n // 4499, // Terminated, probably because the socket froze, we want to retry\n ].includes(errOrCloseEvent.code)))\n throw errOrCloseEvent;\n if (disposed) return false;\n if (isLikeCloseEvent(errOrCloseEvent) && errOrCloseEvent.code === 1e3)\n return locks > 0;\n if (!retryAttempts || retries >= retryAttempts) throw errOrCloseEvent;\n if (!shouldRetry(errOrCloseEvent)) throw errOrCloseEvent;\n return retrying = true;\n }\n if (!lazy) {\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [, , throwOnClose] = await connect();\n await throwOnClose;\n } catch (errOrCloseEvent) {\n try {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n } catch (errOrCloseEvent2) {\n return onNonLazyError?.(errOrCloseEvent2);\n }\n }\n }\n })();\n }\n function subscribe(payload, sink) {\n const id = generateID(payload);\n let done = false, errored = false, releaser = () => {\n locks--;\n done = true;\n };\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [socket, release, waitForReleaseOrThrowOnClose] = await connect();\n if (done) return release();\n const unlisten = emitter.onMessage(id, (message) => {\n switch (message.type) {\n case MessageType.Next: {\n sink.next(message.payload);\n return;\n }\n case MessageType.Error: {\n errored = true, done = true;\n sink.error(message.payload);\n releaser();\n return;\n }\n case MessageType.Complete: {\n done = true;\n releaser();\n return;\n }\n }\n });\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Subscribe,\n payload\n },\n replacer\n )\n );\n releaser = () => {\n if (!done && socket.readyState === WebSocketImpl.OPEN)\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Complete\n },\n replacer\n )\n );\n locks--;\n done = true;\n release();\n };\n await waitForReleaseOrThrowOnClose.finally(unlisten);\n return;\n } catch (errOrCloseEvent) {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n }\n }\n })().then(() => {\n if (!errored) sink.complete();\n }).catch((err) => {\n sink.error(err);\n });\n return () => {\n if (!done) releaser();\n };\n }\n return {\n on: emitter.on,\n subscribe,\n iterate(request) {\n const pending = [];\n const deferred = {\n done: false,\n error: null,\n resolve: () => {\n }\n };\n const dispose = subscribe(request, {\n next(val) {\n pending.push(val);\n deferred.resolve();\n },\n error(err) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n },\n complete() {\n deferred.done = true;\n deferred.resolve();\n }\n });\n const iterator = async function* iterator2() {\n for (; ; ) {\n if (!pending.length) {\n await new Promise((resolve) => deferred.resolve = resolve);\n }\n while (pending.length) {\n yield pending.shift();\n }\n if (deferred.error) {\n throw deferred.error;\n }\n if (deferred.done) {\n return;\n }\n }\n }();\n iterator.throw = async (err) => {\n if (!deferred.done) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n }\n return { done: true, value: void 0 };\n };\n iterator.return = async () => {\n dispose();\n return { done: true, value: void 0 };\n };\n return iterator;\n },\n async dispose() {\n disposed = true;\n if (connecting) {\n const [socket] = await connecting;\n socket.close(1e3, \"Normal Closure\");\n }\n },\n terminate() {\n if (connecting) {\n emitter.emit(\"closed\", new TerminatedCloseEvent());\n }\n }\n };\n}\nclass TerminatedCloseEvent extends Error {\n name = \"TerminatedCloseEvent\";\n message = \"4499: Terminated\";\n code = 4499;\n reason = \"Terminated\";\n wasClean = false;\n}\nfunction isLikeCloseEvent(val) {\n return isObject(val) && \"code\" in val && \"reason\" in val;\n}\nfunction isFatalInternalCloseCode(code) {\n if ([\n 1e3,\n // Normal Closure is not an erroneous close code\n 1001,\n // Going Away\n 1006,\n // Abnormal Closure\n 1005,\n // No Status Received\n 1012,\n // Service Restart\n 1013,\n // Try Again Later\n 1014\n // Bad Gateway\n ].includes(code))\n return false;\n return code >= 1e3 && code <= 1999;\n}\nfunction isWebSocket(val) {\n return typeof val === \"function\" && \"constructor\" in val && \"CLOSED\" in val && \"CLOSING\" in val && \"CONNECTING\" in val && \"OPEN\" in val;\n}\n\nexport { CloseCode, GRAPHQL_TRANSPORT_WS_PROTOCOL, MessageType, TerminatedCloseEvent, createClient, parseMessage, stringifyMessage };\n","import { createClient, Client, ClientOptions, SubscribePayload } from 'graphql-ws';\r\n// Removed direct 'ws' import for browser compatibility; will resolve at runtime if needed.\r\nimport EventEmitter from 'eventemitter3';\r\n\r\n/** Events emitted by SubscriptionClient\r\n * connecting - before opening a socket (initial or reconnect attempt)\r\n * connected - first successful connection\r\n * reconnected - a subsequent successful connection after a disconnect\r\n * disconnected - socket closed ( { code, reason, wasClean } )\r\n * error - protocol or network error (Error)\r\n * retry - about to attempt reconnect ( { attempt } )\r\n */\r\nexport interface SubscriptionClientEvents {\r\n connecting: () => void;\r\n connected: () => void;\r\n reconnected: () => void;\r\n disconnected: (info: { code: number; reason: string; wasClean: boolean }) => void;\r\n error: (err: unknown) => void;\r\n retry: (info: { attempt: number }) => void;\r\n}\r\n\r\nexport interface SubscriptionClientOptions {\r\n url: string;\r\n /** optional async or sync connection params */\r\n connectionParams?: ClientOptions['connectionParams'];\r\n /** number of reconnect attempts, default Infinity */\r\n maxReconnectAttempts?: number;\r\n /** initial delay ms before first retry (exponential backoff) */\r\n retryDelayMs?: number;\r\n /** max backoff cap */\r\n maxRetryDelayMs?: number;\r\n /** idle timeout for operations (optional) */\r\n operationTimeoutMs?: number;\r\n /** optional custom WebSocket implementation */\r\n webSocketImpl?: any; // generic to avoid pulling node 'ws' types into browser bundle\r\n /** optional logger */\r\n log?: (msg: string, meta?: any) => void;\r\n}\r\n\r\nexport interface SubscribeOptions<TData = any, TVars = Record<string, unknown>> {\r\n query: string;\r\n variables?: TVars;\r\n /** optional per-subscription timeout override */\r\n timeoutMs?: number;\r\n operationName?: string;\r\n extensions?: Record<string, any>;\r\n}\r\n\r\nexport interface Observer<T> {\r\n next?: (data: T) => void;\r\n error?: (err: unknown) => void;\r\n complete?: () => void;\r\n}\r\n\r\nexport class SubscriptionClient extends EventEmitter {\r\n private options?: Required<Omit<SubscriptionClientOptions, 'connectionParams' | 'log' | 'webSocketImpl'>> & Pick<SubscriptionClientOptions, 'connectionParams' | 'log' | 'webSocketImpl'>;\r\n private client: Client | null = null;\r\n private connectAttempt = 0;\r\n private closedExplicitly = false;\r\n private reconnecting = false;\r\n private reconnectTimer: NodeJS.Timeout | null = null;\r\n private hasEverConnected = false; \r\n\r\n constructor() {\r\n super();\r\n }\r\n InitClient(opts: SubscriptionClientOptions) {\r\n this.options = {\r\n url: opts.url,\r\n connectionParams: opts.connectionParams,\r\n maxReconnectAttempts: opts.maxReconnectAttempts ?? Infinity,\r\n retryDelayMs: opts.retryDelayMs ?? 500,\r\n maxRetryDelayMs: opts.maxRetryDelayMs ?? 10_000,\r\n operationTimeoutMs: opts.operationTimeoutMs ?? 0,\r\n webSocketImpl: opts.webSocketImpl ?? undefined,\r\n log: opts.log,\r\n } as any;\r\n }\r\n\r\n private resolveWebSocketImpl(): any {\r\n if (!this.options) throw new Error('SubscriptionClient not initialized - call InitConnection first');\r\n // Proxy-aware priority:\r\n // 1. Explicit user-supplied impl\r\n // 2. Browser bundle: never load 'ws' — use global WebSocket\r\n // 3. If proxy env detected (Node) -> prefer 'ws'\r\n // 4. Global WebSocket (browser / Node >= 18 native)\r\n // 5. Fallback to require('ws') (Node)\r\n if (this.options.webSocketImpl) return this.options.webSocketImpl;\r\n\r\n if (process.env.BUILD_TARGET === 'browser') {\r\n const g: any = (globalThis as any);\r\n if (typeof g.WebSocket === 'function') return g.WebSocket;\r\n throw new Error('No WebSocket implementation found in browser. Provide webSocketImpl.');\r\n } else {\r\n const proxyEnv = process.env.ALL_PROXY || process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.GLOBAL_AGENT_HTTP_PROXY;\r\n if (proxyEnv) {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n return require('ws');\r\n } catch (e) {\r\n this.log('Proxy detected but failed to load ws package', e);\r\n }\r\n }\r\n const g: any = (globalThis as any);\r\n if (typeof g.WebSocket === 'function') return g.WebSocket;\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n return require('ws');\r\n } catch {\r\n throw new Error('No WebSocket implementation found. Provide webSocketImpl in SubscriptionClientOptions.');\r\n }\r\n }\r\n }\r\n\r\n /** Returns true if an underlying websocket client exists (connected or in-flight). */\r\n isConnected(): boolean {\r\n return !!this.client; // createClientIfNeeded only after socket open attempt\r\n }\r\n\r\n private log(msg: string, meta?: any) {\r\n if (this.options?.log) this.options.log(msg, meta);\r\n }\r\n\r\n private createClientIfNeeded(isReconnect: boolean) {\r\n if (!this.options) throw new Error('SubscriptionClient not initialized - call InitConnection first');\r\n if (this.client) return; // already have client\r\n const { url, connectionParams } = this.options;\r\n const webSocketImpl = this.resolveWebSocketImpl();\r\n this.client = createClient({\r\n url,\r\n connectionParams,\r\n webSocketImpl: webSocketImpl as any,\r\n lazy: false,\r\n keepAlive: 12000,\r\n retryAttempts: 0,\r\n shouldRetry: () => false,\r\n on: {\r\n connected: () => {\r\n const wasReconnect = isReconnect && this.connectAttempt > 0;\r\n this.connectAttempt = 0;\r\n if (wasReconnect && this.hasEverConnected) {\r\n this.emit('reconnected');\r\n this.log('reconnected');\r\n } else {\r\n this.emit('connected');\r\n this.log('connected');\r\n }\r\n this.hasEverConnected = true;\r\n },\r\n error: (err) => {\r\n this.emit('error', err);\r\n this.log('socket error', err);\r\n },\r\n closed: (ev) => {\r\n const e = ev as CloseEvent | { code: number; reason: string; wasClean: boolean };\r\n this.log('closed', e);\r\n this.emit('disconnected', { code: (e as any).code, reason: (e as any).reason?.toString?.() ?? '', wasClean: (e as any).wasClean ?? false });\r\n this.client?.dispose();\r\n this.client = null; // allow recreate\r\n if (!this.closedExplicitly) this.scheduleReconnect();\r\n },\r\n },\r\n });\r\n }\r\n\r\n // assureConnected removed per revert request\r\n\r\n /** Establish the WebSocket connection if not already created. Idempotent. */\r\n connect(): void {\r\n if (this.client) return; // already created\r\n this.emit('connecting');\r\n this.log('connecting');\r\n this.createClientIfNeeded(false);\r\n }\r\n\r\n private scheduleReconnect() {\r\n if (!this.options) throw new Error('SubscriptionClient not initialized - call InitConnection first');\r\n if (this.reconnecting) return;\r\n if (this.closedExplicitly) {\r\n this.log('Reconnect prevented: client closed explicitly');\r\n return;\r\n }\r\n if (this.connectAttempt >= this.options.maxReconnectAttempts) {\r\n this.log('max reconnect attempts reached');\r\n return;\r\n }\r\n this.reconnecting = true;\r\n const delay = Math.min(\r\n this.options.retryDelayMs * Math.pow(2, this.connectAttempt),\r\n this.options.maxRetryDelayMs,\r\n );\r\n this.emit('retry', { attempt: this.connectAttempt });\r\n this.log('reconnect scheduled', { attempt: this.connectAttempt, delay });\r\n if (this.reconnectTimer) clearTimeout(this.reconnectTimer);\r\n this.reconnectTimer = setTimeout(() => {\r\n this.reconnecting = false;\r\n this.connectAttempt++;\r\n this.emit('connecting');\r\n this.log('connecting');\r\n this.createClientIfNeeded(true);\r\n }, delay);\r\n }\r\n\r\n clientsubscribe<TData = any, TVars extends Record<string, unknown> = Record<string, unknown>>(options: SubscribeOptions<TData, TVars>, observer: Observer<{ data?: TData; errors?: any }>): () => void {\r\n if (!this.options) throw new Error('SubscriptionClient not initialized - call InitConnection first');\r\n if (!this.client) throw new Error('Client not connected - call connect() first');\r\n const payload: SubscribePayload = {\r\n query: options.query,\r\n variables: options.variables as any,\r\n operationName: options.operationName,\r\n extensions: options.extensions,\r\n };\r\n let finished = false;\r\n const timeoutMs = options.timeoutMs ?? this.options.operationTimeoutMs;\r\n let timeout: NodeJS.Timeout | undefined;\r\n if (timeoutMs > 0) {\r\n timeout = setTimeout(() => {\r\n if (finished) return;\r\n finished = true;\r\n observer.error?.(new Error('Operation timed out'));\r\n dispose();\r\n }, timeoutMs);\r\n }\r\n const dispose = this.client.subscribe(payload, {\r\n next: (data) => observer.next?.(data as any),\r\n error: (err) => {\r\n if (finished) return;\r\n finished = true;\r\n if (timeout) clearTimeout(timeout);\r\n observer.error?.(err);\r\n },\r\n complete: () => {\r\n if (finished) return;\r\n finished = true;\r\n if (timeout) clearTimeout(timeout);\r\n observer.complete?.();\r\n },\r\n });\r\n return () => {\r\n if (finished) return;\r\n finished = true;\r\n if (timeout) clearTimeout(timeout);\r\n dispose();\r\n };\r\n }\r\n\r\n /** Async iterator variant (convenience wrapper around underlying client.iterate). */\r\n clientiterate<TData = any, TVars extends Record<string, unknown> = Record<string, unknown>>(options: SubscribeOptions<TData, TVars>): AsyncIterable<{ data?: TData; errors?: any }> {\r\n if (!this.client) throw new Error('Client not connected - call connect() first');\r\n const payload: SubscribePayload = {\r\n query: options.query,\r\n variables: options.variables as any,\r\n operationName: options.operationName,\r\n extensions: options.extensions,\r\n };\r\n // graphql-ws client.iterate returns AsyncIterableExecutionResult\r\n // We forward it directly (user can for-await over it).\r\n return (this.client as any).iterate(payload);\r\n }\r\n\r\n async close(code = 1000, reason = 'Normal Closure') {\r\n this.closedExplicitly = true;\r\n this.log('closing client');\r\n if (this.reconnectTimer) {\r\n clearTimeout(this.reconnectTimer);\r\n this.reconnectTimer = null;\r\n }\r\n const c = this.client as any;\r\n if (c) { try { c.dispose(); } catch { } }\r\n this.client = null;\r\n this.removeAllListeners();\r\n }\r\n}\r\n\r\nexport default SubscriptionClient;\r\n"],"mappings":"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","names":["EventEmitter","import_eventemitter3","EventEmitter","_a"]}
|