@whitewall/blip-sdk 0.0.96 → 0.0.98

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.
Files changed (63) hide show
  1. package/dist/cjs/client.js +7 -0
  2. package/dist/cjs/client.js.map +1 -1
  3. package/dist/cjs/index.js +2 -0
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/sender/enveloperesolver.js +40 -0
  6. package/dist/cjs/sender/enveloperesolver.js.map +1 -0
  7. package/dist/cjs/sender/http/httpsender.js +11 -36
  8. package/dist/cjs/sender/http/httpsender.js.map +1 -1
  9. package/dist/cjs/sender/sessionegotiator.js +123 -0
  10. package/dist/cjs/sender/sessionegotiator.js.map +1 -0
  11. package/dist/cjs/sender/tcp/tcpsender.js +182 -0
  12. package/dist/cjs/sender/tcp/tcpsender.js.map +1 -0
  13. package/dist/cjs/sender/throttler.js +38 -0
  14. package/dist/cjs/sender/throttler.js.map +1 -0
  15. package/dist/cjs/sender/websocket/websocketsender.js +127 -0
  16. package/dist/cjs/sender/websocket/websocketsender.js.map +1 -0
  17. package/dist/cjs/types/command.js +3 -0
  18. package/dist/cjs/types/command.js.map +1 -1
  19. package/dist/cjs/types/session.js +8 -0
  20. package/dist/cjs/types/session.js.map +1 -0
  21. package/dist/esm/client.js +7 -0
  22. package/dist/esm/client.js.map +1 -1
  23. package/dist/esm/index.js +2 -0
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/sender/enveloperesolver.js +36 -0
  26. package/dist/esm/sender/enveloperesolver.js.map +1 -0
  27. package/dist/esm/sender/http/httpsender.js +11 -36
  28. package/dist/esm/sender/http/httpsender.js.map +1 -1
  29. package/dist/esm/sender/sessionegotiator.js +119 -0
  30. package/dist/esm/sender/sessionegotiator.js.map +1 -0
  31. package/dist/esm/sender/tcp/tcpsender.js +178 -0
  32. package/dist/esm/sender/tcp/tcpsender.js.map +1 -0
  33. package/dist/esm/sender/throttler.js +34 -0
  34. package/dist/esm/sender/throttler.js.map +1 -0
  35. package/dist/esm/sender/websocket/websocketsender.js +123 -0
  36. package/dist/esm/sender/websocket/websocketsender.js.map +1 -0
  37. package/dist/esm/types/command.js +1 -1
  38. package/dist/esm/types/command.js.map +1 -1
  39. package/dist/esm/types/session.js +4 -0
  40. package/dist/esm/types/session.js.map +1 -0
  41. package/dist/types/client.d.ts +2 -0
  42. package/dist/types/client.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +2 -0
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/sender/enveloperesolver.d.ts +10 -0
  46. package/dist/types/sender/enveloperesolver.d.ts.map +1 -0
  47. package/dist/types/sender/http/httpsender.d.ts +1 -2
  48. package/dist/types/sender/http/httpsender.d.ts.map +1 -1
  49. package/dist/types/sender/sender.d.ts +5 -1
  50. package/dist/types/sender/sender.d.ts.map +1 -1
  51. package/dist/types/sender/sessionegotiator.d.ts +30 -0
  52. package/dist/types/sender/sessionegotiator.d.ts.map +1 -0
  53. package/dist/types/sender/tcp/tcpsender.d.ts +14 -0
  54. package/dist/types/sender/tcp/tcpsender.d.ts.map +1 -0
  55. package/dist/types/sender/throttler.d.ts +5 -0
  56. package/dist/types/sender/throttler.d.ts.map +1 -0
  57. package/dist/types/sender/websocket/websocketsender.d.ts +15 -0
  58. package/dist/types/sender/websocket/websocketsender.d.ts.map +1 -0
  59. package/dist/types/types/command.d.ts +3 -1
  60. package/dist/types/types/command.d.ts.map +1 -1
  61. package/dist/types/types/session.d.ts +17 -0
  62. package/dist/types/types/session.d.ts.map +1 -0
  63. package/package.json +2 -1
