@matter/react-native 0.11.0-alpha.0-20241005-e3e4e4a7a

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 (161) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +56 -0
  3. package/dist/cjs/ble/BleReactNative.d.ts +17 -0
  4. package/dist/cjs/ble/BleReactNative.d.ts.map +1 -0
  5. package/dist/cjs/ble/BleReactNative.js +61 -0
  6. package/dist/cjs/ble/BleReactNative.js.map +6 -0
  7. package/dist/cjs/ble/BleScanner.d.ts +52 -0
  8. package/dist/cjs/ble/BleScanner.d.ts.map +1 -0
  9. package/dist/cjs/ble/BleScanner.js +239 -0
  10. package/dist/cjs/ble/BleScanner.js.map +6 -0
  11. package/dist/cjs/ble/ReactNativeBleChannel.d.ts +33 -0
  12. package/dist/cjs/ble/ReactNativeBleChannel.d.ts.map +1 -0
  13. package/dist/cjs/ble/ReactNativeBleChannel.js +252 -0
  14. package/dist/cjs/ble/ReactNativeBleChannel.js.map +6 -0
  15. package/dist/cjs/ble/ReactNativeBleClient.d.ts +25 -0
  16. package/dist/cjs/ble/ReactNativeBleClient.d.ts.map +1 -0
  17. package/dist/cjs/ble/ReactNativeBleClient.js +143 -0
  18. package/dist/cjs/ble/ReactNativeBleClient.js.map +6 -0
  19. package/dist/cjs/ble/export.d.ts +8 -0
  20. package/dist/cjs/ble/export.d.ts.map +1 -0
  21. package/dist/cjs/ble/export.js +25 -0
  22. package/dist/cjs/ble/export.js.map +6 -0
  23. package/dist/cjs/crypto/ReactNativeCrypto.d.ts +12 -0
  24. package/dist/cjs/crypto/ReactNativeCrypto.d.ts.map +1 -0
  25. package/dist/cjs/crypto/ReactNativeCrypto.js +95 -0
  26. package/dist/cjs/crypto/ReactNativeCrypto.js.map +6 -0
  27. package/dist/cjs/crypto/export.d.ts +7 -0
  28. package/dist/cjs/crypto/export.d.ts.map +1 -0
  29. package/dist/cjs/crypto/export.js +24 -0
  30. package/dist/cjs/crypto/export.js.map +6 -0
  31. package/dist/cjs/crypto/register.d.ts +7 -0
  32. package/dist/cjs/crypto/register.d.ts.map +1 -0
  33. package/dist/cjs/crypto/register.js +15 -0
  34. package/dist/cjs/crypto/register.js.map +6 -0
  35. package/dist/cjs/environment/ReactNativeEnvironment.d.ts +16 -0
  36. package/dist/cjs/environment/ReactNativeEnvironment.d.ts.map +1 -0
  37. package/dist/cjs/environment/ReactNativeEnvironment.js +60 -0
  38. package/dist/cjs/environment/ReactNativeEnvironment.js.map +6 -0
  39. package/dist/cjs/environment/export.d.ts +7 -0
  40. package/dist/cjs/environment/export.d.ts.map +1 -0
  41. package/dist/cjs/environment/export.js +24 -0
  42. package/dist/cjs/environment/export.js.map +6 -0
  43. package/dist/cjs/environment/register.d.ts +7 -0
  44. package/dist/cjs/environment/register.d.ts.map +1 -0
  45. package/dist/cjs/environment/register.js +12 -0
  46. package/dist/cjs/environment/register.js.map +6 -0
  47. package/dist/cjs/export.d.ts +9 -0
  48. package/dist/cjs/export.d.ts.map +1 -0
  49. package/dist/cjs/export.js +10 -0
  50. package/dist/cjs/export.js.map +6 -0
  51. package/dist/cjs/net/NetworkReactNative.d.ts +20 -0
  52. package/dist/cjs/net/NetworkReactNative.d.ts.map +1 -0
  53. package/dist/cjs/net/NetworkReactNative.js +173 -0
  54. package/dist/cjs/net/NetworkReactNative.js.map +6 -0
  55. package/dist/cjs/net/UdpChannelReactNative.d.ts +39 -0
  56. package/dist/cjs/net/UdpChannelReactNative.d.ts.map +1 -0
  57. package/dist/cjs/net/UdpChannelReactNative.js +184 -0
  58. package/dist/cjs/net/UdpChannelReactNative.js.map +6 -0
  59. package/dist/cjs/net/export.d.ts +8 -0
  60. package/dist/cjs/net/export.d.ts.map +1 -0
  61. package/dist/cjs/net/export.js +35 -0
  62. package/dist/cjs/net/export.js.map +6 -0
  63. package/dist/cjs/net/register.d.ts +7 -0
  64. package/dist/cjs/net/register.d.ts.map +1 -0
  65. package/dist/cjs/net/register.js +15 -0
  66. package/dist/cjs/net/register.js.map +6 -0
  67. package/dist/cjs/package.json +10 -0
  68. package/dist/cjs/storage/StorageBackendAsyncStorage.d.ts +31 -0
  69. package/dist/cjs/storage/StorageBackendAsyncStorage.d.ts.map +1 -0
  70. package/dist/cjs/storage/StorageBackendAsyncStorage.js +142 -0
  71. package/dist/cjs/storage/StorageBackendAsyncStorage.js.map +6 -0
  72. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  73. package/dist/esm/ble/BleReactNative.d.ts +17 -0
  74. package/dist/esm/ble/BleReactNative.d.ts.map +1 -0
  75. package/dist/esm/ble/BleReactNative.js +41 -0
  76. package/dist/esm/ble/BleReactNative.js.map +6 -0
  77. package/dist/esm/ble/BleScanner.d.ts +52 -0
  78. package/dist/esm/ble/BleScanner.d.ts.map +1 -0
  79. package/dist/esm/ble/BleScanner.js +219 -0
  80. package/dist/esm/ble/BleScanner.js.map +6 -0
  81. package/dist/esm/ble/ReactNativeBleChannel.d.ts +33 -0
  82. package/dist/esm/ble/ReactNativeBleChannel.d.ts.map +1 -0
  83. package/dist/esm/ble/ReactNativeBleChannel.js +257 -0
  84. package/dist/esm/ble/ReactNativeBleChannel.js.map +6 -0
  85. package/dist/esm/ble/ReactNativeBleClient.d.ts +25 -0
  86. package/dist/esm/ble/ReactNativeBleClient.d.ts.map +1 -0
  87. package/dist/esm/ble/ReactNativeBleClient.js +123 -0
  88. package/dist/esm/ble/ReactNativeBleClient.js.map +6 -0
  89. package/dist/esm/ble/export.d.ts +8 -0
  90. package/dist/esm/ble/export.d.ts.map +1 -0
  91. package/dist/esm/ble/export.js +8 -0
  92. package/dist/esm/ble/export.js.map +6 -0
  93. package/dist/esm/crypto/ReactNativeCrypto.d.ts +12 -0
  94. package/dist/esm/crypto/ReactNativeCrypto.d.ts.map +1 -0
  95. package/dist/esm/crypto/ReactNativeCrypto.js +65 -0
  96. package/dist/esm/crypto/ReactNativeCrypto.js.map +6 -0
  97. package/dist/esm/crypto/export.d.ts +7 -0
  98. package/dist/esm/crypto/export.d.ts.map +1 -0
  99. package/dist/esm/crypto/export.js +7 -0
  100. package/dist/esm/crypto/export.js.map +6 -0
  101. package/dist/esm/crypto/register.d.ts +7 -0
  102. package/dist/esm/crypto/register.d.ts.map +1 -0
  103. package/dist/esm/crypto/register.js +14 -0
  104. package/dist/esm/crypto/register.js.map +6 -0
  105. package/dist/esm/environment/ReactNativeEnvironment.d.ts +16 -0
  106. package/dist/esm/environment/ReactNativeEnvironment.d.ts.map +1 -0
  107. package/dist/esm/environment/ReactNativeEnvironment.js +40 -0
  108. package/dist/esm/environment/ReactNativeEnvironment.js.map +6 -0
  109. package/dist/esm/environment/export.d.ts +7 -0
  110. package/dist/esm/environment/export.d.ts.map +1 -0
  111. package/dist/esm/environment/export.js +7 -0
  112. package/dist/esm/environment/export.js.map +6 -0
  113. package/dist/esm/environment/register.d.ts +7 -0
  114. package/dist/esm/environment/register.d.ts.map +1 -0
  115. package/dist/esm/environment/register.js +11 -0
  116. package/dist/esm/environment/register.js.map +6 -0
  117. package/dist/esm/export.d.ts +9 -0
  118. package/dist/esm/export.d.ts.map +1 -0
  119. package/dist/esm/export.js +9 -0
  120. package/dist/esm/export.js.map +6 -0
  121. package/dist/esm/net/NetworkReactNative.d.ts +20 -0
  122. package/dist/esm/net/NetworkReactNative.d.ts.map +1 -0
  123. package/dist/esm/net/NetworkReactNative.js +151 -0
  124. package/dist/esm/net/NetworkReactNative.js.map +6 -0
  125. package/dist/esm/net/UdpChannelReactNative.d.ts +39 -0
  126. package/dist/esm/net/UdpChannelReactNative.d.ts.map +1 -0
  127. package/dist/esm/net/UdpChannelReactNative.js +162 -0
  128. package/dist/esm/net/UdpChannelReactNative.js.map +6 -0
  129. package/dist/esm/net/export.d.ts +8 -0
  130. package/dist/esm/net/export.d.ts.map +1 -0
  131. package/dist/esm/net/export.js +14 -0
  132. package/dist/esm/net/export.js.map +6 -0
  133. package/dist/esm/net/register.d.ts +7 -0
  134. package/dist/esm/net/register.d.ts.map +1 -0
  135. package/dist/esm/net/register.js +14 -0
  136. package/dist/esm/net/register.js.map +6 -0
  137. package/dist/esm/package.json +10 -0
  138. package/dist/esm/storage/StorageBackendAsyncStorage.d.ts +31 -0
  139. package/dist/esm/storage/StorageBackendAsyncStorage.d.ts.map +1 -0
  140. package/dist/esm/storage/StorageBackendAsyncStorage.js +112 -0
  141. package/dist/esm/storage/StorageBackendAsyncStorage.js.map +6 -0
  142. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  143. package/package.json +105 -0
  144. package/src/ble/BleReactNative.ts +45 -0
  145. package/src/ble/BleScanner.ts +277 -0
  146. package/src/ble/ReactNativeBleChannel.ts +313 -0
  147. package/src/ble/ReactNativeBleClient.ts +132 -0
  148. package/src/ble/export.ts +8 -0
  149. package/src/crypto/ReactNativeCrypto.ts +108 -0
  150. package/src/crypto/export.ts +7 -0
  151. package/src/crypto/register.ts +16 -0
  152. package/src/environment/ReactNativeEnvironment.ts +53 -0
  153. package/src/environment/export.ts +7 -0
  154. package/src/environment/register.ts +16 -0
  155. package/src/export.ts +11 -0
  156. package/src/net/NetworkReactNative.ts +190 -0
  157. package/src/net/UdpChannelReactNative.ts +219 -0
  158. package/src/net/export.ts +13 -0
  159. package/src/net/register.ts +17 -0
  160. package/src/storage/StorageBackendAsyncStorage.ts +145 -0
  161. package/src/tsconfig.json +17 -0
