@whitewall/blip-sdk 0.0.112 → 0.0.113
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/dist/cjs/client.js +37 -27
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/namespaces/account.js +36 -36
- package/dist/cjs/namespaces/activecampaign.js +14 -14
- package/dist/cjs/namespaces/analytics.js +8 -8
- package/dist/cjs/namespaces/builder.js +8 -8
- package/dist/cjs/namespaces/configurations.js +4 -4
- package/dist/cjs/namespaces/context.js +54 -0
- package/dist/cjs/namespaces/context.js.map +1 -0
- package/dist/cjs/namespaces/desk.js +36 -27
- package/dist/cjs/namespaces/desk.js.map +1 -1
- package/dist/cjs/namespaces/media.js +4 -4
- package/dist/cjs/namespaces/namespace.js +8 -8
- package/dist/cjs/namespaces/namespace.js.map +1 -1
- package/dist/cjs/namespaces/plugins.js +13 -13
- package/dist/cjs/namespaces/portal.js +14 -40
- package/dist/cjs/namespaces/portal.js.map +1 -1
- package/dist/cjs/namespaces/scheduler.js +9 -9
- package/dist/cjs/namespaces/whatsapp.js +21 -21
- package/dist/cjs/sender/bliperror.js +12 -1
- package/dist/cjs/sender/bliperror.js.map +1 -1
- package/dist/cjs/sender/enveloperesolver.js +2 -2
- package/dist/cjs/sender/gateway/customgatewaysender.js +2 -2
- package/dist/cjs/sender/http/httpsender.js +8 -8
- package/dist/cjs/sender/http/httpsender.js.map +1 -1
- package/dist/cjs/sender/index.js +1 -1
- package/dist/cjs/sender/{portal → plugin}/communication.js +3 -3
- package/dist/cjs/sender/{portal → plugin}/communication.js.map +1 -1
- package/dist/cjs/sender/plugin/pluginsender.js +98 -0
- package/dist/cjs/sender/plugin/pluginsender.js.map +1 -0
- package/dist/cjs/sender/sessionegotiator.js +46 -41
- package/dist/cjs/sender/sessionegotiator.js.map +1 -1
- package/dist/cjs/sender/tcp/tcpsender.js +12 -16
- package/dist/cjs/sender/tcp/tcpsender.js.map +1 -1
- package/dist/cjs/sender/websocket/websocketsender.js +12 -12
- package/dist/cjs/sender/websocket/websocketsender.js.map +1 -1
- package/dist/cjs/types/node.js +3 -0
- package/dist/cjs/types/node.js.map +1 -1
- package/dist/esm/client.js +23 -13
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/index.js +6 -6
- package/dist/esm/namespaces/account.js +3 -3
- package/dist/esm/namespaces/activecampaign.js +3 -3
- package/dist/esm/namespaces/analytics.js +2 -2
- package/dist/esm/namespaces/builder.js +3 -3
- package/dist/esm/namespaces/configurations.js +2 -2
- package/dist/esm/namespaces/context.js +50 -0
- package/dist/esm/namespaces/context.js.map +1 -0
- package/dist/esm/namespaces/desk.js +13 -4
- package/dist/esm/namespaces/desk.js.map +1 -1
- package/dist/esm/namespaces/media.js +2 -2
- package/dist/esm/namespaces/namespace.js +3 -3
- package/dist/esm/namespaces/namespace.js.map +1 -1
- package/dist/esm/namespaces/plugins.js +2 -2
- package/dist/esm/namespaces/portal.js +8 -34
- package/dist/esm/namespaces/portal.js.map +1 -1
- package/dist/esm/namespaces/scheduler.js +3 -3
- package/dist/esm/namespaces/whatsapp.js +2 -2
- package/dist/esm/sender/bliperror.js +12 -1
- package/dist/esm/sender/bliperror.js.map +1 -1
- package/dist/esm/sender/enveloperesolver.js +1 -1
- package/dist/esm/sender/gateway/customgatewaysender.js +1 -1
- package/dist/esm/sender/http/httpsender.js +5 -5
- package/dist/esm/sender/http/httpsender.js.map +1 -1
- package/dist/esm/sender/index.js +7 -7
- package/dist/esm/sender/{portal → plugin}/communication.js +1 -1
- package/dist/esm/sender/{portal → plugin}/communication.js.map +1 -1
- package/dist/esm/sender/plugin/pluginsender.js +94 -0
- package/dist/esm/sender/plugin/pluginsender.js.map +1 -0
- package/dist/esm/sender/sessionegotiator.js +46 -41
- package/dist/esm/sender/sessionegotiator.js.map +1 -1
- package/dist/esm/sender/tcp/tcpsender.js +8 -12
- package/dist/esm/sender/tcp/tcpsender.js.map +1 -1
- package/dist/esm/sender/websocket/websocketsender.js +7 -7
- package/dist/esm/sender/websocket/websocketsender.js.map +1 -1
- package/dist/esm/types/index.js +11 -11
- package/dist/esm/types/node.js +3 -0
- package/dist/esm/types/node.js.map +1 -1
- package/dist/types/client.d.ts +17 -14
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -6
- package/dist/types/namespaces/account.d.ts +5 -5
- package/dist/types/namespaces/activecampaign.d.ts +3 -3
- package/dist/types/namespaces/analytics.d.ts +4 -4
- package/dist/types/namespaces/builder.d.ts +2 -2
- package/dist/types/namespaces/configurations.d.ts +2 -2
- package/dist/types/namespaces/context.d.ts +16 -0
- package/dist/types/namespaces/context.d.ts.map +1 -0
- package/dist/types/namespaces/desk.d.ts +5 -4
- package/dist/types/namespaces/desk.d.ts.map +1 -1
- package/dist/types/namespaces/media.d.ts +2 -2
- package/dist/types/namespaces/namespace.d.ts +4 -2
- package/dist/types/namespaces/namespace.d.ts.map +1 -1
- package/dist/types/namespaces/plugins.d.ts +6 -6
- package/dist/types/namespaces/portal.d.ts +4 -11
- package/dist/types/namespaces/portal.d.ts.map +1 -1
- package/dist/types/namespaces/scheduler.d.ts +3 -3
- package/dist/types/namespaces/whatsapp.d.ts +4 -4
- package/dist/types/sender/bliperror.d.ts +5 -1
- package/dist/types/sender/bliperror.d.ts.map +1 -1
- package/dist/types/sender/enveloperesolver.d.ts +2 -2
- package/dist/types/sender/gateway/customgatewaysender.d.ts +2 -2
- package/dist/types/sender/http/httpsender.d.ts +2 -2
- package/dist/types/sender/index.d.ts +7 -7
- package/dist/types/sender/{portal → plugin}/communication.d.ts.map +1 -1
- package/dist/types/sender/plugin/pluginsender.d.ts +21 -0
- package/dist/types/sender/plugin/pluginsender.d.ts.map +1 -0
- package/dist/types/sender/sender.d.ts +1 -1
- package/dist/types/sender/sessionegotiator.d.ts +4 -4
- package/dist/types/sender/sessionegotiator.d.ts.map +1 -1
- package/dist/types/sender/tcp/tcpsender.d.ts +2 -2
- package/dist/types/sender/websocket/websocketsender.d.ts +2 -2
- package/dist/types/types/account.d.ts +2 -2
- package/dist/types/types/analytics.d.ts +1 -1
- package/dist/types/types/command.d.ts +2 -2
- package/dist/types/types/command.d.ts.map +1 -1
- package/dist/types/types/envelope.d.ts +1 -1
- package/dist/types/types/index.d.ts +11 -11
- package/dist/types/types/message.d.ts +3 -3
- package/dist/types/types/node.d.ts +1 -0
- package/dist/types/types/node.d.ts.map +1 -1
- package/dist/types/types/notification.d.ts +1 -1
- package/dist/types/types/session.d.ts +1 -1
- package/package.json +3 -2
- package/dist/cjs/sender/portal/pluginsender.js +0 -47
- package/dist/cjs/sender/portal/pluginsender.js.map +0 -1
- package/dist/esm/sender/portal/pluginsender.js +0 -43
- package/dist/esm/sender/portal/pluginsender.js.map +0 -1
- package/dist/types/sender/portal/pluginsender.d.ts +0 -14
- package/dist/types/sender/portal/pluginsender.d.ts.map +0 -1
- /package/dist/types/sender/{portal → plugin}/communication.d.ts +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WhatsAppNamespace = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
class WhatsAppNamespace extends
|
|
4
|
+
const uri_ts_1 = require("../utils/uri.js");
|
|
5
|
+
const namespace_ts_1 = require("./namespace.js");
|
|
6
|
+
class WhatsAppNamespace extends namespace_ts_1.Namespace {
|
|
7
7
|
constructor(blipClient, defaultOptions) {
|
|
8
8
|
super(blipClient, 'wa.gw', defaultOptions);
|
|
9
9
|
}
|
|
@@ -12,7 +12,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
12
12
|
try {
|
|
13
13
|
const result = await this.sendCommand({
|
|
14
14
|
method: 'get',
|
|
15
|
-
uri: (0,
|
|
15
|
+
uri: (0, uri_ts_1.uri) `/accounts/${fixedPhoneNumber}`,
|
|
16
16
|
}, opts);
|
|
17
17
|
return result.alternativeAccount;
|
|
18
18
|
}
|
|
@@ -28,7 +28,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
28
28
|
async getMessageTemplates(filters, opts) {
|
|
29
29
|
return await this.sendCommand({
|
|
30
30
|
method: 'get',
|
|
31
|
-
uri: (0,
|
|
31
|
+
uri: (0, uri_ts_1.uri) `/message-templates?${{ status: filters?.status?.toUpperCase(), templateName: filters?.name }}`,
|
|
32
32
|
}, {
|
|
33
33
|
collection: true,
|
|
34
34
|
...opts,
|
|
@@ -74,7 +74,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
74
74
|
async createMessageTemplateAttachment(url, opts) {
|
|
75
75
|
return await this.sendCommand({
|
|
76
76
|
method: 'set',
|
|
77
|
-
uri: (0,
|
|
77
|
+
uri: (0, uri_ts_1.uri) `/message-templates-attachment`,
|
|
78
78
|
type: 'application/vnd.lime.media-link+json',
|
|
79
79
|
resource: {
|
|
80
80
|
uri: url,
|
|
@@ -84,7 +84,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
84
84
|
async createMessageTemplate(template, opts) {
|
|
85
85
|
return await this.sendCommand({
|
|
86
86
|
method: 'set',
|
|
87
|
-
uri: (0,
|
|
87
|
+
uri: (0, uri_ts_1.uri) `/message-templates`,
|
|
88
88
|
type: 'application/json',
|
|
89
89
|
resource: template,
|
|
90
90
|
}, opts);
|
|
@@ -92,7 +92,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
92
92
|
async createMessageTemplateAndPoll(template, opts) {
|
|
93
93
|
await this.sendCommand({
|
|
94
94
|
method: 'set',
|
|
95
|
-
uri: (0,
|
|
95
|
+
uri: (0, uri_ts_1.uri) `/message-templates`,
|
|
96
96
|
type: 'application/json',
|
|
97
97
|
resource: template,
|
|
98
98
|
}, opts);
|
|
@@ -113,13 +113,13 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
113
113
|
async deleteMessageTemplate(templateName, opts) {
|
|
114
114
|
return await this.sendCommand({
|
|
115
115
|
method: 'delete',
|
|
116
|
-
uri: (0,
|
|
116
|
+
uri: (0, uri_ts_1.uri) `/message-templates/${templateName}`,
|
|
117
117
|
}, opts);
|
|
118
118
|
}
|
|
119
119
|
async createFlow(flow, opts) {
|
|
120
120
|
return await this.sendCommand({
|
|
121
121
|
method: 'set',
|
|
122
|
-
uri: (0,
|
|
122
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows`,
|
|
123
123
|
type: 'application/json',
|
|
124
124
|
resource: {
|
|
125
125
|
name: flow.name,
|
|
@@ -131,7 +131,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
131
131
|
async updateFlow(id, flow, opts) {
|
|
132
132
|
return await this.sendCommand({
|
|
133
133
|
method: 'set',
|
|
134
|
-
uri: (0,
|
|
134
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows/${id}`,
|
|
135
135
|
type: 'application/json',
|
|
136
136
|
resource: {
|
|
137
137
|
name: flow.name,
|
|
@@ -142,7 +142,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
142
142
|
async updateFlowJson(id, json, opts) {
|
|
143
143
|
return await this.sendCommand({
|
|
144
144
|
method: 'set',
|
|
145
|
-
uri: (0,
|
|
145
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows/flow-json/${id}`,
|
|
146
146
|
type: 'application/json',
|
|
147
147
|
resource: JSON.parse(json),
|
|
148
148
|
}, opts);
|
|
@@ -150,7 +150,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
150
150
|
async updateFlowsPublicKey(publicKey, opts) {
|
|
151
151
|
return await this.sendCommand({
|
|
152
152
|
method: 'set',
|
|
153
|
-
uri: (0,
|
|
153
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows/public-key/upload`,
|
|
154
154
|
type: 'application/json',
|
|
155
155
|
resource: {
|
|
156
156
|
business_public_key: publicKey,
|
|
@@ -160,7 +160,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
160
160
|
async getFlows(opts) {
|
|
161
161
|
return await this.sendCommand({
|
|
162
162
|
method: 'get',
|
|
163
|
-
uri: (0,
|
|
163
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows`,
|
|
164
164
|
}, {
|
|
165
165
|
collection: true,
|
|
166
166
|
...opts,
|
|
@@ -169,25 +169,25 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
169
169
|
async getFlow(id, opts) {
|
|
170
170
|
return await this.sendCommand({
|
|
171
171
|
method: 'get',
|
|
172
|
-
uri: (0,
|
|
172
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows/${id}`,
|
|
173
173
|
}, opts);
|
|
174
174
|
}
|
|
175
175
|
async publishFlow(id, opts) {
|
|
176
176
|
return await this.sendCommand({
|
|
177
177
|
method: 'get',
|
|
178
|
-
uri: (0,
|
|
178
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows/publish/${id}`,
|
|
179
179
|
}, opts);
|
|
180
180
|
}
|
|
181
181
|
async deprecateFlow(id, opts) {
|
|
182
182
|
return await this.sendCommand({
|
|
183
183
|
method: 'get',
|
|
184
|
-
uri: (0,
|
|
184
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows/deprecate/${id}`,
|
|
185
185
|
}, opts);
|
|
186
186
|
}
|
|
187
187
|
async getFlowAssets(id, opts) {
|
|
188
188
|
return await this.sendCommand({
|
|
189
189
|
method: 'get',
|
|
190
|
-
uri: (0,
|
|
190
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows/assets/${id}`,
|
|
191
191
|
}, {
|
|
192
192
|
collection: true,
|
|
193
193
|
...opts,
|
|
@@ -196,7 +196,7 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
196
196
|
async deleteFlow(id, opts) {
|
|
197
197
|
return await this.sendCommand({
|
|
198
198
|
method: 'delete',
|
|
199
|
-
uri: (0,
|
|
199
|
+
uri: (0, uri_ts_1.uri) `/whatsapp-flows/${id}`,
|
|
200
200
|
}, opts);
|
|
201
201
|
}
|
|
202
202
|
async isChannelActive(opts) {
|
|
@@ -209,13 +209,13 @@ class WhatsAppNamespace extends namespace_js_1.Namespace {
|
|
|
209
209
|
async getWabaDetails(opts) {
|
|
210
210
|
return await this.sendCommand({
|
|
211
211
|
method: 'get',
|
|
212
|
-
uri: (0,
|
|
212
|
+
uri: (0, uri_ts_1.uri) `/wabas/details`,
|
|
213
213
|
}, opts);
|
|
214
214
|
}
|
|
215
215
|
async getPhoneNumberDetails(opts) {
|
|
216
216
|
return await this.sendCommand({
|
|
217
217
|
method: 'get',
|
|
218
|
-
uri: (0,
|
|
218
|
+
uri: (0, uri_ts_1.uri) `/phone-number-details`,
|
|
219
219
|
}, opts);
|
|
220
220
|
}
|
|
221
221
|
async getPhoneNumber(opts) {
|
|
@@ -4,10 +4,21 @@ exports.BlipError = void 0;
|
|
|
4
4
|
class BlipError extends Error {
|
|
5
5
|
uri;
|
|
6
6
|
code;
|
|
7
|
-
|
|
7
|
+
commandResponse;
|
|
8
|
+
constructor(uri, code, description, commandResponse) {
|
|
8
9
|
super(`Blip command for ${uri} failed: ${description}`);
|
|
9
10
|
this.uri = uri;
|
|
10
11
|
this.code = code;
|
|
12
|
+
this.commandResponse = commandResponse;
|
|
13
|
+
}
|
|
14
|
+
static isFailedCommandResponse(maybeCommandResponse) {
|
|
15
|
+
return (typeof maybeCommandResponse === 'object' &&
|
|
16
|
+
maybeCommandResponse !== null &&
|
|
17
|
+
'status' in maybeCommandResponse &&
|
|
18
|
+
maybeCommandResponse.status === 'failure');
|
|
19
|
+
}
|
|
20
|
+
static commandResponseToBlipError(uri, commandResponse) {
|
|
21
|
+
return new BlipError(uri, commandResponse.reason.code, commandResponse.reason.description, commandResponse);
|
|
11
22
|
}
|
|
12
23
|
}
|
|
13
24
|
exports.BlipError = BlipError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bliperror.js","sourceRoot":"","sources":["../../../src/sender/bliperror.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"bliperror.js","sourceRoot":"","sources":["../../../src/sender/bliperror.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAU,SAAQ,KAAK;IAEZ;IACA;IAET;IAJX,YACoB,GAAW,EACX,IAAY,EAC5B,WAAmB,EACZ,eAAqE;QAE5E,KAAK,CAAC,oBAAoB,GAAG,YAAY,WAAW,EAAE,CAAC,CAAA;QALvC,QAAG,GAAH,GAAG,CAAQ;QACX,SAAI,GAAJ,IAAI,CAAQ;QAErB,oBAAe,GAAf,eAAe,CAAsD;IAGhF,CAAC;IAEM,MAAM,CAAC,uBAAuB,CACjC,oBAA6B;QAE7B,OAAO,CACH,OAAO,oBAAoB,KAAK,QAAQ;YACxC,oBAAoB,KAAK,IAAI;YAC7B,QAAQ,IAAI,oBAAoB;YAChC,oBAAoB,CAAC,MAAM,KAAK,SAAS,CAC5C,CAAA;IACL,CAAC;IAEM,MAAM,CAAC,0BAA0B,CACpC,GAAW,EACX,eAAoE;QAEpE,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;IAC/G,CAAC;CACJ;AA3BD,8BA2BC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EnvelopeResolver = void 0;
|
|
4
|
-
const
|
|
4
|
+
const command_ts_1 = require("../types/command.js");
|
|
5
5
|
class EnvelopeResolver {
|
|
6
6
|
sender;
|
|
7
7
|
waitingEnvelopeResponseResolvers = {};
|
|
@@ -16,7 +16,7 @@ class EnvelopeResolver {
|
|
|
16
16
|
else {
|
|
17
17
|
// This is a rough way to handle commands to the channel
|
|
18
18
|
// But it works for most use cases
|
|
19
|
-
if ((0,
|
|
19
|
+
if ((0, command_ts_1.isCommand)(envelope) && envelope.method === 'get' && envelope.uri === '/ping') {
|
|
20
20
|
await this.sender.sendCommandResponse({
|
|
21
21
|
id: envelope.id,
|
|
22
22
|
method: 'get',
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CustomGatewayHttpSender = void 0;
|
|
4
|
-
const
|
|
4
|
+
const index_ts_1 = require("../../types/index.js");
|
|
5
5
|
class CustomGatewayHttpSender {
|
|
6
6
|
baseurl;
|
|
7
7
|
token;
|
|
8
8
|
constructor(botIdentityOrIdentifier, password, tenantId) {
|
|
9
|
-
const botIdentity =
|
|
9
|
+
const botIdentity = index_ts_1.Node.isValid(botIdentityOrIdentifier)
|
|
10
10
|
? botIdentityOrIdentifier
|
|
11
11
|
: `${botIdentityOrIdentifier}@msging.net`;
|
|
12
12
|
this.token = btoa(`${botIdentity}:${password}`);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpSender = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const index_ts_1 = require("../../types/index.js");
|
|
5
|
+
const bliperror_ts_1 = require("../bliperror.js");
|
|
6
|
+
const throttler_ts_1 = require("../throttler.js");
|
|
7
7
|
class HttpSender {
|
|
8
8
|
token;
|
|
9
9
|
baseurl;
|
|
10
|
-
throttler = new
|
|
10
|
+
throttler = new throttler_ts_1.EnvelopeThrottler();
|
|
11
11
|
constructor(token, tenantId) {
|
|
12
12
|
this.token = token.startsWith('Key ') ? token.slice(4) : token;
|
|
13
13
|
const prefix = tenantId ? `${tenantId}.` : '';
|
|
@@ -44,8 +44,8 @@ class HttpSender {
|
|
|
44
44
|
throw new Error(`Failed to send command: ${response.statusText} (${response.status})`);
|
|
45
45
|
}
|
|
46
46
|
const result = await response.json();
|
|
47
|
-
if (result
|
|
48
|
-
throw
|
|
47
|
+
if (bliperror_ts_1.BlipError.isFailedCommandResponse(result)) {
|
|
48
|
+
throw bliperror_ts_1.BlipError.commandResponseToBlipError(command.uri, result);
|
|
49
49
|
}
|
|
50
50
|
else if (result.status === 'success') {
|
|
51
51
|
return result.resource;
|
|
@@ -56,7 +56,7 @@ class HttpSender {
|
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
static login(botIdentityOrIdentifier, accessKey, tenantId) {
|
|
59
|
-
const botIdentity =
|
|
59
|
+
const botIdentity = index_ts_1.Node.isValid(botIdentityOrIdentifier)
|
|
60
60
|
? botIdentityOrIdentifier
|
|
61
61
|
: `${botIdentityOrIdentifier}@msging.net`;
|
|
62
62
|
const token = btoa(`${botIdentity}:${atob(accessKey)}`);
|
|
@@ -73,7 +73,7 @@ class HttpSender {
|
|
|
73
73
|
err.message.endsWith('(504)') ||
|
|
74
74
|
err.message.endsWith('(502)') ||
|
|
75
75
|
// General application error code
|
|
76
|
-
(err instanceof
|
|
76
|
+
(err instanceof bliperror_ts_1.BlipError && err.code === 101) ||
|
|
77
77
|
// Probably cloudflare trying to mitigate a DDoS attack
|
|
78
78
|
(err.cause instanceof Error && err.cause?.name === 'ConnectTimeoutError') ||
|
|
79
79
|
err.message === 'terminated' ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpsender.js","sourceRoot":"","sources":["../../../../src/sender/http/httpsender.ts"],"names":[],"mappings":";;;AAAA,mDAQ6B;AAC7B,kDAA2C;AAE3C,kDAAmD;AAEnD,MAAa,UAAU;IACF,KAAK,CAAQ;IACb,OAAO,CAAQ;IACf,SAAS,GAAG,IAAI,gCAAiB,EAAE,CAAA;IAEpD,YAAY,KAAa,EAAE,QAAiB;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7C,IAAI,CAAC,OAAO,GAAG,WAAW,MAAM,iBAAiB,CAAA;IACrD,CAAC;IAEM,WAAW,CAA4B,OAAsB;QAChE,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,EAAE;YACxC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YACxC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE;iBACrC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAChC,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;YAC1F,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAEM,WAAW,CAAC,OAAgC;QAC/C,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,EAAE;YACxC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YACxC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE;iBACrC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAChC,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;YAC1F,CAAC;YAED,MAAM,MAAM,GAAoE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YACrG,IAAI,
|
|
1
|
+
{"version":3,"file":"httpsender.js","sourceRoot":"","sources":["../../../../src/sender/http/httpsender.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/sender/index.js
CHANGED
|
@@ -17,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./sender.js"), exports);
|
|
18
18
|
__exportStar(require("./bliperror.js"), exports);
|
|
19
19
|
__exportStar(require("./gateway/customgatewaysender.js"), exports);
|
|
20
|
-
__exportStar(require("./
|
|
20
|
+
__exportStar(require("./plugin/pluginsender.js"), exports);
|
|
21
21
|
__exportStar(require("./websocket/websocketsender.js"), exports);
|
|
22
22
|
__exportStar(require("./tcp/tcpsender.js"), exports);
|
|
23
23
|
__exportStar(require("./http/httpsender.js"), exports);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.startChannel = void 0;
|
|
4
|
-
const
|
|
4
|
+
const random_ts_1 = require("../../utils/random.js");
|
|
5
5
|
const startChannel = () => {
|
|
6
|
-
const caller = window.name ?? (0,
|
|
6
|
+
const caller = window.name ?? (0, random_ts_1.randomId)();
|
|
7
7
|
const waitingMessages = {};
|
|
8
8
|
const messageHandler = ({ data }) => {
|
|
9
9
|
const deferred = waitingMessages[data?.trackingProperties?.id];
|
|
@@ -28,7 +28,7 @@ const startChannel = () => {
|
|
|
28
28
|
if (isDestroyed) {
|
|
29
29
|
throw new Error('Channel is destroyed');
|
|
30
30
|
}
|
|
31
|
-
const id = (0,
|
|
31
|
+
const id = (0, random_ts_1.randomId)();
|
|
32
32
|
let promise;
|
|
33
33
|
if (options?.fireAndForget) {
|
|
34
34
|
promise = Promise.resolve();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communication.js","sourceRoot":"","sources":["../../../../src/sender/
|
|
1
|
+
{"version":3,"file":"communication.js","sourceRoot":"","sources":["../../../../src/sender/plugin/communication.ts"],"names":[],"mappings":";;;AAAA,qDAAgD;AAEzC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,IAAA,oBAAQ,GAAE,CAAA;IAExC,MAAM,eAAe,GAA8E,EAAE,CAAA;IACrG,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAgB,EAAE,EAAE;QAC9C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAA;QAC9D,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;gBAClC,oCAAoC;gBACpC,OAAM;YACV,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;YAC3C,CAAC;iBAAM,CAAC;gBACJ,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnC,CAAC;YAED,OAAO,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QACtD,CAAC;IACL,CAAC,CAAA;IACD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IAElD,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,OAAO;QACH,IAAI,EAAE,CAAI,MAAc,EAAE,OAAgB,EAAE,OAAoC,EAAE,EAAE;YAChF,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;YAC3C,CAAC;YAED,MAAM,EAAE,GAAG,IAAA,oBAAQ,GAAE,CAAA;YAErB,IAAI,OAAyB,CAAA;YAC7B,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;gBACzB,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACJ,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAA;gBACxC,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAA;gBAC5E,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;YAC9B,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,WAAW,CACrB;gBACI,OAAO,EAAE;oBACL,MAAM,EAAE,aAAa,MAAM,EAAE;oBAC7B,OAAO;oBACP,MAAM;iBACT;gBACD,kBAAkB,EAAE;oBAChB,EAAE;iBACL;aACJ,EACD,GAAG,CACN,CAAA;YAED,OAAO,OAAqB,CAAA;QAChC,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;YACrD,WAAW,GAAG,IAAI,CAAA;QACtB,CAAC;KACJ,CAAA;AACL,CAAC,CAAA;AA9DY,QAAA,YAAY,gBA8DxB"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PluginSender = void 0;
|
|
4
|
+
const index_ts_1 = require("../../index.js");
|
|
5
|
+
const communication_ts_1 = require("./communication.js");
|
|
6
|
+
class PluginSender {
|
|
7
|
+
blipDesk;
|
|
8
|
+
channel;
|
|
9
|
+
constructor(blipDesk) {
|
|
10
|
+
this.blipDesk = blipDesk;
|
|
11
|
+
this.channel = (0, communication_ts_1.startChannel)();
|
|
12
|
+
}
|
|
13
|
+
async sendMessage(message) {
|
|
14
|
+
await this.sendCommand({
|
|
15
|
+
id: message.id,
|
|
16
|
+
uri: '/schedules',
|
|
17
|
+
method: 'set',
|
|
18
|
+
type: 'application/vnd.iris.schedule+json',
|
|
19
|
+
resource: {
|
|
20
|
+
message,
|
|
21
|
+
when: new Date().toISOString(),
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async sendCommand(command) {
|
|
26
|
+
const toDomain = command.to ? index_ts_1.Node.from(command.to).domain : undefined;
|
|
27
|
+
// Desk doesn't handle this automatically like portal does
|
|
28
|
+
const fixedCommand = this.getRealm() === 'desk' && toDomain?.endsWith('msging.net')
|
|
29
|
+
? await this.fixBlipDeskMsgingCommand(command)
|
|
30
|
+
: command;
|
|
31
|
+
try {
|
|
32
|
+
return await this.channel.post('sendCommand', {
|
|
33
|
+
command: fixedCommand,
|
|
34
|
+
destination: toDomain?.endsWith('msging.net') ? 'MessagingHubService' : 'BlipService',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
if (err && typeof err === 'object' && 'code' in err && 'description' in err) {
|
|
39
|
+
const knownerror = err;
|
|
40
|
+
throw new index_ts_1.BlipError(command.uri, knownerror.code, knownerror.description);
|
|
41
|
+
}
|
|
42
|
+
else if (index_ts_1.BlipError.isFailedCommandResponse(err)) {
|
|
43
|
+
throw index_ts_1.BlipError.commandResponseToBlipError(command.uri, err);
|
|
44
|
+
}
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
static check(blipClient) {
|
|
49
|
+
const isPluginSender = blipClient.sender instanceof PluginSender;
|
|
50
|
+
if (!isPluginSender) {
|
|
51
|
+
throw new Error('This command is only allowed for plugin senders');
|
|
52
|
+
}
|
|
53
|
+
return blipClient.sender;
|
|
54
|
+
}
|
|
55
|
+
static getRealm(blipClient) {
|
|
56
|
+
const isPluginSender = blipClient.sender instanceof PluginSender;
|
|
57
|
+
if (!isPluginSender) {
|
|
58
|
+
throw new Error('This command is only allowed for plugin senders');
|
|
59
|
+
}
|
|
60
|
+
return blipClient.sender.getRealm();
|
|
61
|
+
}
|
|
62
|
+
getRealm() {
|
|
63
|
+
return this.blipDesk ? 'desk' : 'portal';
|
|
64
|
+
}
|
|
65
|
+
cachedAccountPromise = undefined;
|
|
66
|
+
async fixBlipDeskMsgingCommand(command) {
|
|
67
|
+
if (!this.cachedAccountPromise) {
|
|
68
|
+
this.cachedAccountPromise = this.sendCommand({
|
|
69
|
+
id: Date.now().toString(),
|
|
70
|
+
uri: '/account',
|
|
71
|
+
method: 'get',
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const accountResponse = await this.cachedAccountPromise;
|
|
75
|
+
if (typeof accountResponse !== 'object' ||
|
|
76
|
+
!accountResponse ||
|
|
77
|
+
!('identity' in accountResponse) ||
|
|
78
|
+
typeof accountResponse.identity !== 'string' ||
|
|
79
|
+
!index_ts_1.Node.isValid(accountResponse?.identity)) {
|
|
80
|
+
throw new Error('Account identity not found or invalid');
|
|
81
|
+
}
|
|
82
|
+
if (command.uri.startsWith('lime://')) {
|
|
83
|
+
return {
|
|
84
|
+
...command,
|
|
85
|
+
from: this.blipDesk.currentBotIdentity,
|
|
86
|
+
pp: index_ts_1.Node.from(accountResponse.identity).withInstance('!desk'),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
return {
|
|
91
|
+
...command,
|
|
92
|
+
uri: `lime://${this.blipDesk.currentBotIdentity}${command.uri}`,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.PluginSender = PluginSender;
|
|
98
|
+
//# sourceMappingURL=pluginsender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginsender.js","sourceRoot":"","sources":["../../../../src/sender/plugin/pluginsender.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SessionNegotiator = void 0;
|
|
4
|
-
const
|
|
4
|
+
const node_ts_1 = require("../types/node.js");
|
|
5
5
|
class SessionNegotiator {
|
|
6
6
|
sender;
|
|
7
7
|
sendSession;
|
|
@@ -14,55 +14,60 @@ class SessionNegotiator {
|
|
|
14
14
|
this.sendSession = sendSession;
|
|
15
15
|
}
|
|
16
16
|
async negotiate(options) {
|
|
17
|
-
setTimeout(() => {
|
|
17
|
+
const timeout = setTimeout(() => {
|
|
18
18
|
if (this.negotiating) {
|
|
19
19
|
this.sender.close();
|
|
20
20
|
throw new Error('Negotiation timeout');
|
|
21
21
|
}
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
|
|
22
|
+
}, 60000); // 60 seconds
|
|
23
|
+
try {
|
|
24
|
+
this.sendSession({
|
|
25
|
+
state: 'new',
|
|
26
|
+
});
|
|
27
|
+
const negotiation = await this.waitForSessionResponse();
|
|
28
|
+
let authenticating;
|
|
29
|
+
if (negotiation.state === 'negotiating') {
|
|
30
|
+
if (!negotiation.encryptionOptions?.includes('none')) {
|
|
31
|
+
throw new Error('Unsupported encryption options');
|
|
32
|
+
}
|
|
33
|
+
this.sendSession({
|
|
34
|
+
id: negotiation.id,
|
|
35
|
+
state: 'negotiating',
|
|
36
|
+
encryption: 'none',
|
|
37
|
+
compression: negotiation.compressionOptions?.at(-1),
|
|
38
|
+
});
|
|
39
|
+
await this.waitForSessionResponse();
|
|
40
|
+
authenticating = await this.waitForSessionResponse();
|
|
41
|
+
}
|
|
42
|
+
else if (negotiation.state === 'authenticating') {
|
|
43
|
+
authenticating = negotiation;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw new Error('Unexpected session state');
|
|
47
|
+
}
|
|
48
|
+
if (!authenticating.schemeOptions?.includes(options.authentication.scheme)) {
|
|
49
|
+
throw new Error('Unsupported authentication scheme');
|
|
31
50
|
}
|
|
32
51
|
this.sendSession({
|
|
33
|
-
id:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
52
|
+
id: authenticating.id,
|
|
53
|
+
from: options.identity,
|
|
54
|
+
state: 'authenticating',
|
|
55
|
+
scheme: options.authentication.scheme,
|
|
56
|
+
authentication: options.authentication.data,
|
|
37
57
|
});
|
|
38
|
-
await this.waitForSessionResponse();
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (!authenticating.schemeOptions?.includes(options.authentication.scheme)) {
|
|
48
|
-
throw new Error('Unsupported authentication scheme');
|
|
58
|
+
const authenticated = await this.waitForSessionResponse();
|
|
59
|
+
if (authenticated.state !== 'established') {
|
|
60
|
+
throw new Error('Authentication failed');
|
|
61
|
+
}
|
|
62
|
+
this.session = {
|
|
63
|
+
id: authenticated.id,
|
|
64
|
+
localNode: node_ts_1.Node.from(authenticated.to),
|
|
65
|
+
remoteNode: node_ts_1.Node.from(authenticated.from),
|
|
66
|
+
};
|
|
49
67
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
from: options.identity,
|
|
53
|
-
state: 'authenticating',
|
|
54
|
-
scheme: options.authentication.scheme,
|
|
55
|
-
authentication: options.authentication.data,
|
|
56
|
-
});
|
|
57
|
-
const authenticated = await this.waitForSessionResponse();
|
|
58
|
-
if (authenticated.state !== 'established') {
|
|
59
|
-
throw new Error('Authentication failed');
|
|
68
|
+
finally {
|
|
69
|
+
clearTimeout(timeout);
|
|
60
70
|
}
|
|
61
|
-
this.session = {
|
|
62
|
-
id: authenticated.id,
|
|
63
|
-
localNode: node_js_1.Node.from(authenticated.to),
|
|
64
|
-
remoteNode: node_js_1.Node.from(authenticated.from),
|
|
65
|
-
};
|
|
66
71
|
}
|
|
67
72
|
handleEnvelope(message) {
|
|
68
73
|
if (this.currentMessageResolver) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionegotiator.js","sourceRoot":"","sources":["../../../src/sender/sessionegotiator.ts"],"names":[],"mappings":";;;AACA,8CAAsE;AAItE,MAAa,iBAAiB;IAYL;IACA;IAZd,KAAK,GAAiC,KAAK,CAAA;IAC3C,OAAO,GAIH,IAAI,CAAA;IAEP,eAAe,GAAyB,IAAI,CAAA;IAC5C,sBAAsB,GAAqE,IAAI,CAAA;IAEvG,YACqB,MAA4B,EAC5B,WAAuC;QADvC,WAAM,GAAN,MAAM,CAAsB;QAC5B,gBAAW,GAAX,WAAW,CAA4B;IACzD,CAAC;IAEG,KAAK,CAAC,SAAS,CAAC,OAMtB;QACG,UAAU,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"sessionegotiator.js","sourceRoot":"","sources":["../../../src/sender/sessionegotiator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TCPSender = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
4
|
+
const index_ts_1 = require("../../types/index.js");
|
|
5
|
+
const bliperror_ts_1 = require("../bliperror.js");
|
|
6
|
+
const enveloperesolver_ts_1 = require("../enveloperesolver.js");
|
|
7
|
+
const sessionegotiator_ts_1 = require("../sessionegotiator.js");
|
|
8
|
+
const throttler_ts_1 = require("../throttler.js");
|
|
9
9
|
class TCPSender {
|
|
10
|
-
throttler = new
|
|
11
|
-
envelopeResolver = new
|
|
10
|
+
throttler = new throttler_ts_1.EnvelopeThrottler();
|
|
11
|
+
envelopeResolver = new enveloperesolver_ts_1.EnvelopeResolver(this);
|
|
12
12
|
connectionHandle;
|
|
13
13
|
sessionNegotiator = null;
|
|
14
14
|
constructor(identifier, accessKey, tenantId) {
|
|
15
15
|
const prefix = tenantId ? `${tenantId}.` : '';
|
|
16
16
|
this.connectionHandle = new TCPHandle(`${prefix}tcp.msging.net`, 443, async (socket) => {
|
|
17
|
-
this.sessionNegotiator = new
|
|
17
|
+
this.sessionNegotiator = new sessionegotiator_ts_1.SessionNegotiator(this, (session) => {
|
|
18
18
|
socket.write(JSON.stringify(session));
|
|
19
19
|
});
|
|
20
20
|
await this.sessionNegotiator.negotiate({
|
|
21
|
-
identity: new
|
|
21
|
+
identity: new index_ts_1.Node(identifier, 'msging.net'),
|
|
22
22
|
authentication: {
|
|
23
23
|
scheme: 'key',
|
|
24
24
|
data: { key: accessKey },
|
|
@@ -44,8 +44,8 @@ class TCPSender {
|
|
|
44
44
|
await this.sessionNegotiator?.ensurePresence(command.uri);
|
|
45
45
|
socket.write(JSON.stringify(command));
|
|
46
46
|
const response = (await envelopeResponsePromise);
|
|
47
|
-
if (response
|
|
48
|
-
throw
|
|
47
|
+
if (bliperror_ts_1.BlipError.isFailedCommandResponse(response)) {
|
|
48
|
+
throw bliperror_ts_1.BlipError.commandResponseToBlipError(command.uri, response);
|
|
49
49
|
}
|
|
50
50
|
else if (response.status === 'success') {
|
|
51
51
|
return response.resource;
|
|
@@ -65,15 +65,11 @@ class TCPSender {
|
|
|
65
65
|
}
|
|
66
66
|
exports.TCPSender = TCPSender;
|
|
67
67
|
class TCPHandle {
|
|
68
|
-
host;
|
|
69
|
-
port;
|
|
70
68
|
currentSocketPromise = null;
|
|
71
69
|
closing = false;
|
|
72
70
|
connectionAttempts = 0;
|
|
73
71
|
constructor(host, port, onConnected, onMessage) {
|
|
74
|
-
this.
|
|
75
|
-
this.port = port;
|
|
76
|
-
this.currentSocketPromise = this.connect(this.host, this.port, onConnected, onMessage);
|
|
72
|
+
this.currentSocketPromise = this.connect(host, port, onConnected, onMessage);
|
|
77
73
|
}
|
|
78
74
|
get() {
|
|
79
75
|
if (!this.currentSocketPromise) {
|