@@ -0,0 +1,178 @@
1
+ import { connect as tcpConnect } from 'node:net';
2
+ import { Node, } from '../../types/index.js';
3
+ import { BlipError } from '../bliperror.js';
4
+ import { EnvelopeResolver } from '../enveloperesolver.js';
5
+ import { SessionNegotiator } from '../sessionegotiator.js';
6
+ import { EnvelopeThrottler } from '../throttler.js';
7
+ export class TCPSender {
8
+ throttler = new EnvelopeThrottler();
9
+ envelopeResolver = new EnvelopeResolver(this);
10
+ connectionHandle;
11
+ sessionNegotiator = null;
12
+ constructor(identifier, accessKey, tenantId) {
13
+ const prefix = tenantId ? `${tenantId}.` : '';
14
+ this.connectionHandle = new TCPHandle(`${prefix}tcp.msging.net`, 443, async (socket) => {
15
+ this.sessionNegotiator = new SessionNegotiator(this, (session) => {
16
+ socket.write(JSON.stringify(session));
17
+ });
18
+ await this.sessionNegotiator.negotiate({
19
+ identity: new Node(identifier, 'msging.net'),
20
+ authentication: {
21
+ scheme: 'key',
22
+ data: { key: accessKey },
23
+ },
24
+ });
25
+ }, (envelope) => {
26
+ if (this.sessionNegotiator?.negotiating) {
27
+ return this.sessionNegotiator.handleEnvelope(envelope);
28
+ }
29
+ this.envelopeResolver.resolve(envelope);
30
+ });
31
+ }
32
+ async sendMessage(message) {
33
+ await this.throttler.throttle('message');
34
+ const socket = await this.connectionHandle.get();
35
+ await this.sessionNegotiator?.ensurePresence();
36
+ socket.write(JSON.stringify(message));
37
+ }
38
+ async sendCommand(command) {
39
+ await this.throttler.throttle('command');
40
+ const envelopeResponsePromise = this.envelopeResolver.createEnvelopeResponsePromise(command.id);
41
+ const socket = await this.connectionHandle.get();
42
+ await this.sessionNegotiator?.ensurePresence(command.uri);
43
+ socket.write(JSON.stringify(command));
44
+ const response = (await envelopeResponsePromise);
45
+ if (response.status === 'failure') {
46
+ throw new BlipError(command.uri, response.reason.code, response.reason.description);
47
+ }
48
+ else if (response.status === 'success') {
49
+ return response.resource;
50
+ }
51
+ else {
52
+ throw new Error(`Unexpected command response for command: ${command.uri}`);
53
+ }
54
+ }
55
+ async sendCommandResponse(response) {
56
+ const socket = await this.connectionHandle.get();
57
+ socket.write(`${JSON.stringify(response)}\n`);
58
+ }
59
+ async close() {
60
+ this.sessionNegotiator?.finish();
61
+ await this.connectionHandle.close();
62
+ }
63
+ }
64
+ class TCPHandle {
65
+ host;
66
+ port;
67
+ currentSocketPromise = null;
68
+ closing = false;
69
+ connectionAttempts = 0;
70
+ constructor(host, port, onConnected, onMessage) {
71
+ this.host = host;
72
+ this.port = port;
73
+ this.currentSocketPromise = this.connect(this.host, this.port, onConnected, onMessage);
74
+ }
75
+ get() {
76
+ if (!this.currentSocketPromise) {
77
+ throw new Error('TCP connection is not available.');
78
+ }
79
+ return this.currentSocketPromise;
80
+ }
81
+ async close() {
82
+ if (!this.closing && this.currentSocketPromise) {
83
+ this.closing = true;
84
+ const current = await this.currentSocketPromise;
85
+ current.end();
86
+ current.destroy();
87
+ }
88
+ }
89
+ connect(host, port, onConnected, onMessage) {
90
+ const socket = tcpConnect({ host, port });
91
+ let buffer = '';
92
+ return new Promise((resolve) => {
93
+ socket.on('connect', async () => {
94
+ await onConnected(socket);
95
+ this.connectionAttempts = 0;
96
+ resolve(socket);
97
+ });
98
+ socket.on('error', (err) => {
99
+ if (!this.closing) {
100
+ throw err;
101
+ }
102
+ });
103
+ socket.on('close', () => {
104
+ if (!this.closing) {
105
+ this.connectionAttempts++;
106
+ if (this.connectionAttempts < 3) {
107
+ this.currentSocketPromise = this.connect(host, port, onConnected, onMessage);
108
+ }
109
+ else {
110
+ throw new Error('Failed to connect/reconnect to TCP socket');
111
+ }
112
+ }
113
+ });
114
+ socket.on('data', (chunk) => {
115
+ buffer += chunk.toString();
116
+ const result = this.tryParseJSON(buffer);
117
+ buffer = result.remainingBuffer;
118
+ for (const parsed of result.parsedObjects) {
119
+ onMessage(parsed);
120
+ }
121
+ });
122
+ });
123
+ }
124
+ tryParseJSON(buffer) {
125
+ const parsedObjects = [];
126
+ let currBuffer = buffer;
127
+ let startIndex = buffer.indexOf('{');
128
+ while (startIndex !== -1) {
129
+ let braceCount = 0;
130
+ let inString = false;
131
+ let escaped = false;
132
+ let foundEnd = false;
133
+ let endIndex = startIndex;
134
+ for (let i = startIndex; i < currBuffer.length; i++) {
135
+ const char = currBuffer[i];
136
+ if (inString) {
137
+ if (escaped) {
138
+ escaped = false;
139
+ }
140
+ else if (char === '\\') {
141
+ escaped = true;
142
+ }
143
+ else if (char === '"') {
144
+ inString = false;
145
+ }
146
+ }
147
+ else {
148
+ if (char === '"') {
149
+ inString = true;
150
+ }
151
+ else if (char === '{') {
152
+ braceCount++;
153
+ }
154
+ else if (char === '}') {
155
+ braceCount--;
156
+ // When all opened braces are closed, we found the end.
157
+ if (braceCount === 0) {
158
+ endIndex = i;
159
+ foundEnd = true;
160
+ break;
161
+ }
162
+ }
163
+ }
164
+ }
165
+ // If we haven't found a complete JSON object, break and wait for more data.
166
+ if (!foundEnd) {
167
+ break;
168
+ }
169
+ const rawMessage = currBuffer.slice(startIndex, endIndex + 1).trim();
170
+ const parsed = JSON.parse(rawMessage);
171
+ parsedObjects.push(parsed);
172
+ currBuffer = currBuffer.slice(endIndex + 1);
173
+ startIndex = currBuffer.indexOf('{');
174
+ }
175
+ return { parsedObjects, remainingBuffer: currBuffer };
176
+ }
177
+ }
178
+ //# sourceMappingURL=tcpsender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcpsender.js","sourceRoot":"","sources":["../../../../src/sender/tcp/tcpsender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export class EnvelopeThrottler {
2
+ sent = {
3
+ message: {
4
+ max: 50,
5
+ started: 0,
6
+ count: 0,
7
+ },
8
+ command: {
9
+ max: 200,
10
+ started: 0,
11
+ count: 0,
12
+ },
13
+ };
14
+ async throttle(type) {
15
+ const throughput = this.sent[type].max * 0.9;
16
+ const timeToReset = 1000;
17
+ while (true) {
18
+ const elapsed = Date.now() - this.sent[type].started;
19
+ if (elapsed >= timeToReset) {
20
+ this.sent[type].started = Date.now();
21
+ this.sent[type].count = 0;
22
+ }
23
+ if (this.sent[type].count < throughput) {
24
+ this.sent[type].count++;
25
+ break;
26
+ }
27
+ else {
28
+ const wait = timeToReset - elapsed;
29
+ await new Promise((resolve) => setTimeout(resolve, wait));
30
+ }
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=throttler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttler.js","sourceRoot":"","sources":["../../../src/sender/throttler.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IAClB,IAAI,GAAG;QACX,OAAO,EAAE;YACL,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;SACX;QACD,OAAO,EAAE;YACL,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;SACX;KACJ,CAAA;IAEM,KAAK,CAAC,QAAQ,CAAC,IAA4B;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAA;QAExB,OAAO,IAAI,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;YAEpD,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;YAC7B,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAA;gBACvB,MAAK;YACT,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,GAAG,WAAW,GAAG,OAAO,CAAA;gBAClC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;YAC7D,CAAC;QACL,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,123 @@
1
+ import { Node, } from '../../types/index.js';
2
+ import { BlipError } from '../bliperror.js';
3
+ import { EnvelopeResolver } from '../enveloperesolver.js';
4
+ import { SessionNegotiator } from '../sessionegotiator.js';
5
+ import { EnvelopeThrottler } from '../throttler.js';
6
+ export class WebSocketSender {
7
+ throttler = new EnvelopeThrottler();
8
+ envelopeResolver = new EnvelopeResolver(this);
9
+ connectionHandle;
10
+ sessionNegotiator = null;
11
+ constructor(identifier, accessKey, tenantId) {
12
+ const prefix = tenantId ? `${tenantId}.` : '';
13
+ this.connectionHandle = new WebSocketHandle(`wss://${prefix}ws.msging.net`, (webSocket) => {
14
+ this.sessionNegotiator = new SessionNegotiator(this, (session) => {
15
+ webSocket.send(JSON.stringify(session));
16
+ });
17
+ return this.sessionNegotiator.negotiate({
18
+ identity: new Node(identifier, 'msging.net'),
19
+ authentication: {
20
+ scheme: 'key',
21
+ data: { key: accessKey },
22
+ },
23
+ });
24
+ }, (envelope) => {
25
+ if (this.sessionNegotiator?.negotiating) {
26
+ return this.sessionNegotiator.handleEnvelope(envelope);
27
+ }
28
+ this.envelopeResolver.resolve(envelope);
29
+ });
30
+ }
31
+ async sendMessage(message) {
32
+ await this.throttler.throttle('message');
33
+ const webSocket = await this.connectionHandle.get();
34
+ await this.sessionNegotiator?.ensurePresence();
35
+ webSocket.send(JSON.stringify(message));
36
+ }
37
+ sendCommand(command) {
38
+ return this.withRetryPolicy(async () => {
39
+ await this.throttler.throttle('command');
40
+ const envelopeResponsePromise = this.envelopeResolver.createEnvelopeResponsePromise(command.id);
41
+ const webSocket = await this.connectionHandle.get();
42
+ await this.sessionNegotiator?.ensurePresence(command.uri);
43
+ webSocket.send(JSON.stringify(command));
44
+ const response = (await envelopeResponsePromise);
45
+ if (response.status === 'failure') {
46
+ throw new BlipError(command.uri, response.reason.code, response.reason.description);
47
+ }
48
+ else if (response.status === 'success') {
49
+ return response.resource;
50
+ }
51
+ else {
52
+ throw new Error(`Unexpected command response for command: ${command.uri}`);
53
+ }
54
+ });
55
+ }
56
+ async sendCommandResponse(response) {
57
+ const webSocket = await this.connectionHandle.get();
58
+ webSocket.send(JSON.stringify(response));
59
+ }
60
+ async close() {
61
+ this.sessionNegotiator?.finish();
62
+ await this.connectionHandle.close();
63
+ }
64
+ async withRetryPolicy(fn, retries = 5) {
65
+ try {
66
+ return await fn();
67
+ }
68
+ catch (err) {
69
+ if (retries > 0 && err instanceof BlipError && err.code === 101) {
70
+ // wait before retrying
71
+ await new Promise((resolve) => setTimeout(resolve, Math.random() * 1000));
72
+ return this.withRetryPolicy(fn, retries - 1);
73
+ }
74
+ throw err;
75
+ }
76
+ }
77
+ }
78
+ class WebSocketHandle {
79
+ currentWebSocketPromise = null;
80
+ closing = false;
81
+ connectionAttempts = 0;
82
+ constructor(url, onConnected, onMessage) {
83
+ this.currentWebSocketPromise = this.connect(url, onConnected, onMessage);
84
+ }
85
+ get() {
86
+ return this.currentWebSocketPromise;
87
+ }
88
+ async close() {
89
+ if (!this.closing && this.currentWebSocketPromise) {
90
+ this.closing = true;
91
+ const current = await this.currentWebSocketPromise;
92
+ current.close();
93
+ }
94
+ }
95
+ connect(url, onConnected, onMessage) {
96
+ const connection = new WebSocket(url, 'lime');
97
+ return new Promise((resolve, reject) => {
98
+ connection.onopen = async () => {
99
+ await onConnected(connection);
100
+ this.connectionAttempts = 0;
101
+ resolve(connection);
102
+ };
103
+ connection.onclose = () => {
104
+ if (!this.closing) {
105
+ this.connectionAttempts++;
106
+ if (this.connectionAttempts < 3) {
107
+ this.currentWebSocketPromise = this.connect(url, onConnected, onMessage);
108
+ }
109
+ else {
110
+ reject(new Error('Failed to connect to WebSocket'));
111
+ }
112
+ }
113
+ };
114
+ connection.onmessage = (event) => {
115
+ onMessage(JSON.parse(event.data));
116
+ };
117
+ connection.onerror = (error) => {
118
+ reject(error);
119
+ };
120
+ });
121
+ }
122
+ }
123
+ //# sourceMappingURL=websocketsender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocketsender.js","sourceRoot":"","sources":["../../../../src/sender/websocket/websocketsender.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ export const isCommand = (envelope) => 'method' in envelope && 'uri' in envelope;
2
2
  //# sourceMappingURL=command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/types/command.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/types/command.ts"],"names":[],"mappings":"AAuCA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAuC,EAAE,CACjF,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ export const isSession = (value) => {
2
+ return 'state' in value;
3
+ };
4
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/types/session.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAe,EAAoB,EAAE;IAC3D,OAAO,OAAO,IAAI,KAAK,CAAA;AAC3B,CAAC,CAAA"}
@@ -10,6 +10,7 @@ import { PortalNamespace } from './namespaces/portal.js';
10
10
  import { SchedulerNamespace } from './namespaces/scheduler.js';
11
11
  import { WhatsAppNamespace } from './namespaces/whatsapp.js';
12
12
  import type { Sender } from './sender/sender.js';
13
+ import type { Message, MessageTypes } from './types/message.js';
13
14
  import { type Identity } from './types/node.js';
14
15
  export declare class BlipClient {
15
16
  readonly sender: Sender;
@@ -25,6 +26,7 @@ export declare class BlipClient {
25
26
  readonly portal: PortalNamespace;
26
27
  readonly plugins: PluginsNamespace;
27
28
  as(botIdentityOrIdentifier: string | Identity): BlipClient;
29
+ sendMessage<Type extends MessageTypes>(message: Omit<Message<Type>, 'id'>): Promise<void>;
28
30
  static http(botIdentityOrIdentifier: string | Identity, accessKey: string, tenantId: string): BlipClient;
29
31
  }
30
32
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,KAAK,QAAQ,EAAQ,MAAM,iBAAiB,CAAA;AAErD,qBAAa,UAAU;aAEC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,cAAc,CAAC,EAAE,kBAAkB;IAcvC,SAAgB,OAAO,EAAG,gBAAgB,CAAA;IAC1C,SAAgB,OAAO,EAAG,gBAAgB,CAAA;IAC1C,SAAgB,IAAI,EAAG,aAAa,CAAA;IACpC,SAAgB,KAAK,EAAG,cAAc,CAAA;IACtC,SAAgB,QAAQ,EAAG,iBAAiB,CAAA;IAC5C,SAAgB,SAAS,EAAG,kBAAkB,CAAA;IAC9C,SAAgB,SAAS,EAAG,kBAAkB,CAAA;IAC9C,SAAgB,cAAc,EAAG,uBAAuB,CAAA;IACxD,SAAgB,MAAM,EAAG,eAAe,CAAA;IACxC,SAAgB,OAAO,EAAG,gBAAgB,CAAA;IAEnC,EAAE,CAAC,uBAAuB,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU;WAOnD,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;CAGlH"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,KAAK,QAAQ,EAAQ,MAAM,iBAAiB,CAAA;AAGrD,qBAAa,UAAU;aAEC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,cAAc,CAAC,EAAE,kBAAkB;IAcvC,SAAgB,OAAO,EAAG,gBAAgB,CAAA;IAC1C,SAAgB,OAAO,EAAG,gBAAgB,CAAA;IAC1C,SAAgB,IAAI,EAAG,aAAa,CAAA;IACpC,SAAgB,KAAK,EAAG,cAAc,CAAA;IACtC,SAAgB,QAAQ,EAAG,iBAAiB,CAAA;IAC5C,SAAgB,SAAS,EAAG,kBAAkB,CAAA;IAC9C,SAAgB,SAAS,EAAG,kBAAkB,CAAA;IAC9C,SAAgB,cAAc,EAAG,uBAAuB,CAAA;IACxD,SAAgB,MAAM,EAAG,eAAe,CAAA;IACxC,SAAgB,OAAO,EAAG,gBAAgB,CAAA;IAEnC,EAAE,CAAC,uBAAuB,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU;IAO1D,WAAW,CAAC,IAAI,SAAS,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;WAOlF,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;CAGlH"}
@@ -6,6 +6,8 @@ export * from './sender/sender.js';
6
6
  export * from './sender/bliperror.js';
7
7
  export * from './sender/gateway/customgatewaysender.js';
8
8
  export * from './sender/portal/pluginsender.js';
9
+ export * from './sender/websocket/websocketsender.js';
10
+ export * from './sender/tcp/tcpsender.js';
9
11
  export * from './sender/http/httpsender.js';
10
12
  export * from './namespaces/namespace.js';
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yCAAyC,CAAA;AACvD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yCAAyC,CAAA;AACvD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,uCAAuC,CAAA;AACrD,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { Envelope } from '../types/envelope.js';
2
+ import type { OpenConnectionSender } from './sender.js';
3
+ export declare class EnvelopeResolver {
4
+ private readonly sender;
5
+ private readonly waitingEnvelopeResponseResolvers;
6
+ constructor(sender: OpenConnectionSender);
7
+ resolve(envelope: Envelope): Promise<void>;
8
+ createEnvelopeResponsePromise(id: string): Promise<Envelope>;
9
+ }
10
+ //# sourceMappingURL=enveloperesolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enveloperesolver.d.ts","sourceRoot":"","sources":["../../../src/sender/enveloperesolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEvD,qBAAa,gBAAgB;IAGb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAmD;gBAEvE,MAAM,EAAE,oBAAoB;IAE5C,OAAO,CAAC,QAAQ,EAAE,QAAQ;IAqBhC,6BAA6B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAKtE"}
@@ -3,12 +3,11 @@ import type { Sender } from '../sender.js';
3
3
  export declare class HttpSender implements Sender {
4
4
  private readonly token;
5
5
  private readonly baseurl;
6
+ private readonly throttler;
6
7
  constructor(token: string, tenantId?: string);
7
8
  sendMessage<Type extends MessageTypes>(message: Message<Type>): Promise<void>;
8
9
  sendCommand(command: Command<CommandMethods>): Promise<unknown>;
9
10
  static login(botIdentityOrIdentifier: string | Identity, accessKey: string, tenantId: string): HttpSender;
10
- private sent;
11
- private throttle;
12
11
  private withFetchRetryPolicy;
13
12
  }
14
13
  //# sourceMappingURL=httpsender.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"httpsender.d.ts","sourceRoot":"","sources":["../../../../src/sender/http/httpsender.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,cAAc,EAEnB,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,YAAY,EAEpB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,qBAAa,UAAW,YAAW,MAAM;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;gBAEpB,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAMrC,WAAW,CAAC,IAAI,SAAS,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7E,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;WA2BxD,KAAK,CAAC,uBAAuB,EAAE,MAAM,GAAG,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAQhH,OAAO,CAAC,IAAI,CAWX;YACa,QAAQ;YAsBR,oBAAoB;CAqBrC"}
1
+ {"version":3,"file":"httpsender.d.ts","sourceRoot":"","sources":["../../../../src/sender/http/httpsender.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,cAAc,EAEnB,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,YAAY,EAEpB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAG1C,qBAAa,UAAW,YAAW,MAAM;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;gBAExC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAMrC,WAAW,CAAC,IAAI,SAAS,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7E,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;WA2BxD,KAAK,CAAC,uBAAuB,EAAE,MAAM,GAAG,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;YAQlG,oBAAoB;CAyBrC"}
@@ -1,6 +1,10 @@
1
- import type { Command, CommandMethods, Message, MessageTypes } from '../types/index.js';
1
+ import type { Command, CommandMethods, CommandResponse, Message, MessageTypes } from '../types/index.js';
2
2
  export interface Sender {
3
3
  sendMessage<Type extends MessageTypes>(message: Message<Type>): Promise<void>;
4
4
  sendCommand(command: Command<CommandMethods>): Promise<unknown>;
5
5
  }
6
+ export interface OpenConnectionSender extends Sender {
7
+ close(): Promise<void>;
8
+ sendCommandResponse<T>(response: CommandResponse<T, CommandMethods, 'success' | 'failure'>): Promise<void>;
9
+ }
6
10
  //# sourceMappingURL=sender.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../../src/sender/sender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEvF,MAAM,WAAW,MAAM;IACnB,WAAW,CAAC,IAAI,SAAS,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7E,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAClE"}
1
+ {"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../../src/sender/sender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAExG,MAAM,WAAW,MAAM;IACnB,WAAW,CAAC,IAAI,SAAS,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7E,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAClE;AAED,MAAM,WAAW,oBAAqB,SAAQ,MAAM;IAChD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7G"}
@@ -0,0 +1,30 @@
1
+ import type { Envelope } from '../types/envelope.js';
2
+ import { Node, type NodeLike } from '../types/node.js';
3
+ import type { Session } from '../types/session.js';
4
+ import type { OpenConnectionSender } from './sender.js';
5
+ export declare class SessionNegotiator {
6
+ private readonly sender;
7
+ private readonly sendSession;
8
+ state: Session['state'] | 'present';
9
+ session: {
10
+ id: string;
11
+ localNode: Node;
12
+ remoteNode: Node;
13
+ } | null;
14
+ private presencePromise;
15
+ private currentMessageResolver;
16
+ constructor(sender: OpenConnectionSender, sendSession: (session: Session) => void);
17
+ negotiate(options: {
18
+ identity: NodeLike;
19
+ authentication: {
20
+ scheme: 'key';
21
+ data: Record<string, unknown>;
22
+ };
23
+ }): Promise<void>;
24
+ handleEnvelope(message: Envelope): void;
25
+ ensurePresence(currentCommandUri?: string): Promise<void>;
26
+ finish(): void;
27
+ get negotiating(): boolean;
28
+ private waitForSessionResponse;
29
+ }
30
+ //# sourceMappingURL=sessionegotiator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionegotiator.d.ts","sourceRoot":"","sources":["../../../src/sender/sessionegotiator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAkB,MAAM,kBAAkB,CAAA;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEvD,qBAAa,iBAAiB;IAYtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAZzB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,CAAQ;IAC3C,OAAO,EAAE;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,SAAS,EAAE,IAAI,CAAA;QACf,UAAU,EAAE,IAAI,CAAA;KACnB,GAAG,IAAI,CAAO;IAEf,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,sBAAsB,CAAyE;gBAGlF,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI;IAG/C,SAAS,CAAC,OAAO,EAAE;QAC5B,QAAQ,EAAE,QAAQ,CAAA;QAClB,cAAc,EAAE;YACZ,MAAM,EAAE,KAAK,CAAA;YACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAChC,CAAA;KACJ,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDV,cAAc,CAAC,OAAO,EAAE,QAAQ;IAO1B,cAAc,CAAC,iBAAiB,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC3D,MAAM;IAWb,IAAW,WAAW,IAAI,OAAO,CAEhC;YAEa,sBAAsB;CAWvC"}
@@ -0,0 +1,14 @@
1
+ import { type Command, type CommandMethods, type CommandResponse, type Message, type MessageTypes } from '../../types/index.js';
2
+ import type { OpenConnectionSender } from '../sender.js';
3
+ export declare class TCPSender implements OpenConnectionSender {
4
+ private readonly throttler;
5
+ private readonly envelopeResolver;
6
+ private readonly connectionHandle;
7
+ private sessionNegotiator;
8
+ constructor(identifier: string, accessKey: string, tenantId?: string);
9
+ sendMessage<Type extends MessageTypes>(message: Message<Type>): Promise<void>;
10
+ sendCommand(command: Command<CommandMethods>): Promise<unknown>;
11
+ sendCommandResponse<T>(response: CommandResponse<T, CommandMethods, 'success' | 'failure'>): Promise<void>;
12
+ close(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=tcpsender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcpsender.d.ts","sourceRoot":"","sources":["../../../../src/sender/tcp/tcpsender.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,KAAK,OAAO,EACZ,KAAK,YAAY,EAEpB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAIxD,qBAAa,SAAU,YAAW,oBAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,iBAAiB,CAAiC;gBAE9C,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IA0BvD,WAAW,CAAC,IAAI,SAAS,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7E,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB/D,mBAAmB,CAAC,CAAC,EAC9B,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC,GACpE,OAAO,CAAC,IAAI,CAAC;IAKH,KAAK;CAIrB"}
@@ -0,0 +1,5 @@
1
+ export declare class EnvelopeThrottler {
2
+ private sent;
3
+ throttle(type: keyof typeof this.sent): Promise<void>;
4
+ }
5
+ //# sourceMappingURL=throttler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttler.d.ts","sourceRoot":"","sources":["../../../src/sender/throttler.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,IAAI,CAWX;IAEY,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBrE"}
@@ -0,0 +1,15 @@
1
+ import { type Command, type CommandMethods, type CommandResponse, type Message, type MessageTypes } from '../../types/index.js';
2
+ import type { OpenConnectionSender } from '../sender.js';
3
+ export declare class WebSocketSender implements OpenConnectionSender {
4
+ private readonly throttler;
5
+ private readonly envelopeResolver;
6
+ private readonly connectionHandle;
7
+ private sessionNegotiator;
8
+ constructor(identifier: string, accessKey: string, tenantId?: string);
9
+ sendMessage<Type extends MessageTypes>(message: Message<Type>): Promise<void>;
10
+ sendCommand(command: Command<CommandMethods>): Promise<unknown>;
11
+ sendCommandResponse<T>(response: CommandResponse<T, CommandMethods, 'success' | 'failure'>): Promise<void>;
12
+ close(): Promise<void>;
13
+ private withRetryPolicy;
14
+ }
15
+ //# sourceMappingURL=websocketsender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocketsender.d.ts","sourceRoot":"","sources":["../../../../src/sender/websocket/websocketsender.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,KAAK,OAAO,EACZ,KAAK,YAAY,EAEpB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAIxD,qBAAa,eAAgB,YAAW,oBAAoB;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;IAC5D,OAAO,CAAC,iBAAiB,CAAiC;gBAE9C,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IA0BvD,WAAW,CAAC,IAAI,SAAS,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASnF,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBzD,mBAAmB,CAAC,CAAC,EAC9B,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC,GACpE,OAAO,CAAC,IAAI,CAAC;IAKH,KAAK;YAKJ,eAAe;CAahC"}
@@ -16,7 +16,8 @@ export type Command<TMethod extends CommandMethods> = Envelope & {
16
16
  uri: string;
17
17
  method: TMethod;
18
18
  } & CommandMethodsProperties[TMethod];
19
- export type CommandResponse<TResponse, TMethod extends CommandMethods, TStatus extends 'success' | 'failure'> = Command<TMethod> & {
19
+ export type CommandResponse<TResponse, TMethod extends CommandMethods, TStatus extends 'success' | 'failure'> = Omit<Command<TMethod>, 'uri'> & {
20
+ type: string;
20
21
  status: TStatus;
21
22
  resource: TMethod extends 'get' ? (TStatus extends 'success' ? TResponse : never) : never;
22
23
  reason: TStatus extends 'failure' ? {
@@ -24,5 +25,6 @@ export type CommandResponse<TResponse, TMethod extends CommandMethods, TStatus e
24
25
  description: string;
25
26
  } : never;
26
27
  };
28
+ export declare const isCommand: (envelope: Envelope) => envelope is Command<CommandMethods>;
27
29
  export {};
28
30
  //# sourceMappingURL=command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/types/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAAA;AAE1D,UAAU,wBAAwB;IAC9B,GAAG,EAAE,iBAAiB,CAAA;IACtB,GAAG,EAAE,eAAe,CAAA;IACpB,KAAK,EAAE,eAAe,CAAA;IACtB,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAA;IAC3C,OAAO,EAAE,eAAe,CAAA;CAC3B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,wBAAwB,CAAA;AAE3D,MAAM,MAAM,OAAO,CAAC,OAAO,SAAS,cAAc,IAAI,QAAQ,GAAG;IAC7D,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,CAAA;CAClB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;AAErC,MAAM,MAAM,eAAe,CACvB,SAAS,EACT,OAAO,SAAS,cAAc,EAC9B,OAAO,SAAS,SAAS,GAAG,SAAS,IACrC,OAAO,CAAC,OAAO,CAAC,GAAG;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,OAAO,SAAS,KAAK,GAAG,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;IACzF,MAAM,EAAE,OAAO,SAAS,SAAS,GAC3B;QACI,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;KACtB,GACD,KAAK,CAAA;CACd,CAAA"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/types/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAAA;AAE1D,UAAU,wBAAwB;IAC9B,GAAG,EAAE,iBAAiB,CAAA;IACtB,GAAG,EAAE,eAAe,CAAA;IACpB,KAAK,EAAE,eAAe,CAAA;IACtB,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAA;IAC3C,OAAO,EAAE,eAAe,CAAA;CAC3B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,wBAAwB,CAAA;AAE3D,MAAM,MAAM,OAAO,CAAC,OAAO,SAAS,cAAc,IAAI,QAAQ,GAAG;IAC7D,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,CAAA;CAClB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;AAErC,MAAM,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,SAAS,cAAc,EAAE,OAAO,SAAS,SAAS,GAAG,SAAS,IAAI,IAAI,CAChH,OAAO,CAAC,OAAO,CAAC,EAChB,KAAK,CACR,GAAG;IACA,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,OAAO,SAAS,KAAK,GAAG,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;IACzF,MAAM,EAAE,OAAO,SAAS,SAAS,GAC3B;QACI,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;KACtB,GACD,KAAK,CAAA;CACd,CAAA;AAED,eAAO,MAAM,SAAS,aAAc,QAAQ,KAAG,QAAQ,IAAI,OAAO,CAAC,cAAc,CACpC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Envelope } from './envelope.js';
2
+ export type Session = Envelope & {
3
+ state: 'new' | 'negotiating' | 'authenticating' | 'established' | 'finishing' | 'finished' | 'failed';
4
+ encryptionOptions?: Array<string>;
5
+ compressionOptions?: Array<string>;
6
+ schemeOptions?: Array<string>;
7
+ encryption?: string;
8
+ compression?: string;
9
+ scheme?: string;
10
+ authentication?: Record<string, unknown>;
11
+ reason?: {
12
+ code: string;
13
+ description: string;
14
+ };
15
+ };
16
+ export declare const isSession: (value: Envelope) => value is Session;
17
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/types/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG;IAC7B,KAAK,EAAE,KAAK,GAAG,aAAa,GAAG,gBAAgB,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAA;IAErG,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACjC,kBAAkB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAClC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAE7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,MAAM,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;KACtB,CAAA;CACJ,CAAA;AAED,eAAO,MAAM,SAAS,UAAW,QAAQ,KAAG,KAAK,IAAI,OAEpD,CAAA"}