@@ -0,0 +1,151 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 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
+ const originalSend = socket.send;
14
+ socket.send = (buffer, port, address, callback) => originalSend(buffer, 0, buffer.length, port, address, callback);
15
+ return socket;
16
+ };
17
+ import {
18
+ AsyncCache,
19
+ InterfaceType,
20
+ isIPv6,
21
+ Logger,
22
+ Network,
23
+ NetworkError,
24
+ onSameNetwork
25
+ } from "#general";
26
+ import { fetch as fetchNetworkInfo } from "@react-native-community/netinfo";
27
+ import { UdpChannelReactNative } from "./UdpChannelReactNative.js";
28
+ const logger = Logger.get("NetworkNode");
29
+ async function networkInterfaces() {
30
+ const netInfo = [await fetchNetworkInfo("wifi"), await fetchNetworkInfo("ethernet")];
31
+ const networkInterfaces2 = {};
32
+ netInfo.forEach(({ type, isConnected, details }) => {
33
+ if (!details || !isConnected) return;
34
+ const ipAddress = "ipAddress" in details ? details.ipAddress : void 0;
35
+ const subnet = "subnet" in details ? details.subnet : void 0;
36
+ if (!ipAddress || !subnet) return;
37
+ networkInterfaces2[type] = [
38
+ {
39
+ address: ipAddress,
40
+ family: isIPv6(ipAddress) ? "IPv6" : "IPv4",
41
+ netmask: subnet,
42
+ internal: false
43
+ }
44
+ ];
45
+ });
46
+ return networkInterfaces2;
47
+ }
48
+ class NetworkReactNative extends Network {
49
+ static async getMulticastInterfaceIpv4(netInterface) {
50
+ const netInterfaceInfo = (await networkInterfaces())[netInterface];
51
+ if (netInterfaceInfo === void 0) throw new NetworkError(`Unknown interface: ${netInterface}`);
52
+ for (const { address, family } of netInterfaceInfo) {
53
+ if (family === "IPv4") {
54
+ return address;
55
+ }
56
+ }
57
+ return void 0;
58
+ }
59
+ static async getMembershipMulticastInterfaces(netInterface, ipv4) {
60
+ if (ipv4) {
61
+ return [void 0];
62
+ } else {
63
+ let networkInterfaceEntries = Object.entries(await networkInterfaces());
64
+ if (netInterface !== void 0) {
65
+ networkInterfaceEntries = networkInterfaceEntries.filter(([name]) => name === netInterface);
66
+ }
67
+ const multicastInterfaces = networkInterfaceEntries.flatMap(([netInterface2, netInterfaceInfo]) => {
68
+ if (netInterfaceInfo === void 0) return [];
69
+ const zone = netInterface2;
70
+ return zone === void 0 ? [] : [`::%${zone}`];
71
+ });
72
+ if (multicastInterfaces.length === 0) {
73
+ logger.warn(
74
+ `No IPv6 multicast interface found${netInterface !== void 0 ? ` for interface ${netInterface}` : ""}.`
75
+ );
76
+ }
77
+ return multicastInterfaces;
78
+ }
79
+ }
80
+ static getNetInterfaceForIp(ip) {
81
+ return this.netInterfaces.get(ip);
82
+ }
83
+ static netInterfaces = new AsyncCache(
84
+ "Network interface",
85
+ (ip) => this.getNetInterfaceForRemoveAddress(ip),
86
+ 5 * 60 * 1e3
87
+ );
88
+ async close() {
89
+ await NetworkReactNative.netInterfaces.close();
90
+ }
91
+ static async getNetInterfaceForRemoveAddress(ip) {
92
+ if (ip.includes("%")) {
93
+ return ip.split("%")[1];
94
+ } else {
95
+ const interfaces = await networkInterfaces();
96
+ for (const name in interfaces) {
97
+ const netInterfaces = interfaces[name];
98
+ for (const { address, netmask } of netInterfaces) {
99
+ if (onSameNetwork(ip, address, netmask)) {
100
+ return name;
101
+ }
102
+ }
103
+ }
104
+ if (isIPv6(ip)) {
105
+ if (ip.startsWith("fd")) {
106
+ return "";
107
+ }
108
+ }
109
+ return void 0;
110
+ }
111
+ }
112
+ /**
113
+ * Get all network interfaces.
114
+ * The optional configuration parameter allows to map interface names to types if this mapping is known.
115
+ * Each network interface which has no mapped type is returned as Ethernet for now.
116
+ *
117
+ * @param configuration - An array of objects with the name and type properties.
118
+ */
119
+ async getNetInterfaces(configuration = []) {
120
+ const result = new Array();
121
+ const interfaces = await networkInterfaces();
122
+ for (const name in interfaces) {
123
+ const netInterfaces = interfaces[name];
124
+ if (netInterfaces.length === 0) continue;
125
+ if (netInterfaces[0].internal) continue;
126
+ let type = InterfaceType.Ethernet;
127
+ if (configuration.length > 0) {
128
+ const nameType = configuration.find(({ name: mapName }) => name === mapName);
129
+ if (nameType !== void 0 && nameType.type !== void 0) {
130
+ type = nameType.type;
131
+ }
132
+ }
133
+ result.push({ name, type });
134
+ }
135
+ return result;
136
+ }
137
+ async getIpMac(netInterface) {
138
+ const netInterfaceInfo = (await networkInterfaces())[netInterface];
139
+ if (netInterfaceInfo === void 0) return void 0;
140
+ const ipV4 = netInterfaceInfo.filter(({ family }) => family === "IPv4").map(({ address }) => address);
141
+ const ipV6 = netInterfaceInfo.filter(({ family }) => family === "IPv6").map(({ address }) => address);
142
+ return { mac: "00:00:00:00:00:00", ipV4, ipV6 };
143
+ }
144
+ createUdpChannel(options) {
145
+ return UdpChannelReactNative.create(options);
146
+ }
147
+ }
148
+ export {
149
+ NetworkReactNative
150
+ };
151
+ //# sourceMappingURL=NetworkReactNative.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/net/NetworkReactNative.ts"],
4
+ "mappings": "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",
5
+ "names": ["networkInterfaces", "netInterface"]
6
+ }
@@ -0,0 +1,39 @@
1
+ import { ChannelType, UdpChannel, UdpChannelOptions } from "#general";
2
+ interface RemoteInfo {
3
+ address: string;
4
+ family: "IPv4" | "IPv6";
5
+ port: number;
6
+ size: number;
7
+ }
8
+ interface Socket {
9
+ setBroadcast(flag: boolean): void;
10
+ setMulticastInterface(interfaceAddress: string): void;
11
+ addMembership(multicastAddress: string, multicastInterface?: string): void;
12
+ on(event: "message", listener: (msg: Uint8Array, rinfo: RemoteInfo) => void): void;
13
+ on(event: "error", listener: (error: Error) => void): void;
14
+ removeListener(event: "message", listener: (msg: Uint8Array, rinfo: RemoteInfo) => void): void;
15
+ removeListener(event: "error", listener: (error: Error) => void): void;
16
+ send(msg: Uint8Array, port: number, address: string, callback: (error: Error | null) => void): void;
17
+ close(): void;
18
+ address(): {
19
+ address: string;
20
+ port: number;
21
+ };
22
+ }
23
+ export declare class UdpChannelReactNative implements UdpChannel {
24
+ private readonly type;
25
+ private readonly socket;
26
+ private readonly netInterface?;
27
+ static create({ listeningPort, type, listeningAddress, netInterface, membershipAddresses, }: UdpChannelOptions): Promise<UdpChannelReactNative>;
28
+ readonly maxPayloadSize: number;
29
+ constructor(type: "udp4" | "udp6", socket: Socket, netInterface?: string | undefined);
30
+ onData(listener: (netInterface: string, peerAddress: string, peerPort: number, data: Uint8Array) => void): {
31
+ close: () => Promise<void>;
32
+ };
33
+ send(host: string, port: number, data: Uint8Array): Promise<void>;
34
+ close(): Promise<void>;
35
+ get port(): number;
36
+ supports(type: ChannelType, address?: string): boolean;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=UdpChannelReactNative.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpChannelReactNative.d.ts","sourceRoot":"","sources":["../../../src/net/UdpChannelReactNative.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,WAAW,EAOX,UAAU,EACV,iBAAiB,EACpB,MAAM,UAAU,CAAC;AAOlB,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;AAmBD,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,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,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACpG,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;IA6DhD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;WA9DrB,MAAM,CAAC,EAChB,aAAa,EACb,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACtB,EAAE,iBAAiB;IAmDpB,QAAQ,CAAC,cAAc,SAAwB;gBAG1B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,YAAA;IAG1C,MAAM,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI;;;IAiBlG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAcjD,KAAK;IAQX,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM;CAe/C"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 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
+ } from "#general";
16
+ import { NetworkReactNative } from "./NetworkReactNative.js";
17
+ const logger = Logger.get("UdpChannelNode");
18
+ function createDgramSocket(host, port, options) {
19
+ const socket = dgram.createSocket({
20
+ ...options,
21
+ reusePort: options.reuseAddr
22
+ });
23
+ return new Promise((resolve, reject) => {
24
+ const handleBindError = (error) => {
25
+ try {
26
+ socket.close();
27
+ } catch (error2) {
28
+ logger.debug("Error on closing socket", error2);
29
+ }
30
+ reject(error);
31
+ };
32
+ socket.on("error", handleBindError);
33
+ socket.bind(port, host, (error) => {
34
+ if (error) return;
35
+ const { address: localHost, port: localPort } = socket.address();
36
+ logger.debug(
37
+ "Socket created and bound ",
38
+ Diagnostic.dict({
39
+ remoteAddress: `${host}:${port}`,
40
+ localAddress: `${localHost}:${localPort}`
41
+ })
42
+ );
43
+ socket.removeListener("error", handleBindError);
44
+ socket.on("error", (error2) => logger.error(error2));
45
+ resolve(socket);
46
+ });
47
+ });
48
+ }
49
+ class UdpChannelReactNative {
50
+ constructor(type, socket, netInterface) {
51
+ this.type = type;
52
+ this.socket = socket;
53
+ this.netInterface = netInterface;
54
+ }
55
+ static async create({
56
+ listeningPort,
57
+ type,
58
+ listeningAddress,
59
+ netInterface,
60
+ membershipAddresses
61
+ }) {
62
+ const socketOptions = { type, reuseAddr: true };
63
+ if (type === "udp6") {
64
+ socketOptions.ipv6Only = true;
65
+ }
66
+ const socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
67
+ socket.setBroadcast(true);
68
+ let netInterfaceZone;
69
+ if (netInterface !== void 0) {
70
+ netInterfaceZone = netInterface;
71
+ let multicastInterface;
72
+ if (type === "udp4") {
73
+ multicastInterface = await NetworkReactNative.getMulticastInterfaceIpv4(netInterface);
74
+ if (multicastInterface === void 0) {
75
+ throw new NetworkError(`No IPv4 addresses on interface: ${netInterface}`);
76
+ }
77
+ } else {
78
+ multicastInterface = `::%${netInterfaceZone}`;
79
+ }
80
+ logger.debug(
81
+ "Initialize multicast",
82
+ Diagnostic.dict({
83
+ address: `${multicastInterface}:${listeningPort}`,
84
+ interface: netInterface,
85
+ type
86
+ })
87
+ );
88
+ socket.setMulticastInterface(multicastInterface);
89
+ }
90
+ if (membershipAddresses !== void 0) {
91
+ const multicastInterfaces = await NetworkReactNative.getMembershipMulticastInterfaces(
92
+ netInterface,
93
+ type === "udp4"
94
+ );
95
+ for (const address of membershipAddresses) {
96
+ for (const multicastInterface of multicastInterfaces) {
97
+ try {
98
+ socket.addMembership(address, multicastInterface);
99
+ } catch (error) {
100
+ logger.warn(
101
+ `Error adding membership for address ${address}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
102
+ );
103
+ }
104
+ }
105
+ }
106
+ }
107
+ return new UdpChannelReactNative(type, socket, netInterfaceZone);
108
+ }
109
+ maxPayloadSize = MAX_UDP_MESSAGE_SIZE;
110
+ onData(listener) {
111
+ const messageListener = async (data, { address, port }) => {
112
+ const netInterface = this.netInterface ?? await NetworkReactNative.getNetInterfaceForIp(address);
113
+ if (netInterface === void 0) return;
114
+ listener(netInterface, address, port, data);
115
+ };
116
+ this.socket.on("message", messageListener);
117
+ return {
118
+ close: async () => {
119
+ this.socket.removeListener("message", messageListener);
120
+ }
121
+ };
122
+ }
123
+ async send(host, port, data) {
124
+ return new Promise((resolve, reject) => {
125
+ this.socket.send(data, port, host, (error) => {
126
+ if (error !== null) {
127
+ const netError = new NetworkError(error.message);
128
+ netError.stack = error.stack;
129
+ reject(netError);
130
+ return;
131
+ }
132
+ resolve();
133
+ });
134
+ });
135
+ }
136
+ async close() {
137
+ try {
138
+ this.socket.close();
139
+ } catch (error) {
140
+ logger.debug("Error on closing socket", error);
141
+ }
142
+ }
143
+ get port() {
144
+ return this.socket.address().port;
145
+ }
146
+ supports(type, address) {
147
+ if (type !== ChannelType.UDP) {
148
+ return false;
149
+ }
150
+ if (address === void 0) {
151
+ return true;
152
+ }
153
+ if (this.type === "udp4") {
154
+ return isIPv4(address);
155
+ }
156
+ return isIPv6(address);
157
+ }
158
+ }
159
+ export {
160
+ UdpChannelReactNative
161
+ };
162
+ //# sourceMappingURL=UdpChannelReactNative.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/net/UdpChannelReactNative.ts"],
4
+ "mappings": "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",
5
+ "names": ["error"]
6
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./NetworkReactNative.js";
7
+ export declare function closeNetwork(): Promise<void>;
8
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/net/export.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,cAAc,yBAAyB,CAAC;AAExC,wBAAsB,YAAY,kBAEjC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Network } from "@matter/general";
7
+ export * from "./NetworkReactNative.js";
8
+ async function closeNetwork() {
9
+ return Network.get().close();
10
+ }
11
+ export {
12
+ closeNetwork
13
+ };
14
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/net/export.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,eAAe;AAExB,cAAc;AAEd,eAAsB,eAAe;AACjC,SAAO,QAAQ,IAAI,EAAE,MAAM;AAC/B;",
5
+ "names": []
6
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/net/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Network, NoProviderError, singleton } from "@matter/general";
7
+ import { NetworkReactNative } from "./NetworkReactNative.js";
8
+ try {
9
+ Network.get();
10
+ } catch (error) {
11
+ NoProviderError.accept(error);
12
+ Network.get = singleton(() => new NetworkReactNative());
13
+ }
14
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/net/register.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,SAAS,iBAAiB,iBAAiB;AACpD,SAAS,0BAA0B;AAGnC,IAAI;AACA,UAAQ,IAAI;AAChB,SAAS,OAAO;AACZ,kBAAgB,OAAO,KAAK;AAC5B,UAAQ,MAAM,UAAU,MAAM,IAAI,mBAAmB,CAAC;AAE1D;",
5
+ "names": []
6
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "type": "module",
3
+ "imports": {
4
+ "#general": "@matter/general",
5
+ "#types": "@matter/types",
6
+ "#protocol": "@matter/protocol",
7
+ "#nodejs": "@matter/nodejs",
8
+ "#*": "./*"
9
+ }
10
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { MaybeAsyncStorage, SupportedStorageTypes } from "#general";
7
+ export declare class StorageBackendAsyncStorage extends MaybeAsyncStorage {
8
+ #private;
9
+ protected isInitialized: boolean;
10
+ /**
11
+ * Creates a new instance of the AsyncStorage storage backend. In a "namespace" is provided then the keys will be
12
+ * prefixed with the namespace (separated with a # which is normally not used in matter.js keys).
13
+ */
14
+ constructor(namespace?: string);
15
+ get initialized(): boolean;
16
+ initialize(): void;
17
+ close(): void;
18
+ clear(): any;
19
+ getContextBaseKey(contexts: string[], allowEmptyContext?: boolean): string;
20
+ buildStorageKey(contexts: string[], key: string): string;
21
+ get<T extends SupportedStorageTypes>(contexts: string[], key: string): Promise<T | undefined>;
22
+ set(contexts: string[], key: string, value: SupportedStorageTypes): Promise<void>;
23
+ set(contexts: string[], values: Record<string, SupportedStorageTypes>): Promise<void>;
24
+ delete(contexts: string[], key: string): any;
25
+ /** Returns all keys of a storage context without keys of sub-contexts */
26
+ keys(contexts: string[]): Promise<any[]>;
27
+ values(contexts: string[]): Promise<Record<string, SupportedStorageTypes>>;
28
+ contexts(contexts: string[]): Promise<string[]>;
29
+ clearAll(contexts: string[]): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=StorageBackendAsyncStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageBackendAsyncStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/StorageBackendAsyncStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAgB,qBAAqB,EAAoB,MAAM,UAAU,CAAC;AAGpG,qBAAa,0BAA2B,SAAQ,iBAAiB;;IAE7D,SAAS,CAAC,aAAa,UAAS;IAEhC;;;OAGG;gBACS,SAAS,CAAC,EAAE,MAAM;IAK9B,IAAI,WAAW,YAEd;IAED,UAAU;IAIV,KAAK;IAIL,KAAK;IAKL,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,iBAAiB,UAAQ;IAY/D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM;IAQzC,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAOnG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IACjF,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM;IAKtC,yEAAyE;IACnE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;IAcvB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;IASzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;IAmB3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;CAYpC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { MaybeAsyncStorage, StorageError, fromJson, toJson } from "#general";
7
+ import AsyncStorage from "@react-native-async-storage/async-storage";
8
+ class StorageBackendAsyncStorage extends MaybeAsyncStorage {
9
+ #namespace;
10
+ isInitialized = false;
11
+ /**
12
+ * Creates a new instance of the AsyncStorage storage backend. In a "namespace" is provided then the keys will be
13
+ * prefixed with the namespace (separated with a # which is normally not used in matter.js keys).
14
+ */
15
+ constructor(namespace) {
16
+ super();
17
+ this.#namespace = namespace ?? "";
18
+ }
19
+ get initialized() {
20
+ return this.isInitialized;
21
+ }
22
+ initialize() {
23
+ this.isInitialized = true;
24
+ }
25
+ close() {
26
+ this.isInitialized = false;
27
+ }
28
+ clear() {
29
+ return AsyncStorage.clear();
30
+ }
31
+ getContextBaseKey(contexts, allowEmptyContext = false) {
32
+ const contextKey = contexts.join(".");
33
+ if (!contextKey.length && !allowEmptyContext || contextKey.includes("..") || contextKey.startsWith(".") || contextKey.endsWith("."))
34
+ throw new StorageError("Context must not be an empty and not contain dots.");
35
+ return `${this.#namespace.length ? `${this.#namespace}#` : ""}${contextKey}`;
36
+ }
37
+ buildStorageKey(contexts, key) {
38
+ if (!key.length) {
39
+ throw new StorageError("Key must not be an empty string.");
40
+ }
41
+ const contextKey = this.getContextBaseKey(contexts);
42
+ return `${contextKey}.${key}`;
43
+ }
44
+ async get(contexts, key) {
45
+ const value = await AsyncStorage.getItem(this.buildStorageKey(contexts, key));
46
+ if (value === null) return void 0;
47
+ return fromJson(value);
48
+ }
49
+ async set(contexts, keyOrValues, value) {
50
+ if (typeof keyOrValues === "string") {
51
+ await AsyncStorage.setItem(this.buildStorageKey(contexts, keyOrValues), toJson(value));
52
+ } else {
53
+ for (const [key, value2] of Object.entries(keyOrValues)) {
54
+ await AsyncStorage.setItem(this.buildStorageKey(contexts, key), toJson(value2));
55
+ }
56
+ }
57
+ }
58
+ delete(contexts, key) {
59
+ return AsyncStorage.removeItem(this.buildStorageKey(contexts, key));
60
+ }
61
+ /** Returns all keys of a storage context without keys of sub-contexts */
62
+ async keys(contexts) {
63
+ const contextKey = this.getContextBaseKey(contexts);
64
+ const keys = [];
65
+ const contextKeyStart = `${contextKey}.`;
66
+ const allKeys = await AsyncStorage.getAllKeys();
67
+ for (const key of allKeys) {
68
+ if (key.startsWith(contextKeyStart) && !key.includes(".", contextKeyStart.length)) {
69
+ keys.push(key.substring(contextKeyStart.length));
70
+ }
71
+ }
72
+ return keys;
73
+ }
74
+ async values(contexts) {
75
+ const values = {};
76
+ for (const key of await this.keys(contexts)) {
77
+ values[key] = await this.get(contexts, key);
78
+ }
79
+ return values;
80
+ }
81
+ async contexts(contexts) {
82
+ const contextKey = this.getContextBaseKey(contexts, true);
83
+ const startContextKey = contextKey.length ? `${contextKey}.` : "";
84
+ const foundContexts = new Array();
85
+ const allKeys = await AsyncStorage.getAllKeys();
86
+ for (const key of allKeys) {
87
+ if (key.startsWith(startContextKey)) {
88
+ const subKeys = key.substring(startContextKey.length).split(".");
89
+ if (subKeys.length === 1) continue;
90
+ const context = subKeys[0];
91
+ if (!foundContexts.includes(context)) {
92
+ foundContexts.push(context);
93
+ }
94
+ }
95
+ }
96
+ return foundContexts;
97
+ }
98
+ async clearAll(contexts) {
99
+ const contextKey = this.getContextBaseKey(contexts, true);
100
+ const startContextKey = contextKey.length ? `${contextKey}.` : "";
101
+ const allKeys = await AsyncStorage.getAllKeys();
102
+ for (const key of allKeys) {
103
+ if (key.startsWith(startContextKey)) {
104
+ await AsyncStorage.removeItem(key);
105
+ }
106
+ }
107
+ }
108
+ }
109
+ export {
110
+ StorageBackendAsyncStorage
111
+ };
112
+ //# sourceMappingURL=StorageBackendAsyncStorage.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/storage/StorageBackendAsyncStorage.ts"],
4
+ "mappings": "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",
5
+ "names": ["value"]
6
+ }