@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.
Files changed (58) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +169 -2
  3. package/README.zh-CN.md +100 -0
  4. package/ReactNativeMqtt.podspec +28 -0
  5. package/THIRD_PARTY_NOTICES.md +17 -0
  6. package/android/build.gradle +70 -0
  7. package/android/consumer-rules.pro +10 -0
  8. package/android/src/main/AndroidManifest.xml +2 -0
  9. package/android/src/main/java/com/cnhongwei/reactnativemqtt/MqttOptionsParser.kt +176 -0
  10. package/android/src/main/java/com/cnhongwei/reactnativemqtt/MqttSession.kt +1006 -0
  11. package/android/src/main/java/com/cnhongwei/reactnativemqtt/PahoLogger.java +44 -0
  12. package/android/src/main/java/com/cnhongwei/reactnativemqtt/PahoMqttTransport.kt +399 -0
  13. package/android/src/main/java/com/cnhongwei/reactnativemqtt/ReactNativeMqttModule.kt +619 -0
  14. package/android/src/main/java/com/cnhongwei/reactnativemqtt/ReactNativeMqttPackage.kt +31 -0
  15. package/ios/ReactNativeMqtt.h +15 -0
  16. package/ios/ReactNativeMqtt.mm +1184 -0
  17. package/ios/ReactNativeMqttCocoaTransport.swift +782 -0
  18. package/ios/ReactNativeMqttConnAckProbe.swift +87 -0
  19. package/ios/ReactNativeMqttSession.swift +420 -0
  20. package/lib/module/NativeReactNativeMqtt.js +5 -0
  21. package/lib/module/NativeReactNativeMqtt.js.map +1 -0
  22. package/lib/module/client.js +555 -0
  23. package/lib/module/client.js.map +1 -0
  24. package/lib/module/errors.js +20 -0
  25. package/lib/module/errors.js.map +1 -0
  26. package/lib/module/helpers.js +116 -0
  27. package/lib/module/helpers.js.map +1 -0
  28. package/lib/module/index.js +8 -0
  29. package/lib/module/index.js.map +1 -0
  30. package/lib/module/package.json +1 -0
  31. package/lib/module/types.js +2 -0
  32. package/lib/module/types.js.map +1 -0
  33. package/lib/module/validation.js +306 -0
  34. package/lib/module/validation.js.map +1 -0
  35. package/lib/typescript/package.json +1 -0
  36. package/lib/typescript/src/NativeReactNativeMqtt.d.ts +154 -0
  37. package/lib/typescript/src/NativeReactNativeMqtt.d.ts.map +1 -0
  38. package/lib/typescript/src/client.d.ts +3 -0
  39. package/lib/typescript/src/client.d.ts.map +1 -0
  40. package/lib/typescript/src/errors.d.ts +18 -0
  41. package/lib/typescript/src/errors.d.ts.map +1 -0
  42. package/lib/typescript/src/helpers.d.ts +5 -0
  43. package/lib/typescript/src/helpers.d.ts.map +1 -0
  44. package/lib/typescript/src/index.d.ts +9 -0
  45. package/lib/typescript/src/index.d.ts.map +1 -0
  46. package/lib/typescript/src/types.d.ts +161 -0
  47. package/lib/typescript/src/types.d.ts.map +1 -0
  48. package/lib/typescript/src/validation.d.ts +13 -0
  49. package/lib/typescript/src/validation.d.ts.map +1 -0
  50. package/package.json +188 -4
  51. package/react-native.config.js +1 -0
  52. package/src/NativeReactNativeMqtt.ts +173 -0
  53. package/src/client.ts +859 -0
  54. package/src/errors.ts +51 -0
  55. package/src/helpers.ts +151 -0
  56. package/src/index.ts +30 -0
  57. package/src/types.ts +184 -0
  58. 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":[]}