@matter/react-native 0.16.0-alpha.0-20250810-5c91a95d2 → 0.16.0-alpha.0-20250812-285b75d83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ble/ReactNativeBleChannel.d.ts.map +1 -1
- package/dist/cjs/ble/ReactNativeBleChannel.js +3 -2
- package/dist/cjs/ble/ReactNativeBleChannel.js.map +1 -1
- package/dist/cjs/ble/ReactNativeBleClient.d.ts.map +1 -1
- package/dist/cjs/ble/ReactNativeBleClient.js +27 -17
- package/dist/cjs/ble/ReactNativeBleClient.js.map +1 -1
- package/dist/cjs/crypto/ReactNativeCrypto.d.ts +21 -8
- package/dist/cjs/crypto/ReactNativeCrypto.d.ts.map +1 -1
- package/dist/cjs/crypto/ReactNativeCrypto.js +58 -56
- package/dist/cjs/crypto/ReactNativeCrypto.js.map +2 -2
- package/dist/cjs/net/NetworkReactNative.d.ts.map +1 -1
- package/dist/cjs/net/NetworkReactNative.js +0 -2
- package/dist/cjs/net/NetworkReactNative.js.map +1 -1
- package/dist/cjs/net/UdpChannelReactNative.d.ts +1 -1
- package/dist/cjs/net/UdpChannelReactNative.d.ts.map +1 -1
- package/dist/cjs/net/UdpChannelReactNative.js +6 -3
- package/dist/cjs/net/UdpChannelReactNative.js.map +1 -1
- package/dist/esm/ble/ReactNativeBleChannel.d.ts.map +1 -1
- package/dist/esm/ble/ReactNativeBleChannel.js +3 -2
- package/dist/esm/ble/ReactNativeBleChannel.js.map +1 -1
- package/dist/esm/ble/ReactNativeBleClient.d.ts.map +1 -1
- package/dist/esm/ble/ReactNativeBleClient.js +27 -17
- package/dist/esm/ble/ReactNativeBleClient.js.map +1 -1
- package/dist/esm/crypto/ReactNativeCrypto.d.ts +21 -8
- package/dist/esm/crypto/ReactNativeCrypto.d.ts.map +1 -1
- package/dist/esm/crypto/ReactNativeCrypto.js +62 -58
- package/dist/esm/crypto/ReactNativeCrypto.js.map +1 -1
- package/dist/esm/net/NetworkReactNative.d.ts.map +1 -1
- package/dist/esm/net/NetworkReactNative.js +0 -2
- package/dist/esm/net/NetworkReactNative.js.map +1 -1
- package/dist/esm/net/UdpChannelReactNative.d.ts +1 -1
- package/dist/esm/net/UdpChannelReactNative.d.ts.map +1 -1
- package/dist/esm/net/UdpChannelReactNative.js +6 -3
- package/dist/esm/net/UdpChannelReactNative.js.map +1 -1
- package/package.json +6 -7
- package/src/ble/ReactNativeBleChannel.ts +3 -2
- package/src/ble/ReactNativeBleClient.ts +27 -19
- package/src/crypto/ReactNativeCrypto.ts +108 -106
- package/src/net/NetworkReactNative.ts +3 -10
- package/src/net/UdpChannelReactNative.ts +16 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ble/ReactNativeBleClient.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,OAAO,YAAY,QAAQ,mBAAmB;AACvD,SAAS,+BAA+B;AACxC,SAAS,UAAU,cAAc,YAAY,SAAS,sBAA8B;AAEpF,MAAM,SAAS,OAAO,IAAI,sBAAsB;AAEzC,MAAM,mCAAmC,YAAY;AAAC;AACtD,MAAM,kCAAkC,YAAY;AAAC;AAErD,MAAM,qBAAqB;AAAA,EACb,aAAa,IAAI,WAAW;AAAA,EAC5B,wBAAwB,oBAAI,IAAmE;AAAA,EACxG,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW,eAAe;AAAA,EAC1B;AAAA,EAER,cAAc;AAEV,UAAM,eAAe,KAAK,WAAW,cAAc,WAAS;AACxD,WAAK,WAAW;AAChB,aAAO,MAAM,wBAAwB,KAAK,EAAE;AAC5C,cAAQ,OAAO;AAAA,QACX,KAAK,eAAe;AAChB,eAAK,WAAW,OAAO,EAAE,MAAM,WAAS;AACpC,yBAAa,OAAO;AACpB,gBAAI,iBAAiB,YAAY,MAAM,cAAc,aAAa,uBAAuB;AACrF,oBAAM,IAAI,2BAA2B,2BAA2B;AAAA,YACpE;AACA,kBAAM;AAAA,UACV,CAAC;AACD;AAAA,QACJ,KAAK,eAAe;AAChB,uBAAa,OAAO;AACpB,cAAI,KAAK,YAAY;AACjB,iBAAK,KAAK,cAAc;AAAA,UAC5B;AACA;AAAA,QACJ,KAAK,eAAe;AAChB,uBAAa,OAAO;AACpB,gBAAM,IAAI,2BAA2B,2BAA2B;AAAA,QACpE,KAAK,eAAe;AAChB,uBAAa,OAAO;AACpB,gBAAM,IAAI,0BAA0B,0BAA0B;AAAA,QAClE;AACI,iBAAO,MAAM,wBAAwB,KAAK;AAC1C,uBAAa,OAAO;AACpB,eAAK,KAAK,aAAa;AAAA,MAC/B;AAAA,IACJ,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["error"]
|
|
6
6
|
}
|
|
@@ -3,16 +3,29 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import { NodeJsCrypto } from "#nodejs";
|
|
6
|
+
import { PrivateKey, PublicKey, StandardCrypto } from "#general";
|
|
8
7
|
/**
|
|
9
|
-
* Crypto implementation for React Native
|
|
8
|
+
* Crypto implementation for React Native.
|
|
10
9
|
*/
|
|
11
|
-
export declare class ReactNativeCrypto extends
|
|
10
|
+
export declare class ReactNativeCrypto extends StandardCrypto {
|
|
12
11
|
implementationName: string;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
static provider(): ReactNativeCrypto;
|
|
13
|
+
/**
|
|
14
|
+
* Quick Crypto doesn't currently support {@link SubtleCrypto#deriveBits}.
|
|
15
|
+
*/
|
|
16
|
+
createHkdfKey(secret: Uint8Array, salt: Uint8Array, info: Uint8Array, length?: number): Promise<Uint8Array<ArrayBuffer>>;
|
|
17
|
+
/**
|
|
18
|
+
* Quick Crypto apparently appends a "." to the base64 encoded properties. I'm not aware of a legitimate reason for
|
|
19
|
+
* this, seems likely just a bug. Regardless it trips us off so strip off.
|
|
20
|
+
*/
|
|
21
|
+
generateJwk(): Promise<JsonWebKey>;
|
|
22
|
+
/**
|
|
23
|
+
* See comment on {@link createHkdfKey}.
|
|
24
|
+
*/
|
|
25
|
+
generateDhSecret(key: PrivateKey, peerKey: PublicKey): Promise<Uint8Array<ArrayBufferLike>>;
|
|
26
|
+
/**
|
|
27
|
+
* Quick Crypto doesn't support import of raw keys so convert to JWK prior to import.
|
|
28
|
+
*/
|
|
29
|
+
protected importKey(format: KeyFormat, keyData: JsonWebKey | BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;
|
|
17
30
|
}
|
|
18
31
|
//# sourceMappingURL=ReactNativeCrypto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactNativeCrypto.d.ts","sourceRoot":"","sources":["../../../src/crypto/ReactNativeCrypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"ReactNativeCrypto.d.ts","sourceRoot":"","sources":["../../../src/crypto/ReactNativeCrypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAMH,UAAU,EACV,SAAS,EACT,cAAc,EAEjB,MAAM,UAAU,CAAC;AAclB;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;IACxC,kBAAkB,SAAuB;WAElC,QAAQ;IAIxB;;OAEG;IACY,aAAa,CACxB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,MAAoC;IAyChD;;;OAGG;IACY,WAAW;IAY1B;;OAEG;IACY,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;IAInE;;OAEG;cACgB,SAAS,CACxB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,UAAU,GAAG,YAAY,EAClC,SAAS,EAAE,mBAAmB,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,eAAe,EAC/G,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC;CAQzC"}
|
|
@@ -3,74 +3,78 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { install } from "react-native-quick-crypto";
|
|
7
|
-
install();
|
|
8
6
|
import {
|
|
7
|
+
Bytes,
|
|
9
8
|
Crypto,
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
CRYPTO_HASH_LEN_BYTES,
|
|
10
|
+
CRYPTO_SYMMETRIC_KEY_LENGTH,
|
|
12
11
|
Environment,
|
|
12
|
+
PrivateKey,
|
|
13
13
|
StandardCrypto
|
|
14
14
|
} from "#general";
|
|
15
|
-
import {
|
|
16
|
-
import
|
|
17
|
-
crypto
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
T.set(info, start);
|
|
26
|
-
T[start + info.byteLength] = c;
|
|
27
|
-
T.set(
|
|
28
|
-
crypto.createHmac(digest, prk).update(T.subarray(prev, start + info.byteLength + 1)).digest(),
|
|
29
|
-
start
|
|
30
|
-
);
|
|
31
|
-
prev = start;
|
|
32
|
-
start += hashlen;
|
|
15
|
+
import { Buffer } from "@craftzdog/react-native-buffer";
|
|
16
|
+
import QuickCrypto from "react-native-quick-crypto";
|
|
17
|
+
const crypto = QuickCrypto;
|
|
18
|
+
if (!("Buffer" in globalThis)) {
|
|
19
|
+
globalThis.Buffer = Buffer;
|
|
20
|
+
}
|
|
21
|
+
class ReactNativeCrypto extends StandardCrypto {
|
|
22
|
+
implementationName = "ReactNativeCrypto";
|
|
23
|
+
static provider() {
|
|
24
|
+
return new ReactNativeCrypto();
|
|
33
25
|
}
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Quick Crypto doesn't currently support {@link SubtleCrypto#deriveBits}.
|
|
28
|
+
*/
|
|
29
|
+
async createHkdfKey(secret, salt, info, length = CRYPTO_SYMMETRIC_KEY_LENGTH) {
|
|
30
|
+
const prk = crypto.createHmac("SHA-256", salt.byteLength ? salt : new Uint8Array(CRYPTO_HASH_LEN_BYTES)).update(secret).digest();
|
|
31
|
+
const N = Math.ceil(length / CRYPTO_HASH_LEN_BYTES);
|
|
32
|
+
const T = new Uint8Array(CRYPTO_HASH_LEN_BYTES * N + info.byteLength + 1);
|
|
33
|
+
let prev = 0;
|
|
34
|
+
let start = 0;
|
|
35
|
+
for (let c = 1; c <= N; c++) {
|
|
36
|
+
T.set(info, start);
|
|
37
|
+
T[start + info.byteLength] = c;
|
|
38
|
+
T.set(
|
|
39
|
+
crypto.createHmac("SHA-256", prk).update(T.subarray(prev, start + info.byteLength + 1)).digest(),
|
|
40
|
+
start
|
|
41
|
+
);
|
|
42
|
+
prev = start;
|
|
43
|
+
start += CRYPTO_HASH_LEN_BYTES;
|
|
44
|
+
}
|
|
45
|
+
return T.slice(0, length);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Quick Crypto apparently appends a "." to the base64 encoded properties. I'm not aware of a legitimate reason for
|
|
49
|
+
* this, seems likely just a bug. Regardless it trips us off so strip off.
|
|
50
|
+
*/
|
|
51
|
+
async generateJwk() {
|
|
52
|
+
const key = await super.generateJwk();
|
|
53
|
+
for (const prop of ["d", "x", "y"]) {
|
|
54
|
+
if (key[prop]?.endsWith(".")) {
|
|
55
|
+
key[prop] = key[prop].slice(0, key[prop].length - 1);
|
|
56
|
+
}
|
|
44
57
|
}
|
|
45
|
-
return
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
);
|
|
58
|
+
return key;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* See comment on {@link createHkdfKey}.
|
|
62
|
+
*/
|
|
63
|
+
async generateDhSecret(key, peerKey) {
|
|
64
|
+
return key.sharedSecretFor(peerKey);
|
|
53
65
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
},
|
|
64
|
-
signature
|
|
65
|
-
);
|
|
66
|
-
if (!success) throw new CryptoVerifyError("Signature verification failed");
|
|
66
|
+
/**
|
|
67
|
+
* Quick Crypto doesn't support import of raw keys so convert to JWK prior to import.
|
|
68
|
+
*/
|
|
69
|
+
importKey(format, keyData, algorithm, extractable, keyUsages) {
|
|
70
|
+
if (format === "raw") {
|
|
71
|
+
format = "jwk";
|
|
72
|
+
keyData = PrivateKey(Bytes.of(keyData));
|
|
73
|
+
}
|
|
74
|
+
return super.importKey(format, keyData, algorithm, extractable, keyUsages);
|
|
67
75
|
}
|
|
68
|
-
// Quick crypto does not support AES-CCM. Install the JS version to compensate
|
|
69
|
-
// TODO - remove this once we have proper feature detection to configure crypto
|
|
70
|
-
encrypt = StandardCrypto.prototype.encrypt;
|
|
71
|
-
decrypt = StandardCrypto.prototype.decrypt;
|
|
72
76
|
}
|
|
73
|
-
Environment.default.set(Crypto, new ReactNativeCrypto());
|
|
77
|
+
Environment.default.set(Crypto, new ReactNativeCrypto(crypto));
|
|
74
78
|
export {
|
|
75
79
|
ReactNativeCrypto
|
|
76
80
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/crypto/ReactNativeCrypto.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OAEG;AACP,SAAS,cAAc;AACvB,OAAO,iBAAiB;AAIxB,MAAM,SAAS;AAIf,IAAI,EAAE,YAAY,aAAa;AAC3B,EAAC,WAAoD,SAAS;AAClE;AAKO,MAAM,0BAA0B,eAAe;AAAA,EACzC,qBAAqB;AAAA,EAE9B,OAAgB,WAAW;AACvB,WAAO,IAAI,kBAAkB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAe,cACX,QACA,MACA,MACA,SAAiB,6BACnB;AACE,UAAM,MAAM,OACP,WAAW,WAAW,KAAK,aAAa,OAAO,IAAI,WAAW,qBAAqB,CAAC,EACpF,OAAO,MAAM,EACb,OAAO;AASZ,UAAM,IAAI,KAAK,KAAK,SAAS,qBAAqB;AAIlD,UAAM,IAAI,IAAI,WAAW,wBAAwB,IAAI,KAAK,aAAa,CAAC;AACxE,QAAI,OAAO;AACX,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AACzB,QAAE,IAAI,MAAM,KAAK;AACjB,QAAE,QAAQ,KAAK,UAAU,IAAI;AAE7B,QAAE;AAAA,QACE,OACK,WAAW,WAAW,GAAG,EACzB,OAAO,EAAE,SAAS,MAAM,QAAQ,KAAK,aAAa,CAAC,CAAC,EACpD,OAAO;AAAA,QACZ;AAAA,MACJ;AAEA,aAAO;AACP,eAAS;AAAA,IACb;AAGA,WAAO,EAAE,MAAM,GAAG,MAAM;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAe,cAAc;AACzB,UAAM,MAAM,MAAM,MAAM,YAAY;AAEpC,eAAW,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAY;AACzC,UAAI,IAAI,IAAI,GAAG,SAAS,GAAG,GAAG;AAC1B,YAAI,IAAI,IAAI,IAAI,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,EAAE,SAAS,CAAC;AAAA,MACvD;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAe,iBAAiB,KAAiB,SAAoB;AACjE,WAAO,IAAI,gBAAgB,OAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKmB,UACf,QACA,SACA,WACA,aACA,WACF;AACE,QAAI,WAAW,OAAO;AAClB,eAAS;AACT,gBAAU,WAAW,MAAM,GAAG,OAAuB,CAAC;AAAA,IAC1D;AACA,WAAO,MAAM,UAAU,QAAQ,SAAS,WAAW,aAAa,SAAS;AAAA,EAC7E;AACJ;AAEA,YAAY,QAAQ,IAAI,QAAQ,IAAI,kBAAkB,MAA8B,CAAC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkReactNative.d.ts","sourceRoot":"","sources":["../../../src/net/NetworkReactNative.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NetworkReactNative.d.ts","sourceRoot":"","sources":["../../../src/net/NetworkReactNative.ts"],"names":[],"mappings":"AAqBA,OAAO,EAKH,OAAO,EAEP,gBAAgB,EAChB,uBAAuB,EAEvB,UAAU,EACV,iBAAiB,EACpB,MAAM,UAAU,CAAC;AAiClB,qBAAa,kBAAmB,SAAQ,OAAO;WAC9B,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;WAW5E,gCAAgC,CACzC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,EAAE,OAAO,GACd,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAwBlC,MAAM,CAAC,oBAAoB,CAAC,EAAE,EAAE,MAAM;IAMtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAInC;IAEa,KAAK;mBAIC,+BAA+B;IAwBpD;;;;;;OAMG;IACG,gBAAgB,CAAC,aAAa,GAAE,gBAAgB,EAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAmBrF,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAQzE,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;CAG7E"}
|
|
@@ -10,8 +10,6 @@ dgram.createSocket = (...args) => {
|
|
|
10
10
|
const socket = rnDGramCreateSocket(...args);
|
|
11
11
|
socket.setMulticastInterface = () => {
|
|
12
12
|
};
|
|
13
|
-
const originalSend = socket.send;
|
|
14
|
-
socket.send = (buffer, port, address, callback) => originalSend(buffer, 0, buffer.length, port, address, callback);
|
|
15
13
|
return socket;
|
|
16
14
|
};
|
|
17
15
|
import {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/net/NetworkReactNative.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,OAAO,WAAW;AAGlB,OAAO,QAAQ;AAGf,MAAM,sBAAsB,MAAM;AAGlC,MAAM,eAAe,IAAI,SAAgB;AACrC,QAAM,SAAS,oBAAoB,GAAG,IAAI;AAC1C,SAAO,wBAAwB,MAAM;AAAA,EAAC;AAEtC,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["networkInterfaces", "netInterface"]
|
|
6
6
|
}
|
|
@@ -14,7 +14,7 @@ interface Socket {
|
|
|
14
14
|
on(event: "error", listener: (error: Error) => void): void;
|
|
15
15
|
removeListener(event: "message", listener: (msg: Uint8Array, rinfo: RemoteInfo) => void): void;
|
|
16
16
|
removeListener(event: "error", listener: (error: Error) => void): void;
|
|
17
|
-
send(msg: Uint8Array, port: number, address: string, callback: (error: Error | null) => void): void;
|
|
17
|
+
send(msg: Uint8Array, offset: number, length: number, port: number, address: string, callback: (error: Error | null) => void): void;
|
|
18
18
|
close(): void;
|
|
19
19
|
address(): {
|
|
20
20
|
address: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UdpChannelReactNative.d.ts","sourceRoot":"","sources":["../../../src/net/UdpChannelReactNative.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,WAAW,EASX,UAAU,EACV,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"UdpChannelReactNative.d.ts","sourceRoot":"","sources":["../../../src/net/UdpChannelReactNative.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,WAAW,EASX,UAAU,EACV,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAQlB,UAAU,UAAU;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAoBD,UAAU,MAAM;IACZ,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3E,cAAc,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5E,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IACnF,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3D,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/F,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IACvE,IAAI,CACA,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GACxC,IAAI,CAAC;IACR,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAmCD,qBAAa,qBAAsB,YAAW,UAAU;;WAKvC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,iBAAiB;IAmC9F,QAAQ,CAAC,cAAc,SAAwB;gBAEnC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAMhE,aAAa,CAAC,iBAAiB,EAAE,MAAM;IAkBvC,cAAc,CAAC,iBAAiB,EAAE,MAAM;IAkB9C,MAAM,CACF,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI;;;IAiB3G,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAYjD,KAAK;IAQX,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM;CAe/C"}
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
NoAddressAvailableError,
|
|
16
16
|
repackErrorAs
|
|
17
17
|
} from "#general";
|
|
18
|
+
import { Platform } from "react-native";
|
|
18
19
|
import { NetworkReactNative } from "./NetworkReactNative.js";
|
|
19
20
|
const logger = Logger.get("UdpChannelNode");
|
|
20
21
|
function createDgramSocket(host, port, options) {
|
|
@@ -58,7 +59,9 @@ class UdpChannelReactNative {
|
|
|
58
59
|
socketOptions.ipv6Only = true;
|
|
59
60
|
}
|
|
60
61
|
const socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
|
|
61
|
-
|
|
62
|
+
if (Platform.OS !== "android") {
|
|
63
|
+
socket.setBroadcast(true);
|
|
64
|
+
}
|
|
62
65
|
let netInterfaceZone;
|
|
63
66
|
if (netInterface !== void 0) {
|
|
64
67
|
netInterfaceZone = netInterface;
|
|
@@ -133,8 +136,8 @@ class UdpChannelReactNative {
|
|
|
133
136
|
}
|
|
134
137
|
async send(host, port, data) {
|
|
135
138
|
return new Promise((resolve, reject) => {
|
|
136
|
-
this.#socket.send(data, port, host, (error) => {
|
|
137
|
-
if (error
|
|
139
|
+
this.#socket.send(data, 0, data.length, port, host, (error) => {
|
|
140
|
+
if (error) {
|
|
138
141
|
reject(repackErrorAs(error, NetworkError));
|
|
139
142
|
return;
|
|
140
143
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/net/UdpChannelReactNative.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,OAAO,WAAW;AAElB;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIG;AACP,SAAS,0BAA0B;AAEnC,MAAM,SAAS,OAAO,IAAI,gBAAgB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["error"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/react-native",
|
|
3
|
-
"version": "0.16.0-alpha.0-
|
|
3
|
+
"version": "0.16.0-alpha.0-20250812-285b75d83",
|
|
4
4
|
"description": "Experimental React Native support for matter.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -35,21 +35,20 @@
|
|
|
35
35
|
"#*": "./src/*"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@
|
|
39
|
-
"@matter/
|
|
40
|
-
"@matter/
|
|
38
|
+
"@craftzdog/react-native-buffer": "6.1.0",
|
|
39
|
+
"@matter/general": "0.16.0-alpha.0-20250812-285b75d83",
|
|
40
|
+
"@matter/nodejs": "0.16.0-alpha.0-20250812-285b75d83",
|
|
41
|
+
"@matter/protocol": "0.16.0-alpha.0-20250812-285b75d83",
|
|
41
42
|
"@react-native-async-storage/async-storage": "^2.2.0",
|
|
42
43
|
"@react-native-community/netinfo": "^11.3.2",
|
|
43
|
-
"@types/jwk-to-pem": "^2.0.3",
|
|
44
44
|
"@types/node": "^24.1.0",
|
|
45
|
-
"jwk-to-pem": "^2.0.7",
|
|
46
45
|
"react-native-ble-plx": "^3.5.0",
|
|
47
46
|
"react-native-polyfill-globals": "^3.1.0",
|
|
48
47
|
"react-native-quick-crypto": "^0.7.16",
|
|
49
48
|
"react-native-udp": "^4.1.7"
|
|
50
49
|
},
|
|
51
50
|
"devDependencies": {
|
|
52
|
-
"@matter/tools": "0.16.0-alpha.0-
|
|
51
|
+
"@matter/tools": "0.16.0-alpha.0-20250812-285b75d83"
|
|
53
52
|
},
|
|
54
53
|
"overrides": {
|
|
55
54
|
"brorand": "npm:@matter.js/brorand@1.1.0"
|
|
@@ -69,6 +69,7 @@ export class ReactNativeBleCentralInterface implements NetInterface {
|
|
|
69
69
|
let device: Device;
|
|
70
70
|
try {
|
|
71
71
|
device = await peripheral.connect();
|
|
72
|
+
await device.requestMTU(BLE_MAXIMUM_BTP_MTU);
|
|
72
73
|
} catch (error) {
|
|
73
74
|
if (error instanceof ReactNativeBleError && error.errorCode === BleErrorCode.DeviceAlreadyConnected) {
|
|
74
75
|
device = peripheral;
|
|
@@ -85,7 +86,7 @@ export class ReactNativeBleCentralInterface implements NetInterface {
|
|
|
85
86
|
|
|
86
87
|
for (const service of services) {
|
|
87
88
|
logger.debug(`found service: ${service.uuid}`);
|
|
88
|
-
if (service.uuid !== BLE_MATTER_SERVICE_UUID) continue;
|
|
89
|
+
if (service.uuid.toUpperCase() !== BLE_MATTER_SERVICE_UUID) continue;
|
|
89
90
|
|
|
90
91
|
// So, discover its characteristics.
|
|
91
92
|
const characteristics = await device.characteristicsForService(service.uuid);
|
|
@@ -98,7 +99,7 @@ export class ReactNativeBleCentralInterface implements NetInterface {
|
|
|
98
99
|
// Loop through each characteristic and match them to the UUIDs that we know about.
|
|
99
100
|
logger.debug("found characteristic:", characteristic.uuid);
|
|
100
101
|
|
|
101
|
-
switch (characteristic.uuid) {
|
|
102
|
+
switch (characteristic.uuid.toUpperCase()) {
|
|
102
103
|
case BLE_MATTER_C1_CHARACTERISTIC_UUID:
|
|
103
104
|
logger.debug("found C1 characteristic");
|
|
104
105
|
characteristicC1ForWrite = characteristic;
|
|
@@ -22,7 +22,7 @@ export class ReactNativeBleClient {
|
|
|
22
22
|
private deviceDiscoveredCallback: ((peripheral: Device, manufacturerData: Uint8Array) => void) | undefined;
|
|
23
23
|
|
|
24
24
|
constructor() {
|
|
25
|
-
// this.
|
|
25
|
+
// this.bleManager.setLogLevel(LogLevel.Verbose)
|
|
26
26
|
const subscription = this.bleManager.onStateChange(state => {
|
|
27
27
|
this.bleState = state;
|
|
28
28
|
logger.debug(`BLE state changed to ${state}`);
|
|
@@ -53,7 +53,7 @@ export class ReactNativeBleClient {
|
|
|
53
53
|
subscription.remove();
|
|
54
54
|
void this.stopScanning();
|
|
55
55
|
}
|
|
56
|
-
});
|
|
56
|
+
}, true);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
public setDiscoveryCallback(callback: (peripheral: Device, manufacturerData: Uint8Array) => void) {
|
|
@@ -70,23 +70,31 @@ export class ReactNativeBleClient {
|
|
|
70
70
|
if (this.bleState === BluetoothState.PoweredOn) {
|
|
71
71
|
logger.debug("Start BLE scanning for Matter Services ...");
|
|
72
72
|
this.isScanning = true;
|
|
73
|
-
await this.bleManager.startDeviceScan(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
this.
|
|
83
|
-
|
|
84
|
-
)
|
|
73
|
+
await this.bleManager.startDeviceScan(
|
|
74
|
+
null,
|
|
75
|
+
{
|
|
76
|
+
allowDuplicates: false,
|
|
77
|
+
scanMode: 2, // Low Latency
|
|
78
|
+
callbackType: 1, // All matches
|
|
79
|
+
},
|
|
80
|
+
(error, peripheral) => {
|
|
81
|
+
if (error !== null || peripheral === null) {
|
|
82
|
+
this.isScanning = false;
|
|
83
|
+
logger.error("Error while scanning for BLE devices", error);
|
|
84
|
+
if (this.shouldScan) {
|
|
85
|
+
this.startScanning().catch(error =>
|
|
86
|
+
logger.error("Error while restarting scanning after error", error),
|
|
87
|
+
);
|
|
88
|
+
} else {
|
|
89
|
+
this.stopScanning().catch(error =>
|
|
90
|
+
logger.error("Error while stopping scanning after error", error),
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
85
94
|
}
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
});
|
|
95
|
+
this.handleDiscoveredDevice(peripheral);
|
|
96
|
+
},
|
|
97
|
+
);
|
|
90
98
|
} else {
|
|
91
99
|
logger.debug("ble state is not poweredOn ... delay scanning till poweredOn");
|
|
92
100
|
}
|
|
@@ -111,7 +119,7 @@ export class ReactNativeBleClient {
|
|
|
111
119
|
logger.info(`Peripheral ${peripheral.id} is not connectable ... ignoring`);
|
|
112
120
|
return;
|
|
113
121
|
}
|
|
114
|
-
const matterServiceDataBase64 = peripheral.serviceData?.[BLE_MATTER_SERVICE_UUID];
|
|
122
|
+
const matterServiceDataBase64 = peripheral.serviceData?.[BLE_MATTER_SERVICE_UUID.toLowerCase()];
|
|
115
123
|
if (matterServiceDataBase64 === undefined) {
|
|
116
124
|
logger.info(`Peripheral ${peripheral.id} does not advertise Matter Service ... ignoring`);
|
|
117
125
|
return;
|