@liphium/neoroute-ts 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/.prettierignore +5 -0
- package/.prettierrc +8 -0
- package/.zed/settings.json +3 -0
- package/dist/client.d.ts +8 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +15 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/examples/http_client/src/main.d.ts +2 -0
- package/dist/examples/http_client/src/main.d.ts.map +1 -0
- package/dist/examples/http_client/src/main.js +51 -0
- package/dist/examples/http_client/src/main.js.map +1 -0
- package/dist/examples/http_client/src/messages.d.ts +9 -0
- package/dist/examples/http_client/src/messages.d.ts.map +1 -0
- package/dist/examples/http_client/src/messages.js +2 -0
- package/dist/examples/http_client/src/messages.js.map +1 -0
- package/dist/examples/http_client/src/requests.d.ts +5 -0
- package/dist/examples/http_client/src/requests.d.ts.map +1 -0
- package/dist/examples/http_client/src/requests.js +56 -0
- package/dist/examples/http_client/src/requests.js.map +1 -0
- package/dist/examples/web_socket_client/src/main.d.ts +2 -0
- package/dist/examples/web_socket_client/src/main.d.ts.map +1 -0
- package/dist/examples/web_socket_client/src/main.js +59 -0
- package/dist/examples/web_socket_client/src/main.js.map +1 -0
- package/dist/examples/web_socket_client/src/messages.d.ts +14 -0
- package/dist/examples/web_socket_client/src/messages.d.ts.map +1 -0
- package/dist/examples/web_socket_client/src/messages.js +3 -0
- package/dist/examples/web_socket_client/src/messages.js.map +1 -0
- package/dist/examples/web_socket_client/src/receiver.d.ts +3 -0
- package/dist/examples/web_socket_client/src/receiver.d.ts.map +1 -0
- package/dist/examples/web_socket_client/src/receiver.js +8 -0
- package/dist/examples/web_socket_client/src/receiver.js.map +1 -0
- package/dist/examples/web_socket_client/src/requests.d.ts +4 -0
- package/dist/examples/web_socket_client/src/requests.d.ts.map +1 -0
- package/dist/examples/web_socket_client/src/requests.js +32 -0
- package/dist/examples/web_socket_client/src/requests.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +24 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +7 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +11 -0
- package/dist/logger.js.map +1 -0
- package/dist/receiver.d.ts +12 -0
- package/dist/receiver.d.ts.map +1 -0
- package/dist/receiver.js +49 -0
- package/dist/receiver.js.map +1 -0
- package/dist/sender.d.ts +26 -0
- package/dist/sender.d.ts.map +1 -0
- package/dist/sender.js +135 -0
- package/dist/sender.js.map +1 -0
- package/dist/src/client.d.ts +8 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +15 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/config.d.ts +5 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +2 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces.d.ts +24 -0
- package/dist/src/interfaces.d.ts.map +1 -0
- package/dist/src/interfaces.js +7 -0
- package/dist/src/interfaces.js.map +1 -0
- package/dist/src/logger.d.ts +9 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +11 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/receiver.d.ts +12 -0
- package/dist/src/receiver.d.ts.map +1 -0
- package/dist/src/receiver.js +49 -0
- package/dist/src/receiver.js.map +1 -0
- package/dist/src/sender.d.ts +26 -0
- package/dist/src/sender.d.ts.map +1 -0
- package/dist/src/sender.js +135 -0
- package/dist/src/sender.js.map +1 -0
- package/dist/src/transporter/transporter_http.d.ts +6 -0
- package/dist/src/transporter/transporter_http.d.ts.map +1 -0
- package/dist/src/transporter/transporter_http.js +30 -0
- package/dist/src/transporter/transporter_http.js.map +1 -0
- package/dist/src/transporter/transporter_websocket.d.ts +17 -0
- package/dist/src/transporter/transporter_websocket.d.ts.map +1 -0
- package/dist/src/transporter/transporter_websocket.js +93 -0
- package/dist/src/transporter/transporter_websocket.js.map +1 -0
- package/dist/src/user_error.d.ts +4 -0
- package/dist/src/user_error.d.ts.map +1 -0
- package/dist/src/user_error.js +11 -0
- package/dist/src/user_error.js.map +1 -0
- package/dist/src/util.d.ts +9 -0
- package/dist/src/util.d.ts.map +1 -0
- package/dist/src/util.js +42 -0
- package/dist/src/util.js.map +1 -0
- package/dist/transporter/transporter_http.d.ts +6 -0
- package/dist/transporter/transporter_http.d.ts.map +1 -0
- package/dist/transporter/transporter_http.js +30 -0
- package/dist/transporter/transporter_http.js.map +1 -0
- package/dist/transporter/transporter_websocket.d.ts +17 -0
- package/dist/transporter/transporter_websocket.d.ts.map +1 -0
- package/dist/transporter/transporter_websocket.js +93 -0
- package/dist/transporter/transporter_websocket.js.map +1 -0
- package/dist/user_error.d.ts +4 -0
- package/dist/user_error.d.ts.map +1 -0
- package/dist/user_error.js +11 -0
- package/dist/user_error.js.map +1 -0
- package/dist/util.d.ts +9 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +42 -0
- package/dist/util.js.map +1 -0
- package/examples/http_client/package.json +20 -0
- package/examples/http_client/src/main.ts +59 -0
- package/examples/http_client/src/messages.ts +9 -0
- package/examples/http_client/src/requests.ts +64 -0
- package/examples/http_client/tsconfig.json +44 -0
- package/examples/web_socket_client/package.json +20 -0
- package/examples/web_socket_client/src/main.ts +72 -0
- package/examples/web_socket_client/src/messages.ts +22 -0
- package/examples/web_socket_client/src/receiver.ts +8 -0
- package/examples/web_socket_client/src/requests.ts +51 -0
- package/examples/web_socket_client/tsconfig.json +44 -0
- package/package.json +36 -0
- package/pnpm-workspace.yaml +5 -0
- package/readme.md +49 -0
- package/src/client.ts +17 -0
- package/src/config.ts +4 -0
- package/src/index.ts +13 -0
- package/src/interfaces.ts +31 -0
- package/src/logger.ts +18 -0
- package/src/receiver.ts +56 -0
- package/src/sender.ts +203 -0
- package/src/transporter/transporter_http.ts +37 -0
- package/src/transporter/transporter_websocket.ts +115 -0
- package/src/user_error.ts +21 -0
- package/src/util.ts +58 -0
- package/tsconfig.json +44 -0
package/dist/sender.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { decode, encode } from '@msgpack/msgpack';
|
|
2
|
+
import { MessageType, } from './interfaces.js';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
import { marshalRequestData, unmarshalResponseData, withTimeout, } from './util.js';
|
|
5
|
+
import { UserError } from './user_error.js';
|
|
6
|
+
export class Sender {
|
|
7
|
+
config;
|
|
8
|
+
sendFunc;
|
|
9
|
+
requestId = 0;
|
|
10
|
+
// Maps a request ID to a resolve function to fulfill the promise
|
|
11
|
+
waiters = new Map();
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
if (!this.config.requestTimeout) {
|
|
15
|
+
this.config.requestTimeout = 5000; // default timeout 5 seconds
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
getRequestId() {
|
|
19
|
+
this.requestId++;
|
|
20
|
+
return this.requestId;
|
|
21
|
+
}
|
|
22
|
+
setSendFunc(sendFunc) {
|
|
23
|
+
this.sendFunc = sendFunc;
|
|
24
|
+
}
|
|
25
|
+
handle(reqData) {
|
|
26
|
+
let message;
|
|
27
|
+
try {
|
|
28
|
+
message = decode(reqData);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
logger.info('failed to unmarshal message', error);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (message.type === MessageType.Response) {
|
|
35
|
+
this.handleResponse(message.data);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.handleOther(message);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
handleResponse(respBytes) {
|
|
42
|
+
let resp;
|
|
43
|
+
try {
|
|
44
|
+
resp = decode(respBytes);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger.info('failed to unmarshal response', error);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (resp.id === -1 && resp.error) {
|
|
51
|
+
const decoder = new TextDecoder();
|
|
52
|
+
this.config.errorHandler(new Error(decoder.decode(resp.data)));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const resolveFunc = this.waiters.get(resp.id);
|
|
56
|
+
if (!resolveFunc) {
|
|
57
|
+
logger.info('received response for non existing waiter', resp.id);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
resolveFunc(resp);
|
|
61
|
+
}
|
|
62
|
+
handleOther(message) {
|
|
63
|
+
logger.info('received unsupported message type', message.type);
|
|
64
|
+
}
|
|
65
|
+
removeResponseWaiter(requestId) {
|
|
66
|
+
this.waiters.delete(requestId);
|
|
67
|
+
}
|
|
68
|
+
async sendRequest(route, reqData, wantResponse) {
|
|
69
|
+
const reqId = this.getRequestId();
|
|
70
|
+
if (!this.sendFunc) {
|
|
71
|
+
throw new Error('sendFunc is not set');
|
|
72
|
+
}
|
|
73
|
+
const req = {
|
|
74
|
+
id: reqId,
|
|
75
|
+
route: route,
|
|
76
|
+
data: reqData,
|
|
77
|
+
};
|
|
78
|
+
let reqBytes;
|
|
79
|
+
try {
|
|
80
|
+
reqBytes = encode(req);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
throw new Error(`failed to marshal request: ${err}`);
|
|
84
|
+
}
|
|
85
|
+
let respPromise = Promise.resolve({});
|
|
86
|
+
if (wantResponse) {
|
|
87
|
+
respPromise = new Promise((resolve) => {
|
|
88
|
+
this.waiters.set(reqId, resolve);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
await this.sendFunc(reqBytes);
|
|
92
|
+
return { promise: respPromise, reqId: reqId };
|
|
93
|
+
}
|
|
94
|
+
getConfig() {
|
|
95
|
+
return this.config;
|
|
96
|
+
}
|
|
97
|
+
/// Internal helper for making send functions easier to write.
|
|
98
|
+
async sendInternal(route, req, waitForResponse) {
|
|
99
|
+
const { promise: respPromise, reqId } = await this.sendRequest(route, req != undefined ? marshalRequestData(req) : new Uint8Array(), true);
|
|
100
|
+
// When we want to wait for response, properly serialize it
|
|
101
|
+
if (waitForResponse) {
|
|
102
|
+
const timeout = this.config.requestTimeout ?? 5000;
|
|
103
|
+
const res = await withTimeout(respPromise, timeout);
|
|
104
|
+
this.removeResponseWaiter(reqId);
|
|
105
|
+
if (res.error) {
|
|
106
|
+
const decoder = new TextDecoder();
|
|
107
|
+
return new UserError(decoder.decode(res.data));
|
|
108
|
+
}
|
|
109
|
+
return unmarshalResponseData(res.data);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Otherwise signal that nothing will be waited for
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
send(route, req) {
|
|
117
|
+
return this.sendInternal(route, req, true);
|
|
118
|
+
}
|
|
119
|
+
sendOk(route, req) {
|
|
120
|
+
return this.sendInternal(route, req, true);
|
|
121
|
+
}
|
|
122
|
+
async sendOkNoRequest(route) {
|
|
123
|
+
return this.sendInternal(route, undefined, false);
|
|
124
|
+
}
|
|
125
|
+
async sendNoRequest(route) {
|
|
126
|
+
return this.sendInternal(route, undefined, true);
|
|
127
|
+
}
|
|
128
|
+
async sendNoResponse(route, req) {
|
|
129
|
+
await this.sendInternal(route, req, false);
|
|
130
|
+
}
|
|
131
|
+
async sendPing(route) {
|
|
132
|
+
await this.sendInternal(route, undefined, false);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=sender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../src/sender.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,qBAAa,GAAG;IACf,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM;IAKnC,IAAI,IAAI,UAAU;IAIlB,IAAI,IAAI,MAAM;CAGrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;IACP,KAAK,CAAa;IAClB,KAAK,CAAS;IAEtB,YAAY,IAAgB,EAAE,IAAY;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,IAAI;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAEM,IAAI;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACtB,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './interfaces.js';
|
|
2
|
+
export * from './config.js';
|
|
3
|
+
export * from './logger.js';
|
|
4
|
+
export * from './client.js';
|
|
5
|
+
export * from './sender.js';
|
|
6
|
+
export * from './receiver.js';
|
|
7
|
+
export * from './util.js';
|
|
8
|
+
export * from './user_error.js';
|
|
9
|
+
export * from './transporter/transporter_http.js';
|
|
10
|
+
export * from './transporter/transporter_websocket.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAE1B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './interfaces.js';
|
|
2
|
+
export * from './config.js';
|
|
3
|
+
export * from './logger.js';
|
|
4
|
+
export * from './client.js';
|
|
5
|
+
export * from './sender.js';
|
|
6
|
+
export * from './receiver.js';
|
|
7
|
+
export * from './util.js';
|
|
8
|
+
export * from './user_error.js';
|
|
9
|
+
export * from './transporter/transporter_http.js';
|
|
10
|
+
export * from './transporter/transporter_websocket.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAE1B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare enum MessageType {
|
|
2
|
+
Response = 0,
|
|
3
|
+
Event = 1
|
|
4
|
+
}
|
|
5
|
+
export interface Message {
|
|
6
|
+
type: MessageType;
|
|
7
|
+
data: Uint8Array;
|
|
8
|
+
}
|
|
9
|
+
export interface Event {
|
|
10
|
+
name: string;
|
|
11
|
+
data: Uint8Array;
|
|
12
|
+
}
|
|
13
|
+
export interface Response {
|
|
14
|
+
id: number;
|
|
15
|
+
has_data: boolean;
|
|
16
|
+
error: boolean;
|
|
17
|
+
data: Uint8Array;
|
|
18
|
+
}
|
|
19
|
+
export interface Request {
|
|
20
|
+
id: number;
|
|
21
|
+
route: string;
|
|
22
|
+
data: Uint8Array;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACtB,QAAQ,IAAA;IACR,KAAK,IAAA;CACL;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;CACjB;AAID,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACtB,qDAAQ,CAAA;IACR,+CAAK,CAAA;AACN,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface Logger {
|
|
2
|
+
debug(msg: string, ...args: any[]): void;
|
|
3
|
+
info(msg: string, ...args: any[]): void;
|
|
4
|
+
warn(msg: string, ...args: any[]): void;
|
|
5
|
+
error(msg: string, ...args: any[]): void;
|
|
6
|
+
}
|
|
7
|
+
export declare let logger: Logger;
|
|
8
|
+
export declare function setLogger(l: Logger): void;
|
|
9
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACtB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACzC;AAGD,eAAO,IAAI,MAAM,EAAE,MAKlB,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,QAElC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Default logger falls back to the standard console
|
|
2
|
+
export let logger = {
|
|
3
|
+
debug: console.debug,
|
|
4
|
+
info: console.info,
|
|
5
|
+
warn: console.warn,
|
|
6
|
+
error: console.error,
|
|
7
|
+
};
|
|
8
|
+
export function setLogger(l) {
|
|
9
|
+
logger = l;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAOA,oDAAoD;AACpD,MAAM,CAAC,IAAI,MAAM,GAAW;IAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK;CACpB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,CAAS;IAClC,MAAM,GAAG,CAAC,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Ctx } from './client.js';
|
|
2
|
+
import type { Config } from './config.js';
|
|
3
|
+
import { Sender } from './sender.js';
|
|
4
|
+
import { type Message } from './interfaces.js';
|
|
5
|
+
export declare class Receiver extends Sender {
|
|
6
|
+
private receiver;
|
|
7
|
+
constructor(config: Config);
|
|
8
|
+
protected handleOther(message: Message): void;
|
|
9
|
+
private handleEvent;
|
|
10
|
+
receive<E>(eventName: string, handleFunc: (c: Ctx, data: E) => void): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=receiver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receiver.d.ts","sourceRoot":"","sources":["../../src/receiver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAA2B,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGxE,qBAAa,QAAS,SAAQ,MAAM;IACnC,OAAO,CAAC,QAAQ,CAA4C;gBAEhD,MAAM,EAAE,MAAM;cAIP,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQtD,OAAO,CAAC,WAAW;IAoBZ,OAAO,CAAC,CAAC,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,GACnC,IAAI;CAUP"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { decode } from '@msgpack/msgpack';
|
|
2
|
+
import { Ctx } from './client.js';
|
|
3
|
+
import { Sender } from './sender.js';
|
|
4
|
+
import { MessageType } from './interfaces.js';
|
|
5
|
+
import { logger } from './logger.js';
|
|
6
|
+
export class Receiver extends Sender {
|
|
7
|
+
receiver = new Map();
|
|
8
|
+
constructor(config) {
|
|
9
|
+
super(config);
|
|
10
|
+
}
|
|
11
|
+
handleOther(message) {
|
|
12
|
+
if (message.type === MessageType.Event) {
|
|
13
|
+
this.handleEvent(message.data);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
super.handleOther(message);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
handleEvent(eventBytes) {
|
|
20
|
+
let ev;
|
|
21
|
+
try {
|
|
22
|
+
ev = decode(eventBytes);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logger.info('failed to unmarshal event', error);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const receiverFunc = this.receiver.get(ev.name);
|
|
29
|
+
if (!receiverFunc) {
|
|
30
|
+
logger.info('received event for non existing receiver', ev.name);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const c = new Ctx(ev.data, ev.name);
|
|
34
|
+
receiverFunc(c);
|
|
35
|
+
}
|
|
36
|
+
/// Handle receiving of an event. Only one handleFunc can exist at the same time.
|
|
37
|
+
receive(eventName, handleFunc) {
|
|
38
|
+
this.receiver.set(eventName, (c) => {
|
|
39
|
+
try {
|
|
40
|
+
const data = decode(c.data());
|
|
41
|
+
handleFunc(c, data);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
logger.info('failed to unmarshal event data', error);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=receiver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receiver.js","sourceRoot":"","sources":["../../src/receiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAc,WAAW,EAAgB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,QAAS,SAAQ,MAAM;IAC3B,QAAQ,GAAkC,IAAI,GAAG,EAAE,CAAC;IAE5D,YAAY,MAAc;QACzB,KAAK,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAEkB,WAAW,CAAC,OAAgB;QAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAEO,WAAW,CAAC,UAAsB;QACzC,IAAI,EAAS,CAAC;QACd,IAAI,CAAC;YACJ,EAAE,GAAG,MAAM,CAAC,UAAU,CAAU,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAChD,OAAO;QACR,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACjE,OAAO;QACR,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACpC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,iFAAiF;IAC1E,OAAO,CACb,SAAiB,EACjB,UAAqC;QAErC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAM,EAAE,EAAE;YACvC,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAM,CAAC;gBACnC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Message } from './interfaces.js';
|
|
2
|
+
import type { Config } from './config.js';
|
|
3
|
+
import { UserError } from './user_error.js';
|
|
4
|
+
export declare class Sender {
|
|
5
|
+
private config;
|
|
6
|
+
private sendFunc?;
|
|
7
|
+
private requestId;
|
|
8
|
+
private waiters;
|
|
9
|
+
constructor(config: Config);
|
|
10
|
+
getRequestId(): number;
|
|
11
|
+
setSendFunc(sendFunc: (data: Uint8Array) => Promise<void>): void;
|
|
12
|
+
handle(reqData: Uint8Array): void;
|
|
13
|
+
handleResponse(respBytes: Uint8Array): void;
|
|
14
|
+
protected handleOther(message: Message): void;
|
|
15
|
+
removeResponseWaiter(requestId: number): void;
|
|
16
|
+
private sendRequest;
|
|
17
|
+
getConfig(): Config;
|
|
18
|
+
private sendInternal;
|
|
19
|
+
send<RS, RQ>(route: string, req: RQ): Promise<RS | UserError>;
|
|
20
|
+
sendOk<RQ>(route: string, req: RQ): Promise<UserError>;
|
|
21
|
+
sendOkNoRequest(route: string): Promise<UserError>;
|
|
22
|
+
sendNoRequest<RS>(route: string): Promise<RS | UserError>;
|
|
23
|
+
sendNoResponse<RQ>(route: string, req: RQ): Promise<void>;
|
|
24
|
+
sendPing(route: string): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=sender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/sender.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,OAAO,EAIZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAM1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,MAAM;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAsC;IACvD,OAAO,CAAC,SAAS,CAAa;IAG9B,OAAO,CAAC,OAAO,CAAoD;gBAEvD,MAAM,EAAE,MAAM;IAOnB,YAAY,IAAI,MAAM;IAKtB,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIhE,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAgBjC,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAwBlD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;YAItC,WAAW;IAmClB,SAAS,IAAI,MAAM;YAKZ,YAAY;IA6BnB,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAM7D,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAQhD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIlD,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAQzD,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnD"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { decode, encode } from '@msgpack/msgpack';
|
|
2
|
+
import { MessageType, } from './interfaces.js';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
import { marshalRequestData, unmarshalResponseData, withTimeout, } from './util.js';
|
|
5
|
+
import { UserError } from './user_error.js';
|
|
6
|
+
export class Sender {
|
|
7
|
+
config;
|
|
8
|
+
sendFunc;
|
|
9
|
+
requestId = 0;
|
|
10
|
+
// Maps a request ID to a resolve function to fulfill the promise
|
|
11
|
+
waiters = new Map();
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
if (!this.config.requestTimeout) {
|
|
15
|
+
this.config.requestTimeout = 5000; // default timeout 5 seconds
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
getRequestId() {
|
|
19
|
+
this.requestId++;
|
|
20
|
+
return this.requestId;
|
|
21
|
+
}
|
|
22
|
+
setSendFunc(sendFunc) {
|
|
23
|
+
this.sendFunc = sendFunc;
|
|
24
|
+
}
|
|
25
|
+
handle(reqData) {
|
|
26
|
+
let message;
|
|
27
|
+
try {
|
|
28
|
+
message = decode(reqData);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
logger.info('failed to unmarshal message', error);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (message.type === MessageType.Response) {
|
|
35
|
+
this.handleResponse(message.data);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.handleOther(message);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
handleResponse(respBytes) {
|
|
42
|
+
let resp;
|
|
43
|
+
try {
|
|
44
|
+
resp = decode(respBytes);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger.info('failed to unmarshal response', error);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (resp.id === -1 && resp.error) {
|
|
51
|
+
const decoder = new TextDecoder();
|
|
52
|
+
this.config.errorHandler(new Error(decoder.decode(resp.data)));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const resolveFunc = this.waiters.get(resp.id);
|
|
56
|
+
if (!resolveFunc) {
|
|
57
|
+
logger.info('received response for non existing waiter', resp.id);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
resolveFunc(resp);
|
|
61
|
+
}
|
|
62
|
+
handleOther(message) {
|
|
63
|
+
logger.info('received unsupported message type', message.type);
|
|
64
|
+
}
|
|
65
|
+
removeResponseWaiter(requestId) {
|
|
66
|
+
this.waiters.delete(requestId);
|
|
67
|
+
}
|
|
68
|
+
async sendRequest(route, reqData, wantResponse) {
|
|
69
|
+
const reqId = this.getRequestId();
|
|
70
|
+
if (!this.sendFunc) {
|
|
71
|
+
throw new Error('sendFunc is not set');
|
|
72
|
+
}
|
|
73
|
+
const req = {
|
|
74
|
+
id: reqId,
|
|
75
|
+
route: route,
|
|
76
|
+
data: reqData,
|
|
77
|
+
};
|
|
78
|
+
let reqBytes;
|
|
79
|
+
try {
|
|
80
|
+
reqBytes = encode(req);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
throw new Error(`failed to marshal request: ${err}`);
|
|
84
|
+
}
|
|
85
|
+
let respPromise = Promise.resolve({});
|
|
86
|
+
if (wantResponse) {
|
|
87
|
+
respPromise = new Promise((resolve) => {
|
|
88
|
+
this.waiters.set(reqId, resolve);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
await this.sendFunc(reqBytes);
|
|
92
|
+
return { promise: respPromise, reqId: reqId };
|
|
93
|
+
}
|
|
94
|
+
getConfig() {
|
|
95
|
+
return this.config;
|
|
96
|
+
}
|
|
97
|
+
/// Internal helper for making send functions easier to write.
|
|
98
|
+
async sendInternal(route, req, waitForResponse) {
|
|
99
|
+
const { promise: respPromise, reqId } = await this.sendRequest(route, req != undefined ? marshalRequestData(req) : new Uint8Array(), true);
|
|
100
|
+
// When we want to wait for response, properly serialize it
|
|
101
|
+
if (waitForResponse) {
|
|
102
|
+
const timeout = this.config.requestTimeout ?? 5000;
|
|
103
|
+
const res = await withTimeout(respPromise, timeout);
|
|
104
|
+
this.removeResponseWaiter(reqId);
|
|
105
|
+
if (res.error) {
|
|
106
|
+
const decoder = new TextDecoder();
|
|
107
|
+
return new UserError(decoder.decode(res.data));
|
|
108
|
+
}
|
|
109
|
+
return unmarshalResponseData(res.data);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Otherwise signal that nothing will be waited for
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
send(route, req) {
|
|
117
|
+
return this.sendInternal(route, req, true);
|
|
118
|
+
}
|
|
119
|
+
sendOk(route, req) {
|
|
120
|
+
return this.sendInternal(route, req, true);
|
|
121
|
+
}
|
|
122
|
+
async sendOkNoRequest(route) {
|
|
123
|
+
return this.sendInternal(route, undefined, false);
|
|
124
|
+
}
|
|
125
|
+
async sendNoRequest(route) {
|
|
126
|
+
return this.sendInternal(route, undefined, true);
|
|
127
|
+
}
|
|
128
|
+
async sendNoResponse(route, req) {
|
|
129
|
+
await this.sendInternal(route, req, false);
|
|
130
|
+
}
|
|
131
|
+
async sendPing(route) {
|
|
132
|
+
await this.sendInternal(route, undefined, false);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=sender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../../src/sender.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transporter_http.d.ts","sourceRoot":"","sources":["../../../src/transporter/transporter_http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,qBAAa,eAAe;IAC3B,OAAO,CAAC,MAAM,CAAS;gBAEX,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CA+BlD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class HTTPTransporter {
|
|
2
|
+
sender;
|
|
3
|
+
constructor(s, method, url) {
|
|
4
|
+
this.sender = s;
|
|
5
|
+
this.sender.setSendFunc(async (data) => {
|
|
6
|
+
const controller = new AbortController();
|
|
7
|
+
const timeout = setTimeout(() => controller.abort(), 20000);
|
|
8
|
+
try {
|
|
9
|
+
const response = await fetch(url, {
|
|
10
|
+
method: method,
|
|
11
|
+
body: data,
|
|
12
|
+
signal: controller.signal,
|
|
13
|
+
headers: {
|
|
14
|
+
'Content-Type': 'application/octet-stream',
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
// Check for transporter errors
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
throw new Error(`received non ok status ${response.status} ${response.statusText}`);
|
|
20
|
+
}
|
|
21
|
+
// Let sender handle the response routing
|
|
22
|
+
this.sender.handle(await response.bytes());
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
clearTimeout(timeout);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=transporter_http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transporter_http.js","sourceRoot":"","sources":["../../../src/transporter/transporter_http.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAe;IACnB,MAAM,CAAS;IAEvB,YAAY,CAAS,EAAE,MAAc,EAAE,GAAW;QACjD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAgB,EAAiB,EAAE;YACjE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;YAE5D,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBACjC,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,IAA2B;oBACjC,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,OAAO,EAAE;wBACR,cAAc,EAAE,0BAA0B;qBAC1C;iBACD,CAAC,CAAC;gBAEH,+BAA+B;gBAC/B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CACd,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAClE,CAAC;gBACH,CAAC;gBAED,yCAAyC;gBACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5C,CAAC;oBAAS,CAAC;gBACV,YAAY,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Receiver } from '../receiver.js';
|
|
2
|
+
export interface WebSocketOptions {
|
|
3
|
+
connectionTimeout?: number;
|
|
4
|
+
onOpen?: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare class WebSocketTransporter {
|
|
7
|
+
private conn;
|
|
8
|
+
private receiver;
|
|
9
|
+
private options;
|
|
10
|
+
private connected;
|
|
11
|
+
private queue;
|
|
12
|
+
constructor(receiver: Receiver, options: WebSocketOptions);
|
|
13
|
+
connect(url: string): void;
|
|
14
|
+
close(reason?: string): void;
|
|
15
|
+
isConnected(): boolean;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=transporter_websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transporter_websocket.d.ts","sourceRoot":"","sources":["../../../src/transporter/transporter_websocket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAEhC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAChC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAoB;gBAErB,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB;IAQlD,OAAO,CAAC,GAAG,EAAE,MAAM;IAwEnB,KAAK,CAAC,MAAM,GAAE,MAA4B,GAAG,IAAI;IAajD,WAAW,IAAI,OAAO;CAG7B"}
|