@whitewall/blip-sdk 0.0.134 → 0.0.136
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 +33 -10
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/namespaces/account.js +74 -52
- package/dist/cjs/namespaces/account.js.map +1 -1
- package/dist/cjs/namespaces/desk.js +17 -1
- package/dist/cjs/namespaces/desk.js.map +1 -1
- package/dist/cjs/namespaces/namespace.js +10 -10
- package/dist/cjs/namespaces/namespace.js.map +1 -1
- package/dist/cjs/namespaces/plugins.js +15 -3
- package/dist/cjs/namespaces/plugins.js.map +1 -1
- package/dist/cjs/namespaces/portal.js +131 -6
- package/dist/cjs/namespaces/portal.js.map +1 -1
- package/dist/cjs/namespaces/whatsapp.js +2 -3
- package/dist/cjs/namespaces/whatsapp.js.map +1 -1
- package/dist/cjs/sender/bliperror.js +14 -17
- package/dist/cjs/sender/bliperror.js.map +1 -1
- package/dist/cjs/sender/enveloperesolver.js +85 -6
- package/dist/cjs/sender/enveloperesolver.js.map +1 -1
- package/dist/cjs/sender/gateway/customgatewaysender.js +16 -9
- package/dist/cjs/sender/gateway/customgatewaysender.js.map +1 -1
- package/dist/cjs/sender/http/httpsender.js +29 -31
- package/dist/cjs/sender/http/httpsender.js.map +1 -1
- package/dist/cjs/sender/plugin/communication.js +9 -2
- package/dist/cjs/sender/plugin/communication.js.map +1 -1
- package/dist/cjs/sender/plugin/pluginsender.js +11 -59
- package/dist/cjs/sender/plugin/pluginsender.js.map +1 -1
- package/dist/cjs/sender/security.js +3 -0
- package/dist/cjs/sender/security.js.map +1 -0
- package/dist/cjs/sender/sender.js +93 -0
- package/dist/cjs/sender/sender.js.map +1 -1
- package/dist/cjs/sender/{sessionegotiator.js → sessionnegotiator.js} +27 -10
- package/dist/cjs/sender/sessionnegotiator.js.map +1 -0
- package/dist/cjs/sender/tcp/tcpsender.js +36 -45
- package/dist/cjs/sender/tcp/tcpsender.js.map +1 -1
- package/dist/cjs/sender/websocket/websocketsender.js +16 -24
- package/dist/cjs/sender/websocket/websocketsender.js.map +1 -1
- package/dist/cjs/types/command.js.map +1 -1
- package/dist/cjs/types/desk.js.map +1 -1
- package/dist/cjs/types/message.js +3 -1
- package/dist/cjs/types/message.js.map +1 -1
- package/dist/cjs/types/node.js +12 -9
- package/dist/cjs/types/node.js.map +1 -1
- package/dist/cjs/types/notification.js +3 -0
- package/dist/cjs/types/notification.js.map +1 -1
- package/dist/cjs/types/reason.js +20 -0
- package/dist/cjs/types/reason.js.map +1 -0
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/cjs/utils/uri.js +22 -36
- package/dist/cjs/utils/uri.js.map +1 -1
- package/dist/esm/client.js +33 -10
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/namespaces/account.js +74 -52
- package/dist/esm/namespaces/account.js.map +1 -1
- package/dist/esm/namespaces/desk.js +17 -1
- package/dist/esm/namespaces/desk.js.map +1 -1
- package/dist/esm/namespaces/namespace.js +11 -11
- package/dist/esm/namespaces/namespace.js.map +1 -1
- package/dist/esm/namespaces/plugins.js +15 -3
- package/dist/esm/namespaces/plugins.js.map +1 -1
- package/dist/esm/namespaces/portal.js +131 -6
- package/dist/esm/namespaces/portal.js.map +1 -1
- package/dist/esm/namespaces/whatsapp.js +2 -3
- package/dist/esm/namespaces/whatsapp.js.map +1 -1
- package/dist/esm/sender/bliperror.js +13 -16
- package/dist/esm/sender/bliperror.js.map +1 -1
- package/dist/esm/sender/enveloperesolver.js +85 -6
- package/dist/esm/sender/enveloperesolver.js.map +1 -1
- package/dist/esm/sender/gateway/customgatewaysender.js +16 -9
- package/dist/esm/sender/gateway/customgatewaysender.js.map +1 -1
- package/dist/esm/sender/http/httpsender.js +29 -31
- package/dist/esm/sender/http/httpsender.js.map +1 -1
- package/dist/esm/sender/plugin/communication.js +9 -2
- package/dist/esm/sender/plugin/communication.js.map +1 -1
- package/dist/esm/sender/plugin/pluginsender.js +11 -59
- package/dist/esm/sender/plugin/pluginsender.js.map +1 -1
- package/dist/esm/sender/security.js +2 -0
- package/dist/esm/sender/security.js.map +1 -0
- package/dist/esm/sender/sender.js +90 -1
- package/dist/esm/sender/sender.js.map +1 -1
- package/dist/esm/sender/{sessionegotiator.js → sessionnegotiator.js} +27 -10
- package/dist/esm/sender/sessionnegotiator.js.map +1 -0
- package/dist/esm/sender/tcp/tcpsender.js +35 -44
- package/dist/esm/sender/tcp/tcpsender.js.map +1 -1
- package/dist/esm/sender/websocket/websocketsender.js +15 -23
- package/dist/esm/sender/websocket/websocketsender.js.map +1 -1
- package/dist/esm/types/command.js.map +1 -1
- package/dist/esm/types/desk.js.map +1 -1
- package/dist/esm/types/message.js +1 -0
- package/dist/esm/types/message.js.map +1 -1
- package/dist/esm/types/node.js +12 -9
- package/dist/esm/types/node.js.map +1 -1
- package/dist/esm/types/notification.js +1 -1
- package/dist/esm/types/notification.js.map +1 -1
- package/dist/esm/types/reason.js +16 -0
- package/dist/esm/types/reason.js.map +1 -0
- package/dist/esm/types/session.js.map +1 -1
- package/dist/esm/utils/uri.js +20 -34
- package/dist/esm/utils/uri.js.map +1 -1
- package/dist/types/client.d.ts +8 -6
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/namespaces/account.d.ts +8 -8
- package/dist/types/namespaces/account.d.ts.map +1 -1
- package/dist/types/namespaces/desk.d.ts +6 -0
- package/dist/types/namespaces/desk.d.ts.map +1 -1
- package/dist/types/namespaces/namespace.d.ts +6 -9
- package/dist/types/namespaces/namespace.d.ts.map +1 -1
- package/dist/types/namespaces/plugins.d.ts +6 -2
- package/dist/types/namespaces/plugins.d.ts.map +1 -1
- package/dist/types/namespaces/portal.d.ts +15 -4
- package/dist/types/namespaces/portal.d.ts.map +1 -1
- package/dist/types/namespaces/whatsapp.d.ts.map +1 -1
- package/dist/types/sender/bliperror.d.ts +6 -9
- package/dist/types/sender/bliperror.d.ts.map +1 -1
- package/dist/types/sender/enveloperesolver.d.ts +14 -1
- package/dist/types/sender/enveloperesolver.d.ts.map +1 -1
- package/dist/types/sender/gateway/customgatewaysender.d.ts +8 -4
- package/dist/types/sender/gateway/customgatewaysender.d.ts.map +1 -1
- package/dist/types/sender/http/httpsender.d.ts +10 -6
- package/dist/types/sender/http/httpsender.d.ts.map +1 -1
- package/dist/types/sender/plugin/communication.d.ts +2 -1
- package/dist/types/sender/plugin/communication.d.ts.map +1 -1
- package/dist/types/sender/plugin/pluginsender.d.ts +4 -8
- package/dist/types/sender/plugin/pluginsender.d.ts.map +1 -1
- package/dist/types/sender/security.d.ts +22 -0
- package/dist/types/sender/security.d.ts.map +1 -0
- package/dist/types/sender/sender.d.ts +32 -4
- package/dist/types/sender/sender.d.ts.map +1 -1
- package/dist/types/sender/{sessionegotiator.d.ts → sessionnegotiator.d.ts} +11 -16
- package/dist/types/sender/sessionnegotiator.d.ts.map +1 -0
- package/dist/types/sender/tcp/tcpsender.d.ts +16 -14
- package/dist/types/sender/tcp/tcpsender.d.ts.map +1 -1
- package/dist/types/sender/websocket/websocketsender.d.ts +11 -14
- package/dist/types/sender/websocket/websocketsender.d.ts.map +1 -1
- package/dist/types/types/account.d.ts +22 -0
- package/dist/types/types/account.d.ts.map +1 -1
- package/dist/types/types/billing.d.ts +1 -1
- package/dist/types/types/billing.d.ts.map +1 -1
- package/dist/types/types/command.d.ts +16 -12
- package/dist/types/types/command.d.ts.map +1 -1
- package/dist/types/types/commons.d.ts +1 -0
- package/dist/types/types/commons.d.ts.map +1 -1
- package/dist/types/types/desk.d.ts +1 -1
- package/dist/types/types/desk.d.ts.map +1 -1
- package/dist/types/types/message.d.ts +1 -0
- package/dist/types/types/message.d.ts.map +1 -1
- package/dist/types/types/node.d.ts +8 -4
- package/dist/types/types/node.d.ts.map +1 -1
- package/dist/types/types/notification.d.ts +3 -4
- package/dist/types/types/notification.d.ts.map +1 -1
- package/dist/types/types/portal.d.ts +27 -0
- package/dist/types/types/portal.d.ts.map +1 -1
- package/dist/types/types/reason.d.ts +12 -0
- package/dist/types/types/reason.d.ts.map +1 -0
- package/dist/types/types/session.d.ts +4 -5
- package/dist/types/types/session.d.ts.map +1 -1
- package/dist/types/utils/uri.d.ts +4 -3
- package/dist/types/utils/uri.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/sender/sessionegotiator.js.map +0 -1
- package/dist/esm/sender/sessionegotiator.js.map +0 -1
- package/dist/types/sender/sessionegotiator.d.ts.map +0 -1
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import { isCommand } from "../types/
|
|
1
|
+
import { Node, isCommand, isMessage, isNotification, } from "../types/index.js";
|
|
2
|
+
import { ReasonCodes } from "../types/reason.js";
|
|
2
3
|
export class EnvelopeResolver {
|
|
3
4
|
sender;
|
|
5
|
+
listeners = {
|
|
6
|
+
message: [],
|
|
7
|
+
command: [],
|
|
8
|
+
notification: [],
|
|
9
|
+
};
|
|
4
10
|
waitingEnvelopeResponseResolvers = {};
|
|
5
11
|
constructor(sender) {
|
|
6
12
|
this.sender = sender;
|
|
@@ -8,14 +14,14 @@ export class EnvelopeResolver {
|
|
|
8
14
|
async resolve(envelope) {
|
|
9
15
|
const deferred = this.waitingEnvelopeResponseResolvers[envelope.id];
|
|
10
16
|
if (deferred) {
|
|
17
|
+
delete this.waitingEnvelopeResponseResolvers[envelope.id];
|
|
11
18
|
deferred(envelope);
|
|
12
19
|
}
|
|
13
|
-
else {
|
|
14
|
-
|
|
15
|
-
// But it works for most use cases
|
|
16
|
-
if (isCommand(envelope) && envelope.method === 'get' && envelope.uri === '/ping') {
|
|
20
|
+
else if (isCommand(envelope)) {
|
|
21
|
+
if (envelope.method === 'get' && envelope.uri === '/ping') {
|
|
17
22
|
await this.sender.sendCommandResponse({
|
|
18
23
|
id: envelope.id,
|
|
24
|
+
to: envelope.from,
|
|
19
25
|
method: 'get',
|
|
20
26
|
type: 'application/vnd.lime.ping+json',
|
|
21
27
|
status: 'success',
|
|
@@ -23,14 +29,87 @@ export class EnvelopeResolver {
|
|
|
23
29
|
});
|
|
24
30
|
}
|
|
25
31
|
else {
|
|
26
|
-
|
|
32
|
+
try {
|
|
33
|
+
const response = await this.emit('command', envelope);
|
|
34
|
+
const type = typeof response === 'string' ? 'text/plain' : response ? 'application/json' : undefined;
|
|
35
|
+
const resource = typeof response === 'string' || response ? response : undefined;
|
|
36
|
+
await this.sender.sendCommandResponse({
|
|
37
|
+
id: envelope.id,
|
|
38
|
+
method: envelope.method,
|
|
39
|
+
to: envelope.from,
|
|
40
|
+
status: 'success',
|
|
41
|
+
type,
|
|
42
|
+
resource,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
await this.sender.sendCommandResponse({
|
|
47
|
+
id: envelope.id,
|
|
48
|
+
method: envelope.method,
|
|
49
|
+
to: envelope.from,
|
|
50
|
+
status: 'failure',
|
|
51
|
+
reason: {
|
|
52
|
+
code: ReasonCodes.GeneralError,
|
|
53
|
+
description: err instanceof Error ? err.message : String(err),
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
}
|
|
27
57
|
}
|
|
28
58
|
}
|
|
59
|
+
else if (isMessage(envelope)) {
|
|
60
|
+
const shouldNotify = !envelope.to || this.sender.session?.localNode.toIdentity() === Node.from(envelope.to).toIdentity();
|
|
61
|
+
const notify = async (notification) => {
|
|
62
|
+
if (shouldNotify) {
|
|
63
|
+
await this.sender.sendNotification({
|
|
64
|
+
...notification,
|
|
65
|
+
id: envelope.id,
|
|
66
|
+
to: notification.event === 'failed' ? envelope.from : (envelope.pp ?? envelope.from),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
await notify({ event: 'received' });
|
|
71
|
+
try {
|
|
72
|
+
await this.emit('message', envelope);
|
|
73
|
+
await notify({ event: 'consumed' });
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
await notify({
|
|
77
|
+
event: 'failed',
|
|
78
|
+
reason: {
|
|
79
|
+
code: ReasonCodes.GeneralError,
|
|
80
|
+
description: err instanceof Error ? err.message : String(err),
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else if (isNotification(envelope)) {
|
|
86
|
+
await this.emit('notification', envelope);
|
|
87
|
+
}
|
|
29
88
|
}
|
|
30
89
|
createEnvelopeResponsePromise(id) {
|
|
31
90
|
return new Promise((resolve) => {
|
|
32
91
|
this.waitingEnvelopeResponseResolvers[id] = resolve;
|
|
33
92
|
});
|
|
34
93
|
}
|
|
94
|
+
addListener(ev, listener) {
|
|
95
|
+
if (this.listeners[ev].some((l) => l.callback === listener.callback)) {
|
|
96
|
+
throw new Error(`Listener for '${ev}' already exists.`);
|
|
97
|
+
}
|
|
98
|
+
this.listeners[ev].push(listener);
|
|
99
|
+
}
|
|
100
|
+
removeListener(ev, callback) {
|
|
101
|
+
this.listeners[ev] = this.listeners[ev].filter((l) => l.callback !== callback);
|
|
102
|
+
}
|
|
103
|
+
async emit(ev, ...args) {
|
|
104
|
+
for (const listener of this.listeners[ev]) {
|
|
105
|
+
if (!listener.predicate || listener.predicate(...args)) {
|
|
106
|
+
const result = await listener.callback(...args);
|
|
107
|
+
if (result !== undefined) {
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
35
114
|
}
|
|
36
115
|
//# sourceMappingURL=enveloperesolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enveloperesolver.js","sourceRoot":"","sources":["../../../src/sender/enveloperesolver.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"enveloperesolver.js","sourceRoot":"","sources":["../../../src/sender/enveloperesolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export class CustomGatewayHttpSender {
|
|
1
|
+
import { ConnectionSender } from "../sender.js";
|
|
2
|
+
export class CustomGatewayHttpSender extends ConnectionSender {
|
|
3
3
|
baseurl;
|
|
4
4
|
token;
|
|
5
|
-
constructor(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super(options);
|
|
7
|
+
if (options.authentication.scheme === 'plain') {
|
|
8
|
+
this.token = CustomGatewayHttpSender.createToken(options.node, btoa(options.authentication.password));
|
|
9
|
+
}
|
|
10
|
+
else if (options.authentication.scheme === 'token') {
|
|
11
|
+
this.token = options.authentication.token;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
throw new Error('CustomGatewayHttpSender only supports plain or token authentication');
|
|
15
|
+
}
|
|
16
|
+
const prefix = options.tenantId ? `${options.tenantId}.` : '';
|
|
17
|
+
this.baseurl = `https://${prefix}custom.gw.${this.domain}`;
|
|
12
18
|
}
|
|
13
19
|
async sendMessage(message) {
|
|
14
20
|
const response = await fetch(`${this.baseurl}/messages`, {
|
|
@@ -26,5 +32,6 @@ export class CustomGatewayHttpSender {
|
|
|
26
32
|
sendCommand() {
|
|
27
33
|
throw new Error('Custom gateway clients cannot send commands');
|
|
28
34
|
}
|
|
35
|
+
static login = (ConnectionSender.login);
|
|
29
36
|
}
|
|
30
37
|
//# sourceMappingURL=customgatewaysender.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customgatewaysender.js","sourceRoot":"","sources":["../../../../src/sender/gateway/customgatewaysender.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"customgatewaysender.js","sourceRoot":"","sources":["../../../../src/sender/gateway/customgatewaysender.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAiD,MAAM,cAAc,CAAA;AAE9F,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IACxC,OAAO,CAAQ;IACf,KAAK,CAAQ;IAE9B,YAAY,OAA8D;QACtE,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;QACzG,CAAC;aAAM,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACnD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAA;QAC7C,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAA;QAC1F,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7D,IAAI,CAAC,OAAO,GAAG,WAAW,MAAM,aAAa,IAAI,CAAC,MAAM,EAAE,CAAA;IAC9D,CAAC;IAEM,KAAK,CAAC,WAAW,CAAyC,OAAsB;QACnF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAChC,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;QACrE,CAAC;IACL,CAAC;IAED,WAAW;QACP,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAClE,CAAC;IAEM,MAAM,CAAC,KAAK,GAAG,CAAA,gBAAgB,CAAC,KAA8B,CAAA,CAAA"}
|
|
@@ -1,26 +1,28 @@
|
|
|
1
|
-
import { Node, } from "../../types/index.js";
|
|
2
1
|
import { BlipError } from "../bliperror.js";
|
|
2
|
+
import { ConnectionSender } from "../sender.js";
|
|
3
3
|
import { EnvelopeThrottler } from "../throttler.js";
|
|
4
|
-
export class HttpSender {
|
|
5
|
-
token;
|
|
4
|
+
export class HttpSender extends ConnectionSender {
|
|
6
5
|
baseurl;
|
|
6
|
+
token;
|
|
7
7
|
throttler = new EnvelopeThrottler();
|
|
8
|
-
constructor(
|
|
9
|
-
|
|
10
|
-
const prefix = tenantId ? `${tenantId}.` : '';
|
|
11
|
-
this.baseurl = `https://${prefix}http.
|
|
8
|
+
constructor(options) {
|
|
9
|
+
super(options);
|
|
10
|
+
const prefix = options.tenantId ? `${options.tenantId}.` : '';
|
|
11
|
+
this.baseurl = `https://${prefix}http.${this.domain}`;
|
|
12
|
+
if (options.authentication.scheme === 'key') {
|
|
13
|
+
this.token = HttpSender.createToken(options.node, options.authentication.key);
|
|
14
|
+
}
|
|
15
|
+
else if (options.authentication.scheme === 'token') {
|
|
16
|
+
this.token = options.authentication.token;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw new Error('HttpSender only supports key or token authentication');
|
|
20
|
+
}
|
|
12
21
|
}
|
|
13
22
|
sendMessage(message) {
|
|
14
23
|
return this.withFetchRetryPolicy(async () => {
|
|
15
24
|
await this.throttler.throttle('message');
|
|
16
|
-
const response = await fetch(
|
|
17
|
-
method: 'POST',
|
|
18
|
-
headers: {
|
|
19
|
-
'Content-Type': 'application/json',
|
|
20
|
-
Authorization: `Key ${this.token}`,
|
|
21
|
-
},
|
|
22
|
-
body: JSON.stringify(message),
|
|
23
|
-
});
|
|
25
|
+
const response = await this.fetch('messages', JSON.stringify(message));
|
|
24
26
|
if (!response.ok) {
|
|
25
27
|
throw new Error(`Failed to send message: ${response.statusText} (${response.status})`);
|
|
26
28
|
}
|
|
@@ -29,14 +31,7 @@ export class HttpSender {
|
|
|
29
31
|
sendCommand(command) {
|
|
30
32
|
return this.withFetchRetryPolicy(async () => {
|
|
31
33
|
await this.throttler.throttle('command');
|
|
32
|
-
const response = await fetch(
|
|
33
|
-
method: 'POST',
|
|
34
|
-
headers: {
|
|
35
|
-
'Content-Type': 'application/json',
|
|
36
|
-
Authorization: `Key ${this.token}`,
|
|
37
|
-
},
|
|
38
|
-
body: JSON.stringify(command),
|
|
39
|
-
});
|
|
34
|
+
const response = await this.fetch('commands', JSON.stringify(command));
|
|
40
35
|
if (!response.ok) {
|
|
41
36
|
throw new Error(`Failed to send command: ${response.statusText} (${response.status})`);
|
|
42
37
|
}
|
|
@@ -48,16 +43,20 @@ export class HttpSender {
|
|
|
48
43
|
return result.resource;
|
|
49
44
|
}
|
|
50
45
|
else {
|
|
51
|
-
throw new Error(`Unexpected response
|
|
46
|
+
throw new Error(`Unexpected response for command '${command.uri}': ${JSON.stringify(response)}`);
|
|
52
47
|
}
|
|
53
48
|
});
|
|
54
49
|
}
|
|
55
|
-
static login
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
:
|
|
59
|
-
|
|
60
|
-
|
|
50
|
+
static login = (ConnectionSender.login);
|
|
51
|
+
async fetch(path, body) {
|
|
52
|
+
return await fetch(`${this.baseurl}/${path}`, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/json',
|
|
56
|
+
Authorization: `Key ${this.token}`,
|
|
57
|
+
},
|
|
58
|
+
body,
|
|
59
|
+
});
|
|
61
60
|
}
|
|
62
61
|
async withFetchRetryPolicy(fn, retries = 5) {
|
|
63
62
|
try {
|
|
@@ -69,7 +68,6 @@ export class HttpSender {
|
|
|
69
68
|
(err.message.endsWith('(429)') ||
|
|
70
69
|
err.message.endsWith('(504)') ||
|
|
71
70
|
err.message.endsWith('(502)') ||
|
|
72
|
-
// General application error code
|
|
73
71
|
(err instanceof BlipError && BlipError.retryableBlipErrors.includes(err.code)) ||
|
|
74
72
|
// Probably cloudflare trying to mitigate a DDoS attack
|
|
75
73
|
(err.cause instanceof Error && err.cause?.name === 'ConnectTimeoutError') ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpsender.js","sourceRoot":"","sources":["../../../../src/sender/http/httpsender.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"httpsender.js","sourceRoot":"","sources":["../../../../src/sender/http/httpsender.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
import { randomId } from "../../utils/random.js";
|
|
2
2
|
export const startChannel = () => {
|
|
3
3
|
const caller = window.name ?? randomId();
|
|
4
|
+
let isDesk = false;
|
|
4
5
|
const waitingMessages = {};
|
|
5
|
-
const messageHandler = ({ data }) => {
|
|
6
|
+
const messageHandler = ({ data, origin }) => {
|
|
7
|
+
if (origin.endsWith('.desk.blip.ai')) {
|
|
8
|
+
isDesk = true;
|
|
9
|
+
}
|
|
6
10
|
const deferred = waitingMessages[data?.trackingProperties?.id];
|
|
7
11
|
if (deferred) {
|
|
8
12
|
if (data.message?.caller === caller) {
|
|
9
13
|
// This is a echo message, ignore it
|
|
10
14
|
return;
|
|
11
15
|
}
|
|
16
|
+
delete waitingMessages[data.trackingProperties.id];
|
|
12
17
|
if (data.error) {
|
|
13
18
|
deferred.reject(JSON.parse(data.error));
|
|
14
19
|
}
|
|
15
20
|
else {
|
|
16
21
|
deferred.resolve(data.response);
|
|
17
22
|
}
|
|
18
|
-
delete waitingMessages[data.trackingProperties.id];
|
|
19
23
|
}
|
|
20
24
|
};
|
|
21
25
|
window.addEventListener('message', messageHandler);
|
|
22
26
|
let isDestroyed = false;
|
|
23
27
|
return {
|
|
28
|
+
get isDesk() {
|
|
29
|
+
return isDesk;
|
|
30
|
+
},
|
|
24
31
|
post: (action, content, options) => {
|
|
25
32
|
if (isDestroyed) {
|
|
26
33
|
throw new Error('Channel is destroyed');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communication.js","sourceRoot":"","sources":["../../../../src/sender/plugin/communication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"communication.js","sourceRoot":"","sources":["../../../../src/sender/plugin/communication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAA;IACxC,IAAI,MAAM,GAAG,KAAK,CAAA;IAElB,MAAM,eAAe,GAA8E,EAAE,CAAA;IACrG,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAgB,EAAE,EAAE;QACtD,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,CAAA;QACjB,CAAC;QAED,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,OAAO,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;YAClD,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;QACL,CAAC;IACL,CAAC,CAAA;IACD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IAElD,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,OAAO;QACH,IAAI,MAAM;YACN,OAAO,MAAM,CAAA;QACjB,CAAC;QACD,IAAI,EAAE,CAAI,MAAc,EAAE,OAAgB,EAAE,OAA0D,EAAE,EAAE;YACtG,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;YAC3C,CAAC;YAED,MAAM,EAAE,GAAG,QAAQ,EAAE,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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { BlipError, Node, } from "../../index.js";
|
|
2
|
+
import { isReason } from "../../types/reason.js";
|
|
2
3
|
import { startChannel } from "./communication.js";
|
|
3
4
|
export class PluginSender {
|
|
4
|
-
blipDesk;
|
|
5
5
|
channel;
|
|
6
|
-
constructor(
|
|
7
|
-
this.blipDesk = blipDesk;
|
|
6
|
+
constructor() {
|
|
8
7
|
this.channel = startChannel();
|
|
9
8
|
}
|
|
10
9
|
async sendMessage(message) {
|
|
@@ -21,21 +20,17 @@ export class PluginSender {
|
|
|
21
20
|
});
|
|
22
21
|
}
|
|
23
22
|
async sendCommand(command) {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
const destination = this.getRealm() === 'desk'
|
|
24
|
+
? undefined
|
|
25
|
+
: command.to && Node.from(command.to).domain?.endsWith('msging.net')
|
|
26
|
+
? 'MessagingHubService'
|
|
27
|
+
: 'BlipService';
|
|
29
28
|
try {
|
|
30
|
-
return await this.channel.post('sendCommand', {
|
|
31
|
-
command: fixedCommand,
|
|
32
|
-
destination: toDomain?.endsWith('msging.net') ? 'MessagingHubService' : 'BlipService',
|
|
33
|
-
});
|
|
29
|
+
return await this.channel.post('sendCommand', { command, destination });
|
|
34
30
|
}
|
|
35
31
|
catch (err) {
|
|
36
|
-
if (err
|
|
37
|
-
|
|
38
|
-
throw new BlipError(command.uri, knownerror.code, knownerror.description);
|
|
32
|
+
if (isReason(err)) {
|
|
33
|
+
throw new BlipError(command.uri, err);
|
|
39
34
|
}
|
|
40
35
|
else if (BlipError.isFailedCommandResponse(err)) {
|
|
41
36
|
throw BlipError.commandResponseToBlipError(command.uri, err);
|
|
@@ -58,50 +53,7 @@ export class PluginSender {
|
|
|
58
53
|
return blipClient.sender.getRealm();
|
|
59
54
|
}
|
|
60
55
|
getRealm() {
|
|
61
|
-
return this.
|
|
62
|
-
}
|
|
63
|
-
cachedAccountPromise = undefined;
|
|
64
|
-
async fixBlipDeskMsgingCommand(command) {
|
|
65
|
-
if (!this.cachedAccountPromise) {
|
|
66
|
-
this.cachedAccountPromise = this.sendCommand({
|
|
67
|
-
id: Date.now().toString(),
|
|
68
|
-
uri: '/account',
|
|
69
|
-
method: 'get',
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
const accountResponse = await this.cachedAccountPromise;
|
|
73
|
-
if (typeof accountResponse !== 'object' ||
|
|
74
|
-
!accountResponse ||
|
|
75
|
-
!('identity' in accountResponse) ||
|
|
76
|
-
typeof accountResponse.identity !== 'string' ||
|
|
77
|
-
!Node.isValid(accountResponse?.identity)) {
|
|
78
|
-
throw new Error('Account identity not found or invalid');
|
|
79
|
-
}
|
|
80
|
-
if (command.uri.startsWith('lime://')) {
|
|
81
|
-
if (command.uri.match(/^lime:\/\/.*?@msging.net\//)) {
|
|
82
|
-
// the command is already resolved to delegate to the bot
|
|
83
|
-
return command;
|
|
84
|
-
}
|
|
85
|
-
if (!this.blipDesk?.overrideBotIdentity) {
|
|
86
|
-
throw new Error(`Sent a command to msging.net without specified bot sender: ${command.uri}`);
|
|
87
|
-
}
|
|
88
|
-
// the command should be double delegated, firstly to the bot and then to the other destination
|
|
89
|
-
return {
|
|
90
|
-
...command,
|
|
91
|
-
from: this.blipDesk.overrideBotIdentity,
|
|
92
|
-
pp: Node.from(accountResponse.identity).withInstance('!desk'),
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
if (!this.blipDesk?.overrideBotIdentity) {
|
|
97
|
-
throw new Error(`Sent a command to msging.net without specified bot sender: ${command.uri}`);
|
|
98
|
-
}
|
|
99
|
-
// desk always expect that command uris starts with lime://
|
|
100
|
-
return {
|
|
101
|
-
...command,
|
|
102
|
-
uri: `lime://${this.blipDesk.overrideBotIdentity}${command.uri}`,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
56
|
+
return this.channel.isDesk ? 'desk' : 'portal';
|
|
105
57
|
}
|
|
106
58
|
}
|
|
107
59
|
//# sourceMappingURL=pluginsender.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginsender.js","sourceRoot":"","sources":["../../../../src/sender/plugin/pluginsender.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,SAAS,
|
|
1
|
+
{"version":3,"file":"pluginsender.js","sourceRoot":"","sources":["../../../../src/sender/plugin/pluginsender.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,SAAS,EAKT,IAAI,GAEP,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,OAAO,YAAY;IACL,OAAO,CAAA;IAEvB;QACI,IAAI,CAAC,OAAO,GAAG,YAAY,EAAE,CAAA;IACjC,CAAC;IAEM,KAAK,CAAC,WAAW,CAA4B,OAAsB;QACtE,MAAM,IAAI,CAAC,WAAW,CAAC;YACnB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,EAAE,EAAE,iCAAiC;YACrC,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oCAAoC;YAC1C,QAAQ,EAAE;gBACN,OAAO;gBACP,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACjC;SACJ,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAgC;QACrD,MAAM,WAAW,GACb,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM;YACtB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC;gBAClE,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,aAAa,CAAA;QAEzB,IAAI,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YACzC,CAAC;iBAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChD,MAAM,SAAS,CAAC,0BAA0B,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAChE,CAAC;YAED,MAAM,GAAG,CAAA;QACb,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,UAAsB;QACtC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,YAAY,YAAY,CAAA;QAChE,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACtE,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAA;IAC5B,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,UAAsB;QACzC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,YAAY,YAAY,CAAA;QAChE,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACtE,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACvC,CAAC;IAEO,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;IAClD,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/sender/security.ts"],"names":[],"mappings":""}
|
|
@@ -1,2 +1,91 @@
|
|
|
1
|
-
|
|
1
|
+
import { Node, } from "../types/index.js";
|
|
2
|
+
import { EnvelopeResolver } from "./enveloperesolver.js";
|
|
3
|
+
export class ConnectionSender {
|
|
4
|
+
_domain;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this._domain = Node.from(options.node).domain ?? 'msging.net';
|
|
7
|
+
}
|
|
8
|
+
get domain() {
|
|
9
|
+
return this._domain;
|
|
10
|
+
}
|
|
11
|
+
static login(tokenOrBot, accessKeyOrTenantId, tenantIdOrUndefined) {
|
|
12
|
+
let node;
|
|
13
|
+
let accessKey;
|
|
14
|
+
let tenantId;
|
|
15
|
+
const isTokenBasedAuth = !tenantIdOrUndefined && typeof tokenOrBot === 'string';
|
|
16
|
+
if (isTokenBasedAuth) {
|
|
17
|
+
try {
|
|
18
|
+
const { identity, secret } = ConnectionSender.parseToken(tokenOrBot);
|
|
19
|
+
node = identity;
|
|
20
|
+
accessKey = secret;
|
|
21
|
+
tenantId = accessKeyOrTenantId;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
if (!accessKeyOrTenantId) {
|
|
25
|
+
throw new Error('Invalid token format and no access key provided');
|
|
26
|
+
}
|
|
27
|
+
node = Node.from(tokenOrBot, 'msging.net');
|
|
28
|
+
accessKey = accessKeyOrTenantId;
|
|
29
|
+
tenantId = tenantIdOrUndefined;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
if (!accessKeyOrTenantId) {
|
|
34
|
+
throw new Error('Access key must be provided for bot-based authentication');
|
|
35
|
+
}
|
|
36
|
+
node = Node.from(tokenOrBot, 'msging.net');
|
|
37
|
+
accessKey = accessKeyOrTenantId;
|
|
38
|
+
tenantId = tenantIdOrUndefined;
|
|
39
|
+
}
|
|
40
|
+
// biome-ignore lint/complexity/noThisInStatic: fair use-case
|
|
41
|
+
return new this({
|
|
42
|
+
node,
|
|
43
|
+
authentication: {
|
|
44
|
+
scheme: 'key',
|
|
45
|
+
key: accessKey,
|
|
46
|
+
},
|
|
47
|
+
tenantId,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
static createToken(node, secret) {
|
|
51
|
+
const identity = Node.from(node).toIdentity();
|
|
52
|
+
return btoa(`${identity}:${atob(secret)}`);
|
|
53
|
+
}
|
|
54
|
+
static parseToken(token) {
|
|
55
|
+
let cleantoken = token.trim();
|
|
56
|
+
const parts = cleantoken.split(' ');
|
|
57
|
+
if (parts.length > 1) {
|
|
58
|
+
cleantoken = parts[1];
|
|
59
|
+
}
|
|
60
|
+
const [identityOrIdentifier, key] = atob(cleantoken).split(':');
|
|
61
|
+
if (!identityOrIdentifier || !key) {
|
|
62
|
+
throw new Error('Invalid token format');
|
|
63
|
+
}
|
|
64
|
+
const identity = Node.isValid(identityOrIdentifier)
|
|
65
|
+
? identityOrIdentifier
|
|
66
|
+
: new Node(identityOrIdentifier, 'msging.net').toIdentity();
|
|
67
|
+
return {
|
|
68
|
+
identity,
|
|
69
|
+
secret: btoa(key),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class OpenConnectionSender extends ConnectionSender {
|
|
74
|
+
envelopeResolver = new EnvelopeResolver(this);
|
|
75
|
+
sessionNegotiator = null;
|
|
76
|
+
on(ev, listener, predicate) {
|
|
77
|
+
this.envelopeResolver.addListener(ev, {
|
|
78
|
+
callback: listener,
|
|
79
|
+
predicate: predicate,
|
|
80
|
+
});
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
off(ev, listener) {
|
|
84
|
+
this.envelopeResolver.removeListener(ev, listener);
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
get session() {
|
|
88
|
+
return this.sessionNegotiator?.session ?? null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
2
91
|
//# sourceMappingURL=sender.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../../../src/sender/sender.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../../../src/sender/sender.ts"],"names":[],"mappings":"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"}
|