@cnhongwei/react-native-mqtt 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +169 -2
- package/README.zh-CN.md +100 -0
- package/ReactNativeMqtt.podspec +28 -0
- package/THIRD_PARTY_NOTICES.md +17 -0
- package/android/build.gradle +70 -0
- package/android/consumer-rules.pro +10 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/cnhongwei/reactnativemqtt/MqttOptionsParser.kt +176 -0
- package/android/src/main/java/com/cnhongwei/reactnativemqtt/MqttSession.kt +1006 -0
- package/android/src/main/java/com/cnhongwei/reactnativemqtt/PahoLogger.java +44 -0
- package/android/src/main/java/com/cnhongwei/reactnativemqtt/PahoMqttTransport.kt +399 -0
- package/android/src/main/java/com/cnhongwei/reactnativemqtt/ReactNativeMqttModule.kt +619 -0
- package/android/src/main/java/com/cnhongwei/reactnativemqtt/ReactNativeMqttPackage.kt +31 -0
- package/ios/ReactNativeMqtt.h +15 -0
- package/ios/ReactNativeMqtt.mm +1184 -0
- package/ios/ReactNativeMqttCocoaTransport.swift +782 -0
- package/ios/ReactNativeMqttConnAckProbe.swift +87 -0
- package/ios/ReactNativeMqttSession.swift +420 -0
- package/lib/module/NativeReactNativeMqtt.js +5 -0
- package/lib/module/NativeReactNativeMqtt.js.map +1 -0
- package/lib/module/client.js +555 -0
- package/lib/module/client.js.map +1 -0
- package/lib/module/errors.js +20 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/helpers.js +116 -0
- package/lib/module/helpers.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/validation.js +306 -0
- package/lib/module/validation.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NativeReactNativeMqtt.d.ts +154 -0
- package/lib/typescript/src/NativeReactNativeMqtt.d.ts.map +1 -0
- package/lib/typescript/src/client.d.ts +3 -0
- package/lib/typescript/src/client.d.ts.map +1 -0
- package/lib/typescript/src/errors.d.ts +18 -0
- package/lib/typescript/src/errors.d.ts.map +1 -0
- package/lib/typescript/src/helpers.d.ts +5 -0
- package/lib/typescript/src/helpers.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +9 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +161 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/validation.d.ts +13 -0
- package/lib/typescript/src/validation.d.ts.map +1 -0
- package/package.json +188 -4
- package/react-native.config.js +1 -0
- package/src/NativeReactNativeMqtt.ts +173 -0
- package/src/client.ts +859 -0
- package/src/errors.ts +51 -0
- package/src/helpers.ts +151 -0
- package/src/index.ts +30 -0
- package/src/types.ts +184 -0
- package/src/validation.ts +735 -0
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NativeReactNativeMqtt from "./NativeReactNativeMqtt.js";
|
|
4
|
+
import { MqttError } from "./errors.js";
|
|
5
|
+
import { decodeBase64, encodeBase64, encodeUtf8 } from "./helpers.js";
|
|
6
|
+
import { normalizeOptions, normalizeSubscribeOptions, toWirePublishRequest, toWireSessionOptions, toWireSubscribeOptions, validateTopicFilter } from "./validation.js";
|
|
7
|
+
const errorCodes = new Set(['ERR_INVALID_OPTIONS', 'ERR_INVALID_PAYLOAD', 'ERR_NATIVE_UNAVAILABLE', 'ERR_CONTRACT_MISMATCH', 'ERR_NOT_CONNECTED', 'ERR_DISPOSED', 'ERR_OPERATION_IN_PROGRESS', 'ERR_OPERATION_SUPERSEDED', 'ERR_CONNECT_TIMEOUT', 'ERR_OPERATION_TIMEOUT', 'ERR_CONNECTION_REFUSED', 'ERR_CONNECTION_LOST', 'ERR_SUBSCRIPTION_CONFLICT', 'ERR_SUBSCRIBE_FAILED', 'ERR_UNSUBSCRIBE_FAILED', 'ERR_PUBLISH_FAILED', 'ERR_TLS', 'ERR_CLEANUP_FAILED', 'ERR_UNKNOWN']);
|
|
8
|
+
function mapError(value, operation) {
|
|
9
|
+
if (value instanceof MqttError) return value;
|
|
10
|
+
const shape = value !== null && typeof value === 'object' ? value : {};
|
|
11
|
+
const code = typeof shape.code === 'string' && errorCodes.has(shape.code) ? shape.code : 'ERR_UNKNOWN';
|
|
12
|
+
const message = typeof shape.message === 'string' ? shape.message : `${operation ?? 'operation'} failed`;
|
|
13
|
+
const userInfo = shape.userInfo;
|
|
14
|
+
const reasonCode = userInfo !== null && userInfo !== undefined && typeof userInfo.reasonCode === 'number' ? userInfo.reasonCode : undefined;
|
|
15
|
+
const reasonString = userInfo !== null && userInfo !== undefined && typeof userInfo.reasonString === 'string' ? userInfo.reasonString : undefined;
|
|
16
|
+
const nativeOperation = userInfo !== null && userInfo !== undefined && typeof userInfo.operation === 'string' ? userInfo.operation : undefined;
|
|
17
|
+
const generation = userInfo !== null && userInfo !== undefined && typeof userInfo.generation === 'number' && Number.isSafeInteger(userInfo.generation) ? userInfo.generation : undefined;
|
|
18
|
+
const outcome = userInfo !== null && userInfo !== undefined && (userInfo.outcome === 'not-sent' || userInfo.outcome === 'rejected' || userInfo.outcome === 'unknown') ? userInfo.outcome : 'unknown';
|
|
19
|
+
return new MqttError(code, message, {
|
|
20
|
+
operation: nativeOperation ?? operation,
|
|
21
|
+
generation,
|
|
22
|
+
reasonCode,
|
|
23
|
+
reasonString,
|
|
24
|
+
outcome
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function snapshotFromWire(value) {
|
|
28
|
+
return {
|
|
29
|
+
...value,
|
|
30
|
+
state: value.state,
|
|
31
|
+
subscriptionsStatus: value.subscriptionsStatus,
|
|
32
|
+
deliveryStatus: value.deliveryStatus,
|
|
33
|
+
lastConnAck: value.lastConnAck === null ? null : connAckFromWire(value.lastConnAck)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function connAckFromWire(value) {
|
|
37
|
+
return {
|
|
38
|
+
sessionPresent: value.sessionPresent,
|
|
39
|
+
assignedClientId: value.assignedClientId,
|
|
40
|
+
reasonCode: value.reasonCode,
|
|
41
|
+
reasonString: value.reasonString,
|
|
42
|
+
userProperties: value.userProperties?.map(pair => ({
|
|
43
|
+
key: pair.key,
|
|
44
|
+
value: pair.value
|
|
45
|
+
}))
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function messageFromWire(value) {
|
|
49
|
+
return {
|
|
50
|
+
instanceId: value.instanceId,
|
|
51
|
+
generation: value.generation,
|
|
52
|
+
topic: value.topic,
|
|
53
|
+
bytes: decodeBase64(value.payloadBase64),
|
|
54
|
+
qos: value.qos,
|
|
55
|
+
retained: value.retained,
|
|
56
|
+
userProperties: value.userProperties?.map(pair => ({
|
|
57
|
+
key: pair.key,
|
|
58
|
+
value: pair.value
|
|
59
|
+
})),
|
|
60
|
+
contentType: value.contentType,
|
|
61
|
+
responseTopic: value.responseTopic,
|
|
62
|
+
correlationData: value.correlationDataBase64 === undefined ? undefined : decodeBase64(value.correlationDataBase64),
|
|
63
|
+
messageExpiryIntervalSeconds: value.messageExpiryIntervalSeconds,
|
|
64
|
+
payloadFormatIndicator: value.payloadFormatIndicator
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function diagnosticFromWire(value) {
|
|
68
|
+
return {
|
|
69
|
+
...value,
|
|
70
|
+
code: value.code
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function randomClientId() {
|
|
74
|
+
const alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
75
|
+
let result = 'rn';
|
|
76
|
+
while (result.length < 23) result += alphabet[Math.floor(Math.random() * alphabet.length)] ?? 'x';
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
export function createMqttClient(input) {
|
|
80
|
+
const options = normalizeOptions(input);
|
|
81
|
+
const instanceId = `mqtt-${randomClientId()}`;
|
|
82
|
+
const clientId = options.clientId === undefined ? randomClientId() : options.clientId;
|
|
83
|
+
const sessionOptions = {
|
|
84
|
+
...options,
|
|
85
|
+
clientId
|
|
86
|
+
};
|
|
87
|
+
let snapshot = {
|
|
88
|
+
instanceId,
|
|
89
|
+
revision: 0,
|
|
90
|
+
generation: 0,
|
|
91
|
+
state: 'idle',
|
|
92
|
+
lastConnAck: null,
|
|
93
|
+
subscriptionsRevision: 0,
|
|
94
|
+
subscriptionsStatus: 'ready',
|
|
95
|
+
deliveryStatus: 'active'
|
|
96
|
+
};
|
|
97
|
+
let openPromise;
|
|
98
|
+
let opened = false;
|
|
99
|
+
let connectPromise;
|
|
100
|
+
let lastConnAck;
|
|
101
|
+
let disconnectPromise;
|
|
102
|
+
let disposePromise;
|
|
103
|
+
let nativeBound = false;
|
|
104
|
+
let nextIntentRevision = snapshot.subscriptionsRevision;
|
|
105
|
+
const stateListeners = new Set();
|
|
106
|
+
const messageListeners = new Set();
|
|
107
|
+
const diagnosticListeners = new Set();
|
|
108
|
+
const nativeListeners = [];
|
|
109
|
+
const ackTimers = new Map();
|
|
110
|
+
const ackRetryTimers = new Map();
|
|
111
|
+
const ackRetryAttempts = new Map();
|
|
112
|
+
const subscriptions = new Map();
|
|
113
|
+
const pendingSubscriptions = new Map();
|
|
114
|
+
const pendingOfflineRemovals = new Map();
|
|
115
|
+
const pendingIntentOperations = new Set();
|
|
116
|
+
const pendingNativeOperations = new Set();
|
|
117
|
+
const emitSnapshot = next => {
|
|
118
|
+
if (next.revision < snapshot.revision) return;
|
|
119
|
+
snapshot = next;
|
|
120
|
+
nextIntentRevision = Math.max(nextIntentRevision, next.subscriptionsRevision);
|
|
121
|
+
for (const listener of [...stateListeners]) {
|
|
122
|
+
try {
|
|
123
|
+
listener(snapshot);
|
|
124
|
+
} catch (error) {
|
|
125
|
+
emitDiagnostic({
|
|
126
|
+
instanceId,
|
|
127
|
+
generation: snapshot.generation,
|
|
128
|
+
code: 'LISTENER_ERROR',
|
|
129
|
+
message: error instanceof Error ? error.message : String(error)
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const emitNativeLifecycleSnapshot = value => {
|
|
135
|
+
const next = snapshotFromWire(value);
|
|
136
|
+
emitSnapshot(next.revision <= snapshot.revision ? {
|
|
137
|
+
...next,
|
|
138
|
+
revision: snapshot.revision + 1
|
|
139
|
+
} : next);
|
|
140
|
+
};
|
|
141
|
+
const emitDiagnostic = diagnostic => {
|
|
142
|
+
for (const listener of [...diagnosticListeners]) {
|
|
143
|
+
try {
|
|
144
|
+
listener(diagnostic);
|
|
145
|
+
} catch {
|
|
146
|
+
/* diagnostic listeners are isolated */
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const batchKey = (streamEpoch, batchId) => `${streamEpoch}:${batchId}`;
|
|
151
|
+
const allocateIntentRevision = () => {
|
|
152
|
+
nextIntentRevision = Math.max(nextIntentRevision, snapshot.subscriptionsRevision) + 1;
|
|
153
|
+
return nextIntentRevision;
|
|
154
|
+
};
|
|
155
|
+
const trackIntentOperation = promise => {
|
|
156
|
+
pendingIntentOperations.add(promise);
|
|
157
|
+
promise.then(() => pendingIntentOperations.delete(promise), () => pendingIntentOperations.delete(promise));
|
|
158
|
+
return promise;
|
|
159
|
+
};
|
|
160
|
+
const trackNativeOperation = promise => {
|
|
161
|
+
pendingNativeOperations.add(promise);
|
|
162
|
+
promise.then(() => pendingNativeOperations.delete(promise), () => pendingNativeOperations.delete(promise));
|
|
163
|
+
return promise;
|
|
164
|
+
};
|
|
165
|
+
const flushOfflineRemovals = () => {
|
|
166
|
+
if (snapshot.state !== 'connected' || pendingOfflineRemovals.size === 0) return;
|
|
167
|
+
const native = bindNative();
|
|
168
|
+
for (const [topicFilter, intentRevision] of [...pendingOfflineRemovals.entries()]) {
|
|
169
|
+
pendingOfflineRemovals.delete(topicFilter);
|
|
170
|
+
const operation = trackIntentOperation(native.removeSubscription(instanceId, topicFilter, intentRevision).catch(error => {
|
|
171
|
+
pendingOfflineRemovals.set(topicFilter, intentRevision);
|
|
172
|
+
throw error;
|
|
173
|
+
}));
|
|
174
|
+
operation.catch(() => undefined);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const acknowledgeBatch = (native, streamEpoch, batchId) => {
|
|
178
|
+
const key = batchKey(streamEpoch, batchId);
|
|
179
|
+
const previous = ackTimers.get(key);
|
|
180
|
+
if (previous !== undefined) clearTimeout(previous);
|
|
181
|
+
const timeout = setTimeout(() => {
|
|
182
|
+
if (!ackTimers.has(key) || snapshot.state === 'closed') return;
|
|
183
|
+
emitSnapshot({
|
|
184
|
+
...snapshot,
|
|
185
|
+
deliveryStatus: 'stalled',
|
|
186
|
+
revision: snapshot.revision + 1
|
|
187
|
+
});
|
|
188
|
+
emitDiagnostic({
|
|
189
|
+
instanceId,
|
|
190
|
+
generation: snapshot.generation,
|
|
191
|
+
code: 'DELIVERY_STALLED',
|
|
192
|
+
message: `Message batch ${key} acknowledgement timed out`
|
|
193
|
+
});
|
|
194
|
+
}, options.delivery?.batchAckTimeoutMs ?? 15000);
|
|
195
|
+
// Install the watchdog before submitting: a synchronously-resolved native
|
|
196
|
+
// promise must still be able to clear the exact timer it owns.
|
|
197
|
+
ackTimers.set(key, timeout);
|
|
198
|
+
const submit = attempt => {
|
|
199
|
+
native.ackMessageBatch(instanceId, streamEpoch, batchId).then(() => {
|
|
200
|
+
ackTimers.delete(key);
|
|
201
|
+
ackRetryAttempts.delete(key);
|
|
202
|
+
ackRetryTimers.delete(key);
|
|
203
|
+
if (snapshot.deliveryStatus === 'stalled') emitSnapshot({
|
|
204
|
+
...snapshot,
|
|
205
|
+
deliveryStatus: 'active',
|
|
206
|
+
revision: snapshot.revision + 1
|
|
207
|
+
});
|
|
208
|
+
}).catch(error => {
|
|
209
|
+
if (attempt === 0 && snapshot.state !== 'closed') {
|
|
210
|
+
ackRetryAttempts.set(key, 1);
|
|
211
|
+
const retry = setTimeout(() => {
|
|
212
|
+
ackRetryTimers.delete(key);
|
|
213
|
+
if (snapshot.state !== 'closed') submit(1);
|
|
214
|
+
}, 0);
|
|
215
|
+
ackRetryTimers.set(key, retry);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
emitDiagnostic({
|
|
219
|
+
instanceId,
|
|
220
|
+
generation: snapshot.generation,
|
|
221
|
+
code: 'DELIVERY_STALLED',
|
|
222
|
+
message: mapError(error, 'ackMessageBatch').message
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
};
|
|
226
|
+
submit(ackRetryAttempts.get(key) ?? 0);
|
|
227
|
+
};
|
|
228
|
+
const nativeOrThrow = () => {
|
|
229
|
+
if (NativeReactNativeMqtt == null) throw new MqttError('ERR_NATIVE_UNAVAILABLE', 'ReactNativeMqtt TurboModule is unavailable; rebuild the app with the native module installed', {
|
|
230
|
+
outcome: 'not-sent'
|
|
231
|
+
});
|
|
232
|
+
return NativeReactNativeMqtt;
|
|
233
|
+
};
|
|
234
|
+
const bindNative = () => {
|
|
235
|
+
const native = nativeOrThrow();
|
|
236
|
+
if (!nativeBound) {
|
|
237
|
+
nativeBound = true;
|
|
238
|
+
nativeListeners.push(native.onSessionSnapshot(value => {
|
|
239
|
+
if (snapshot.state === 'closed' || value.instanceId !== instanceId) return;
|
|
240
|
+
emitSnapshot(snapshotFromWire(value));
|
|
241
|
+
}));
|
|
242
|
+
nativeListeners.push(native.onMessageBatch(batch => {
|
|
243
|
+
if (snapshot.state === 'closed' || batch.instanceId !== instanceId) return;
|
|
244
|
+
// Keep the native in-flight token reserved while stalled. A late or
|
|
245
|
+
// duplicate event must not deliver another batch or release capacity
|
|
246
|
+
// until the original token is acknowledged.
|
|
247
|
+
if (snapshot.deliveryStatus === 'stalled') return;
|
|
248
|
+
try {
|
|
249
|
+
for (const value of batch.messages) {
|
|
250
|
+
if (value.instanceId !== instanceId) continue;
|
|
251
|
+
let message;
|
|
252
|
+
try {
|
|
253
|
+
message = messageFromWire(value);
|
|
254
|
+
} catch (error) {
|
|
255
|
+
emitDiagnostic({
|
|
256
|
+
instanceId,
|
|
257
|
+
generation: snapshot.generation,
|
|
258
|
+
code: 'LISTENER_ERROR',
|
|
259
|
+
message: error instanceof Error ? error.message : String(error)
|
|
260
|
+
});
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
for (const listener of [...messageListeners]) {
|
|
264
|
+
try {
|
|
265
|
+
const result = listener(message);
|
|
266
|
+
if (result !== null && (typeof result === 'object' || typeof result === 'function')) {
|
|
267
|
+
Promise.resolve(result).catch(error => emitDiagnostic({
|
|
268
|
+
instanceId,
|
|
269
|
+
generation: snapshot.generation,
|
|
270
|
+
code: 'LISTENER_ERROR',
|
|
271
|
+
message: error instanceof Error ? error.message : String(error)
|
|
272
|
+
}));
|
|
273
|
+
}
|
|
274
|
+
} catch (error) {
|
|
275
|
+
emitDiagnostic({
|
|
276
|
+
instanceId,
|
|
277
|
+
generation: snapshot.generation,
|
|
278
|
+
code: 'LISTENER_ERROR',
|
|
279
|
+
message: error instanceof Error ? error.message : String(error)
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
} finally {
|
|
285
|
+
acknowledgeBatch(native, batch.streamEpoch, batch.batchId);
|
|
286
|
+
}
|
|
287
|
+
}));
|
|
288
|
+
nativeListeners.push(native.onDiagnostic(value => {
|
|
289
|
+
if (snapshot.state === 'closed' || value.instanceId !== instanceId) return;
|
|
290
|
+
emitDiagnostic(diagnosticFromWire(value));
|
|
291
|
+
}));
|
|
292
|
+
}
|
|
293
|
+
return native;
|
|
294
|
+
};
|
|
295
|
+
const ensureOpen = () => {
|
|
296
|
+
if (disposePromise !== undefined) return Promise.reject(new MqttError('ERR_DISPOSED', 'Client is disposed', {
|
|
297
|
+
outcome: 'not-sent'
|
|
298
|
+
}));
|
|
299
|
+
if (openPromise !== undefined) return openPromise;
|
|
300
|
+
openPromise = Promise.resolve().then(() => bindNative().openSession(instanceId, toWireSessionOptions(sessionOptions))).then(value => {
|
|
301
|
+
opened = true;
|
|
302
|
+
emitNativeLifecycleSnapshot(value);
|
|
303
|
+
}).catch(error => {
|
|
304
|
+
opened = false;
|
|
305
|
+
openPromise = undefined;
|
|
306
|
+
throw mapError(error, 'openSession');
|
|
307
|
+
});
|
|
308
|
+
return openPromise;
|
|
309
|
+
};
|
|
310
|
+
const listener = (set, value) => {
|
|
311
|
+
if (disposePromise !== undefined || snapshot.state === 'closed') return {
|
|
312
|
+
remove: () => undefined
|
|
313
|
+
};
|
|
314
|
+
set.add(value);
|
|
315
|
+
return {
|
|
316
|
+
remove: () => set.delete(value)
|
|
317
|
+
};
|
|
318
|
+
};
|
|
319
|
+
const ensureUsable = () => {
|
|
320
|
+
if (disposePromise !== undefined || snapshot.state === 'closed') throw new MqttError('ERR_DISPOSED', 'Client is disposed', {
|
|
321
|
+
outcome: 'not-sent'
|
|
322
|
+
});
|
|
323
|
+
};
|
|
324
|
+
const client = {
|
|
325
|
+
get instanceId() {
|
|
326
|
+
return instanceId;
|
|
327
|
+
},
|
|
328
|
+
get clientId() {
|
|
329
|
+
return clientId;
|
|
330
|
+
},
|
|
331
|
+
get state() {
|
|
332
|
+
return snapshot.state;
|
|
333
|
+
},
|
|
334
|
+
connect: () => {
|
|
335
|
+
ensureUsable();
|
|
336
|
+
if (snapshot.state === 'disconnecting') return Promise.reject(new MqttError('ERR_OPERATION_IN_PROGRESS', 'Disconnect is still in progress', {
|
|
337
|
+
outcome: 'not-sent'
|
|
338
|
+
}));
|
|
339
|
+
if (snapshot.state === 'connected' && lastConnAck !== undefined) return Promise.resolve(lastConnAck);
|
|
340
|
+
if (connectPromise !== undefined) return connectPromise;
|
|
341
|
+
connectPromise = ensureOpen().then(() => bindNative().connect(instanceId)).then(value => {
|
|
342
|
+
emitNativeLifecycleSnapshot(value.snapshot);
|
|
343
|
+
flushOfflineRemovals();
|
|
344
|
+
lastConnAck = connAckFromWire(value.ack);
|
|
345
|
+
return lastConnAck;
|
|
346
|
+
}).catch(error => {
|
|
347
|
+
connectPromise = undefined;
|
|
348
|
+
throw mapError(error, 'connect');
|
|
349
|
+
});
|
|
350
|
+
return connectPromise;
|
|
351
|
+
},
|
|
352
|
+
disconnect: () => {
|
|
353
|
+
if (snapshot.state === 'closed') return Promise.resolve();
|
|
354
|
+
ensureUsable();
|
|
355
|
+
if (disconnectPromise !== undefined) return disconnectPromise;
|
|
356
|
+
if (snapshot.state === 'idle' || snapshot.state === 'disconnected') {
|
|
357
|
+
// A native disconnect callback may have settled the lifecycle before
|
|
358
|
+
// this call reaches JS. Do not retain the resolved connect promise or
|
|
359
|
+
// a later explicit connect would incorrectly return the old ACK.
|
|
360
|
+
connectPromise = undefined;
|
|
361
|
+
return Promise.resolve();
|
|
362
|
+
}
|
|
363
|
+
emitSnapshot({
|
|
364
|
+
...snapshot,
|
|
365
|
+
state: 'disconnecting',
|
|
366
|
+
revision: snapshot.revision + 1
|
|
367
|
+
});
|
|
368
|
+
disconnectPromise = trackNativeOperation(ensureOpen().then(() => bindNative().disconnect(instanceId)).then(value => {
|
|
369
|
+
emitNativeLifecycleSnapshot(value);
|
|
370
|
+
}).catch(error => {
|
|
371
|
+
throw mapError(error, 'disconnect');
|
|
372
|
+
}).finally(() => {
|
|
373
|
+
disconnectPromise = undefined;
|
|
374
|
+
connectPromise = undefined;
|
|
375
|
+
}));
|
|
376
|
+
return disconnectPromise;
|
|
377
|
+
},
|
|
378
|
+
dispose: () => {
|
|
379
|
+
if (disposePromise !== undefined) return disposePromise;
|
|
380
|
+
if (snapshot.state === 'closed') return Promise.resolve();
|
|
381
|
+
const pendingOperations = [...pendingIntentOperations];
|
|
382
|
+
const pendingNativeOperationsAtDispose = [...pendingNativeOperations];
|
|
383
|
+
disposePromise = (openPromise ?? Promise.resolve()).catch(() => undefined).then(() => Promise.all([...pendingOperations, ...pendingNativeOperationsAtDispose].map(operation => operation.catch(() => undefined)))).then(() => NativeReactNativeMqtt == null ? undefined : NativeReactNativeMqtt.close(instanceId)).then(value => {
|
|
384
|
+
if (value !== undefined) emitNativeLifecycleSnapshot(value);else emitSnapshot({
|
|
385
|
+
...snapshot,
|
|
386
|
+
state: 'closed',
|
|
387
|
+
deliveryStatus: 'closed',
|
|
388
|
+
revision: snapshot.revision + 1
|
|
389
|
+
});
|
|
390
|
+
}).catch(error => {
|
|
391
|
+
throw mapError(error, 'close');
|
|
392
|
+
}).finally(() => {
|
|
393
|
+
for (const timer of ackTimers.values()) clearTimeout(timer);
|
|
394
|
+
ackTimers.clear();
|
|
395
|
+
for (const timer of ackRetryTimers.values()) clearTimeout(timer);
|
|
396
|
+
ackRetryTimers.clear();
|
|
397
|
+
ackRetryAttempts.clear();
|
|
398
|
+
for (const subscription of nativeListeners) {
|
|
399
|
+
if (typeof subscription === 'function') subscription();else subscription.remove();
|
|
400
|
+
}
|
|
401
|
+
nativeListeners.length = 0;
|
|
402
|
+
stateListeners.clear();
|
|
403
|
+
messageListeners.clear();
|
|
404
|
+
diagnosticListeners.clear();
|
|
405
|
+
});
|
|
406
|
+
return disposePromise;
|
|
407
|
+
},
|
|
408
|
+
ready: () => {
|
|
409
|
+
ensureUsable();
|
|
410
|
+
if (snapshot.state !== 'connected') return Promise.reject(new MqttError('ERR_NOT_CONNECTED', 'Client is not connected', {
|
|
411
|
+
outcome: 'not-sent'
|
|
412
|
+
}));
|
|
413
|
+
const targetGeneration = snapshot.generation;
|
|
414
|
+
const targetRevision = Math.max(nextIntentRevision, snapshot.subscriptionsRevision);
|
|
415
|
+
const operations = [...pendingIntentOperations];
|
|
416
|
+
return ensureOpen().then(() => Promise.all(operations)).then(() => bindNative().awaitSubscriptions(instanceId, targetGeneration, targetRevision)).then(value => {
|
|
417
|
+
emitSnapshot(snapshotFromWire(value));
|
|
418
|
+
});
|
|
419
|
+
},
|
|
420
|
+
getSnapshot: () => {
|
|
421
|
+
if (snapshot.state === 'closed' || !opened && openPromise === undefined) return Promise.resolve(snapshot);
|
|
422
|
+
return ensureOpen().then(() => bindNative().getSnapshot(instanceId)).then(value => {
|
|
423
|
+
const next = snapshotFromWire(value);
|
|
424
|
+
emitSnapshot(next);
|
|
425
|
+
return next;
|
|
426
|
+
}).catch(error => {
|
|
427
|
+
throw mapError(error, 'getSnapshot');
|
|
428
|
+
});
|
|
429
|
+
},
|
|
430
|
+
subscribe: (topicFilter, inputOptions) => {
|
|
431
|
+
ensureUsable();
|
|
432
|
+
validateTopicFilter(topicFilter);
|
|
433
|
+
pendingOfflineRemovals.delete(topicFilter);
|
|
434
|
+
const subscribeOptions = normalizeSubscribeOptions(inputOptions, options.protocolVersion ?? 4);
|
|
435
|
+
const existing = subscriptions.get(topicFilter);
|
|
436
|
+
const createHandle = record => {
|
|
437
|
+
record.refs += 1;
|
|
438
|
+
let released = false;
|
|
439
|
+
let releasePromise;
|
|
440
|
+
return {
|
|
441
|
+
topicFilter,
|
|
442
|
+
get qos() {
|
|
443
|
+
return record.qos;
|
|
444
|
+
},
|
|
445
|
+
unsubscribe: async () => {
|
|
446
|
+
if (released) return releasePromise;
|
|
447
|
+
released = true;
|
|
448
|
+
if (record.refs > 0) record.refs -= 1;
|
|
449
|
+
if (record.refs !== 0) return;
|
|
450
|
+
subscriptions.delete(topicFilter);
|
|
451
|
+
const intentRevision = allocateIntentRevision();
|
|
452
|
+
if (snapshot.state !== 'connected') {
|
|
453
|
+
const removal = bindNative().removeSubscription(instanceId, topicFilter, intentRevision).then(() => undefined).catch(error => {
|
|
454
|
+
pendingOfflineRemovals.set(topicFilter, intentRevision);
|
|
455
|
+
released = false;
|
|
456
|
+
record.refs = 1;
|
|
457
|
+
subscriptions.set(topicFilter, record);
|
|
458
|
+
throw error;
|
|
459
|
+
});
|
|
460
|
+
releasePromise = trackIntentOperation(removal).catch(error => {
|
|
461
|
+
throw mapError(error, 'unsubscribe');
|
|
462
|
+
});
|
|
463
|
+
return releasePromise;
|
|
464
|
+
}
|
|
465
|
+
const removal = bindNative().removeSubscription(instanceId, topicFilter, intentRevision).then(() => undefined).catch(error => {
|
|
466
|
+
released = false;
|
|
467
|
+
record.refs = 1;
|
|
468
|
+
subscriptions.set(topicFilter, record);
|
|
469
|
+
throw error;
|
|
470
|
+
});
|
|
471
|
+
releasePromise = trackIntentOperation(removal).catch(error => {
|
|
472
|
+
throw mapError(error, 'unsubscribe');
|
|
473
|
+
});
|
|
474
|
+
return releasePromise;
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
};
|
|
478
|
+
if (existing !== undefined) {
|
|
479
|
+
if (JSON.stringify(existing.options) !== JSON.stringify(subscribeOptions)) return Promise.reject(new MqttError('ERR_SUBSCRIPTION_CONFLICT', 'Subscription options conflict for this filter', {
|
|
480
|
+
outcome: 'not-sent'
|
|
481
|
+
}));
|
|
482
|
+
return Promise.resolve(createHandle(existing));
|
|
483
|
+
}
|
|
484
|
+
const pending = pendingSubscriptions.get(topicFilter);
|
|
485
|
+
if (pending !== undefined) {
|
|
486
|
+
if (JSON.stringify(pending.options) !== JSON.stringify(subscribeOptions)) return Promise.reject(new MqttError('ERR_SUBSCRIPTION_CONFLICT', 'Subscription options conflict for this filter', {
|
|
487
|
+
outcome: 'not-sent'
|
|
488
|
+
}));
|
|
489
|
+
return pending.promise.then(() => {
|
|
490
|
+
const record = subscriptions.get(topicFilter);
|
|
491
|
+
if (record === undefined) throw new MqttError('ERR_UNKNOWN', 'Subscription request lost', {
|
|
492
|
+
outcome: 'unknown'
|
|
493
|
+
});
|
|
494
|
+
return createHandle(record);
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
const intentRevision = allocateIntentRevision();
|
|
498
|
+
const promise = trackIntentOperation(ensureOpen().then(() => bindNative().setSubscription(instanceId, topicFilter, toWireSubscribeOptions(subscribeOptions), intentRevision)).then(result => {
|
|
499
|
+
if (disposePromise !== undefined) throw new MqttError('ERR_DISPOSED', 'Client is disposed', {
|
|
500
|
+
outcome: 'not-sent'
|
|
501
|
+
});
|
|
502
|
+
nextIntentRevision = Math.max(nextIntentRevision, result.intentRevision);
|
|
503
|
+
const record = {
|
|
504
|
+
options: subscribeOptions,
|
|
505
|
+
refs: 0,
|
|
506
|
+
qos: result.grantedQos
|
|
507
|
+
};
|
|
508
|
+
subscriptions.set(topicFilter, record);
|
|
509
|
+
return result.grantedQos;
|
|
510
|
+
}));
|
|
511
|
+
pendingSubscriptions.set(topicFilter, {
|
|
512
|
+
options: subscribeOptions,
|
|
513
|
+
promise
|
|
514
|
+
});
|
|
515
|
+
return promise.then(() => {
|
|
516
|
+
const record = subscriptions.get(topicFilter);
|
|
517
|
+
if (record === undefined) throw new MqttError('ERR_UNKNOWN', 'Subscription request lost', {
|
|
518
|
+
outcome: 'unknown'
|
|
519
|
+
});
|
|
520
|
+
return createHandle(record);
|
|
521
|
+
}).catch(error => {
|
|
522
|
+
throw mapError(error, 'subscribe');
|
|
523
|
+
}).finally(() => {
|
|
524
|
+
if (pendingSubscriptions.get(topicFilter)?.promise === promise) pendingSubscriptions.delete(topicFilter);
|
|
525
|
+
});
|
|
526
|
+
},
|
|
527
|
+
publishText: (topic, text, publishOptions) => {
|
|
528
|
+
ensureUsable();
|
|
529
|
+
const payload = encodeUtf8(text);
|
|
530
|
+
return client.publishBytes(topic, payload, publishOptions);
|
|
531
|
+
},
|
|
532
|
+
publishBytes: (topic, bytes, publishOptions) => {
|
|
533
|
+
ensureUsable();
|
|
534
|
+
const copy = new Uint8Array(bytes);
|
|
535
|
+
return trackNativeOperation(ensureOpen().then(() => bindNative().publish(instanceId, toWirePublishRequest(topic, encodeBase64(copy), publishOptions, options.protocolVersion ?? 4))).catch(error => {
|
|
536
|
+
throw mapError(error, 'publish');
|
|
537
|
+
}));
|
|
538
|
+
},
|
|
539
|
+
publishBase64: (topic, base64, publishOptions) => {
|
|
540
|
+
ensureUsable();
|
|
541
|
+
return trackNativeOperation(ensureOpen().then(() => bindNative().publish(instanceId, toWirePublishRequest(topic, base64, publishOptions, options.protocolVersion ?? 4))).catch(error => {
|
|
542
|
+
throw mapError(error, 'publish');
|
|
543
|
+
}));
|
|
544
|
+
},
|
|
545
|
+
onStateChange: value => listener(stateListeners, value),
|
|
546
|
+
onMessage: value => listener(messageListeners, value),
|
|
547
|
+
onDiagnostic: value => listener(diagnosticListeners, value)
|
|
548
|
+
};
|
|
549
|
+
if (Symbol.asyncDispose !== undefined) Object.defineProperty(client, Symbol.asyncDispose, {
|
|
550
|
+
value: () => client.dispose(),
|
|
551
|
+
enumerable: false
|
|
552
|
+
});
|
|
553
|
+
return client;
|
|
554
|
+
}
|
|
555
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeReactNativeMqtt","MqttError","decodeBase64","encodeBase64","encodeUtf8","normalizeOptions","normalizeSubscribeOptions","toWirePublishRequest","toWireSessionOptions","toWireSubscribeOptions","validateTopicFilter","errorCodes","Set","mapError","value","operation","shape","code","has","message","userInfo","reasonCode","undefined","reasonString","nativeOperation","generation","Number","isSafeInteger","outcome","snapshotFromWire","state","subscriptionsStatus","deliveryStatus","lastConnAck","connAckFromWire","sessionPresent","assignedClientId","userProperties","map","pair","key","messageFromWire","instanceId","topic","bytes","payloadBase64","qos","retained","contentType","responseTopic","correlationData","correlationDataBase64","messageExpiryIntervalSeconds","payloadFormatIndicator","diagnosticFromWire","randomClientId","alphabet","result","length","Math","floor","random","createMqttClient","input","options","clientId","sessionOptions","snapshot","revision","subscriptionsRevision","openPromise","opened","connectPromise","disconnectPromise","disposePromise","nativeBound","nextIntentRevision","stateListeners","messageListeners","diagnosticListeners","nativeListeners","ackTimers","Map","ackRetryTimers","ackRetryAttempts","subscriptions","pendingSubscriptions","pendingOfflineRemovals","pendingIntentOperations","pendingNativeOperations","emitSnapshot","next","max","listener","error","emitDiagnostic","Error","String","emitNativeLifecycleSnapshot","diagnostic","batchKey","streamEpoch","batchId","allocateIntentRevision","trackIntentOperation","promise","add","then","delete","trackNativeOperation","flushOfflineRemovals","size","native","bindNative","topicFilter","intentRevision","entries","removeSubscription","catch","set","acknowledgeBatch","previous","get","clearTimeout","timeout","setTimeout","delivery","batchAckTimeoutMs","submit","attempt","ackMessageBatch","retry","nativeOrThrow","push","onSessionSnapshot","onMessageBatch","batch","messages","Promise","resolve","onDiagnostic","ensureOpen","reject","openSession","remove","ensureUsable","client","connect","ack","disconnect","finally","dispose","pendingOperations","pendingNativeOperationsAtDispose","all","close","timer","values","clear","subscription","ready","targetGeneration","targetRevision","operations","awaitSubscriptions","getSnapshot","subscribe","inputOptions","subscribeOptions","protocolVersion","existing","createHandle","record","refs","released","releasePromise","unsubscribe","removal","JSON","stringify","pending","setSubscription","grantedQos","publishText","text","publishOptions","payload","publishBytes","copy","Uint8Array","publish","publishBase64","base64","onStateChange","onMessage","Symbol","asyncDispose","Object","defineProperty","enumerable"],"sourceRoot":"../../src","sources":["client.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export class MqttError extends Error {
|
|
4
|
+
constructor(code, message, details = {}) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'MqttError';
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.operation = details.operation;
|
|
9
|
+
this.generation = details.generation;
|
|
10
|
+
this.reasonCode = details.reasonCode;
|
|
11
|
+
this.reasonString = details.reasonString;
|
|
12
|
+
this.outcome = details.outcome;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function invalidOptions(message) {
|
|
16
|
+
return new MqttError('ERR_INVALID_OPTIONS', message, {
|
|
17
|
+
outcome: 'not-sent'
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MqttError","Error","constructor","code","message","details","name","operation","generation","reasonCode","reasonString","outcome","invalidOptions"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":";;AAoBA,OAAO,MAAMA,SAAS,SAASC,KAAK,CAAC;EAOnCC,WAAWA,CACTC,IAAmB,EACnBC,OAAe,EACfC,OAMC,GAAG,CAAC,CAAC,EACN;IACA,KAAK,CAACD,OAAO,CAAC;IACd,IAAI,CAACE,IAAI,GAAG,WAAW;IACvB,IAAI,CAACH,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACI,SAAS,GAAGF,OAAO,CAACE,SAAS;IAClC,IAAI,CAACC,UAAU,GAAGH,OAAO,CAACG,UAAU;IACpC,IAAI,CAACC,UAAU,GAAGJ,OAAO,CAACI,UAAU;IACpC,IAAI,CAACC,YAAY,GAAGL,OAAO,CAACK,YAAY;IACxC,IAAI,CAACC,OAAO,GAAGN,OAAO,CAACM,OAAO;EAChC;AACF;AACA,OAAO,SAASC,cAAcA,CAACR,OAAe,EAAa;EACzD,OAAO,IAAIJ,SAAS,CAAC,qBAAqB,EAAEI,OAAO,EAAE;IAAEO,OAAO,EAAE;EAAW,CAAC,CAAC;AAC/E","ignoreList":[]}
|