@magicred-1/react-native-lxmf 0.1.0 → 0.1.2
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/android/build.gradle.kts +0 -2
- package/build/LxmfModule.js +8 -10
- package/build/index.js +9 -2
- package/build/useLxmf.js +49 -45
- package/package.json +1 -1
package/android/build.gradle.kts
CHANGED
package/build/LxmfModule.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LxmfModuleNative = exports.LxmfModule = exports.isLxmfNativeAvailable = void 0;
|
|
4
|
+
const expo_modules_core_1 = require("expo-modules-core");
|
|
2
5
|
const MISSING_NATIVE_MESSAGE = "Cannot find native module 'LxmfModule'. Use an Expo development build (not Expo Go) and rebuild native apps after local module changes.";
|
|
3
|
-
const LxmfModuleNative = requireOptionalNativeModule('LxmfModule');
|
|
4
|
-
|
|
6
|
+
const LxmfModuleNative = (0, expo_modules_core_1.requireOptionalNativeModule)('LxmfModule');
|
|
7
|
+
exports.LxmfModuleNative = LxmfModuleNative;
|
|
8
|
+
exports.isLxmfNativeAvailable = !!LxmfModuleNative;
|
|
5
9
|
const throwMissingNative = () => {
|
|
6
10
|
throw new Error(MISSING_NATIVE_MESSAGE);
|
|
7
11
|
};
|
|
@@ -22,10 +26,4 @@ const missingNativeShim = {
|
|
|
22
26
|
blePeerCount: () => throwMissingNative(),
|
|
23
27
|
bleUnpairedRNodeCount: () => throwMissingNative(),
|
|
24
28
|
};
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* The raw native module instance, or null when unavailable.
|
|
28
|
-
* In Expo SDK 50+, NativeModule extends the C++ EventEmitter — call addListener() on it directly.
|
|
29
|
-
* Do NOT use NativeEventEmitter from react-native; it does not wire up to Expo module events.
|
|
30
|
-
*/
|
|
31
|
-
export { LxmfModuleNative };
|
|
29
|
+
exports.LxmfModule = LxmfModuleNative ?? missingNativeShim;
|
package/build/index.js
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LxmfNodeMode = exports.useLxmf = exports.LxmfModuleNative = exports.LxmfModule = void 0;
|
|
4
|
+
var LxmfModule_1 = require("./LxmfModule");
|
|
5
|
+
Object.defineProperty(exports, "LxmfModule", { enumerable: true, get: function () { return LxmfModule_1.LxmfModule; } });
|
|
6
|
+
Object.defineProperty(exports, "LxmfModuleNative", { enumerable: true, get: function () { return LxmfModule_1.LxmfModuleNative; } });
|
|
7
|
+
var useLxmf_1 = require("./useLxmf");
|
|
8
|
+
Object.defineProperty(exports, "useLxmf", { enumerable: true, get: function () { return useLxmf_1.useLxmf; } });
|
|
9
|
+
Object.defineProperty(exports, "LxmfNodeMode", { enumerable: true, get: function () { return useLxmf_1.LxmfNodeMode; } });
|
package/build/useLxmf.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LxmfNodeMode = void 0;
|
|
4
|
+
exports.useLxmf = useLxmf;
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const LxmfModule_1 = require("./LxmfModule");
|
|
3
7
|
/** Node transport mode */
|
|
4
|
-
|
|
8
|
+
var LxmfNodeMode;
|
|
5
9
|
(function (LxmfNodeMode) {
|
|
6
10
|
/** BLE-only mesh (default) */
|
|
7
11
|
LxmfNodeMode[LxmfNodeMode["BleOnly"] = 0] = "BleOnly";
|
|
@@ -11,7 +15,7 @@ export var LxmfNodeMode;
|
|
|
11
15
|
LxmfNodeMode[LxmfNodeMode["TcpServer"] = 2] = "TcpServer";
|
|
12
16
|
/** Connect to standard Reticulum daemon (rnsd) via HDLC-framed TCP */
|
|
13
17
|
LxmfNodeMode[LxmfNodeMode["Reticulum"] = 3] = "Reticulum";
|
|
14
|
-
})(LxmfNodeMode || (LxmfNodeMode = {}));
|
|
18
|
+
})(LxmfNodeMode || (exports.LxmfNodeMode = LxmfNodeMode = {}));
|
|
15
19
|
function parseJson(value, fallback) {
|
|
16
20
|
if (!value)
|
|
17
21
|
return fallback;
|
|
@@ -22,37 +26,37 @@ function parseJson(value, fallback) {
|
|
|
22
26
|
return fallback;
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
|
-
|
|
26
|
-
const [status, setStatus] = useState(null);
|
|
27
|
-
const [beacons, setBeacons] = useState([]);
|
|
28
|
-
const [events, setEvents] = useState([]);
|
|
29
|
-
const [error, setError] = useState(null);
|
|
30
|
-
const [running, setRunning] = useState(false);
|
|
31
|
-
const pushEvent = useCallback((type, payload) => {
|
|
29
|
+
function useLxmf(options = {}) {
|
|
30
|
+
const [status, setStatus] = (0, react_1.useState)(null);
|
|
31
|
+
const [beacons, setBeacons] = (0, react_1.useState)([]);
|
|
32
|
+
const [events, setEvents] = (0, react_1.useState)([]);
|
|
33
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
34
|
+
const [running, setRunning] = (0, react_1.useState)(false);
|
|
35
|
+
const pushEvent = (0, react_1.useCallback)((type, payload) => {
|
|
32
36
|
const event = { ...payload, type };
|
|
33
37
|
setEvents((prev) => [event, ...prev].slice(0, 200));
|
|
34
38
|
return event;
|
|
35
39
|
}, []);
|
|
36
|
-
const syncStatus = useCallback(() => {
|
|
37
|
-
const parsed = parseJson(LxmfModule.getStatus(), null);
|
|
40
|
+
const syncStatus = (0, react_1.useCallback)(() => {
|
|
41
|
+
const parsed = parseJson(LxmfModule_1.LxmfModule.getStatus(), null);
|
|
38
42
|
setStatus(parsed);
|
|
39
43
|
if (parsed && typeof parsed.running === 'boolean') {
|
|
40
44
|
setRunning(parsed.running);
|
|
41
45
|
}
|
|
42
46
|
return parsed;
|
|
43
47
|
}, []);
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
if (!isLxmfNativeAvailable) {
|
|
48
|
+
(0, react_1.useEffect)(() => {
|
|
49
|
+
if (!LxmfModule_1.isLxmfNativeAvailable) {
|
|
46
50
|
setError("Cannot find native module 'LxmfModule'. Run this app in an Expo development build (not Expo Go).");
|
|
47
51
|
return;
|
|
48
52
|
}
|
|
49
53
|
try {
|
|
50
|
-
const initialized = LxmfModule.init(options.dbPath || null);
|
|
54
|
+
const initialized = LxmfModule_1.LxmfModule.init(options.dbPath || null);
|
|
51
55
|
if (!initialized) {
|
|
52
56
|
setError('Failed to initialize LXMF module');
|
|
53
57
|
return;
|
|
54
58
|
}
|
|
55
|
-
const alreadyRunning = LxmfModule.isRunning();
|
|
59
|
+
const alreadyRunning = LxmfModule_1.LxmfModule.isRunning();
|
|
56
60
|
setRunning(alreadyRunning);
|
|
57
61
|
if (alreadyRunning) {
|
|
58
62
|
syncStatus();
|
|
@@ -63,11 +67,11 @@ export function useLxmf(options = {}) {
|
|
|
63
67
|
setError(e?.message ?? 'Initialization failed');
|
|
64
68
|
}
|
|
65
69
|
}, [options.dbPath, syncStatus]);
|
|
66
|
-
useEffect(() => {
|
|
67
|
-
if (!isLxmfNativeAvailable || !LxmfModuleNative) {
|
|
70
|
+
(0, react_1.useEffect)(() => {
|
|
71
|
+
if (!LxmfModule_1.isLxmfNativeAvailable || !LxmfModule_1.LxmfModuleNative) {
|
|
68
72
|
return;
|
|
69
73
|
}
|
|
70
|
-
const mod = LxmfModuleNative;
|
|
74
|
+
const mod = LxmfModule_1.LxmfModuleNative;
|
|
71
75
|
const subscriptions = [
|
|
72
76
|
mod.addListener('onStatusChanged', (event) => {
|
|
73
77
|
pushEvent('statusChanged', event);
|
|
@@ -84,7 +88,7 @@ export function useLxmf(options = {}) {
|
|
|
84
88
|
}),
|
|
85
89
|
mod.addListener('onBeaconDiscovered', (event) => {
|
|
86
90
|
pushEvent('beaconDiscovered', event);
|
|
87
|
-
const latestBeacons = parseJson(LxmfModule.getBeacons(), []);
|
|
91
|
+
const latestBeacons = parseJson(LxmfModule_1.LxmfModule.getBeacons(), []);
|
|
88
92
|
setBeacons(latestBeacons);
|
|
89
93
|
}),
|
|
90
94
|
mod.addListener('onMessageReceived', (event) => {
|
|
@@ -108,9 +112,9 @@ export function useLxmf(options = {}) {
|
|
|
108
112
|
subscriptions.forEach((sub) => sub.remove());
|
|
109
113
|
};
|
|
110
114
|
}, [options.logLevel, pushEvent, syncStatus]);
|
|
111
|
-
const start = useCallback(async (overrides) => {
|
|
115
|
+
const start = (0, react_1.useCallback)(async (overrides) => {
|
|
112
116
|
try {
|
|
113
|
-
if (!isLxmfNativeAvailable) {
|
|
117
|
+
if (!LxmfModule_1.isLxmfNativeAvailable) {
|
|
114
118
|
setError("Cannot find native module 'LxmfModule'. Run this app in an Expo development build (not Expo Go).");
|
|
115
119
|
return false;
|
|
116
120
|
}
|
|
@@ -129,7 +133,7 @@ export function useLxmf(options = {}) {
|
|
|
129
133
|
setError(`Mode ${mode} requires at least one TCP interface.`);
|
|
130
134
|
return false;
|
|
131
135
|
}
|
|
132
|
-
await LxmfModule.start(resolvedIdentityHex, resolvedLxmfAddressHex, mode, announceMs, bleMtu, tcpInterfaces, displayName);
|
|
136
|
+
await LxmfModule_1.LxmfModule.start(resolvedIdentityHex, resolvedLxmfAddressHex, mode, announceMs, bleMtu, tcpInterfaces, displayName);
|
|
133
137
|
setRunning(true);
|
|
134
138
|
syncStatus();
|
|
135
139
|
setError(null);
|
|
@@ -149,7 +153,7 @@ export function useLxmf(options = {}) {
|
|
|
149
153
|
options.displayName,
|
|
150
154
|
syncStatus,
|
|
151
155
|
]);
|
|
152
|
-
useEffect(() => {
|
|
156
|
+
(0, react_1.useEffect)(() => {
|
|
153
157
|
if (!options.autoStart || running)
|
|
154
158
|
return;
|
|
155
159
|
if (!options.identityHex || !options.lxmfAddressHex)
|
|
@@ -158,9 +162,9 @@ export function useLxmf(options = {}) {
|
|
|
158
162
|
// start() already sets error state on failure
|
|
159
163
|
});
|
|
160
164
|
}, [options.autoStart, options.identityHex, options.lxmfAddressHex, running, start]);
|
|
161
|
-
const stop = useCallback(async () => {
|
|
165
|
+
const stop = (0, react_1.useCallback)(async () => {
|
|
162
166
|
try {
|
|
163
|
-
await LxmfModule.stop();
|
|
167
|
+
await LxmfModule_1.LxmfModule.stop();
|
|
164
168
|
setRunning(false);
|
|
165
169
|
setStatus(null);
|
|
166
170
|
setError(null);
|
|
@@ -169,25 +173,25 @@ export function useLxmf(options = {}) {
|
|
|
169
173
|
setError(e?.message ?? 'Failed to stop');
|
|
170
174
|
}
|
|
171
175
|
}, []);
|
|
172
|
-
const send = useCallback(async (destHex, bodyBase64) => {
|
|
176
|
+
const send = (0, react_1.useCallback)(async (destHex, bodyBase64) => {
|
|
173
177
|
try {
|
|
174
|
-
return await LxmfModule.send(destHex, bodyBase64);
|
|
178
|
+
return await LxmfModule_1.LxmfModule.send(destHex, bodyBase64);
|
|
175
179
|
}
|
|
176
180
|
catch (e) {
|
|
177
181
|
setError(e.message);
|
|
178
182
|
return -1;
|
|
179
183
|
}
|
|
180
184
|
}, []);
|
|
181
|
-
const broadcast = useCallback(async (destsHex, bodyBase64) => {
|
|
185
|
+
const broadcast = (0, react_1.useCallback)(async (destsHex, bodyBase64) => {
|
|
182
186
|
try {
|
|
183
|
-
return await LxmfModule.broadcast(destsHex, bodyBase64);
|
|
187
|
+
return await LxmfModule_1.LxmfModule.broadcast(destsHex, bodyBase64);
|
|
184
188
|
}
|
|
185
189
|
catch (e) {
|
|
186
190
|
setError(e.message);
|
|
187
191
|
return -1;
|
|
188
192
|
}
|
|
189
193
|
}, []);
|
|
190
|
-
const getStatus = useCallback(() => {
|
|
194
|
+
const getStatus = (0, react_1.useCallback)(() => {
|
|
191
195
|
try {
|
|
192
196
|
return syncStatus();
|
|
193
197
|
}
|
|
@@ -196,9 +200,9 @@ export function useLxmf(options = {}) {
|
|
|
196
200
|
return null;
|
|
197
201
|
}
|
|
198
202
|
}, [syncStatus]);
|
|
199
|
-
const getBeacons = useCallback(() => {
|
|
203
|
+
const getBeacons = (0, react_1.useCallback)(() => {
|
|
200
204
|
try {
|
|
201
|
-
const parsed = parseJson(LxmfModule.getBeacons(), []);
|
|
205
|
+
const parsed = parseJson(LxmfModule_1.LxmfModule.getBeacons(), []);
|
|
202
206
|
setBeacons(parsed);
|
|
203
207
|
return parsed;
|
|
204
208
|
}
|
|
@@ -207,26 +211,26 @@ export function useLxmf(options = {}) {
|
|
|
207
211
|
return [];
|
|
208
212
|
}
|
|
209
213
|
}, []);
|
|
210
|
-
const fetchMessages = useCallback((limit = 50) => {
|
|
214
|
+
const fetchMessages = (0, react_1.useCallback)((limit = 50) => {
|
|
211
215
|
try {
|
|
212
|
-
return parseJson(LxmfModule.fetchMessages(limit), []);
|
|
216
|
+
return parseJson(LxmfModule_1.LxmfModule.fetchMessages(limit), []);
|
|
213
217
|
}
|
|
214
218
|
catch (e) {
|
|
215
219
|
setError(`Failed to parse message payload: ${e?.message ?? 'unknown error'}`);
|
|
216
220
|
return [];
|
|
217
221
|
}
|
|
218
222
|
}, []);
|
|
219
|
-
const setLogLevel = useCallback((level) => {
|
|
220
|
-
return LxmfModule.setLogLevel(level);
|
|
223
|
+
const setLogLevel = (0, react_1.useCallback)((level) => {
|
|
224
|
+
return LxmfModule_1.LxmfModule.setLogLevel(level);
|
|
221
225
|
}, []);
|
|
222
|
-
const startBLE = useCallback(() => {
|
|
223
|
-
LxmfModule.startBLE();
|
|
226
|
+
const startBLE = (0, react_1.useCallback)(() => {
|
|
227
|
+
LxmfModule_1.LxmfModule.startBLE();
|
|
224
228
|
}, []);
|
|
225
|
-
const stopBLE = useCallback(() => {
|
|
226
|
-
LxmfModule.stopBLE();
|
|
229
|
+
const stopBLE = (0, react_1.useCallback)(() => {
|
|
230
|
+
LxmfModule_1.LxmfModule.stopBLE();
|
|
227
231
|
}, []);
|
|
228
|
-
const bleUnpairedRNodeCount = useCallback(() => {
|
|
229
|
-
return LxmfModule.bleUnpairedRNodeCount();
|
|
232
|
+
const bleUnpairedRNodeCount = (0, react_1.useCallback)(() => {
|
|
233
|
+
return LxmfModule_1.LxmfModule.bleUnpairedRNodeCount();
|
|
230
234
|
}, []);
|
|
231
235
|
return {
|
|
232
236
|
// State
|
|
@@ -235,7 +239,7 @@ export function useLxmf(options = {}) {
|
|
|
235
239
|
events,
|
|
236
240
|
error,
|
|
237
241
|
isRunning: running,
|
|
238
|
-
isNativeAvailable: isLxmfNativeAvailable,
|
|
242
|
+
isNativeAvailable: LxmfModule_1.isLxmfNativeAvailable,
|
|
239
243
|
// Methods
|
|
240
244
|
start,
|
|
241
245
|
stop,
|