@nanolink/mirrors 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SubscriptionClient = void 0;
7
+ const graphql_ws_1 = require("graphql-ws");
8
+ // Removed direct 'ws' import for browser compatibility; will resolve at runtime if needed.
9
+ const eventemitter3_1 = __importDefault(require("eventemitter3"));
10
+ class SubscriptionClient extends eventemitter3_1.default {
11
+ constructor(opts) {
12
+ super();
13
+ this.client = null;
14
+ this.connectAttempt = 0;
15
+ this.closedExplicitly = false;
16
+ this.reconnecting = false;
17
+ this.hasEverConnected = false;
18
+ this.options = {
19
+ url: opts.url.replace(/^http/, "ws").replace(/^https/, "wss") + '/ws',
20
+ connectionParams: opts.connectionParams,
21
+ maxReconnectAttempts: opts.maxReconnectAttempts ?? Infinity,
22
+ retryDelayMs: opts.retryDelayMs ?? 500,
23
+ maxRetryDelayMs: opts.maxRetryDelayMs ?? 10000,
24
+ operationTimeoutMs: opts.operationTimeoutMs ?? 0,
25
+ webSocketImpl: opts.webSocketImpl ?? undefined,
26
+ log: opts.log,
27
+ };
28
+ }
29
+ resolveWebSocketImpl() {
30
+ // Proxy-aware priority:
31
+ // 1. Explicit user-supplied impl
32
+ // 2. If proxy env detected -> prefer 'ws' (so caller can attach proxy agent externally if needed)
33
+ // 3. Global WebSocket (browser / Node >= 18 native) if no proxy forcing 'ws'
34
+ // 4. Fallback to require('ws')
35
+ if (this.options.webSocketImpl)
36
+ return this.options.webSocketImpl;
37
+ const proxyEnv = process.env.ALL_PROXY || process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.GLOBAL_AGENT_HTTP_PROXY;
38
+ if (proxyEnv) {
39
+ try {
40
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
41
+ return require('ws');
42
+ }
43
+ catch (e) {
44
+ this.log('Proxy detected but failed to load ws package', e);
45
+ }
46
+ }
47
+ const g = globalThis;
48
+ if (typeof g.WebSocket === 'function')
49
+ return g.WebSocket;
50
+ try {
51
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
52
+ return require('ws');
53
+ }
54
+ catch {
55
+ throw new Error('No WebSocket implementation found. Provide webSocketImpl in SubscriptionClientOptions.');
56
+ }
57
+ }
58
+ /** Returns true if an underlying websocket client exists (connected or in-flight). */
59
+ isConnected() {
60
+ return !!this.client; // createClientIfNeeded only after socket open attempt
61
+ }
62
+ log(msg, meta) {
63
+ if (this.options.log)
64
+ this.options.log(msg, meta);
65
+ }
66
+ createClientIfNeeded(isReconnect) {
67
+ if (this.client)
68
+ return; // already have client
69
+ const { url, connectionParams } = this.options;
70
+ const webSocketImpl = this.resolveWebSocketImpl();
71
+ this.client = (0, graphql_ws_1.createClient)({
72
+ url,
73
+ connectionParams,
74
+ webSocketImpl: webSocketImpl,
75
+ lazy: false,
76
+ keepAlive: 12000,
77
+ retryAttempts: 0,
78
+ shouldRetry: () => false,
79
+ on: {
80
+ connected: () => {
81
+ const wasReconnect = isReconnect && this.connectAttempt > 0;
82
+ this.connectAttempt = 0;
83
+ if (wasReconnect && this.hasEverConnected) {
84
+ this.emit('reconnected');
85
+ this.log('reconnected');
86
+ }
87
+ else {
88
+ this.emit('connected');
89
+ this.log('connected');
90
+ }
91
+ this.hasEverConnected = true;
92
+ },
93
+ error: (err) => {
94
+ this.emit('error', err);
95
+ this.log('socket error', err);
96
+ },
97
+ closed: (ev) => {
98
+ const e = ev;
99
+ this.log('closed', e);
100
+ this.emit('disconnected', { code: e.code, reason: e.reason?.toString?.() ?? '', wasClean: e.wasClean ?? false });
101
+ this.client = null; // allow recreate
102
+ if (!this.closedExplicitly)
103
+ this.scheduleReconnect();
104
+ },
105
+ },
106
+ });
107
+ }
108
+ // assureConnected removed per revert request
109
+ /** Establish the WebSocket connection if not already created. Idempotent. */
110
+ connect() {
111
+ if (this.client)
112
+ return; // already created
113
+ this.emit('connecting');
114
+ this.log('connecting');
115
+ this.createClientIfNeeded(false);
116
+ }
117
+ scheduleReconnect() {
118
+ if (this.reconnecting)
119
+ return;
120
+ if (this.connectAttempt >= this.options.maxReconnectAttempts) {
121
+ this.log('max reconnect attempts reached');
122
+ return;
123
+ }
124
+ this.reconnecting = true;
125
+ const delay = Math.min(this.options.retryDelayMs * Math.pow(2, this.connectAttempt), this.options.maxRetryDelayMs);
126
+ this.emit('retry', { attempt: this.connectAttempt });
127
+ this.log('reconnect scheduled', { attempt: this.connectAttempt, delay });
128
+ setTimeout(() => {
129
+ this.reconnecting = false;
130
+ this.connectAttempt++;
131
+ this.emit('connecting');
132
+ this.log('connecting');
133
+ this.createClientIfNeeded(true);
134
+ }, delay);
135
+ }
136
+ subscribe(options, observer) {
137
+ if (!this.client)
138
+ throw new Error('Client not connected - call connect() first');
139
+ const payload = {
140
+ query: options.query,
141
+ variables: options.variables,
142
+ operationName: options.operationName,
143
+ extensions: options.extensions,
144
+ };
145
+ let finished = false;
146
+ const timeoutMs = options.timeoutMs ?? this.options.operationTimeoutMs;
147
+ let timeout;
148
+ if (timeoutMs > 0) {
149
+ timeout = setTimeout(() => {
150
+ if (finished)
151
+ return;
152
+ finished = true;
153
+ observer.error?.(new Error('Operation timed out'));
154
+ dispose();
155
+ }, timeoutMs);
156
+ }
157
+ const dispose = this.client.subscribe(payload, {
158
+ next: (data) => observer.next?.(data),
159
+ error: (err) => {
160
+ if (finished)
161
+ return;
162
+ finished = true;
163
+ if (timeout)
164
+ clearTimeout(timeout);
165
+ observer.error?.(err);
166
+ },
167
+ complete: () => {
168
+ if (finished)
169
+ return;
170
+ finished = true;
171
+ if (timeout)
172
+ clearTimeout(timeout);
173
+ observer.complete?.();
174
+ },
175
+ });
176
+ return () => {
177
+ if (finished)
178
+ return;
179
+ finished = true;
180
+ if (timeout)
181
+ clearTimeout(timeout);
182
+ dispose();
183
+ };
184
+ }
185
+ async close(code = 1000, reason = 'Normal Closure') {
186
+ this.closedExplicitly = true;
187
+ this.log('closing client');
188
+ const c = this.client;
189
+ if (c) {
190
+ try {
191
+ c.dispose();
192
+ }
193
+ catch { }
194
+ }
195
+ this.client = null;
196
+ this.removeAllListeners();
197
+ }
198
+ }
199
+ exports.SubscriptionClient = SubscriptionClient;
200
+ exports.default = SubscriptionClient;
201
+ //# sourceMappingURL=SubscriptionClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionClient.js","sourceRoot":"","sources":["../src/SubscriptionClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { MirrorSync } from "./MirrorSync";
2
+ import { ReadonlyMapView } from "./DelegateMap";
3
+ import SubscriptionClient from "./SubscriptionClient";
4
+ export { SubscriptionClient, MirrorSync };
5
+ export type { ReadonlyMapView };
6
+ export declare class Connection extends SubscriptionClient {
7
+ private mirrors;
8
+ constructor(url: string, token: string);
9
+ getMirror(name: string, subscription: string, baseVariables: Record<string, unknown>): Promise<ReadonlyMapView<string, any>>;
10
+ removeMirror(name: string): void;
11
+ clearMirrors(): void;
12
+ }
package/dist/index.js ADDED
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Connection = exports.MirrorSync = exports.SubscriptionClient = void 0;
7
+ const MirrorSync_1 = require("./MirrorSync");
8
+ Object.defineProperty(exports, "MirrorSync", { enumerable: true, get: function () { return MirrorSync_1.MirrorSync; } });
9
+ const SubscriptionClient_1 = __importDefault(require("./SubscriptionClient"));
10
+ exports.SubscriptionClient = SubscriptionClient_1.default;
11
+ class Connection extends SubscriptionClient_1.default {
12
+ constructor(url, token) {
13
+ super({
14
+ url: url,
15
+ connectionParams: { authToken: token }
16
+ });
17
+ this.mirrors = new Map();
18
+ }
19
+ getMirror(name, subscription, baseVariables) {
20
+ let entry = this.mirrors.get(name);
21
+ if (!entry) {
22
+ const sync = new MirrorSync_1.MirrorSync(this, { subscription, baseVariables });
23
+ const forward = (event, payload) => {
24
+ this.emit(`mirror:${event}`, { mirrorName: name, ...payload });
25
+ };
26
+ const handlers = [
27
+ ['start', (p) => forward('start', p)],
28
+ ['updated', (item, fullPhase) => forward('updated', { item, fullPhase })],
29
+ ['deleted', (p) => forward('deleted', p)],
30
+ ['done', (p) => forward('done', p)],
31
+ ['versionError', (p) => forward('versionError', p)],
32
+ ['resubscribe', (p) => forward('resubscribe', p)],
33
+ ['error', (p) => forward('error', p)],
34
+ ];
35
+ handlers.forEach(([e, h]) => sync.on(e, h));
36
+ const detach = () => handlers.forEach(([e, h]) => sync.off(e, h));
37
+ this.mirrors.set(name, { sync, detach });
38
+ entry = { sync, detach };
39
+ }
40
+ return entry.sync.load();
41
+ }
42
+ removeMirror(name) {
43
+ const entry = this.mirrors.get(name);
44
+ if (!entry)
45
+ return;
46
+ entry.detach();
47
+ entry.sync.stop();
48
+ this.mirrors.delete(name);
49
+ this.emit('mirror:removed', { mirrorName: name });
50
+ }
51
+ clearMirrors() {
52
+ for (const name of Array.from(this.mirrors.keys())) {
53
+ this.removeMirror(name);
54
+ }
55
+ this.emit('mirror:cleared');
56
+ }
57
+ }
58
+ exports.Connection = Connection;
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export declare const Subscriptions: {
2
+ references: string;
3
+ trackers: string;
4
+ groups: string;
5
+ servicePlans: string;
6
+ trackerLinks: string;
7
+ referenceLinks: string;
8
+ lostTransmitters: string;
9
+ reports: string;
10
+ jobs: string;
11
+ cycles: string;
12
+ meshDiagnostics: string;
13
+ gps: string;
14
+ linkconnected: string;
15
+ connected: string;
16
+ voltage: string;
17
+ internalvoltage: string;
18
+ unplug: string;
19
+ temperature: string;
20
+ meshscanner: string;
21
+ meshdisconnectslasthour: string;
22
+ activecounter: string;
23
+ workseconds: string;
24
+ calculatedodometer: string;
25
+ batterypercent: string;
26
+ workignition: string;
27
+ tripignition: string;
28
+ activecycles: string;
29
+ activesteps: string;
30
+ referenceGeoLinks: string;
31
+ trips: string;
32
+ messages: string;
33
+ };
34
+ export declare const RequiredMirrors: {
35
+ systemSettings: string;
36
+ settings: string;
37
+ };
38
+ export declare const TempSubscriptions: {};