@pathscale/wss-adapter 2.0.11 → 2.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@ WebSocket adapter for PathScale WSS services.
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @pathscale/wss-adapter
8
+ bun add @pathscale/wss-adapter
9
9
  ```
10
10
 
11
11
  ## Usage
@@ -37,7 +37,11 @@ wssAdapter.configure({
37
37
  });
38
38
 
39
39
  // Connect
40
+ const stopStatus = wssAdapter.services.app.subscribeStatus((status) => {
41
+ console.log('Connection status:', status);
42
+ });
40
43
  const result = await wssAdapter.services.app.connect(['token1', 'token2']);
44
+ console.log(wssAdapter.services.app.status); // connected
41
45
 
42
46
  // Call methods
43
47
  const profile = await wssAdapter.sessions.app.getUserProfile({ userId: '123' });
@@ -55,16 +59,55 @@ unsubscribe();
55
59
 
56
60
  // Disconnect
57
61
  wssAdapter.services.app.disconnect();
62
+ stopStatus();
58
63
  ```
59
64
 
65
+ Each configured service is a named `ServiceConnection` instance. It owns its socket,
66
+ sequence counter, pending calls, request and authentication timers, reconnect backoff,
67
+ and status. `configure`, `services[name].connect/disconnect/isOpen`,
68
+ `sessions[name][method]`, and `subscribeTo` remain the facade for using these instances.
69
+ Reconfiguration disconnects the previous instances and replaces the configured services.
70
+
71
+ When a socket closes (cleanly or unexpectedly), errors, or is deliberately disconnected,
72
+ only that service's pending calls reject. Other services continue normally. Deliberate
73
+ disconnects detach all socket handlers before closing and cancel scheduled reconnects.
74
+ Replacing a connection also rejects its outstanding calls. Sequence numbers increase
75
+ within an instance, including across reconnects; failed sends never reuse a number.
76
+
77
+ `service.status` is `down` initially, `reconnecting` while connecting or retrying, and
78
+ `connected` after the authentication reply. `service.subscribeStatus(callback)` immediately
79
+ reports the current status, then reports changes, and returns an unsubscribe function.
80
+ `isOpen()` reports the transport's open state; authentication may still be pending.
81
+
82
+ After transport or authentication failure, the service reconnects using the protocols and
83
+ remote from its latest `connect` call. Defaults are five consecutive retry attempts, starting
84
+ at 1 second and doubling up to 30 seconds. Successful authentication resets the retry count.
85
+ Exhausting retries sets status to `down`; deliberate disconnect also sets it to `down`.
86
+ Set `reconnect: false` to disable retries, or configure `initialDelay`, `maxDelay` (milliseconds),
87
+ and `maxAttempts` per service. `connect()` rejects if its initial connection fails; background
88
+ retries report progress through status. The configured timeout bounds authentication too.
89
+
90
+ Requests are never automatically replayed. A timeout or lost connection leaves the server-side
91
+ outcome unknown: the server may already have performed the action. Late replies cannot settle
92
+ an already rejected promise. Reconcile the outcome or use server-supported idempotency before
93
+ retrying an action that must not run twice.
94
+
95
+ Legacy configured stream callbacks run only for the service receiving the event. Facade stream
96
+ subscriptions remain an event bus across services (by method code or configured method name).
97
+ One service closing does not complete subscriptions that may still receive another service's
98
+ events; unsubscribe explicitly when finished.
99
+
60
100
  ## Configuration Types
61
101
 
62
102
  ```typescript
103
+ import type { WssServiceError } from '@pathscale/wss-adapter';
104
+
63
105
  interface IConfiguration {
64
106
  timeout: number;
65
107
  services: Record<string, IServiceConfig>;
66
108
  errors: IErrors;
67
109
  onError?: (message: string) => void;
110
+ onServiceError?: (error: WssServiceError) => void;
68
111
  }
69
112
 
70
113
  interface IServiceConfig {
@@ -72,6 +115,12 @@ interface IServiceConfig {
72
115
  methods: Record<string, IMethodInfo>;
73
116
  subscriptions?: Record<string, (data: any) => void>;
74
117
  onDisconnect?: (event: CloseEvent) => void;
118
+ timeout?: number; // Overrides the global timeout for this instance, in milliseconds
119
+ reconnect?: false | {
120
+ initialDelay?: number;
121
+ maxDelay?: number;
122
+ maxAttempts?: number;
123
+ };
75
124
  }
76
125
 
77
126
  interface IErrors {
@@ -80,6 +129,10 @@ interface IErrors {
80
129
  }
81
130
  ```
82
131
 
132
+ `onError` remains the legacy string callback. For WSS service-error responses, the optional
133
+ `onServiceError` callback receives the exported `WssServiceError` with structured fields
134
+ such as `code`, `kind`, `params`, `serviceMessage`, and `cause`.
135
+
83
136
  ## Subscriptions
84
137
 
85
138
  ```typescript
@@ -95,4 +148,8 @@ services: {
95
148
  }
96
149
  ```
97
150
 
