@owlmeans/socket 0.1.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.
package/build/model.js ADDED
@@ -0,0 +1,331 @@
1
+ import { ResilientError } from '@owlmeans/error';
2
+ import { CALL_TIMEOUT, MessageType } from './consts.js';
3
+ import { SocketMessageMalformed, SocketTimeout } from './errors.js';
4
+ import { uuid } from '@owlmeans/basic-ids';
5
+ import { AuthenticationStage, AuthError } from '@owlmeans/auth';
6
+ export const createBasicConnection = () => {
7
+ const listeners = [];
8
+ const callPerformers = {};
9
+ const calls = {};
10
+ const requestAcknowledgers = [];
11
+ const observers = {};
12
+ const responseObservers = [];
13
+ const eventObservers = {};
14
+ const queue = [];
15
+ const conn = {
16
+ stage: AuthenticationStage.Init,
17
+ send: async () => {
18
+ throw new SyntaxError('Connection send method is not implemented');
19
+ },
20
+ close: async () => {
21
+ throw new SyntaxError('Connection close method is not implemented');
22
+ },
23
+ authenticate: async () => {
24
+ throw new SyntaxError('Connection authenticate method is not implemented');
25
+ },
26
+ notify: async (event, payload) => {
27
+ const msg = {
28
+ event, payload, type: MessageType.Event
29
+ };
30
+ await conn.send(msg);
31
+ },
32
+ observe: (event, handler) => {
33
+ eventObservers[event] = eventObservers[event] ?? [];
34
+ eventObservers[event].push(handler);
35
+ return () => {
36
+ const index = eventObservers[event].indexOf(handler);
37
+ if (index !== -1) {
38
+ eventObservers[event].splice(index, 1);
39
+ }
40
+ };
41
+ },
42
+ call: async (method, ...payload) => {
43
+ const msg = {
44
+ method, payload, type: MessageType.Call, id: uuid()
45
+ };
46
+ conn.prepare?.(msg);
47
+ return new Promise(async (resolve, reject) => {
48
+ msg.timeout = msg.timeout ?? conn.defaultCallTimeout ?? CALL_TIMEOUT;
49
+ const timeout = setTimeout(() => msg.timeout !== 0 && reject(new SocketTimeout('call')), msg.timeout);
50
+ calls[msg.id] = {
51
+ resolve: value => {
52
+ clearTimeout(timeout);
53
+ delete calls[msg.id];
54
+ resolve(value);
55
+ }, reject: error => {
56
+ clearTimeout(timeout);
57
+ delete calls[msg.id];
58
+ reject(error);
59
+ }
60
+ };
61
+ try {
62
+ await conn.send(msg);
63
+ }
64
+ catch (e) {
65
+ clearTimeout(timeout);
66
+ delete calls[msg.id];
67
+ reject(e);
68
+ }
69
+ });
70
+ },
71
+ perform: async (method, handler) => {
72
+ callPerformers[method] = handler;
73
+ },
74
+ request: async (payload, observer) => {
75
+ const msg = {
76
+ type: MessageType.Request, payload, id: uuid()
77
+ };
78
+ if (observer != null) {
79
+ observers[msg.id] = observer;
80
+ }
81
+ await conn.send(msg);
82
+ return () => {
83
+ if (observers[msg.id] != null) {
84
+ delete observers[msg.id];
85
+ }
86
+ };
87
+ },
88
+ observeResponse: async (observer) => {
89
+ responseObservers.push(observer);
90
+ return () => {
91
+ const index = responseObservers.indexOf(observer);
92
+ if (index !== -1) {
93
+ responseObservers.splice(index, 1);
94
+ }
95
+ };
96
+ },
97
+ acknowledge: handler => {
98
+ requestAcknowledgers.push(handler);
99
+ return () => {
100
+ const index = requestAcknowledgers.indexOf(handler);
101
+ if (index !== -1) {
102
+ requestAcknowledgers.splice(index, 1);
103
+ }
104
+ };
105
+ },
106
+ reply: async (id, payload) => {
107
+ const msg = {
108
+ type: MessageType.Response, payload, id
109
+ };
110
+ await conn.send(msg);
111
+ },
112
+ listen: listener => {
113
+ listeners.push(listener);
114
+ return () => {
115
+ const index = listeners.indexOf(listener);
116
+ if (index !== -1) {
117
+ listeners.splice(index, 1);
118
+ }
119
+ };
120
+ },
121
+ auth: async (stage, payload) => {
122
+ conn.stage = stage;
123
+ const msg = { type: MessageType.Auth, stage, payload };
124
+ return new Promise(async (resolve, reject) => {
125
+ conn._authSequence = { reject, resolve };
126
+ await conn.send(msg);
127
+ });
128
+ },
129
+ enqueue: async (payload, id) => {
130
+ const msg = {
131
+ type: MessageType.Message, payload, id
132
+ };
133
+ await conn.send(msg);
134
+ },
135
+ enqueued: () => queue.length,
136
+ consume: filter => {
137
+ if (queue.length === 0) {
138
+ return null;
139
+ }
140
+ if (filter == null) {
141
+ const msg = queue.shift();
142
+ return [msg?.payload ?? null, msg?.id, queue.length];
143
+ }
144
+ const index = queue.findIndex(msg => filter(msg.payload));
145
+ if (index < 0) {
146
+ return [null, null, queue.length];
147
+ }
148
+ const [msg] = queue.splice(index, 1);
149
+ return [msg.payload, msg.id, queue.length];
150
+ },
151
+ receive: async (message) => {
152
+ if (message.startsWith('{') || message.startsWith('[')) {
153
+ let msg = message;
154
+ try {
155
+ msg = JSON.parse(message);
156
+ }
157
+ catch {
158
+ }
159
+ if (typeof msg === 'object') {
160
+ if (msg.payload == null) {
161
+ msg.payload = msg;
162
+ }
163
+ if (msg.type == null) {
164
+ msg.type = MessageType.Message;
165
+ }
166
+ msg.rawData = message;
167
+ if (conn.prepare != null) {
168
+ conn.prepare(msg, true);
169
+ }
170
+ try {
171
+ switch (msg.type) {
172
+ case MessageType.Call: {
173
+ await conn._receiveCall(msg);
174
+ break;
175
+ }
176
+ case MessageType.Result: {
177
+ await conn._receiveResult(msg);
178
+ break;
179
+ }
180
+ case MessageType.Error: {
181
+ await conn._receiveError(msg);
182
+ break;
183
+ }
184
+ case MessageType.Request: {
185
+ await conn._receiveRequest(msg);
186
+ break;
187
+ }
188
+ case MessageType.Response: {
189
+ await conn._receiveResponse(msg);
190
+ break;
191
+ }
192
+ case MessageType.Event: {
193
+ await conn._receiveEvent(msg);
194
+ break;
195
+ }
196
+ case MessageType.Message: {
197
+ await conn._receiveMessage(msg);
198
+ break;
199
+ }
200
+ case MessageType.Auth: {
201
+ const _msg = msg;
202
+ if (conn._authSequence != null) {
203
+ if (_msg.stage == null) {
204
+ conn._authSequence.reject(ResilientError.ensure(_msg.payload ?? new AuthError('socket:unknown')));
205
+ }
206
+ else {
207
+ conn.stage = _msg.stage;
208
+ conn._authSequence.resolve(_msg.payload);
209
+ }
210
+ conn._authSequence = undefined;
211
+ }
212
+ else {
213
+ try {
214
+ const [stage, response] = await conn.authenticate(_msg.stage, _msg.payload);
215
+ if (stage != null) {
216
+ conn.auth(stage, response);
217
+ }
218
+ }
219
+ catch (e) {
220
+ conn.auth(null, ResilientError.marshal(ResilientError.ensure(e)));
221
+ }
222
+ finally {
223
+ conn._authSequence = undefined;
224
+ }
225
+ }
226
+ break;
227
+ }
228
+ }
229
+ }
230
+ catch (e) {
231
+ console.error('Error on message processing:', e);
232
+ throw ResilientError.ensure(e);
233
+ }
234
+ }
235
+ await Promise.all(listeners.map(async (listener) => listener(msg)));
236
+ }
237
+ },
238
+ _receiveCall: async (msg) => {
239
+ let cancel = false;
240
+ callPerformers[msg.method](...msg.payload)
241
+ .then(async (result) => {
242
+ if (cancel) {
243
+ return;
244
+ }
245
+ clearTimeout(timeout);
246
+ const resultMsg = {
247
+ id: msg.id,
248
+ type: MessageType.Result,
249
+ payload: result
250
+ };
251
+ await conn.send(resultMsg);
252
+ }).catch(async (error) => {
253
+ console.error('Error during the call:', error);
254
+ if (cancel) {
255
+ return;
256
+ }
257
+ clearTimeout(timeout);
258
+ const response = {
259
+ id: msg.id,
260
+ type: MessageType.Error,
261
+ payload: ResilientError.ensure(error).marshal().message
262
+ };
263
+ await conn.send(response);
264
+ });
265
+ msg.timeout = msg.timeout ?? conn.defaultCallTimeout ?? CALL_TIMEOUT;
266
+ const timeout = setTimeout(() => { if (msg.timeout !== 0)
267
+ cancel = true; }, msg.timeout);
268
+ },
269
+ _receiveResult: async (msg) => {
270
+ if (msg.id == null) {
271
+ throw new SocketMessageMalformed('result:id');
272
+ }
273
+ if (calls[msg.id] == null) {
274
+ throw new SocketTimeout('result');
275
+ }
276
+ calls[msg.id].resolve(msg.payload);
277
+ delete calls[msg.id];
278
+ },
279
+ _receiveError: async (msg) => {
280
+ if (msg.id == null) {
281
+ throw new SocketMessageMalformed('result:id');
282
+ }
283
+ if (calls[msg.id] == null) {
284
+ throw new SocketTimeout('result');
285
+ }
286
+ calls[msg.id].reject(ResilientError.ensure(msg.payload));
287
+ delete calls[msg.id];
288
+ },
289
+ _receiveRequest: async (msg) => {
290
+ if (msg.id == null) {
291
+ throw new SocketMessageMalformed('request:id');
292
+ }
293
+ await requestAcknowledgers.reduce(async (acknowledge, acknowledger) => {
294
+ if (await acknowledge) {
295
+ return acknowledge;
296
+ }
297
+ return acknowledger(msg.id, msg.payload);
298
+ }, Promise.resolve(false));
299
+ },
300
+ _receiveResponse: async (msg) => {
301
+ if (msg.id == null) {
302
+ throw new SocketMessageMalformed('response:id');
303
+ }
304
+ if (observers[msg.id] == null) {
305
+ await observers[msg.id](msg.payload);
306
+ delete observers[msg.id];
307
+ }
308
+ await responseObservers.reduce(async (captured, observer) => {
309
+ if (await captured) {
310
+ return captured;
311
+ }
312
+ return observer(msg.payload);
313
+ }, Promise.resolve(false));
314
+ },
315
+ _receiveEvent: async (msg) => {
316
+ if (msg.event == null) {
317
+ throw new SocketMessageMalformed('event');
318
+ }
319
+ if (eventObservers[msg.event] == null) {
320
+ return;
321
+ }
322
+ await Promise.all(eventObservers[msg.event].map(async (observer) => observer(msg)));
323
+ },
324
+ _receiveMessage: async (msg) => {
325
+ queue.push(msg);
326
+ },
327
+ getListeners: () => listeners
328
+ };
329
+ return conn;
330
+ };
331
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKnE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAe,EAAE;IACpD,MAAM,SAAS,GAAyB,EAAE,CAAA;IAE1C,MAAM,cAAc,GAAkD,EAAE,CAAA;IACxE,MAAM,KAAK,GAAwC,EAAE,CAAA;IACrD,MAAM,oBAAoB,GAA0B,EAAE,CAAA;IACtD,MAAM,SAAS,GAAyD,EAAE,CAAA;IAC1E,MAAM,iBAAiB,GAA2C,EAAE,CAAA;IACpE,MAAM,cAAc,GAAyE,EAAE,CAAA;IAC/F,MAAM,KAAK,GAAmB,EAAE,CAAA;IAEhC,MAAM,IAAI,GAAe;QACvB,KAAK,EAAE,mBAAmB,CAAC,IAAI;QAE/B,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,IAAI,WAAW,CAAC,2CAA2C,CAAC,CAAA;QACpE,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,IAAI,WAAW,CAAC,4CAA4C,CAAC,CAAA;QACrE,CAAC;QACD,YAAY,EAAE,KAAK,IAAI,EAAE;YACvB,MAAM,IAAI,WAAW,CAAC,mDAAmD,CAAC,CAAA;QAC5E,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAsB;gBAC7B,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK;aACxC,CAAA;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QAED,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1B,cAAc,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YACnD,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACnC,OAAO,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACpD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBACxC,CAAC;YACH,CAAC,CAAA;QACH,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE;YACjC,MAAM,GAAG,GAAqB;gBAC5B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;aACpD,CAAA;YACD,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;YACnB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3C,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA;gBACpE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;gBACrG,KAAK,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG;oBACf,OAAO,EAAE,KAAK,CAAC,EAAE;wBACf,YAAY,CAAC,OAAO,CAAC,CAAA;wBACrB,OAAO,KAAK,CAAC,GAAG,CAAC,EAAG,CAAC,CAAA;wBACrB,OAAO,CAAC,KAAK,CAAC,CAAA;oBAChB,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;wBACjB,YAAY,CAAC,OAAO,CAAC,CAAA;wBACrB,OAAO,KAAK,CAAC,GAAG,CAAC,EAAG,CAAC,CAAA;wBACrB,MAAM,CAAC,KAAK,CAAC,CAAA;oBACf,CAAC;iBACF,CAAA;gBAED,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,YAAY,CAAC,OAAO,CAAC,CAAA;oBACrB,OAAO,KAAK,CAAC,GAAG,CAAC,EAAG,CAAC,CAAA;oBACrB,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;YACjC,cAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CAAA;QAClC,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;YACnC,MAAM,GAAG,GAAiB;gBACxB,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;aAC/C,CAAA;YACD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,SAAS,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,QAAQ,CAAA;YAC/B,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAEpB,OAAO,GAAG,EAAE;gBACV,IAAI,SAAS,CAAC,GAAG,CAAC,EAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC/B,OAAO,SAAS,CAAC,GAAG,CAAC,EAAG,CAAC,CAAA;gBAC3B,CAAC;YACH,CAAC,CAAA;QACH,CAAC;QAED,eAAe,EAAE,KAAK,EAAC,QAAQ,EAAC,EAAE;YAChC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAChC,OAAO,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACjD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBACpC,CAAC;YACH,CAAC,CAAA;QACH,CAAC;QAED,WAAW,EAAE,OAAO,CAAC,EAAE;YACrB,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAElC,OAAO,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACnD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC,CAAA;QACH,CAAC;QAED,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAiB;gBACxB,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;aACxC,CAAA;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QAED,MAAM,EAAE,QAAQ,CAAC,EAAE;YACjB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACxB,OAAO,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACzC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBAC5B,CAAC;YACH,CAAC,CAAA;QACH,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,MAAM,GAAG,GAAqB,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YAExE,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3C,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;gBACxC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACtB,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAiB;gBACxB,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;aACvC,CAAA;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QAED,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM;QAE5B,OAAO,EAAE,MAAM,CAAC,EAAE;YAChB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;gBACzB,OAAO,CAAC,GAAG,EAAE,OAAO,IAAI,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YACtD,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;YACzD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YACnC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAEpC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5C,CAAC;QAED,OAAO,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YACvB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,IAAI,GAAG,GAA0B,OAAO,CAAA;gBACxC,IAAI,CAAC;oBACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAC3B,CAAC;gBAAC,MAAM,CAAC;gBACT,CAAC;gBACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;wBACxB,GAAG,CAAC,OAAO,GAAG,GAAG,CAAA;oBACnB,CAAC;oBACD,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;wBACrB,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAA;oBAChC,CAAC;oBACD,GAAG,CAAC,OAAO,GAAG,OAAO,CAAA;oBACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;wBACzB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;oBACzB,CAAC;oBACD,IAAI,CAAC;wBACH,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;4BACjB,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gCACtB,MAAM,IAAI,CAAC,YAAY,CAAC,GAAuB,CAAC,CAAA;gCAChD,MAAK;4BACP,CAAC;4BACD,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gCACxB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;gCAC9B,MAAK;4BACP,CAAC;4BACD,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gCACvB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;gCAC7B,MAAK;4BACP,CAAC;4BACD,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;gCACzB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;gCAC/B,MAAK;4BACP,CAAC;4BACD,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;gCAC1B,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;gCAChC,MAAK;4BACP,CAAC;4BACD,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gCACvB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAwB,CAAC,CAAA;gCAClD,MAAK;4BACP,CAAC;4BACD,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;gCACzB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;gCAC/B,MAAK;4BACP,CAAC;4BACD,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gCACtB,MAAM,IAAI,GAAqB,GAAuB,CAAA;gCACtD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC;oCAC/B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;wCACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;oCACnG,CAAC;yCAAM,CAAC;wCACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;wCACvB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oCAC1C,CAAC;oCACD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;gCAChC,CAAC;qCAAM,CAAC;oCACN,IAAI,CAAC;wCACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;wCAC3E,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;4CAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;wCAC5B,CAAC;oCACH,CAAC;oCAAC,OAAO,CAAC,EAAE,CAAC;wCACX,IAAI,CAAC,IAAI,CAAC,IAAW,EAAE,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAU,CAAC,CAAC,CAAC,CAAA;oCACnF,CAAC;4CAAS,CAAC;wCACT,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;oCAChC,CAAC;gCACH,CAAC;gCACD,MAAK;4BACP,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAA;wBAChD,MAAM,cAAc,CAAC,MAAM,CAAC,CAAU,CAAC,CAAA;oBACzC,CAAC;gBACH,CAAC;gBACD,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACnE,CAAC;QACH,CAAC;QAED,YAAY,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YACxB,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;iBACvC,IAAI,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;gBACnB,IAAI,MAAM,EAAE,CAAC;oBACX,OAAM;gBACR,CAAC;gBACD,YAAY,CAAC,OAAO,CAAC,CAAA;gBACrB,MAAM,SAAS,GAAiB;oBAC9B,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,OAAO,EAAE,MAAM;iBAChB,CAAA;gBACD,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAA;gBAC9C,IAAI,MAAM,EAAE,CAAC;oBACX,OAAM;gBACR,CAAC;gBACD,YAAY,CAAC,OAAO,CAAC,CAAA;gBACrB,MAAM,QAAQ,GAAiB;oBAC7B,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,WAAW,CAAC,KAAK;oBACvB,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO;iBACxD,CAAA;gBACD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC3B,CAAC,CAAC,CAAA;YACJ,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA;YACpE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC;gBAAE,MAAM,GAAG,IAAI,CAAA,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;QACzF,CAAC;QAED,cAAc,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YAC1B,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAA;YAC/C,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;YACnC,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAClC,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACtB,CAAC;QAED,aAAa,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YACzB,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAA;YAC/C,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;YACnC,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;YACxD,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACtB,CAAC;QAED,eAAe,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YAC3B,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,sBAAsB,CAAC,YAAY,CAAC,CAAA;YAChD,CAAC;YACD,MAAM,oBAAoB,CAAC,MAAM,CAC/B,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;gBAClC,IAAI,MAAM,WAAW,EAAE,CAAC;oBACtB,OAAO,WAAW,CAAA;gBACpB,CAAC;gBACD,OAAO,YAAY,CAAC,GAAG,CAAC,EAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;YACpD,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC1B,CAAA;QACH,CAAC;QAED,gBAAgB,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YAC5B,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,sBAAsB,CAAC,aAAa,CAAC,CAAA;YACjD,CAAC;YACD,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC9B,MAAM,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACpC,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC1B,CAAC;YACD,MAAM,iBAAiB,CAAC,MAAM,CAC5B,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;gBAC3B,IAAI,MAAM,QAAQ,EAAE,CAAC;oBACnB,OAAO,QAAQ,CAAA;gBACjB,CAAC;gBACD,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC9B,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC1B,CAAA;QACH,CAAC;QAED,aAAa,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YACzB,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAA;YAC3C,CAAC;YACD,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBACtC,OAAM;YACR,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACnF,CAAC;QAED,eAAe,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;QAED,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS;KAC9B,CAAA;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -0,0 +1,91 @@
1
+ import type { ResilientError } from '@owlmeans/error';
2
+ import type { MessageType } from './consts.js';
3
+ import type { AuthenticationStage } from '@owlmeans/auth';
4
+ export interface Connection {
5
+ defaultCallTimeout?: number;
6
+ _authSequence?: CallResolver<any>;
7
+ stage: AuthenticationStage;
8
+ notify: <T>(event: string, payload: T) => Promise<void>;
9
+ observe: <T>(event: string, handler: (event: EventMessage<T>) => Promise<void>) => () => void;
10
+ call: <R, T extends any[]>(method: string, ...payload: T) => Promise<R>;
11
+ perform: <R, T extends any[]>(method: string, handler: CallHendler<R, T>) => void;
12
+ request: <T, R>(payload: T, observer?: (payload: R) => Promise<boolean>) => Promise<() => void>;
13
+ observeResponse: <T>(observer: (payload: T) => Promise<boolean>) => Promise<() => void>;
14
+ acknowledge: <T>(handler: RequestHandler<T>) => () => void;
15
+ reply: <T>(id: string, payload: T) => Promise<void>;
16
+ listen: (listner: ConnectionListener) => () => void;
17
+ auth: <T, R>(stage: AuthenticationStage, payload: T) => Promise<R>;
18
+ enqueue: <T>(payload: T, id?: string) => Promise<void>;
19
+ enqueued: () => number;
20
+ consume: <T>(filter?: (payload: T) => boolean) => [T | null, string | null | undefined, number] | null;
21
+ /**
22
+ * @abstract
23
+ */
24
+ close: () => Promise<void>;
25
+ /**
26
+ * Methods called by the socket connection
27
+ */
28
+ receive: (message: string) => Promise<void>;
29
+ /**
30
+ * @abstract
31
+ */
32
+ send: (message: Message<any> | string) => Promise<void>;
33
+ /**
34
+ * @abstract
35
+ */
36
+ prepare?: <T>(message: Message<T>, isRequest?: boolean) => Message<T>;
37
+ /**
38
+ * @abstract
39
+ */
40
+ authenticate: AuthenticateMethod;
41
+ /**
42
+ * Utility methods
43
+ */
44
+ _receiveCall: (message: CallMessage<any>) => Promise<void>;
45
+ _receiveResult: (message: Message<any>) => Promise<void>;
46
+ _receiveError: (message: Message<any>) => Promise<void>;
47
+ _receiveRequest: (message: Message<any>) => Promise<void>;
48
+ _receiveResponse: (message: Message<any>) => Promise<void>;
49
+ _receiveEvent: (message: EventMessage<any>) => Promise<void>;
50
+ _receiveMessage: (message: Message<any>) => Promise<void>;
51
+ getListeners: () => ConnectionListener[];
52
+ }
53
+ export interface ConnectionListener {
54
+ (message: Message<any> | string): Promise<void>;
55
+ }
56
+ export interface CallHendler<R, T extends any[]> {
57
+ (...args: T): Promise<R>;
58
+ }
59
+ export interface RequestHandler<T> {
60
+ (id: string, payload: T): Promise<boolean>;
61
+ }
62
+ export interface Message<T> {
63
+ type: MessageType;
64
+ id?: string;
65
+ rawData?: string;
66
+ sender?: string;
67
+ recipient?: string;
68
+ dt?: number;
69
+ payload: T;
70
+ }
71
+ export interface AuthenticateMethod {
72
+ <T, R>(stage: AuthenticationStage, payload: T): Promise<[AuthenticationStage | null, R]>;
73
+ }
74
+ export interface CallMessage<T extends any[]> extends Message<T> {
75
+ type: MessageType.Call;
76
+ method: string;
77
+ timeout?: number;
78
+ }
79
+ export interface EventMessage<T> extends Message<T> {
80
+ type: MessageType.Event | MessageType.System;
81
+ event: string;
82
+ }
83
+ export interface AuthMessage<T> extends Message<T> {
84
+ type: MessageType.Auth;
85
+ stage: AuthenticationStage;
86
+ }
87
+ export interface CallResolver<T> {
88
+ resolve: (result: T) => void;
89
+ reject: (error: ResilientError) => void;
90
+ }
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/build/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@owlmeans/socket",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "build": "tsc -b",
7
+ "dev": "sleep 336 && nodemon -e ts,tsx,json --watch src --exec \"tsc -p ./tsconfig.json\"",
8
+ "watch": "tsc -b -w --preserveWatchOutput --pretty"
9
+ },
10
+ "main": "build/index.js",
11
+ "module": "build/index.js",
12
+ "types": "build/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "import": "./build/index.js",
16
+ "require": "./build/index.js",
17
+ "default": "./build/index.js",
18
+ "module": "./build/index.js",
19
+ "types": "./build/index.d.ts"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "@owlmeans/auth": "^0.1.0",
24
+ "@owlmeans/basic-ids": "^0.1.0",
25
+ "@owlmeans/error": "^0.1.0"
26
+ },
27
+ "devDependencies": {
28
+ "nodemon": "^3.1.7",
29
+ "npm-check": "^6.0.1",
30
+ "typescript": "^5.6.3"
31
+ },
32
+ "private": false,
33
+ "publishConfig": {
34
+ "access": "public"
35
+ }
36
+ }
package/src/consts.ts ADDED
@@ -0,0 +1,14 @@
1
+
2
+ export enum MessageType {
3
+ Call = 'call',
4
+ Result = 'result',
5
+ Error = 'error',
6
+ Request = 'request',
7
+ Response = 'response',
8
+ Event = 'event',
9
+ Message = 'message',
10
+ Auth = 'auth',
11
+ System = 'system'
12
+ }
13
+
14
+ export const CALL_TIMEOUT = 60000
package/src/errors.ts ADDED
@@ -0,0 +1,81 @@
1
+ import { ResilientError } from '@owlmeans/error'
2
+
3
+ export class SocketError extends ResilientError {
4
+ public static override typeName: string = 'SocketError'
5
+
6
+ constructor(message: string = 'error') {
7
+ super(SocketError.typeName, `socket:${message}`)
8
+ }
9
+ }
10
+
11
+ export class SocketInitializationError extends SocketError {
12
+ public static override typeName: string = `${SocketError.typeName}Initialization`
13
+
14
+ constructor(message: string = 'error') {
15
+ super(`initialization:${message}`)
16
+ this.type = SocketInitializationError.typeName
17
+ }
18
+ }
19
+
20
+ export class SocketConnectionError extends SocketError {
21
+ public static override typeName: string = `${SocketError.typeName}Connection`
22
+
23
+ constructor(message: string = 'error') {
24
+ super(`connection:${message}`)
25
+ this.type = SocketConnectionError.typeName
26
+ }
27
+ }
28
+
29
+ export class SocketUnauthorized extends SocketConnectionError {
30
+ public static override typeName: string = `${SocketConnectionError.typeName}Unauthorized`
31
+
32
+ constructor(message: string = 'error') {
33
+ super(`unauthorized:${message}`)
34
+ this.type = SocketUnauthorized.typeName
35
+ }
36
+ }
37
+
38
+ export class SocketUnsupported extends SocketConnectionError {
39
+ public static override typeName: string = `${SocketConnectionError.typeName}Unsupported`
40
+
41
+ constructor(message: string = 'error') {
42
+ super(`unsupported:${message}`)
43
+ this.type = SocketUnsupported.typeName
44
+ }
45
+ }
46
+
47
+ export class SocketTimeout extends SocketError {
48
+ public static override typeName: string = `${SocketError.typeName}Timeout`
49
+
50
+ constructor(message: string = 'error') {
51
+ super(`timeout:${message}`)
52
+ this.type = SocketTimeout.typeName
53
+ }
54
+ }
55
+
56
+ export class SocketMessageError extends SocketError {
57
+ public static override typeName: string = `${SocketError.typeName}Message`
58
+
59
+ constructor(message: string = 'error') {
60
+ super(`message:${message}`)
61
+ this.type = SocketMessageError.typeName
62
+ }
63
+ }
64
+
65
+ export class SocketMessageMalformed extends SocketMessageError {
66
+ public static override typeName: string = `${SocketMessageError.typeName}Malformed`
67
+
68
+ constructor(message: string = 'error') {
69
+ super(`malformed:${message}`)
70
+ this.type = SocketMessageMalformed.typeName
71
+ }
72
+ }
73
+
74
+ ResilientError.registerErrorClass(SocketError)
75
+ ResilientError.registerErrorClass(SocketInitializationError)
76
+ ResilientError.registerErrorClass(SocketConnectionError)
77
+ ResilientError.registerErrorClass(SocketUnauthorized)
78
+ ResilientError.registerErrorClass(SocketUnsupported)
79
+ ResilientError.registerErrorClass(SocketTimeout)
80
+ ResilientError.registerErrorClass(SocketMessageError)
81
+ ResilientError.registerErrorClass(SocketMessageMalformed)
package/src/helper.ts ADDED
@@ -0,0 +1,39 @@
1
+ import { MessageType } from './consts.js'
2
+ import type { CallMessage, EventMessage, Message, AuthMessage } from './types.js'
3
+
4
+ export const isMessage = <P, T extends Message<P>>(msg: string | T, nonSystem?: boolean): msg is T =>
5
+ typeof msg === 'object' && 'type' in msg && 'payload' in msg
6
+ && (nonSystem === undefined || nonSystem === (msg.type !== MessageType.System))
7
+
8
+ export const isEventMessage = <P>(msg: string | Message<P>, system?: boolean): msg is EventMessage<P> =>
9
+ isMessage(msg) && [MessageType.Event, MessageType.System].includes(msg.type)
10
+ && (system === undefined || system === (msg.type === MessageType.System))
11
+
12
+ export const isCallMessage = <P extends any[]>(msg: string | Message<unknown>): msg is CallMessage<P> =>
13
+ isMessage(msg) && msg.type === MessageType.Call
14
+
15
+ export const isAuthMessage = <P>(msg: string | Message<P>): msg is AuthMessage<P> =>
16
+ isMessage(msg) && msg.type === MessageType.Auth
17
+
18
+
19
+ // export const prepareLongCalls = (connection: Connection, longTimeout = CALL_TIMEOUT * 10) => {
20
+ // const _connection = connection as WithLongCalls
21
+ // if (_connection[long_calls] == null) {
22
+ // const prepare = connection.prepare
23
+ // connection.prepare = (message, isRequest) => {
24
+ // if (!isRequest && isCallMessage(message)) {
25
+ // message.timeout = longTimeout
26
+ // }
27
+
28
+ // return prepare?.(message, isRequest) ?? message
29
+ // }
30
+ // _connection[long_calls] = true
31
+ // }
32
+
33
+ // return connection
34
+ // }
35
+
36
+ // const long_calls = Symbol('__prepare_with_long_calls')
37
+ // interface WithLongCalls extends Connection {
38
+ // [long_calls]: boolean
39
+ // }
package/src/index.ts ADDED
@@ -0,0 +1,6 @@
1
+
2
+ export type * from './types.js'
3
+ export * from './consts.js'
4
+ export * from './model.js'
5
+ export * from './errors.js'
6
+ export * from './helper.js'