abmqtts 0.0.8 → 0.0.9
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/fbns/fbns.client.js +208 -162
- package/dist/mqttot/mqttot.client.d.ts +2 -2
- package/dist/mqttot/mqttot.client.js +99 -87
- package/dist/mqttot/mqttot.connect.request.packet.d.ts +1 -1
- package/dist/mqttot/mqttot.connect.response.packet.d.ts +1 -1
- package/dist/mqttot/mqttot.connect.response.packet.js +18 -15
- package/dist/realtime/commands/commands.d.ts +1 -1
- package/dist/realtime/commands/direct.commands.d.ts +2 -2
- package/dist/realtime/mixins/message-sync.mixin.js +69 -65
- package/dist/realtime/mixins/realtime-sub.mixin.js +53 -47
- package/dist/realtime/realtime.client.d.ts +1 -1
- package/dist/realtime/realtime.client.events.d.ts +2 -2
- package/dist/realtime/realtime.client.js +230 -179
- package/dist/shared.d.ts +1 -1
- package/package.json +1 -1
package/dist/fbns/fbns.client.js
CHANGED
|
@@ -6,176 +6,222 @@ const fbns_device_auth_1 = require("./fbns.device-auth");
|
|
|
6
6
|
const shared_1 = require("../shared");
|
|
7
7
|
const mqttot_1 = require("../mqttot");
|
|
8
8
|
const chance_1 = require("chance");
|
|
9
|
-
const obmqtt_1 = require("
|
|
9
|
+
const obmqtt_1 = require("abmqtt-dist");
|
|
10
10
|
const errors_1 = require("../errors");
|
|
11
11
|
const eventemitter3_1 = require("eventemitter3");
|
|
12
12
|
const fbns_utilities_1 = require("./fbns.utilities");
|
|
13
13
|
class FbnsClient extends eventemitter3_1.EventEmitter {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
additionalOptions: additionalTlsOptions,
|
|
71
|
-
});
|
|
72
|
-
this.client.on('warning', w => this.emit('warning', w));
|
|
73
|
-
this.client.on('error', e => this.emit('error', e));
|
|
74
|
-
this.client.on('disconnect', reason => this.safeDisconnect
|
|
75
|
-
? this.emit('disconnect', reason && JSON.stringify(reason))
|
|
76
|
-
: this.emit('error', new errors_1.ClientDisconnectedError(`MQTToTClient got disconnected. Reason: ${reason && JSON.stringify(reason)}`)));
|
|
77
|
-
this.client.listen(constants_1.FbnsTopics.FBNS_MESSAGE.id, msg => this.handleMessage(msg));
|
|
78
|
-
this.client.listen({
|
|
79
|
-
topic: constants_1.FbnsTopics.FBNS_EXP_LOGGING.id,
|
|
80
|
-
transformer: async (msg) => JSON.parse((await (0, shared_1.tryUnzipAsync)(msg.payload)).toString()),
|
|
81
|
-
}, msg => this.emit('logging', msg));
|
|
82
|
-
this.client.listen(constants_1.FbnsTopics.PP.id, msg => this.emit('pp', msg.payload.toString()));
|
|
83
|
-
this.client.on('connect', async (res) => {
|
|
84
|
-
if (!this.client) {
|
|
85
|
-
throw new obmqtt_1.IllegalStateError('No client registered but an event was received');
|
|
86
|
-
}
|
|
87
|
-
this.fbnsDebug('Connected to MQTT');
|
|
88
|
-
if (!res?.payload?.length) {
|
|
89
|
-
this.fbnsDebug(`Received empty connect packet. Reason: ${res.errorName}; Try resetting your fbns state!`);
|
|
90
|
-
this.emit('error', new errors_1.EmptyPacketError('Received empty connect packet. Try resetting your fbns state!'));
|
|
91
|
-
await this.client.disconnect();
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
const payload = res.payload.toString('utf8');
|
|
95
|
-
this.fbnsDebug(`Received auth: ${payload}`);
|
|
96
|
-
this._auth.read(payload);
|
|
97
|
-
this.emit('auth', this.auth);
|
|
98
|
-
await this.client.mqttotPublish({
|
|
99
|
-
topic: constants_1.FbnsTopics.FBNS_REG_REQ.id,
|
|
100
|
-
payload: Buffer.from(JSON.stringify({
|
|
101
|
-
pkg_name: constants_1.INSTAGRAM_PACKAGE_NAME,
|
|
102
|
-
appid: this.ig.state.fbAnalyticsApplicationId,
|
|
103
|
-
}), 'utf8'),
|
|
104
|
-
qosLevel: 1,
|
|
105
|
-
});
|
|
106
|
-
// this.buildConnection(); ?
|
|
107
|
-
});
|
|
108
|
-
await this.client
|
|
109
|
-
.connect({
|
|
110
|
-
keepAlive: 60,
|
|
111
|
-
protocolLevel: 3,
|
|
112
|
-
clean: true,
|
|
113
|
-
connectDelay: 60 * 1000,
|
|
114
|
-
})
|
|
115
|
-
.catch(e => {
|
|
116
|
-
this.fbnsDebug(`Connection failed: ${e}`);
|
|
117
|
-
throw e;
|
|
118
|
-
});
|
|
119
|
-
if (!this.client.ready)
|
|
120
|
-
throw new Error('OB Connection failed');
|
|
121
|
-
await this.client.subscribe({ topic: constants_1.FbnsTopics.FBNS_MESSAGE.id });
|
|
122
|
-
const msg = await (0, shared_1.listenOnce)(this.client, constants_1.FbnsTopics.FBNS_REG_RESP.id);
|
|
123
|
-
const data = await (0, shared_1.tryUnzipAsync)(msg.payload);
|
|
124
|
-
const payload = data.toString('utf8');
|
|
125
|
-
this.fbnsDebug(`Received register response: ${payload}`);
|
|
126
|
-
const { token, error } = JSON.parse(payload);
|
|
127
|
-
if (error) {
|
|
128
|
-
this.emit('error', error);
|
|
129
|
-
throw error;
|
|
130
|
-
}
|
|
131
|
-
try {
|
|
132
|
-
await this.sendPushRegister(token);
|
|
133
|
-
}
|
|
134
|
-
catch (e) {
|
|
135
|
-
if (e instanceof Error) {
|
|
136
|
-
this.emit('error', e);
|
|
137
|
-
}
|
|
138
|
-
throw e;
|
|
14
|
+
get auth() {
|
|
15
|
+
return this._auth;
|
|
16
|
+
}
|
|
17
|
+
set auth(value) {
|
|
18
|
+
this._auth = value;
|
|
19
|
+
}
|
|
20
|
+
constructor(ig) {
|
|
21
|
+
super();
|
|
22
|
+
this.ig = ig;
|
|
23
|
+
this.fbnsDebug = (0, shared_1.debugChannel)("fbns");
|
|
24
|
+
this.safeDisconnect = false;
|
|
25
|
+
this._auth = new fbns_device_auth_1.FbnsDeviceAuth(this.ig);
|
|
26
|
+
}
|
|
27
|
+
buildConnection() {
|
|
28
|
+
this.fbnsDebug("Constructing connection");
|
|
29
|
+
this.conn = new mqttot_1.MQTToTConnection({
|
|
30
|
+
clientIdentifier: this._auth.clientId,
|
|
31
|
+
clientInfo: {
|
|
32
|
+
userId: BigInt(this._auth.userId),
|
|
33
|
+
userAgent: (0, shared_1.createFbnsUserAgent)(this.ig),
|
|
34
|
+
clientCapabilities: 183,
|
|
35
|
+
endpointCapabilities: 128,
|
|
36
|
+
publishFormat: 1,
|
|
37
|
+
noAutomaticForeground: true,
|
|
38
|
+
makeUserAvailableInForeground: false,
|
|
39
|
+
deviceId: this._auth.deviceId,
|
|
40
|
+
isInitiallyForeground: false,
|
|
41
|
+
networkType: 1,
|
|
42
|
+
networkSubtype: 0,
|
|
43
|
+
clientMqttSessionId: BigInt(Date.now()) & BigInt(0xffffffff),
|
|
44
|
+
subscribeTopics: [76, 80, 231],
|
|
45
|
+
clientType: "device_auth",
|
|
46
|
+
appId: BigInt(567310203415052),
|
|
47
|
+
deviceSecret: this._auth.deviceSecret,
|
|
48
|
+
anotherUnknown: BigInt(-1),
|
|
49
|
+
clientStack: 3,
|
|
50
|
+
},
|
|
51
|
+
password: this._auth.password,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async connect({
|
|
55
|
+
enableTrace,
|
|
56
|
+
autoReconnect,
|
|
57
|
+
socksOptions,
|
|
58
|
+
additionalTlsOptions,
|
|
59
|
+
} = {}) {
|
|
60
|
+
this.fbnsDebug("Connecting to FBNS...");
|
|
61
|
+
this.auth.update();
|
|
62
|
+
this.client = new mqttot_1.MQTToTClient({
|
|
63
|
+
url: constants_1.FBNS.HOST_NAME_V6,
|
|
64
|
+
payloadProvider: () => {
|
|
65
|
+
this.buildConnection();
|
|
66
|
+
if (!this.conn) {
|
|
67
|
+
throw new errors_1.InvalidStateError(
|
|
68
|
+
"No connection created - can't build provider"
|
|
69
|
+
);
|
|
139
70
|
}
|
|
71
|
+
return (0, shared_1.compressDeflate)(this.conn.toThrift());
|
|
72
|
+
},
|
|
73
|
+
enableTrace,
|
|
74
|
+
autoReconnect: autoReconnect ?? true,
|
|
75
|
+
requirePayload: true,
|
|
76
|
+
socksOptions,
|
|
77
|
+
additionalOptions: additionalTlsOptions,
|
|
78
|
+
});
|
|
79
|
+
this.client.on("warning", (w) => this.emit("warning", w));
|
|
80
|
+
this.client.on("error", (e) => this.emit("error", e));
|
|
81
|
+
this.client.on("disconnect", (reason) =>
|
|
82
|
+
this.safeDisconnect
|
|
83
|
+
? this.emit("disconnect", reason && JSON.stringify(reason))
|
|
84
|
+
: this.emit(
|
|
85
|
+
"error",
|
|
86
|
+
new errors_1.ClientDisconnectedError(
|
|
87
|
+
`MQTToTClient got disconnected. Reason: ${
|
|
88
|
+
reason && JSON.stringify(reason)
|
|
89
|
+
}`
|
|
90
|
+
)
|
|
91
|
+
)
|
|
92
|
+
);
|
|
93
|
+
this.client.listen(constants_1.FbnsTopics.FBNS_MESSAGE.id, (msg) =>
|
|
94
|
+
this.handleMessage(msg)
|
|
95
|
+
);
|
|
96
|
+
this.client.listen(
|
|
97
|
+
{
|
|
98
|
+
topic: constants_1.FbnsTopics.FBNS_EXP_LOGGING.id,
|
|
99
|
+
transformer: async (msg) =>
|
|
100
|
+
JSON.parse(
|
|
101
|
+
(await (0, shared_1.tryUnzipAsync)(msg.payload)).toString()
|
|
102
|
+
),
|
|
103
|
+
},
|
|
104
|
+
(msg) => this.emit("logging", msg)
|
|
105
|
+
);
|
|
106
|
+
this.client.listen(constants_1.FbnsTopics.PP.id, (msg) =>
|
|
107
|
+
this.emit("pp", msg.payload.toString())
|
|
108
|
+
);
|
|
109
|
+
this.client.on("connect", async (res) => {
|
|
110
|
+
if (!this.client) {
|
|
111
|
+
throw new obmqtt_1.IllegalStateError(
|
|
112
|
+
"No client registered but an event was received"
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
this.fbnsDebug("Connected to MQTT");
|
|
116
|
+
if (!res?.payload?.length) {
|
|
117
|
+
this.fbnsDebug(
|
|
118
|
+
`Received empty connect packet. Reason: ${res.errorName}; Try resetting your fbns state!`
|
|
119
|
+
);
|
|
120
|
+
this.emit(
|
|
121
|
+
"error",
|
|
122
|
+
new errors_1.EmptyPacketError(
|
|
123
|
+
"Received empty connect packet. Try resetting your fbns state!"
|
|
124
|
+
)
|
|
125
|
+
);
|
|
126
|
+
await this.client.disconnect();
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const payload = res.payload.toString("utf8");
|
|
130
|
+
this.fbnsDebug(`Received auth: ${payload}`);
|
|
131
|
+
this._auth.read(payload);
|
|
132
|
+
this.emit("auth", this.auth);
|
|
133
|
+
await this.client.mqttotPublish({
|
|
134
|
+
topic: constants_1.FbnsTopics.FBNS_REG_REQ.id,
|
|
135
|
+
payload: Buffer.from(
|
|
136
|
+
JSON.stringify({
|
|
137
|
+
pkg_name: constants_1.INSTAGRAM_PACKAGE_NAME,
|
|
138
|
+
appid: this.ig.state.fbAnalyticsApplicationId,
|
|
139
|
+
}),
|
|
140
|
+
"utf8"
|
|
141
|
+
),
|
|
142
|
+
qosLevel: 1,
|
|
143
|
+
});
|
|
144
|
+
// this.buildConnection(); ?
|
|
145
|
+
});
|
|
146
|
+
await this.client
|
|
147
|
+
.connect({
|
|
148
|
+
keepAlive: 60,
|
|
149
|
+
protocolLevel: 3,
|
|
150
|
+
clean: true,
|
|
151
|
+
connectDelay: 60 * 1000,
|
|
152
|
+
})
|
|
153
|
+
.catch((e) => {
|
|
154
|
+
this.fbnsDebug(`Connection failed: ${e}`);
|
|
155
|
+
throw e;
|
|
156
|
+
});
|
|
157
|
+
if (!this.client.ready) throw new Error("OB Connection failed");
|
|
158
|
+
await this.client.subscribe({
|
|
159
|
+
topic: constants_1.FbnsTopics.FBNS_MESSAGE.id,
|
|
160
|
+
});
|
|
161
|
+
const msg = await (0, shared_1.listenOnce)(
|
|
162
|
+
this.client,
|
|
163
|
+
constants_1.FbnsTopics.FBNS_REG_RESP.id
|
|
164
|
+
);
|
|
165
|
+
const data = await (0, shared_1.tryUnzipAsync)(msg.payload);
|
|
166
|
+
const payload = data.toString("utf8");
|
|
167
|
+
this.fbnsDebug(`Received register response: ${payload}`);
|
|
168
|
+
const { token, error } = JSON.parse(payload);
|
|
169
|
+
if (error) {
|
|
170
|
+
this.emit("error", error);
|
|
171
|
+
throw error;
|
|
140
172
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
173
|
+
try {
|
|
174
|
+
await this.sendPushRegister(token);
|
|
175
|
+
} catch (e) {
|
|
176
|
+
if (e instanceof Error) {
|
|
177
|
+
this.emit("error", e);
|
|
178
|
+
}
|
|
179
|
+
throw e;
|
|
147
180
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (notification.collapseKey)
|
|
154
|
-
this.emit(notification.collapseKey, notification);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
this.fbnsDebug(`Received a message without 'fbpushnotif': ${JSON.stringify(payload)}`);
|
|
158
|
-
this.emit('message', payload);
|
|
159
|
-
}
|
|
181
|
+
}
|
|
182
|
+
disconnect() {
|
|
183
|
+
this.safeDisconnect = true;
|
|
184
|
+
if (!this.client) {
|
|
185
|
+
return Promise.resolve();
|
|
160
186
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
187
|
+
return this.client.disconnect();
|
|
188
|
+
}
|
|
189
|
+
async handleMessage(msg) {
|
|
190
|
+
const payload = JSON.parse(
|
|
191
|
+
(await (0, shared_1.tryUnzipAsync)(msg.payload)).toString("utf8")
|
|
192
|
+
);
|
|
193
|
+
if ((0, shared_1.notUndefined)(payload.fbpushnotif)) {
|
|
194
|
+
const notification = (0, fbns_utilities_1.createNotificationFromJson)(
|
|
195
|
+
payload.fbpushnotif
|
|
196
|
+
);
|
|
197
|
+
this.emit("push", notification);
|
|
198
|
+
if (notification.collapseKey)
|
|
199
|
+
this.emit(notification.collapseKey, notification);
|
|
200
|
+
} else {
|
|
201
|
+
this.fbnsDebug(
|
|
202
|
+
`Received a message without 'fbpushnotif': ${JSON.stringify(payload)}`
|
|
203
|
+
);
|
|
204
|
+
this.emit("message", payload);
|
|
178
205
|
}
|
|
206
|
+
}
|
|
207
|
+
async sendPushRegister(token) {
|
|
208
|
+
const { body } = await this.ig.request.send({
|
|
209
|
+
url: `/api/v1/push/register/`,
|
|
210
|
+
method: "POST",
|
|
211
|
+
form: {
|
|
212
|
+
device_type: "android_mqtt",
|
|
213
|
+
is_main_push_channel: true,
|
|
214
|
+
device_sub_type: 2,
|
|
215
|
+
device_token: token,
|
|
216
|
+
_csrftoken: this.ig.state.cookieCsrfToken,
|
|
217
|
+
guid: this.ig.state.uuid,
|
|
218
|
+
uuid: this.ig.state.uuid,
|
|
219
|
+
users: this.ig.state.cookieUserId,
|
|
220
|
+
family_device_id: new chance_1.Chance().guid({ version: 4 }),
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
return body;
|
|
224
|
+
}
|
|
179
225
|
}
|
|
180
226
|
exports.FbnsClient = FbnsClient;
|
|
181
|
-
//# sourceMappingURL=fbns.client.js.map
|
|
227
|
+
//# sourceMappingURL=fbns.client.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MQTToTConnectPacketOptions } from './mqttot.connect.request.packet';
|
|
2
|
-
import { ConnectRequestOptions, DefaultPacketReadResultMap, DefaultPacketWriteOptions, MqttClient, MqttMessage, MqttMessageOutgoing, PacketFlowFunc, PacketType } from '
|
|
2
|
+
import { ConnectRequestOptions, DefaultPacketReadResultMap, DefaultPacketWriteOptions, MqttClient, MqttMessage, MqttMessageOutgoing, PacketFlowFunc, PacketType } from 'abmqtt-dist';
|
|
3
3
|
import { MQTToTConnectResponsePacket } from './mqttot.connect.response.packet';
|
|
4
4
|
import { SocksProxy } from 'socks';
|
|
5
5
|
import { ConnectionOptions } from 'tls';
|
|
@@ -34,4 +34,4 @@ export declare class MQTToTClient extends MqttClient<MQTToTReadMap, MQTToTWriteM
|
|
|
34
34
|
mqttotPublish(message: MqttMessage): Promise<MqttMessageOutgoing>;
|
|
35
35
|
}
|
|
36
36
|
export declare function mqttotConnectFlow(payload: Buffer, requirePayload: boolean): PacketFlowFunc<MQTToTReadMap, MQTToTWriteMap, MQTToTConnectResponsePacket>;
|
|
37
|
-
export {};
|
|
37
|
+
export { };
|
|
@@ -4,98 +4,110 @@ exports.MQTToTClient = void 0;
|
|
|
4
4
|
exports.mqttotConnectFlow = mqttotConnectFlow;
|
|
5
5
|
const shared_1 = require("../shared");
|
|
6
6
|
const mqttot_connect_request_packet_1 = require("./mqttot.connect.request.packet");
|
|
7
|
-
const obmqtt_1 = require("
|
|
7
|
+
const obmqtt_1 = require("abmqtt-dist");
|
|
8
8
|
const errors_1 = require("../errors");
|
|
9
9
|
const mqttot_connect_response_packet_1 = require("./mqttot.connect.response.packet");
|
|
10
10
|
class MQTToTClient extends obmqtt_1.MqttClient {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
registerListeners()
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
* Compresses the payload
|
|
66
|
-
* @param {MqttMessage} message
|
|
67
|
-
* @returns {Promise<MqttMessageOutgoing>}
|
|
68
|
-
*/
|
|
69
|
-
async mqttotPublish(message) {
|
|
70
|
-
this.mqttotDebug(`Publishing ${message.payload.byteLength}bytes to topic ${message.topic}`);
|
|
71
|
-
return await this.publish({
|
|
72
|
-
topic: message.topic,
|
|
73
|
-
payload: await (0, shared_1.compressDeflate)(message.payload),
|
|
74
|
-
qosLevel: message.qosLevel,
|
|
75
|
-
});
|
|
11
|
+
constructor(options) {
|
|
12
|
+
super({
|
|
13
|
+
autoReconnect: options.autoReconnect,
|
|
14
|
+
readMap: {
|
|
15
|
+
...obmqtt_1.DefaultPacketReadMap,
|
|
16
|
+
[obmqtt_1.PacketType.ConnAck]:
|
|
17
|
+
mqttot_connect_response_packet_1.readConnectResponsePacket,
|
|
18
|
+
},
|
|
19
|
+
writeMap: {
|
|
20
|
+
...obmqtt_1.DefaultPacketWriteMap,
|
|
21
|
+
[obmqtt_1.PacketType.Connect]:
|
|
22
|
+
mqttot_connect_request_packet_1.writeConnectRequestPacket,
|
|
23
|
+
},
|
|
24
|
+
transport: options.socksOptions
|
|
25
|
+
? new obmqtt_1.SocksTlsTransport({
|
|
26
|
+
host: options.url,
|
|
27
|
+
port: 443,
|
|
28
|
+
proxyOptions: options.socksOptions,
|
|
29
|
+
additionalOptions: options.additionalOptions,
|
|
30
|
+
})
|
|
31
|
+
: new obmqtt_1.TlsTransport({
|
|
32
|
+
host: options.url,
|
|
33
|
+
port: 443,
|
|
34
|
+
additionalOptions: options.additionalOptions,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
this.mqttotDebug = (msg, ...args) =>
|
|
38
|
+
(0, shared_1.debugChannel)("mqttot")(`${options.url}: ${msg}`, ...args);
|
|
39
|
+
this.connectPayloadProvider = options.payloadProvider;
|
|
40
|
+
this.mqttotDebug(`Creating client`);
|
|
41
|
+
this.registerListeners();
|
|
42
|
+
this.requirePayload = options.requirePayload;
|
|
43
|
+
}
|
|
44
|
+
registerListeners() {
|
|
45
|
+
const printErrorOrWarning = (type) => (e) => {
|
|
46
|
+
if (typeof e === "string") {
|
|
47
|
+
this.mqttotDebug(`${type}: ${e}`);
|
|
48
|
+
} else {
|
|
49
|
+
this.mqttotDebug(`${type}: ${e.message}\n\tStack: ${e.stack}`);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this.on("error", printErrorOrWarning("Error"));
|
|
53
|
+
this.on("warning", printErrorOrWarning("Warning"));
|
|
54
|
+
this.on("disconnect", (e) => this.mqttotDebug(`Disconnected. ${e}`));
|
|
55
|
+
}
|
|
56
|
+
async connect(options) {
|
|
57
|
+
this.connectPayload = await this.connectPayloadProvider();
|
|
58
|
+
return super.connect(options);
|
|
59
|
+
}
|
|
60
|
+
getConnectFlow() {
|
|
61
|
+
if (!this.connectPayload) {
|
|
62
|
+
throw new obmqtt_1.IllegalStateError(
|
|
63
|
+
"Called getConnectFlow() before calling connect()"
|
|
64
|
+
);
|
|
76
65
|
}
|
|
66
|
+
return mqttotConnectFlow(this.connectPayload, this.requirePayload);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Compresses the payload
|
|
70
|
+
* @param {MqttMessage} message
|
|
71
|
+
* @returns {Promise<MqttMessageOutgoing>}
|
|
72
|
+
*/
|
|
73
|
+
async mqttotPublish(message) {
|
|
74
|
+
this.mqttotDebug(
|
|
75
|
+
`Publishing ${message.payload.byteLength}bytes to topic ${message.topic}`
|
|
76
|
+
);
|
|
77
|
+
return await this.publish({
|
|
78
|
+
topic: message.topic,
|
|
79
|
+
payload: await (0, shared_1.compressDeflate)(message.payload),
|
|
80
|
+
qosLevel: message.qosLevel,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
77
83
|
}
|
|
78
84
|
exports.MQTToTClient = MQTToTClient;
|
|
79
85
|
function mqttotConnectFlow(payload, requirePayload) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
86
|
+
return (success, error) => ({
|
|
87
|
+
start: () => ({
|
|
88
|
+
type: obmqtt_1.PacketType.Connect,
|
|
89
|
+
options: {
|
|
90
|
+
payload,
|
|
91
|
+
keepAlive: 60,
|
|
92
|
+
},
|
|
93
|
+
}),
|
|
94
|
+
accept: obmqtt_1.isConnAck,
|
|
95
|
+
next: (packet) => {
|
|
96
|
+
if (packet.isSuccess) {
|
|
97
|
+
if (packet.payload?.length || !requirePayload) success(packet);
|
|
98
|
+
else
|
|
99
|
+
error(
|
|
100
|
+
new errors_1.EmptyPacketError(
|
|
101
|
+
`CONNACK: no payload (payloadExpected): ${packet.payload}`
|
|
102
|
+
)
|
|
103
|
+
);
|
|
104
|
+
} else
|
|
105
|
+
error(
|
|
106
|
+
new errors_1.ConnectionFailedError(
|
|
107
|
+
`CONNACK returnCode: ${packet.returnCode} errorName: ${packet.errorName}`
|
|
108
|
+
)
|
|
109
|
+
);
|
|
110
|
+
},
|
|
111
|
+
});
|
|
100
112
|
}
|
|
101
|
-
//# sourceMappingURL=mqttot.client.js.map
|
|
113
|
+
//# sourceMappingURL=mqttot.client.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConnectResponsePacket, PacketStream, ConnectReturnCode } from '
|
|
1
|
+
import { ConnectResponsePacket, PacketStream, ConnectReturnCode } from 'abmqtt-dist';
|
|
2
2
|
export declare class MQTToTConnectResponsePacket extends ConnectResponsePacket {
|
|
3
3
|
readonly payload: Buffer;
|
|
4
4
|
constructor(ackFlags: number, returnCode: ConnectReturnCode, payload: Buffer);
|
|
@@ -2,23 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MQTToTConnectResponsePacket = void 0;
|
|
4
4
|
exports.readConnectResponsePacket = readConnectResponsePacket;
|
|
5
|
-
const obmqtt_1 = require("
|
|
5
|
+
const obmqtt_1 = require("abmqtt-dist");
|
|
6
6
|
class MQTToTConnectResponsePacket extends obmqtt_1.ConnectResponsePacket {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
constructor(ackFlags, returnCode, payload) {
|
|
8
|
+
super(ackFlags, returnCode);
|
|
9
|
+
this.payload = payload;
|
|
10
|
+
}
|
|
11
11
|
}
|
|
12
12
|
exports.MQTToTConnectResponsePacket = MQTToTConnectResponsePacket;
|
|
13
13
|
function readConnectResponsePacket(stream, remaining) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
const ack = stream.readByte();
|
|
15
|
+
const returnCode = stream.readByte();
|
|
16
|
+
if (ack > 1) {
|
|
17
|
+
throw new Error("Invalid ack");
|
|
18
|
+
} else if (returnCode > 5) {
|
|
19
|
+
throw new Error("Invalid return code");
|
|
20
|
+
}
|
|
21
|
+
return new MQTToTConnectResponsePacket(
|
|
22
|
+
ack,
|
|
23
|
+
returnCode,
|
|
24
|
+
remaining > 2 ? stream.readStringAsBuffer() : Buffer.alloc(0)
|
|
25
|
+
);
|
|
23
26
|
}
|
|
24
|
-
//# sourceMappingURL=mqttot.connect.response.packet.js.map
|
|
27
|
+
//# sourceMappingURL=mqttot.connect.response.packet.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Topic } from '../../topic';
|
|
2
2
|
import { MQTToTClient } from '../../mqttot';
|
|
3
|
-
import { MqttMessageOutgoing } from '
|
|
3
|
+
import { MqttMessageOutgoing } from 'abmqtt-dist';
|
|
4
4
|
export declare class Commands {
|
|
5
5
|
private client;
|
|
6
6
|
constructor(client: MQTToTClient);
|