98
- That's it.
151
+ ## Trusted npm publishing
152
+
153
+ Publishing is performed manually by `.github/workflows/publish.yml` from an exact current `master` commit and a matching `vMAJOR.MINOR.PATCH` tag. Configure npm Trusted Publishing for `pathscale/wss-adapter`, workflow `publish.yml`, and GitHub environment `npm-publish`; restrict that environment to `master`. The workflow validates the commit, tag, package version, registry state, and package contents before publishing a digest-verified tarball with provenance. It does not use an npm token or publish on tag push.
154
+
155
+ See [the npm publishing release procedure](docs/npm-publishing.md) for publisher setup and release steps.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { default } from './wss-adapter.js';
2
2
  export { default as wssAdapter } from './wss-adapter.js';
3
+ export { ServiceConnection } from './service-connection.js';
3
4
  export { WssServiceError, buildServiceError } from './errors.js';
4
5
  export type { WssServiceErrorInit, ServiceErrorEnvelope, } from './errors.js';
5
- export type { IWssAdapter, IConfiguration, IServiceConfig, IServiceAdapter, IStreamingSubscriptionObserver, IStreamingUnsubscribe, IMethodInfo, IErrors, IStore, ApiMethods, ServiceName, } from './types.js';
6
+ export type { IWssAdapter, IConfiguration, IServiceConfig, IServiceAdapter, IStreamingSubscriptionObserver, IStreamingUnsubscribe, IMethodInfo, IErrors, IStore, ApiMethods, ServiceName, ServiceStatus, } from './types.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EACV,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,eAAe,EACf,8BAA8B,EAC9B,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,MAAM,EACN,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EACV,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,eAAe,EACf,8BAA8B,EAC9B,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,MAAM,EACN,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { default } from './wss-adapter.js';
2
2
  export { default as wssAdapter } from './wss-adapter.js';
