@matter/react-native 0.17.0-alpha.0-20260507-059f7763b → 0.17.0-alpha.0-20260508-29ff5ae9e
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/package.json +4 -4
- package/dist/cjs/ble/BleScanner.d.ts +0 -16
- package/dist/cjs/ble/BleScanner.d.ts.map +0 -1
- package/dist/cjs/ble/BleScanner.js +0 -38
- package/dist/cjs/ble/BleScanner.js.map +0 -6
- package/dist/cjs/ble/ReactNativeBle.d.ts +0 -16
- package/dist/cjs/ble/ReactNativeBle.d.ts.map +0 -1
- package/dist/cjs/ble/ReactNativeBle.js +0 -58
- package/dist/cjs/ble/ReactNativeBle.js.map +0 -6
- package/dist/cjs/ble/ReactNativeBleChannel.d.ts +0 -36
- package/dist/cjs/ble/ReactNativeBleChannel.d.ts.map +0 -1
- package/dist/cjs/ble/ReactNativeBleChannel.js +0 -329
- package/dist/cjs/ble/ReactNativeBleChannel.js.map +0 -6
- package/dist/cjs/ble/ReactNativeBleClient.d.ts +0 -30
- package/dist/cjs/ble/ReactNativeBleClient.d.ts.map +0 -1
- package/dist/cjs/ble/ReactNativeBleClient.js +0 -156
- package/dist/cjs/ble/ReactNativeBleClient.js.map +0 -6
- package/dist/cjs/ble/index.d.ts +0 -10
- package/dist/cjs/ble/index.d.ts.map +0 -1
- package/dist/cjs/ble/index.js +0 -27
- package/dist/cjs/ble/index.js.map +0 -6
- package/dist/cjs/crypto/ReactNativeCrypto.d.ts +0 -14
- package/dist/cjs/crypto/ReactNativeCrypto.d.ts.map +0 -1
- package/dist/cjs/crypto/ReactNativeCrypto.js +0 -57
- package/dist/cjs/crypto/ReactNativeCrypto.js.map +0 -6
- package/dist/cjs/crypto/index.d.ts +0 -7
- package/dist/cjs/crypto/index.d.ts.map +0 -1
- package/dist/cjs/crypto/index.js +0 -24
- package/dist/cjs/crypto/index.js.map +0 -6
- package/dist/cjs/environment/ReactNativeEnvironment.d.ts +0 -16
- package/dist/cjs/environment/ReactNativeEnvironment.d.ts.map +0 -1
- package/dist/cjs/environment/ReactNativeEnvironment.js +0 -64
- package/dist/cjs/environment/ReactNativeEnvironment.js.map +0 -6
- package/dist/cjs/environment/index.d.ts +0 -8
- package/dist/cjs/environment/index.d.ts.map +0 -1
- package/dist/cjs/environment/index.js +0 -25
- package/dist/cjs/environment/index.js.map +0 -6
- package/dist/cjs/environment/register.d.ts +0 -7
- package/dist/cjs/environment/register.d.ts.map +0 -1
- package/dist/cjs/environment/register.js +0 -14
- package/dist/cjs/environment/register.js.map +0 -6
- package/dist/cjs/index.d.ts +0 -11
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -28
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/net/NetworkReactNative.d.ts +0 -22
- package/dist/cjs/net/NetworkReactNative.d.ts.map +0 -1
- package/dist/cjs/net/NetworkReactNative.js +0 -179
- package/dist/cjs/net/NetworkReactNative.js.map +0 -6
- package/dist/cjs/net/TcpConnectionReactNative.d.ts +0 -26
- package/dist/cjs/net/TcpConnectionReactNative.d.ts.map +0 -1
- package/dist/cjs/net/TcpConnectionReactNative.js +0 -148
- package/dist/cjs/net/TcpConnectionReactNative.js.map +0 -6
- package/dist/cjs/net/TcpListenerReactNative.d.ts +0 -19
- package/dist/cjs/net/TcpListenerReactNative.d.ts.map +0 -1
- package/dist/cjs/net/TcpListenerReactNative.js +0 -102
- package/dist/cjs/net/TcpListenerReactNative.js.map +0 -6
- package/dist/cjs/net/UdpSocketReactNative.d.ts +0 -40
- package/dist/cjs/net/UdpSocketReactNative.d.ts.map +0 -1
- package/dist/cjs/net/UdpSocketReactNative.js +0 -194
- package/dist/cjs/net/UdpSocketReactNative.js.map +0 -6
- package/dist/cjs/net/index.d.ts +0 -10
- package/dist/cjs/net/index.d.ts.map +0 -1
- package/dist/cjs/net/index.js +0 -39
- package/dist/cjs/net/index.js.map +0 -6
- package/dist/cjs/net/react-native-tcp-socket.d.js +0 -2
- package/dist/cjs/net/react-native-tcp-socket.d.js.map +0 -6
- package/dist/cjs/net/react-native-tcp-socket.d.ts +0 -71
- package/dist/cjs/package.json +0 -6
- package/dist/cjs/storage/ReactNativeWebStorageDriver.d.ts +0 -23
- package/dist/cjs/storage/ReactNativeWebStorageDriver.d.ts.map +0 -1
- package/dist/cjs/storage/ReactNativeWebStorageDriver.js +0 -42
- package/dist/cjs/storage/ReactNativeWebStorageDriver.js.map +0 -6
- package/dist/cjs/storage/ReactNativeWebStorageDriverV2.d.ts +0 -22
- package/dist/cjs/storage/ReactNativeWebStorageDriverV2.d.ts.map +0 -1
- package/dist/cjs/storage/ReactNativeWebStorageDriverV2.js +0 -108
- package/dist/cjs/storage/ReactNativeWebStorageDriverV2.js.map +0 -6
- package/dist/cjs/storage/index.d.ts +0 -18
- package/dist/cjs/storage/index.d.ts.map +0 -1
- package/dist/cjs/storage/index.js +0 -37
- package/dist/cjs/storage/index.js.map +0 -6
- package/dist/esm/ble/BleScanner.js +0 -18
- package/dist/esm/ble/BleScanner.js.map +0 -6
- package/dist/esm/ble/ReactNativeBle.js +0 -38
- package/dist/esm/ble/ReactNativeBle.js.map +0 -6
- package/dist/esm/ble/ReactNativeBleChannel.js +0 -321
- package/dist/esm/ble/ReactNativeBleChannel.js.map +0 -6
- package/dist/esm/ble/ReactNativeBleClient.js +0 -136
- package/dist/esm/ble/ReactNativeBleClient.js.map +0 -6
- package/dist/esm/ble/index.js +0 -10
- package/dist/esm/ble/index.js.map +0 -6
- package/dist/esm/crypto/ReactNativeCrypto.js +0 -27
- package/dist/esm/crypto/ReactNativeCrypto.js.map +0 -6
- package/dist/esm/crypto/index.js +0 -7
- package/dist/esm/crypto/index.js.map +0 -6
- package/dist/esm/environment/ReactNativeEnvironment.js +0 -44
- package/dist/esm/environment/ReactNativeEnvironment.js.map +0 -6
- package/dist/esm/environment/index.js +0 -8
- package/dist/esm/environment/index.js.map +0 -6
- package/dist/esm/environment/register.js +0 -13
- package/dist/esm/environment/register.js.map +0 -6
- package/dist/esm/index.js +0 -11
- package/dist/esm/index.js.map +0 -6
- package/dist/esm/net/NetworkReactNative.js +0 -158
- package/dist/esm/net/NetworkReactNative.js.map +0 -6
- package/dist/esm/net/TcpConnectionReactNative.js +0 -135
- package/dist/esm/net/TcpConnectionReactNative.js.map +0 -6
- package/dist/esm/net/TcpListenerReactNative.js +0 -88
- package/dist/esm/net/TcpListenerReactNative.js.map +0 -6
- package/dist/esm/net/UdpSocketReactNative.js +0 -174
- package/dist/esm/net/UdpSocketReactNative.js.map +0 -6
- package/dist/esm/net/index.js +0 -18
- package/dist/esm/net/index.js.map +0 -6
- package/dist/esm/net/react-native-tcp-socket.d.js +0 -1
- package/dist/esm/net/react-native-tcp-socket.d.js.map +0 -6
- package/dist/esm/net/react-native-tcp-socket.d.ts +0 -71
- package/dist/esm/package.json +0 -6
- package/dist/esm/storage/ReactNativeWebStorageDriver.js +0 -22
- package/dist/esm/storage/ReactNativeWebStorageDriver.js.map +0 -6
- package/dist/esm/storage/ReactNativeWebStorageDriverV2.js +0 -78
- package/dist/esm/storage/ReactNativeWebStorageDriverV2.js.map +0 -6
- package/dist/esm/storage/index.js +0 -16
- package/dist/esm/storage/index.js.map +0 -6
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/environment/ReactNativeEnvironment.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,sBAAsB;AAC/B,SAAS,aAAa,SAAS,sBAAuC;AACtE,SAAS,WAAW;AACpB,SAAS,0BAA0B;AACnC,SAAS,mCAAmC;AAOrC,SAAS,yBAAyB;AACrC,QAAM,MAAM,IAAI,YAAY,SAAS;AAErC,gBAAc,GAAG;AACjB,mBAAiB,GAAG;AACpB,mBAAiB,GAAG;AACpB,eAAa,GAAG;AAEhB,SAAO;AACX;AAEA,SAAS,cAAc,KAAkB;AACrC,QAAM,OAAO,IAAI;AAGjB,OAAK,eAAe,YAAY,IAAI,CAAC;AACzC;AAEA,SAAS,iBAAiB,KAAkB;AACxC,QAAM,UAAU,IAAI,IAAI,cAAc;AACtC,UAAQ,eAAe,2BAA2B;AAClD,UAAQ,gBAAgB;AAC5B;AAEA,SAAS,iBAAiB,KAAkB;AACxC,MAAI,IAAI,SAAS,IAAI,mBAAmB,CAAC;AAC7C;AAEA,SAAS,aAAa,KAAkB;AACpC,MAAI,IAAI,KAAK,IAAI,eAAe,CAAC;AACrC;AAEO,SAAS,YAAY,MAAuB;AAC/C,QAAM,UAAU,KAAK,IAAI,eAAe,SAAS;AAEjD,SAAO;AAAA,IACH,aAAa;AAAA,EACjB;AACJ;",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { Boot, Environment } from "@matter/general";
|
|
7
|
-
import { ReactNativeEnvironment } from "./ReactNativeEnvironment.js";
|
|
8
|
-
import { polyfill } from "react-native-polyfill-globals/src/encoding";
|
|
9
|
-
polyfill();
|
|
10
|
-
Boot.init(() => {
|
|
11
|
-
Environment.default = ReactNativeEnvironment();
|
|
12
|
-
});
|
|
13
|
-
//# sourceMappingURL=register.js.map
|
package/dist/esm/index.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
export * from "./ble/index.js";
|
|
7
|
-
export * from "./crypto/index.js";
|
|
8
|
-
export * from "./environment/index.js";
|
|
9
|
-
export * from "./net/index.js";
|
|
10
|
-
export * from "./storage/index.js";
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import dgram from "react-native-udp";
|
|
7
|
-
global.dgram = dgram;
|
|
8
|
-
const rnDGramCreateSocket = dgram.createSocket;
|
|
9
|
-
dgram.createSocket = (...args) => {
|
|
10
|
-
const socket = rnDGramCreateSocket(...args);
|
|
11
|
-
socket.setMulticastInterface = () => {
|
|
12
|
-
};
|
|
13
|
-
return socket;
|
|
14
|
-
};
|
|
15
|
-
import {
|
|
16
|
-
AsyncCache,
|
|
17
|
-
InterfaceType,
|
|
18
|
-
isIPv6,
|
|
19
|
-
Logger,
|
|
20
|
-
Minutes,
|
|
21
|
-
Network,
|
|
22
|
-
NetworkError,
|
|
23
|
-
onSameNetwork
|
|
24
|
-
} from "@matter/general";
|
|
25
|
-
import { fetch as fetchNetworkInfo } from "@react-native-community/netinfo";
|
|
26
|
-
import { connectReactNativeTcp } from "./TcpConnectionReactNative.js";
|
|
27
|
-
import { TcpListenerReactNative } from "./TcpListenerReactNative.js";
|
|
28
|
-
import { UdpSocketReactNative } from "./UdpSocketReactNative.js";
|
|
29
|
-
const logger = Logger.get("NetworkReactNative");
|
|
30
|
-
async function networkInterfaces() {
|
|
31
|
-
const netInfo = [await fetchNetworkInfo("wifi"), await fetchNetworkInfo("ethernet")];
|
|
32
|
-
const networkInterfaces2 = {};
|
|
33
|
-
netInfo.forEach(({ type, isConnected, details }) => {
|
|
34
|
-
if (!details || !isConnected) return;
|
|
35
|
-
const ipAddress = "ipAddress" in details ? details.ipAddress : void 0;
|
|
36
|
-
const subnet = "subnet" in details ? details.subnet : void 0;
|
|
37
|
-
if (!ipAddress || !subnet) return;
|
|
38
|
-
networkInterfaces2[type] = [
|
|
39
|
-
{
|
|
40
|
-
address: ipAddress,
|
|
41
|
-
family: isIPv6(ipAddress) ? "IPv6" : "IPv4",
|
|
42
|
-
netmask: subnet,
|
|
43
|
-
internal: false
|
|
44
|
-
}
|
|
45
|
-
];
|
|
46
|
-
});
|
|
47
|
-
return networkInterfaces2;
|
|
48
|
-
}
|
|
49
|
-
class NetworkReactNative extends Network {
|
|
50
|
-
static async getMulticastInterfaceIpv4(netInterface) {
|
|
51
|
-
const netInterfaceInfo = (await networkInterfaces())[netInterface];
|
|
52
|
-
if (netInterfaceInfo === void 0) throw new NetworkError(`Unknown interface: ${netInterface}`);
|
|
53
|
-
for (const { address, family } of netInterfaceInfo) {
|
|
54
|
-
if (family === "IPv4") {
|
|
55
|
-
return address;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return void 0;
|
|
59
|
-
}
|
|
60
|
-
static async getMembershipMulticastInterfaces(netInterface, ipv4) {
|
|
61
|
-
if (ipv4) {
|
|
62
|
-
return [void 0];
|
|
63
|
-
} else {
|
|
64
|
-
let networkInterfaceEntries = Object.entries(await networkInterfaces());
|
|
65
|
-
if (netInterface !== void 0) {
|
|
66
|
-
networkInterfaceEntries = networkInterfaceEntries.filter(([name]) => name === netInterface);
|
|
67
|
-
}
|
|
68
|
-
const multicastInterfaces = networkInterfaceEntries.flatMap(([netInterface2, netInterfaceInfo]) => {
|
|
69
|
-
if (netInterfaceInfo === void 0) return [];
|
|
70
|
-
const zone = netInterface2;
|
|
71
|
-
return zone === void 0 ? [] : [`::%${zone}`];
|
|
72
|
-
});
|
|
73
|
-
if (multicastInterfaces.length === 0) {
|
|
74
|
-
logger.warn(
|
|
75
|
-
`No IPv6 multicast interface found${netInterface !== void 0 ? ` for interface ${netInterface}` : ""}.`
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
return multicastInterfaces;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
static getNetInterfaceForIp(ip) {
|
|
82
|
-
return this.netInterfaces.get(ip);
|
|
83
|
-
}
|
|
84
|
-
static netInterfaces = new AsyncCache(
|
|
85
|
-
"Network interface",
|
|
86
|
-
(ip) => this.getNetInterfaceForRemoteAddress(ip),
|
|
87
|
-
Minutes(5)
|
|
88
|
-
);
|
|
89
|
-
async close() {
|
|
90
|
-
await NetworkReactNative.netInterfaces.close();
|
|
91
|
-
}
|
|
92
|
-
static async getNetInterfaceForRemoteAddress(ip) {
|
|
93
|
-
if (ip.includes("%")) {
|
|
94
|
-
return ip.split("%")[1];
|
|
95
|
-
} else {
|
|
96
|
-
const interfaces = await networkInterfaces();
|
|
97
|
-
for (const name in interfaces) {
|
|
98
|
-
const netInterfaces = interfaces[name];
|
|
99
|
-
for (const { address, netmask } of netInterfaces) {
|
|
100
|
-
if (onSameNetwork(ip, address, netmask)) {
|
|
101
|
-
return name;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (isIPv6(ip)) {
|
|
106
|
-
if (ip.startsWith("fd")) {
|
|
107
|
-
return "";
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return void 0;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Get all network interfaces.
|
|
115
|
-
* The optional configuration parameter allows to map interface names to types if this mapping is known.
|
|
116
|
-
* Each network interface which has no mapped type is returned as Ethernet for now.
|
|
117
|
-
*
|
|
118
|
-
* @param configuration - An array of objects with the name and type properties.
|
|
119
|
-
*/
|
|
120
|
-
async getNetInterfaces(configuration = []) {
|
|
121
|
-
const result = new Array();
|
|
122
|
-
const interfaces = await networkInterfaces();
|
|
123
|
-
for (const name in interfaces) {
|
|
124
|
-
const netInterfaces = interfaces[name];
|
|
125
|
-
if (netInterfaces.length === 0) continue;
|
|
126
|
-
if (netInterfaces[0].internal) continue;
|
|
127
|
-
let type = InterfaceType.Ethernet;
|
|
128
|
-
if (configuration.length > 0) {
|
|
129
|
-
const nameType = configuration.find(({ name: mapName }) => name === mapName);
|
|
130
|
-
if (nameType !== void 0 && nameType.type !== void 0) {
|
|
131
|
-
type = nameType.type;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
result.push({ name, type });
|
|
135
|
-
}
|
|
136
|
-
return result;
|
|
137
|
-
}
|
|
138
|
-
async getIpMac(netInterface) {
|
|
139
|
-
const netInterfaceInfo = (await networkInterfaces())[netInterface];
|
|
140
|
-
if (netInterfaceInfo === void 0) return void 0;
|
|
141
|
-
const ipV4 = netInterfaceInfo.filter(({ family }) => family === "IPv4").map(({ address }) => address);
|
|
142
|
-
const ipV6 = netInterfaceInfo.filter(({ family }) => family === "IPv6").map(({ address }) => address);
|
|
143
|
-
return { mac: "00:00:00:00:00:00", ipV4, ipV6 };
|
|
144
|
-
}
|
|
145
|
-
createUdpSocket(options) {
|
|
146
|
-
return UdpSocketReactNative.create(options);
|
|
147
|
-
}
|
|
148
|
-
async createTcpListener(options) {
|
|
149
|
-
return TcpListenerReactNative.create(options);
|
|
150
|
-
}
|
|
151
|
-
async connectTcp(host, port) {
|
|
152
|
-
return connectReactNativeTcp(host, port);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
export {
|
|
156
|
-
NetworkReactNative
|
|
157
|
-
};
|
|
158
|
-
//# sourceMappingURL=NetworkReactNative.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/net/NetworkReactNative.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": ["networkInterfaces", "netInterface"]
|
|
6
|
-
}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import {
|
|
7
|
-
Bytes,
|
|
8
|
-
NetworkError,
|
|
9
|
-
Seconds,
|
|
10
|
-
TCP_CONNECTION_TIMEOUT_MS,
|
|
11
|
-
TCP_KEEP_ALIVE_INITIAL_DELAY_MS,
|
|
12
|
-
withTimeout
|
|
13
|
-
} from "@matter/general";
|
|
14
|
-
import { createConnection } from "react-native-tcp-socket";
|
|
15
|
-
const TCP_CONNECT_TIMEOUT = Seconds(TCP_CONNECTION_TIMEOUT_MS / 1e3);
|
|
16
|
-
class TcpConnectionReactNative {
|
|
17
|
-
remoteAddress;
|
|
18
|
-
remotePort;
|
|
19
|
-
localPort;
|
|
20
|
-
#socket;
|
|
21
|
-
#ended = false;
|
|
22
|
-
#chunks = new Array();
|
|
23
|
-
#waiter;
|
|
24
|
-
constructor(socket) {
|
|
25
|
-
this.#socket = socket;
|
|
26
|
-
this.remoteAddress = socket.remoteAddress ?? "";
|
|
27
|
-
this.remotePort = socket.remotePort ?? 0;
|
|
28
|
-
this.localPort = socket.localPort ?? 0;
|
|
29
|
-
socket.setNoDelay(true);
|
|
30
|
-
socket.setKeepAlive(true, TCP_KEEP_ALIVE_INITIAL_DELAY_MS);
|
|
31
|
-
socket.on("data", (data) => {
|
|
32
|
-
const bytes = typeof data === "string" ? Buffer.from(data) : new Uint8Array(data);
|
|
33
|
-
if (this.#waiter) {
|
|
34
|
-
const resolve = this.#waiter;
|
|
35
|
-
this.#waiter = void 0;
|
|
36
|
-
resolve({ value: bytes, done: false });
|
|
37
|
-
} else {
|
|
38
|
-
this.#chunks.push(bytes);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
socket.on("close", () => {
|
|
42
|
-
this.#ended = true;
|
|
43
|
-
this.#waiter?.({ value: void 0, done: true });
|
|
44
|
-
this.#waiter = void 0;
|
|
45
|
-
});
|
|
46
|
-
socket.on("error", () => {
|
|
47
|
-
this.#ended = true;
|
|
48
|
-
this.#waiter?.({ value: void 0, done: true });
|
|
49
|
-
this.#waiter = void 0;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
[Symbol.asyncIterator]() {
|
|
53
|
-
return {
|
|
54
|
-
next: () => {
|
|
55
|
-
if (this.#chunks.length > 0) {
|
|
56
|
-
return Promise.resolve({ value: this.#chunks.shift(), done: false });
|
|
57
|
-
}
|
|
58
|
-
if (this.#ended) {
|
|
59
|
-
return Promise.resolve({ value: void 0, done: true });
|
|
60
|
-
}
|
|
61
|
-
return new Promise((resolve) => {
|
|
62
|
-
this.#waiter = resolve;
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
send(data) {
|
|
68
|
-
return new Promise((resolve, reject) => {
|
|
69
|
-
this.#socket.write(Buffer.from(Bytes.of(data)), (error) => {
|
|
70
|
-
if (error) {
|
|
71
|
-
reject(new NetworkError(error.message));
|
|
72
|
-
} else {
|
|
73
|
-
resolve();
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
onClose(listener) {
|
|
79
|
-
this.#socket.on("close", listener);
|
|
80
|
-
return {
|
|
81
|
-
close: async () => {
|
|
82
|
-
this.#socket.off("close", listener);
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
onError(listener) {
|
|
87
|
-
const handler = (error) => listener(new NetworkError(error.message));
|
|
88
|
-
this.#socket.on("error", handler);
|
|
89
|
-
return {
|
|
90
|
-
close: async () => {
|
|
91
|
-
this.#socket.off("error", handler);
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
async close() {
|
|
96
|
-
if (this.#ended) return;
|
|
97
|
-
this.#ended = true;
|
|
98
|
-
this.#waiter?.({ value: void 0, done: true });
|
|
99
|
-
this.#waiter = void 0;
|
|
100
|
-
const closed = new Promise((resolve) => {
|
|
101
|
-
this.#socket.on("close", () => resolve());
|
|
102
|
-
this.#socket.end();
|
|
103
|
-
});
|
|
104
|
-
await withTimeout(Seconds(5), closed, () => {
|
|
105
|
-
this.#socket.destroy();
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
function connectReactNativeTcp(host, port) {
|
|
110
|
-
let socket;
|
|
111
|
-
const connected = new Promise((resolve, reject) => {
|
|
112
|
-
let settled = false;
|
|
113
|
-
const settle = (fn) => {
|
|
114
|
-
if (!settled) {
|
|
115
|
-
settled = true;
|
|
116
|
-
fn();
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
socket = createConnection({ host, port }, () => {
|
|
120
|
-
settle(() => resolve(new TcpConnectionReactNative(socket)));
|
|
121
|
-
});
|
|
122
|
-
socket.on("error", (err) => {
|
|
123
|
-
settle(() => reject(new NetworkError(err.message)));
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
return withTimeout(TCP_CONNECT_TIMEOUT, connected, () => {
|
|
127
|
-
socket?.destroy();
|
|
128
|
-
throw new NetworkError("TCP connection timeout");
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
export {
|
|
132
|
-
TcpConnectionReactNative,
|
|
133
|
-
connectReactNativeTcp
|
|
134
|
-
};
|
|
135
|
-
//# sourceMappingURL=TcpConnectionReactNative.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/net/TcpConnectionReactNative.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import {
|
|
7
|
-
Logger,
|
|
8
|
-
NetworkError,
|
|
9
|
-
Seconds,
|
|
10
|
-
TCP_KEEP_ALIVE_INITIAL_DELAY_MS,
|
|
11
|
-
withTimeout
|
|
12
|
-
} from "@matter/general";
|
|
13
|
-
import { createServer } from "react-native-tcp-socket";
|
|
14
|
-
import { TcpConnectionReactNative } from "./TcpConnectionReactNative.js";
|
|
15
|
-
const logger = Logger.get("TcpListenerReactNative");
|
|
16
|
-
const TCP_LISTEN_TIMEOUT = Seconds(10);
|
|
17
|
-
const TCP_CLOSE_TIMEOUT = Seconds(5);
|
|
18
|
-
class TcpListenerReactNative {
|
|
19
|
-
#server;
|
|
20
|
-
#port;
|
|
21
|
-
#activeSockets = /* @__PURE__ */ new Set();
|
|
22
|
-
static async create(options = {}) {
|
|
23
|
-
const server = createServer({
|
|
24
|
-
keepAlive: true,
|
|
25
|
-
keepAliveInitialDelay: TCP_KEEP_ALIVE_INITIAL_DELAY_MS
|
|
26
|
-
});
|
|
27
|
-
const listening = new Promise((resolve, reject) => {
|
|
28
|
-
const handleError = (error) => {
|
|
29
|
-
server.removeListener("error", handleError);
|
|
30
|
-
reject(new NetworkError(error.message));
|
|
31
|
-
};
|
|
32
|
-
server.on("error", handleError);
|
|
33
|
-
server.listen({ port: options.listeningPort ?? 0, host: options.listeningAddress ?? "0.0.0.0" }, () => {
|
|
34
|
-
server.removeListener("error", handleError);
|
|
35
|
-
const addr = server.address();
|
|
36
|
-
const port = typeof addr === "object" && addr !== null ? addr.port : 0;
|
|
37
|
-
if (port === 0) {
|
|
38
|
-
reject(new NetworkError("TCP server failed to obtain a port"));
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
logger.debug(`TCP server listening on port ${port}`);
|
|
42
|
-
resolve(new TcpListenerReactNative(server, port));
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
return withTimeout(TCP_LISTEN_TIMEOUT, listening, () => {
|
|
46
|
-
server.close();
|
|
47
|
-
throw new NetworkError("TCP server listen timeout");
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
constructor(server, port) {
|
|
51
|
-
this.#server = server;
|
|
52
|
-
this.#port = port;
|
|
53
|
-
server.on("connection", (socket) => {
|
|
54
|
-
this.#activeSockets.add(socket);
|
|
55
|
-
socket.on("close", () => this.#activeSockets.delete(socket));
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
get port() {
|
|
59
|
-
return this.#port;
|
|
60
|
-
}
|
|
61
|
-
onConnection(listener) {
|
|
62
|
-
const handler = (socket) => {
|
|
63
|
-
listener(new TcpConnectionReactNative(socket));
|
|
64
|
-
};
|
|
65
|
-
this.#server.on("connection", handler);
|
|
66
|
-
return {
|
|
67
|
-
close: async () => {
|
|
68
|
-
this.#server.off("connection", handler);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
async close() {
|
|
73
|
-
for (const socket of this.#activeSockets) {
|
|
74
|
-
socket.destroy();
|
|
75
|
-
}
|
|
76
|
-
this.#activeSockets.clear();
|
|
77
|
-
const closed = new Promise((resolve) => {
|
|
78
|
-
this.#server.close(() => resolve());
|
|
79
|
-
});
|
|
80
|
-
await withTimeout(TCP_CLOSE_TIMEOUT, closed, () => {
|
|
81
|
-
logger.debug("TCP server close timeout, forcing");
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
export {
|
|
86
|
-
TcpListenerReactNative
|
|
87
|
-
};
|
|
88
|
-
//# sourceMappingURL=TcpListenerReactNative.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/net/TcpListenerReactNative.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OAIG;AACP,SAAS,oBAAsE;AAC/E,SAAS,gCAAgC;AAEzC,MAAM,SAAS,OAAO,IAAI,wBAAwB;AAGlD,MAAM,qBAAqB,QAAQ,EAAE;AAGrC,MAAM,oBAAoB,QAAQ,CAAC;AAM5B,MAAM,uBAA8C;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,iBAAiB,oBAAI,IAAc;AAAA,EAE5C,aAAa,OAAO,UAA8B,CAAC,GAAoC;AACnF,UAAM,SAAS,aAAa;AAAA,MACxB,WAAW;AAAA,MACX,uBAAuB;AAAA,IAC3B,CAAC;AAED,UAAM,YAAY,IAAI,QAAgC,CAAC,SAAS,WAAW;AACvE,YAAM,cAAc,CAAC,UAAiB;AAClC,eAAO,eAAe,SAAS,WAAW;AAC1C,eAAO,IAAI,aAAa,MAAM,OAAO,CAAC;AAAA,MAC1C;AACA,aAAO,GAAG,SAAS,WAAW;AAC9B,aAAO,OAAO,EAAE,MAAM,QAAQ,iBAAiB,GAAG,MAAM,QAAQ,oBAAoB,UAAU,GAAG,MAAM;AACnG,eAAO,eAAe,SAAS,WAAW;AAC1C,cAAM,OAAO,OAAO,QAAQ;AAC5B,cAAM,OAAO,OAAO,SAAS,YAAY,SAAS,OAAO,KAAK,OAAO;AACrE,YAAI,SAAS,GAAG;AACZ,iBAAO,IAAI,aAAa,oCAAoC,CAAC;AAC7D;AAAA,QACJ;AACA,eAAO,MAAM,gCAAgC,IAAI,EAAE;AACnD,gBAAQ,IAAI,uBAAuB,QAAQ,IAAI,CAAC;AAAA,MACpD,CAAC;AAAA,IACL,CAAC;AAED,WAAO,YAAY,oBAAoB,WAAW,MAAM;AACpD,aAAO,MAAM;AACb,YAAM,IAAI,aAAa,2BAA2B;AAAA,IACtD,CAAC;AAAA,EACL;AAAA,EAEQ,YAAY,QAAkB,MAAc;AAChD,SAAK,UAAU;AACf,SAAK,QAAQ;AAEb,WAAO,GAAG,cAAc,CAAC,WAAqB;AAC1C,WAAK,eAAe,IAAI,MAAM;AAC9B,aAAO,GAAG,SAAS,MAAM,KAAK,eAAe,OAAO,MAAM,CAAC;AAAA,IAC/D,CAAC;AAAA,EACL;AAAA,EAEA,IAAI,OAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,aAAa,UAA+D;AACxE,UAAM,UAAU,CAAC,WAAqB;AAClC,eAAS,IAAI,yBAAyB,MAAM,CAAC;AAAA,IACjD;AACA,SAAK,QAAQ,GAAG,cAAc,OAAO;AACrC,WAAO;AAAA,MACH,OAAO,YAAY;AACf,aAAK,QAAQ,IAAI,cAAc,OAAO;AAAA,MAC1C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,QAAuB;AACzB,eAAW,UAAU,KAAK,gBAAgB;AACtC,aAAO,QAAQ;AAAA,IACnB;AACA,SAAK,eAAe,MAAM;AAE1B,UAAM,SAAS,IAAI,QAAc,aAAW;AACxC,WAAK,QAAQ,MAAM,MAAM,QAAQ,CAAC;AAAA,IACtC,CAAC;AAED,UAAM,YAAY,mBAAmB,QAAQ,MAAM;AAC/C,aAAO,MAAM,mCAAmC;AAAA,IACpD,CAAC;AAAA,EACL;AACJ;",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import dgram from "react-native-udp";
|
|
7
|
-
import {
|
|
8
|
-
ChannelType,
|
|
9
|
-
Diagnostic,
|
|
10
|
-
isIPv4,
|
|
11
|
-
isIPv6,
|
|
12
|
-
Logger,
|
|
13
|
-
MAX_UDP_MESSAGE_SIZE,
|
|
14
|
-
NetworkError,
|
|
15
|
-
NoAddressAvailableError,
|
|
16
|
-
repackErrorAs
|
|
17
|
-
} from "@matter/general";
|
|
18
|
-
import { Platform } from "react-native";
|
|
19
|
-
import { NetworkReactNative } from "./NetworkReactNative.js";
|
|
20
|
-
const logger = Logger.get("UdpSocketNode");
|
|
21
|
-
function createDgramSocket(host, port, options) {
|
|
22
|
-
const socket = dgram.createSocket({
|
|
23
|
-
...options,
|
|
24
|
-
reusePort: options.reuseAddr
|
|
25
|
-
});
|
|
26
|
-
return new Promise((resolve, reject) => {
|
|
27
|
-
const handleBindError = (error) => {
|
|
28
|
-
try {
|
|
29
|
-
socket.close();
|
|
30
|
-
} catch (error2) {
|
|
31
|
-
logger.debug("Error on closing socket", error2);
|
|
32
|
-
}
|
|
33
|
-
reject(error);
|
|
34
|
-
};
|
|
35
|
-
socket.on("error", handleBindError);
|
|
36
|
-
socket.bind(port, host, (error) => {
|
|
37
|
-
if (error) return;
|
|
38
|
-
const { address: localHost, port: localPort } = socket.address();
|
|
39
|
-
logger.debug(
|
|
40
|
-
"Socket created and bound ",
|
|
41
|
-
Diagnostic.dict({
|
|
42
|
-
remoteAddress: `${host}:${port}`,
|
|
43
|
-
localAddress: `${localHost}:${localPort}`
|
|
44
|
-
})
|
|
45
|
-
);
|
|
46
|
-
socket.removeListener("error", handleBindError);
|
|
47
|
-
socket.on("error", (error2) => logger.error(error2));
|
|
48
|
-
resolve(socket);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
class UdpSocketReactNative {
|
|
53
|
-
#type;
|
|
54
|
-
#socket;
|
|
55
|
-
#netInterface;
|
|
56
|
-
static async create({ listeningPort, type, listeningAddress, netInterface }) {
|
|
57
|
-
const socketOptions = { type, reuseAddr: true };
|
|
58
|
-
if (type === "udp6") {
|
|
59
|
-
socketOptions.ipv6Only = true;
|
|
60
|
-
}
|
|
61
|
-
const socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
|
|
62
|
-
if (Platform.OS !== "android") {
|
|
63
|
-
socket.setBroadcast(true);
|
|
64
|
-
}
|
|
65
|
-
let netInterfaceZone;
|
|
66
|
-
if (netInterface !== void 0) {
|
|
67
|
-
netInterfaceZone = netInterface;
|
|
68
|
-
let multicastInterface;
|
|
69
|
-
if (type === "udp4") {
|
|
70
|
-
multicastInterface = await NetworkReactNative.getMulticastInterfaceIpv4(netInterface);
|
|
71
|
-
if (multicastInterface === void 0) {
|
|
72
|
-
throw new NoAddressAvailableError(`No IPv4 addresses on interface "${netInterface}"`);
|
|
73
|
-
}
|
|
74
|
-
} else {
|
|
75
|
-
multicastInterface = "::";
|
|
76
|
-
}
|
|
77
|
-
logger.debug(
|
|
78
|
-
"Initialize multicast",
|
|
79
|
-
Diagnostic.dict({
|
|
80
|
-
type,
|
|
81
|
-
address: `${multicastInterface}:${listeningPort}`,
|
|
82
|
-
interface: netInterface
|
|
83
|
-
})
|
|
84
|
-
);
|
|
85
|
-
socket.setMulticastInterface(multicastInterface);
|
|
86
|
-
}
|
|
87
|
-
return new UdpSocketReactNative(type, socket, netInterfaceZone);
|
|
88
|
-
}
|
|
89
|
-
maxPayloadSize = MAX_UDP_MESSAGE_SIZE;
|
|
90
|
-
constructor(type, socket, netInterface) {
|
|
91
|
-
this.#type = type;
|
|
92
|
-
this.#socket = socket;
|
|
93
|
-
this.#netInterface = netInterface;
|
|
94
|
-
}
|
|
95
|
-
async addMembership(membershipAddress) {
|
|
96
|
-
const multicastInterfaces = await NetworkReactNative.getMembershipMulticastInterfaces(
|
|
97
|
-
this.#netInterface,
|
|
98
|
-
this.#type === "udp4"
|
|
99
|
-
);
|
|
100
|
-
for (const multicastInterface of multicastInterfaces) {
|
|
101
|
-
try {
|
|
102
|
-
this.#socket.addMembership(membershipAddress, multicastInterface);
|
|
103
|
-
} catch (error) {
|
|
104
|
-
logger.warn(
|
|
105
|
-
`Error adding membership for address ${membershipAddress}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
async dropMembership(membershipAddress) {
|
|
111
|
-
const multicastInterfaces = await NetworkReactNative.getMembershipMulticastInterfaces(
|
|
112
|
-
this.#netInterface,
|
|
113
|
-
this.#type === "udp4"
|
|
114
|
-
);
|
|
115
|
-
for (const multicastInterface of multicastInterfaces) {
|
|
116
|
-
try {
|
|
117
|
-
this.#socket.dropMembership(membershipAddress, multicastInterface);
|
|
118
|
-
} catch (error) {
|
|
119
|
-
logger.warn(
|
|
120
|
-
`Error removing membership for address ${membershipAddress}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
onData(listener) {
|
|
126
|
-
const messageListener = async (data, { address, port }) => {
|
|
127
|
-
const netInterface = this.#netInterface ?? await NetworkReactNative.getNetInterfaceForIp(address);
|
|
128
|
-
listener(netInterface, address, port, data);
|
|
129
|
-
};
|
|
130
|
-
this.#socket.on("message", messageListener);
|
|
131
|
-
return {
|
|
132
|
-
close: async () => {
|
|
133
|
-
this.#socket.removeListener("message", messageListener);
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
async send(host, port, data) {
|
|
138
|
-
return new Promise((resolve, reject) => {
|
|
139
|
-
this.#socket.send(data, 0, data.byteLength, port, host, (error) => {
|
|
140
|
-
if (error) {
|
|
141
|
-
reject(repackErrorAs(error, NetworkError));
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
resolve();
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
async close() {
|
|
149
|
-
try {
|
|
150
|
-
this.#socket.close();
|
|
151
|
-
} catch (error) {
|
|
152
|
-
logger.debug("Error on closing socket", error);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
get port() {
|
|
156
|
-
return this.#socket.address().port;
|
|
157
|
-
}
|
|
158
|
-
supports(type, address) {
|
|
159
|
-
if (type !== ChannelType.UDP) {
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
if (address === void 0) {
|
|
163
|
-
return true;
|
|
164
|
-
}
|
|
165
|
-
if (this.#type === "udp4") {
|
|
166
|
-
return isIPv4(address);
|
|
167
|
-
}
|
|
168
|
-
return isIPv6(address);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
export {
|
|
172
|
-
UdpSocketReactNative
|
|
173
|
-
};
|
|
174
|
-
//# sourceMappingURL=UdpSocketReactNative.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/net/UdpSocketReactNative.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": ["error"]
|
|
6
|
-
}
|