3
+ export { ServiceConnection } from './service-connection.js';
3
4
  export { WssServiceError, buildServiceError } from './errors.js';
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { IConfiguration, IServiceAdapter, IServiceConfig, ServiceStatus } from './types.js';
2
+ interface Response {
3
+ type?: string;
4
+ method?: number;
5
+ seq?: number;
6
+ code?: number;
7
+ params?: any;
8
+ data?: any;
9
+ }
10
+ export declare class ServiceConnection implements IServiceAdapter {
11
+ readonly name: string;
12
+ private readonly config;
13
+ private readonly configuration;
14
+ private readonly onStream;
15
+ private socket;
16
+ private sequence;
17
+ private pending;
18
+ private observers;
19
+ private currentStatus;
20
+ private retryTimer;
21
+ private handshakeTimer;
22
+ private attempts;
23
+ private generation;
24
+ private protocols;
25
+ private remote;
26
+ private cancelConnect;
27
+ private readonly timeout;
28
+ private readonly reconnect;
29
+ constructor(name: string, config: IServiceConfig, configuration: IConfiguration, onStream: (response: Response, error?: Error) => void);
30
+ get status(): ServiceStatus;
31
+ subscribeStatus: (observer: (status: ServiceStatus) => void) => (() => void);
32
+ private notify;
33
+ private setStatus;
34
+ isOpen: () => boolean;
35
+ connect: <T>(payload?: string | string[], remote?: string) => Promise<T>;
36
+ private detachSocket;
37
+ disconnect: () => void;
38
+ private rejectPending;
39
+ private failed;
40
+ private open;
41
+ send(methodName: string, params?: Record<string, unknown>): Promise<unknown>;
42
+ private sendCall;
43
+ private serviceError;
44
+ private receive;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=service-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-connection.d.ts","sourceRoot":"","sources":["../src/service-connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjG,UAAU,QAAQ;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAYD,qBAAa,iBAAkB,YAAW,eAAe;IAmBrD,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IArB3B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAE0C;gBAGzD,IAAI,EAAE,MAAM,EACJ,MAAM,EAAE,cAAc,EACtB,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI;IAaxE,IAAI,MAAM,IAAI,aAAa,CAE1B;IAED,eAAe,GAAI,UAAU,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAMzE;IAEF,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,SAAS;IAMjB,MAAM,QAAO,OAAO,CAA+C;IAEnE,OAAO,GAAI,CAAC,EAAE,UAAU,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,CAAC,CAAC,CAcrE;IAEF,OAAO,CAAC,YAAY;IAiBpB,UAAU,QAAO,IAAI,CAUnB;IAEF,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,MAAM;IAyBd,OAAO,CAAC,IAAI;IAqDZ,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BhF,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,OAAO;CA2BhB"}
@@ -0,0 +1,291 @@
1
+ import { buildServiceError } from './errors.js';
2
+ export class ServiceConnection {
3
+ name;
4
+ config;
5
+ configuration;
6
+ onStream;
7
+ socket;
8
+ sequence = 1;
9
+ pending = new Map();
10
+ observers = new Set();
11
+ currentStatus = 'down';
12
+ retryTimer;
13
+ handshakeTimer;
14
+ attempts = 0;
15
+ generation = 0;
16
+ protocols = [];
17
+ remote = '';
18
+ cancelConnect;
19
+ timeout;
20
+ reconnect;
21
+ constructor(name, config, configuration, onStream) {
22
+ this.name = name;
23
+ this.config = config;
24
+ this.configuration = configuration;
25
+ this.onStream = onStream;
26
+ this.timeout = config.timeout ?? configuration.timeout;
27
+ this.reconnect =
28
+ config.reconnect === false
29
+ ? false
30
+ : {
31
+ initialDelay: config.reconnect?.initialDelay ?? 1000,
32
+ maxDelay: config.reconnect?.maxDelay ?? 30000,
33
+ maxAttempts: config.reconnect?.maxAttempts ?? 5,
34
+ };
35
+ }
36
+ get status() {
37
+ return this.currentStatus;
38
+ }
39
+ subscribeStatus = (observer) => {
40
+ this.observers.add(observer);
41
+ this.notify(observer);
42
+ return () => {
43
+ this.observers.delete(observer);
44
+ };
45
+ };
46
+ notify(observer) {
47
+ try {
48
+ observer(this.status);
49
+ }
50
+ catch {
51
+ console.error('[wss-adapter] Status callback failed');
52
+ }
53
+ }
54
+ setStatus(status) {
55
+ if (this.currentStatus === status)
56
+ return;
57
+ this.currentStatus = status;
58
+ for (const observer of this.observers)
59
+ this.notify(observer);
60
+ }
61
+ isOpen = () => this.socket?.readyState === WebSocket.OPEN;
62
+ connect = (payload, remote) => {
63
+ if (!Array.isArray(payload)) {
64
+ return Promise.reject(new Error('WebSocket protocols required for authentication'));
65
+ }
66
+ this.disconnect();
67
+ this.protocols = [...payload];
68
+ this.remote = remote || this.config.remote;
69
+ this.attempts = 0;
70
+ return new Promise((resolve, reject) => {
71
+ this.cancelConnect = reject;
72
+ const generation = this.generation;
73
+ this.setStatus('reconnecting');
74
+ if (this.generation === generation)
75
+ this.open((value) => resolve(value));
76
+ });
77
+ };
78
+ detachSocket() {
79
+ clearTimeout(this.handshakeTimer);
80
+ this.handshakeTimer = undefined;
81
+ const socket = this.socket;
82
+ this.socket = undefined;
83
+ if (!socket)
84
+ return;
85
+ socket.onopen = null;
86
+ socket.onmessage = null;
87
+ socket.onerror = null;
88
+ socket.onclose = null;
89
+ try {
90
+ socket.close();
91
+ }
92
+ catch {
93
+ }
94
+ }
95
+ disconnect = () => {
96
+ this.generation++;
97
+ clearTimeout(this.retryTimer);
98
+ this.retryTimer = undefined;
99
+ this.detachSocket();
100
+ const reason = new Error(`Service ${this.name} disconnected`);
101
+ this.cancelConnect?.(reason);
102
+ this.cancelConnect = undefined;
103
+ this.rejectPending(reason.message);
104
+ this.setStatus('down');
105
+ };
106
+ rejectPending(reason) {
107
+ for (const call of this.pending.values()) {
108
+ clearTimeout(call.timer);
109
+ call.reject(new Error(`${call.methodName}: ${reason}`));
110
+ }
111
+ this.pending.clear();
112
+ }
113
+ failed(reason, event) {
114
+ this.detachSocket();
115
+ this.cancelConnect?.(reason);
116
+ this.cancelConnect = undefined;
117
+ this.rejectPending(reason.message);
118
+ const reconnect = this.reconnect;
119
+ if (reconnect && this.attempts < reconnect.maxAttempts) {
120
+ const delay = Math.min(reconnect.initialDelay * 2 ** this.attempts++, reconnect.maxDelay);
121
+ this.retryTimer = setTimeout(() => {
122
+ this.retryTimer = undefined;
123
+ this.open();
124
+ }, delay);
125
+ this.setStatus('reconnecting');
126
+ }
127
+ else {
128
+ this.setStatus('down');
129
+ }
130
+ if (event) {
131
+ try {
132
+ this.config.onDisconnect?.(event);
133
+ }
134
+ catch {
135
+ console.error('[wss-adapter] Disconnect callback failed');
136
+ }
137
+ }
138
+ }
139
+ open(resolve) {
140
+ let socket;
141
+ try {
142
+ socket = new WebSocket(this.remote, this.protocols);
143
+ }
144
+ catch {
145
+ this.failed(new Error('WebSocket connection failed'));
146
+ return;
147
+ }
148
+ this.socket = socket;
149
+ let authenticated = false;
150
+ this.handshakeTimer = setTimeout(() => {
151
+ if (this.socket === socket)
152
+ this.failed(new Error('WebSocket authentication took too long'));
153
+ }, this.timeout);
154
+ socket.onopen = () => {
155
+ if (this.socket !== socket)
156
+ return;
157
+ for (const [seq, call] of this.pending)
158
+ this.sendCall(seq, call);
159
+ };
160
+ socket.onmessage = (event) => {
161
+ if (this.socket !== socket)
162
+ return;
163
+ let response;
164
+ try {
165
+ response = JSON.parse(event.data);
166
+ if (!response || typeof response !== 'object' || Array.isArray(response))
167
+ throw new Error('Invalid response');
168
+ }
169
+ catch {
170
+ this.failed(new Error('Invalid WebSocket response'));
171
+ return;
172
+ }
173
+ if (!authenticated) {
174
+ if (response.type === 'Error' || response.code) {
175
+ this.failed(this.serviceError(response));
176
+ return;
177
+ }
178
+ authenticated = true;
179
+ clearTimeout(this.handshakeTimer);
180
+ this.handshakeTimer = undefined;
181
+ this.attempts = 0;
182
+ this.cancelConnect = undefined;
183
+ this.setStatus('connected');
184
+ resolve?.(response.params);
185
+ return;
186
+ }
187
+ this.receive(response);
188
+ };
189
+ socket.onclose = (event) => {
190
+ if (this.socket === socket)
191
+ this.failed(new Error(`WebSocket closed (code ${event.code || 'unknown'})`), event);
192
+ };
193
+ socket.onerror = () => {
194
+ if (this.socket === socket)
195
+ this.failed(new Error('WebSocket connection failed'));
196
+ };
197
+ }
198
+ send(methodName, params = {}) {
199
+ const entry = Object.entries(this.config.methods).find(([, info]) => info.name === methodName);
200
+ if (!entry)
201
+ throw new Error(`method ${methodName} not available in ${this.name} service`);
202
+ if (!this.socket || this.socket.readyState > WebSocket.OPEN) {
203
+ return Promise.reject(new Error(`No active session for service ${this.name}`));
204
+ }
205
+ const [code, info] = entry;
206
+ const seq = ++this.sequence;
207
+ const payload = JSON.stringify({
208
+ method: Number.parseInt(code),
209
+ seq,
210
+ params: info.parameters.map((name) => params[name]),
211
+ });
212
+ return new Promise((resolve, reject) => {
213
+ const call = {
214
+ resolve,
215
+ reject,
216
+ methodName,
217
+ payload,
218
+ sent: false,
219
+ timer: setTimeout(() => {
220
+ this.pending.delete(seq);
221
+ reject(new Error(`${methodName} took too long, aborting`));
222
+ }, this.timeout),
223
+ };
224
+ this.pending.set(seq, call);
225
+ if (this.isOpen())
226
+ this.sendCall(seq, call);
227
+ });
228
+ }
229
+ sendCall(seq, call) {
230
+ if (call.sent)
231
+ return;
232
+ call.sent = true;
233
+ try {
234
+ this.socket.send(call.payload);
235
+ }
236
+ catch (error) {
237
+ clearTimeout(call.timer);
238
+ this.pending.delete(seq);
239
+ call.reject(error);
240
+ }
241
+ }
242
+ serviceError(response) {
243
+ const methodName = this.config.methods[String(response.method)]?.name;
244
+ const catalogMessage = this.configuration.errors.codes.find((entry) => entry.code === response.code)?.message;
245
+ const error = buildServiceError(response, { methodName, catalogMessage });
246
+ try {
247
+ this.configuration.onServiceError?.(error);
248
+ }
249
+ catch {
250
+ console.error('[wss-adapter] Structured error callback failed');
251
+ }
252
+ try {
253
+ this.configuration.onError?.(methodName
254
+ ? `[${response.code ?? 'Error'}]: ${methodName}: ${error.message}`
255
+ : error.message);
256
+ }
257
+ catch {
258
+ console.error('[wss-adapter] Error callback failed');
259
+ }
260
+ return error;
261
+ }
262
+ receive(response) {
263
+ if (response.type === 'Stream') {
264
+ try {
265
+ this.config.subscriptions?.[String(response.method)]?.(response);
266
+ }
267
+ catch {
268
+ console.error('[wss-adapter] Stream callback failed');
269
+ }
270
+ this.onStream(response);
271
+ return;
272
+ }
273
+ const call = response.seq === undefined ? undefined : this.pending.get(response.seq);
274
+ const failed = response.type === 'Error' ||
275
+ response.code ||
276
+ response.params?.success === false ||
277
+ response.params?.error;
278
+ if (!call) {
279
+ if (response.seq === undefined && failed && response.method !== undefined)
280
+ this.onStream(response, this.serviceError(response));
281
+ return;
282
+ }
283
+ clearTimeout(call.timer);
284
+ this.pending.delete(response.seq);
285
+ if (failed)
286
+ call.reject(this.serviceError(response));
287
+ else
288
+ call.resolve(response);
289
+ }
290
+ }
291
+ //# sourceMappingURL=service-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-connection.js","sourceRoot":"","sources":["../src/service-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAsBhD,MAAM,OAAO,iBAAiB;IAmBjB;IACQ;IACA;IACA;IArBX,MAAM,CAAwB;IAC9B,QAAQ,GAAG,CAAC,CAAC;IACb,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzC,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAC;IACvD,aAAa,GAAkB,MAAM,CAAC;IACtC,UAAU,CAA4C;IACtD,cAAc,CAA4C;IAC1D,QAAQ,GAAG,CAAC,CAAC;IACb,UAAU,GAAG,CAAC,CAAC;IACf,SAAS,GAAa,EAAE,CAAC;IACzB,MAAM,GAAG,EAAE,CAAC;IACZ,aAAa,CAAwC;IAC5C,OAAO,CAAS;IAChB,SAAS,CAE0C;IAEpE,YACW,IAAY,EACJ,MAAsB,EACtB,aAA6B,EAC7B,QAAqD;QAH7D,SAAI,GAAJ,IAAI,CAAQ;QACJ,WAAM,GAAN,MAAM,CAAgB;QACtB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,aAAQ,GAAR,QAAQ,CAA6C;QAEtE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;QACvD,IAAI,CAAC,SAAS;YACZ,MAAM,CAAC,SAAS,KAAK,KAAK;gBACxB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC;oBACE,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,IAAI,IAAI;oBACpD,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,KAAK;oBAC7C,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC;iBAChD,CAAC;IACV,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,eAAe,GAAG,CAAC,QAAyC,EAAgB,EAAE;QAC5E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEM,MAAM,CAAC,QAAyC;QACtD,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,MAAqB;QACrC,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM;YAAE,OAAO;QAC1C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,CAAC;IAEnE,OAAO,GAAG,CAAI,OAA2B,EAAE,MAAe,EAAc,EAAE;QACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAU,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEM,YAAY;QAClB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAED,UAAU,GAAG,GAAS,EAAE;QACtB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;IAEM,aAAa,CAAC,MAAc;QAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,MAAM,CAAC,MAAa,EAAE,KAAkB;QAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC1F,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,OAAkC;QAC7C,IAAI,MAAiB,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAC/F,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO;YACnC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC;QACF,MAAM,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO;YACnC,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACtE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;gBACD,aAAa,GAAG,IAAI,CAAC;gBACrB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;gBAChC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAClB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC5B,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YACzB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACxF,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;YACpB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACpF,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,UAAkB,EAAE,SAAkC,EAAE;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,qBAAqB,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5D,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAC3B,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC7B,GAAG;YACH,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACpD,CAAC,CAAC;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAgB;gBACxB,OAAO;gBACP,MAAM;gBACN,UAAU;gBACV,OAAO;gBACP,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE;oBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACzB,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,UAAU,0BAA0B,CAAC,CAAC,CAAC;gBAC7D,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;aACjB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,GAAW,EAAE,IAAiB;QAC7C,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,QAAkB;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;QACtE,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CACzD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CACxC,EAAE,OAAO,CAAC;QACX,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAC1B,UAAU;gBACR,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,IAAI,OAAO,MAAM,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE;gBAClE,CAAC,CAAC,KAAK,CAAC,OAAO,CAClB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,OAAO,CAAC,QAAkB;QAChC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrF,MAAM,MAAM,GACV,QAAQ,CAAC,IAAI,KAAK,OAAO;YACzB,QAAQ,CAAC,IAAI;YACb,QAAQ,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK;YAClC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YAEV,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;gBACvE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAI,CAAC,CAAC;QACnC,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;;YAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACF"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { WssServiceError } from './errors.js';
1
2
  export interface IMethodInfo {
2
3
  name: string;
3
4
  parameters: string[];
@@ -7,6 +8,12 @@ export interface IServiceConfig {
7
8
  methods: Record<string, IMethodInfo>;
8
9
  subscriptions?: Record<string, (data: any) => void>;
9
10
  onDisconnect?: (event: CloseEvent) => void;
11
+ timeout?: number;
12
+ reconnect?: false | {
13
+ initialDelay?: number;
14
+ maxDelay?: number;
15
+ maxAttempts?: number;
16
+ };
10
17
  }
11
18
  export interface IErrorCode {
12
19
  code: number;
@@ -21,27 +28,16 @@ export interface IConfiguration {
21
28
  services: Record<string, IServiceConfig>;
22
29
  errors: IErrors;
23
30
  onError?: (message: string) => void;
31
+ onServiceError?: (error: WssServiceError) => void;
24
32
  }
25
33
  export interface IStore {
26
- timeout: number;
27
- errors: IErrors;
28
- services: Record<string, IServiceConfig>;
29
- subscriptions: Record<string, Record<string, (data: any) => void>>;
30
- sequence: {
31
- value: number;
32
- getSeq(): number;
33
- decreaseSeq(): void;
34
- };
35
- sessions: Record<string, WebSocket>;
36
- pendingPromises: Record<number, {
37
- resolve: (value: any) => void;
38
- reject: (reason: any) => void;
39
- toHandler: number;
40
- methodName: string;
41
- }>;
42
- onError?: (message: string) => void;
34
+ connections: Record<string, IServiceAdapter>;
43
35
  }
36
+ export type ServiceStatus = 'connected' | 'reconnecting' | 'down';
44
37
  export interface IServiceAdapter {
38
+ readonly name: string;
39
+ readonly status: ServiceStatus;
40
+ subscribeStatus: (observer: (status: ServiceStatus) => void) => () => void;
45
41
  connect: <T>(payload?: string | string[], remote?: string) => Promise<T>;
46
42
  disconnect: () => void;
47
43
  isOpen: () => boolean;
@@ -52,12 +48,15 @@ export interface IStreamingSubscriptionObserver<TEvent = unknown> {
52
48
  complete?: () => void;
53
49
  }
54
50
  export type IStreamingUnsubscribe = () => void;
55
- export type ServiceName = "app";
51
+ export type ServiceName = string;
56
52
  export type ApiMethods = {
57
53
  app: Record<string, (params?: any) => Promise<any>>;
54
+ [service: string]: Record<string, (params?: any) => Promise<any>>;
58
55
  };
59
56
  export interface IWssAdapter {
60
- services: Record<ServiceName, IServiceAdapter>;
57
+ services: Record<ServiceName, IServiceAdapter> & {
58
+ app: IServiceAdapter;
59
+ };
61
60
  sessions: ApiMethods;
62
61
  configure: (configuration: IConfiguration) => void;
63
62
  subscribeTo: <TEvent = unknown>(event: string, observer: IStreamingSubscriptionObserver<TEvent>) => IStreamingUnsubscribe;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { IWssAdapter } from "./types.js";
1
+ import type { IWssAdapter } from './types.js';
2
2
  declare const wssAdapter: IWssAdapter;
3
3
  export default wssAdapter;
4
4
  //# sourceMappingURL=wss-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wss-adapter.d.ts","sourceRoot":"","sources":["../src/wss-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,QAAA,MAAM,UAAU,EAAE,WAQjB,CAAC;AAifF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"wss-adapter.d.ts","sourceRoot":"","sources":["../src/wss-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,QAAA,MAAM,UAAU,EAAE,WAQjB,CAAC;AA2FF,eAAe,UAAU,CAAC"}
@@ -1,4 +1,4 @@
1
- import { buildServiceError } from "./errors.js";
1
+ import { ServiceConnection } from './service-connection.js';
2
2
  const wssAdapter = {
3
3
  services: {},
4
4
  sessions: {},
@@ -6,7 +6,7 @@ const wssAdapter = {
6
6
  subscribeTo() {
7
7
  return () => { };
8
8
  },
9
- __store: undefined,
9
+ __store: { connections: {} },
10
10
  };
11
11
  const streamSubscribers = new Map();
12
12
  let streamSubscriberId = 1;
@@ -14,7 +14,7 @@ const normalizeStreamEvent = (event) => event.trim();
14
14
  const subscribeStreamEvent = (event, observer) => {
15
15
  const eventName = normalizeStreamEvent(event);
16
16
  if (!eventName) {
17
- throw new Error("Stream event name is required");
17
+ throw new Error('Stream event name is required');
18
18
  }
19
19
  const id = streamSubscriberId++;
20
20
  const subscribers = streamSubscribers.get(eventName) ?? new Map();
@@ -44,333 +44,44 @@ const notifyStreamSubscribers = (eventKeys, notify) => {
44
44
  notify(observer);
45
45
  }
46
46
  catch (err) {
47
- console.error("[wss-adapter] Stream subscriber callback failed:", err);
47
+ console.error('[wss-adapter] Stream subscriber callback failed:', err);
48
48
  }
49
49
  }
50
50
  }
51
51
  };
52
- const notifyStreamCompleteAll = () => {
53
- for (const subscribers of streamSubscribers.values()) {
54
- for (const observer of subscribers.values()) {
55
- try {
56
- observer.complete?.();
52
+ wssAdapter.configure = (configuration) => {
53
+ for (const connection of Object.values(wssAdapter.services))
54
+ connection.disconnect();
55
+ for (const name of Object.keys(wssAdapter.services))
56
+ delete wssAdapter.services[name];
57
+ for (const name of Object.keys(wssAdapter.sessions))
58
+ delete wssAdapter.sessions[name];
59
+ for (const [name, config] of Object.entries(configuration.services)) {
60
+ const connection = new ServiceConnection(name, config, configuration, (response, error) => {
61
+ const keys = [String(response.method)];
62
+ const methodName = config.methods[String(response.method)]?.name;
63
+ if (methodName)
64
+ keys.push(methodName);
65
+ if (error) {
66
+ notifyStreamSubscribers(keys, (observer) => observer.error?.(error));
57
67
  }
58
- catch (err) {
59
- console.error("[wss-adapter] Stream complete callback failed:", err);
68
+ else {
69
+ const data = response.data !== undefined
70
+ ? response.data
71
+ : response.params !== undefined
72
+ ? response.params
73
+ : response;
74
+ const payload = data && typeof data === 'object' && 'data' in data ? data.data : data;
75
+ notifyStreamSubscribers(keys, (observer) => observer.next(payload));
60
76
  }
61
- }
62
- }
63
- };
64
- const getStreamEventKeys = (method) => {
65
- if (method == null)
66
- return [];
67
- const eventKeys = new Set();
68
- const methodCode = String(method);
69
- eventKeys.add(methodCode);
70
- for (const serviceConfig of Object.values(store.services)) {
71
- const methodInfo = serviceConfig.methods?.[methodCode];
72
- if (methodInfo?.name) {
73
- eventKeys.add(methodInfo.name);
74
- }
75
- }
76
- return [...eventKeys];
77
- };
78
- const getStreamPayload = (response) => {
79
- if (response?.data !== undefined) {
80
- if (response.data?.data !== undefined) {
81
- return response.data.data;
82
- }
83
- return response.data;
84
- }
85
- if (response?.params !== undefined) {
86
- return response.params;
87
- }
88
- return response;
89
- };
90
- const store = {
91
- timeout: 0,
92
- errors: {
93
- language: "en",
94
- codes: [],
95
- },
96
- services: {},
97
- subscriptions: {},
98
- sequence: {
99
- value: 1,
100
- getSeq() {
101
- store.sequence.value += 1;
102
- return store.sequence.value;
103
- },
104
- decreaseSeq() {
105
- store.sequence.value -= 1;
106
- },
107
- },
108
- sessions: {},
109
- pendingPromises: {},
110
- };
111
- const rejectPendingPromises = (reason) => {
112
- for (const [seq, executor] of Object.entries(store.pendingPromises)) {
113
- clearTimeout(executor.toHandler);
114
- executor.reject(new Error(`${executor.methodName}: ${reason}`));
115
- delete store.pendingPromises[Number(seq)];
116
- }
117
- };
118
- wssAdapter.configure = (configuration) => {
119
- const { timeout, services, errors, onError } = configuration;
120
- store.timeout = timeout;
121
- store.errors = errors;
122
- store.services = services;
123
- if (onError !== undefined) {
124
- store.onError = onError;
125
- }
126
- for (const [serviceName, serviceConfig] of Object.entries(services)) {
127
- const serviceNameTyped = serviceName;
128
- wssAdapter.services[serviceNameTyped] = {
129
- connect: (payload, remote) => connectHandler(serviceName, serviceConfig, payload, remote),
130
- disconnect: () => disconnectHandler(serviceName),
131
- isOpen: () => store.sessions[serviceName]?.readyState === WebSocket.OPEN,
132
- };
133
- if (serviceConfig.subscriptions) {
134
- store.subscriptions[serviceName] = serviceConfig.subscriptions;
135
- }
136
- wssAdapter.sessions[serviceName] = new Proxy({}, {
137
- get: (_target, methodName) => (payload) => sendHandler(serviceName, serviceConfig, methodName, payload),
77
+ });
78
+ wssAdapter.services[name] = connection;
79
+ wssAdapter.sessions[name] = new Proxy({}, {
80
+ get: (_target, methodName) => (params) => connection.send(methodName, params),
138
81
  });
139
82
  }
140
83
  };
141
84
  wssAdapter.subscribeTo = (event, observer) => subscribeStreamEvent(event, observer);
142
- const connectHandler = (serviceName, serviceConfig, payload, remote) => {
143
- return new Promise((resolve, reject) => {
144
- if (!payload || !Array.isArray(payload)) {
145
- reject(new Error("WebSocket protocols required for authentication"));
146
- return;
147
- }
148
- const protocols = payload;
149
- const prev = store.sessions[serviceName];
150
- if (prev) {
151
- prev.onclose = null;
152
- prev.onerror = null;
153
- prev.onmessage = null;
154
- try {
155
- prev.close();
156
- }
157
- catch {
158
- }
159
- }
160
- const wsConnection = new WebSocket(remote || serviceConfig.remote, protocols);
161
- store.sessions[serviceName] = wsConnection;
162
- wsConnection.onmessage = (event) => {
163
- const response = JSON.parse(event.data);
164
- if (response.type === "Immediate" &&
165
- response.method === 20000 &&
166
- response.params?.accessToken) {
167
- const session = store.sessions[serviceName];
168
- if (session) {
169
- session.onmessage = receiveHandler;
170
- }
171
- resolve(response.params);
172
- return;
173
- }
174
- if (response.type === "Error" || response.code) {
175
- const catalog = store.errors.codes.find((c) => c.code === response.code);
176
- const serviceError = buildServiceError(response, {
177
- catalogMessage: catalog?.message,
178
- });
179
- if (store.onError) {
180
- store.onError(serviceError.message);
181
- }
182
- reject(serviceError);
183
- return;
184
- }
185
- const session = store.sessions[serviceName];
186
- if (session) {
187
- session.onmessage = receiveHandler;
188
- }
189
- resolve(response.params);
190
- };
191
- wsConnection.onclose = (event) => {
192
- delete store.sessions[serviceName];
193
- rejectPendingPromises(`WebSocket closed (code ${event.code || "unknown"})`);
194
- notifyStreamCompleteAll();
195
- if (!event.wasClean) {
196
- reject(new Error(`WebSocket closed unexpectedly (code ${event.code || "unknown"})`));
197
- }
198
- serviceConfig.onDisconnect?.(event);
199
- };
200
- wsConnection.onerror = (event) => {
201
- console.error("WebSocket error:", event);
202
- reject(new Error("WebSocket connection failed"));
203
- };
204
- });
205
- };
206
- const disconnectHandler = (serviceName) => {
207
- const session = store.sessions[serviceName];
208
- if (session) {
209
- rejectPendingPromises(`Service ${serviceName} disconnected`);
210
- session.close();
211
- delete store.sessions[serviceName];
212
- }
213
- };
214
- const sendHandler = (serviceName, serviceConfig, methodName, params = {}) => {
215
- const methodEntry = Object.entries(serviceConfig.methods)
216
- .map(([code, info]) => ({ code, info }))
217
- .find(({ info }) => info.name === methodName);
218
- if (!methodEntry) {
219
- throw new Error(`method ${methodName} not available in ${serviceName} service`);
220
- }
221
- const methodCode = methodEntry.code;
222
- const methodInfo = serviceConfig.methods[methodCode];
223
- if (!methodInfo) {
224
- throw new Error(`method configuration missing for ${methodName} in ${serviceName} service`);
225
- }
226
- const paramsArray = methodInfo.parameters.map((paramName) => params[paramName]);
227
- const payload = {
228
- method: Number.parseInt(methodCode),
229
- seq: store.sequence.getSeq(),
230
- params: paramsArray,
231
- };
232
- return new Promise((resolve, reject) => {
233
- const session = store.sessions[serviceName];
234
- if (!session) {
235
- reject(new Error(`No active session for service ${serviceName}`));
236
- return;
237
- }
238
- const doSend = () => {
239
- try {
240
- session.send(JSON.stringify(payload));
241
- }
242
- catch (err) {
243
- store.sequence.decreaseSeq();
244
- reject(err);
245
- return;
246
- }
247
- store.pendingPromises[payload.seq] = {
248
- resolve,
249
- reject,
250
- toHandler: setTimeout(() => {
251
- reject(new Error(`${methodName} took too long, aborting`));
252
- }, store.timeout),
253
- methodName,
254
- };
255
- };
256
- if (session.readyState === WebSocket.OPEN) {
257
- doSend();
258
- }
259
- else if (session.readyState === WebSocket.CONNECTING) {
260
- const cleanup = () => {
261
- session.removeEventListener("open", onOpen);
262
- session.removeEventListener("error", onErr);
263
- session.removeEventListener("close", onClose);
264
- };
265
- const onOpen = () => { cleanup(); doSend(); };
266
- const onErr = () => {
267
- cleanup();
268
- store.sequence.decreaseSeq();
269
- reject(new Error(`WebSocket failed while waiting to send ${methodName}`));
270
- };
271
- const onClose = () => {
272
- cleanup();
273
- store.sequence.decreaseSeq();
274
- reject(new Error(`WebSocket closed while waiting to send ${methodName}`));
275
- };
276
- session.addEventListener("open", onOpen, { once: true });
277
- session.addEventListener("error", onErr, { once: true });
278
- session.addEventListener("close", onClose, { once: true });
279
- }
280
- else {
281
- store.sequence.decreaseSeq();
282
- reject(new Error(`WebSocket not open (readyState=${session.readyState}), cannot send ${methodName}`));
283
- }
284
- });
285
- };
286
- const receiveHandler = (event) => {
287
- const response = JSON.parse(event.data);
288
- if (response.type === "Immediate" ||
289
- (response.type === "Error" && response.method) ||
290
- response.method === 0) {
291
- const error = response.code ||
292
- response.params?.success === false ||
293
- response.params?.error;
294
- const resolve = (payload) => {
295
- const executor = store.pendingPromises[response.seq];
296
- if (executor) {
297
- clearTimeout(executor.toHandler);
298
- delete store.pendingPromises[response.seq];
299
- executor.resolve(payload);
300
- }
301
- };
302
- if (error) {
303
- onError(response);
304
- }
305
- else {
306
- resolve(response);
307
- }
308
- }
309
- else if (response.type === "Stream") {
310
- console.log("Stream response:", response);
311
- const method = response.method;
312
- const subs = store.subscriptions;
313
- for (const [serviceName, callbacks] of Object.entries(subs)) {
314
- if (callbacks && typeof callbacks[method] === "function") {
315
- try {
316
- callbacks[method](response);
317
- }
318
- catch (err) {
319
- console.error(`[wss-adapter] Stream handler error in ${serviceName}:`, err);
320
- }
321
- }
322
- }
323
- const eventKeys = getStreamEventKeys(method);
324
- if (eventKeys.length > 0) {
325
- const payload = getStreamPayload(response);
326
- notifyStreamSubscribers(eventKeys, (observer) => {
327
- observer.next(payload);
328
- });
329
- }
330
- }
331
- };
332
- function onError(response) {
333
- const catalog = store.errors.codes.find((c) => c.code === response.code);
334
- let methodName = "";
335
- if (response.method) {
336
- for (const serviceConfig of Object.values(store.services)) {
337
- const methodKey = response.method.toString();
338
- const method = serviceConfig.methods[methodKey];
339
- if (method) {
340
- methodName = method.name;
341
- break;
342
- }
343
- }
344
- }
345
- const serviceError = buildServiceError(response, {
346
- methodName,
347
- catalogMessage: catalog?.message,
348
- });
349
- const errorCode = response.code ?? "Error";
350
- const fullErrorMsg = methodName
351
- ? `[${errorCode}]: ${methodName}: ${serviceError.message}`
352
- : serviceError.message;
353
- if (store.onError) {
354
- store.onError(fullErrorMsg);
355
- }
356
- const executor = store.pendingPromises[response.seq];
357
- if (executor) {
358
- clearTimeout(executor.toHandler);
359
- executor.reject(serviceError);
360
- delete store.pendingPromises[response.seq];
361
- return;
362
- }
363
- if (response.method != null) {
364
- const eventKeys = getStreamEventKeys(response.method);
365
- if (eventKeys.length > 0) {
366
- notifyStreamSubscribers(eventKeys, (observer) => {
367
- observer.error?.(serviceError);
368
- });
369
- return;
370
- }
371
- }
372
- throw new Error("Unknown request failed");
373
- }
374
- wssAdapter.__store = store;
85
+ wssAdapter.__store.connections = wssAdapter.services;
375
86
  export default wssAdapter;
376
87
  //# sourceMappingURL=wss-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wss-adapter.js","sourceRoot":"","sources":["../src/wss-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wss-adapter.js","sourceRoot":"","sources":["../src/wss-adapter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pathscale/wss-adapter",
3
- "version": "2.0.11",
3
+ "version": "2.0.13",
4
4
  "description": "Modern WebSocket adapter for PathScale WSS services",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,8 +18,9 @@
18
18
  "build": "tsc && tsc-alias",
19
19
  "dev": "tsc --watch",
20
20
  "clean": "rm -rf dist",
21
- "prebuild": "npm run clean",
22
- "test": "echo 'Tests coming soon'",
21
+ "prebuild": "bun run clean",
22
+ "typecheck": "tsc --noEmit",
23
+ "test": "bun test",
23
24
  "lint": "biome check .",
24
25
  "format": "biome format . --write",
25
26
  "commit": "cz",