@matter/general 0.16.0-alpha.0-20250814-484abe647 → 0.16.0-alpha.0-20250815-ac9fd6eb0
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/codec/DerCodec.d.ts +15 -14
- package/dist/cjs/codec/DerCodec.d.ts.map +1 -1
- package/dist/cjs/codec/DerCodec.js +19 -25
- package/dist/cjs/codec/DerCodec.js.map +1 -1
- package/dist/cjs/codec/DerTypes.d.ts +9 -8
- package/dist/cjs/codec/DerTypes.d.ts.map +1 -1
- package/dist/cjs/codec/DerTypes.js.map +1 -1
- package/dist/cjs/codec/DnsCodec.d.ts +16 -16
- package/dist/cjs/codec/DnsCodec.d.ts.map +1 -1
- package/dist/cjs/codec/DnsCodec.js +7 -7
- package/dist/cjs/codec/DnsCodec.js.map +1 -1
- package/dist/cjs/crypto/Crypto.d.ts +11 -10
- package/dist/cjs/crypto/Crypto.d.ts.map +1 -1
- package/dist/cjs/crypto/Crypto.js +4 -4
- package/dist/cjs/crypto/Crypto.js.map +1 -1
- package/dist/cjs/crypto/Key.d.ts +22 -21
- package/dist/cjs/crypto/Key.d.ts.map +1 -1
- package/dist/cjs/crypto/Key.js +17 -16
- package/dist/cjs/crypto/Key.js.map +1 -1
- package/dist/cjs/crypto/MockCrypto.d.ts.map +1 -1
- package/dist/cjs/crypto/MockCrypto.js +2 -1
- package/dist/cjs/crypto/MockCrypto.js.map +1 -1
- package/dist/cjs/crypto/Spake2p.d.ts +12 -11
- package/dist/cjs/crypto/Spake2p.d.ts.map +1 -1
- package/dist/cjs/crypto/Spake2p.js +15 -11
- package/dist/cjs/crypto/Spake2p.js.map +1 -1
- package/dist/cjs/crypto/StandardCrypto.d.ts +12 -11
- package/dist/cjs/crypto/StandardCrypto.d.ts.map +1 -1
- package/dist/cjs/crypto/StandardCrypto.js +27 -17
- package/dist/cjs/crypto/StandardCrypto.js.map +1 -1
- package/dist/cjs/crypto/aes/Aes.d.ts +2 -1
- package/dist/cjs/crypto/aes/Aes.d.ts.map +1 -1
- package/dist/cjs/crypto/aes/Aes.js +3 -1
- package/dist/cjs/crypto/aes/Aes.js.map +1 -1
- package/dist/cjs/crypto/aes/Ccm.d.ts +4 -3
- package/dist/cjs/crypto/aes/Ccm.d.ts.map +1 -1
- package/dist/cjs/crypto/aes/Ccm.js.map +1 -1
- package/dist/cjs/log/Diagnostic.js +1 -1
- package/dist/cjs/log/Diagnostic.js.map +1 -1
- package/dist/cjs/log/LogFormat.js +1 -1
- package/dist/cjs/log/LogFormat.js.map +1 -1
- package/dist/cjs/log/Logger.js +1 -1
- package/dist/cjs/log/Logger.js.map +1 -1
- package/dist/cjs/net/NetInterface.d.ts +2 -1
- package/dist/cjs/net/NetInterface.d.ts.map +1 -1
- package/dist/cjs/net/NetInterface.js.map +1 -1
- package/dist/cjs/net/TransportInterface.d.ts +2 -1
- package/dist/cjs/net/TransportInterface.d.ts.map +1 -1
- package/dist/cjs/net/TransportInterface.js.map +1 -1
- package/dist/cjs/net/UdpChannel.d.ts +3 -3
- package/dist/cjs/net/UdpChannel.d.ts.map +1 -1
- package/dist/cjs/net/UdpInterface.d.ts +4 -3
- package/dist/cjs/net/UdpInterface.d.ts.map +1 -1
- package/dist/cjs/net/UdpInterface.js.map +1 -1
- package/dist/cjs/net/UdpMulticastServer.d.ts +3 -2
- package/dist/cjs/net/UdpMulticastServer.d.ts.map +1 -1
- package/dist/cjs/net/UdpMulticastServer.js.map +1 -1
- package/dist/cjs/net/mock/MockRouter.d.ts +1 -1
- package/dist/cjs/net/mock/MockRouter.d.ts.map +1 -1
- package/dist/cjs/net/mock/MockUdpChannel.d.ts +1 -1
- package/dist/cjs/net/mock/MockUdpChannel.d.ts.map +1 -1
- package/dist/cjs/net/mock/MockUdpChannel.js.map +1 -1
- package/dist/cjs/net/mock/NetworkSimulator.d.ts +1 -1
- package/dist/cjs/net/mock/NetworkSimulator.d.ts.map +1 -1
- package/dist/cjs/storage/Storage.d.ts +1 -1
- package/dist/cjs/storage/Storage.d.ts.map +1 -1
- package/dist/cjs/storage/StorageBackendMemory.d.ts +1 -1
- package/dist/cjs/storage/StorageBackendMemory.d.ts.map +1 -1
- package/dist/cjs/storage/StorageBackendMemory.js +7 -5
- package/dist/cjs/storage/StorageBackendMemory.js.map +1 -1
- package/dist/cjs/storage/StorageContext.d.ts +1 -1
- package/dist/cjs/storage/StorageContext.d.ts.map +1 -1
- package/dist/cjs/storage/StorageContext.js.map +1 -1
- package/dist/cjs/storage/StringifyTools.d.ts +2 -1
- package/dist/cjs/storage/StringifyTools.d.ts.map +1 -1
- package/dist/cjs/storage/StringifyTools.js +1 -1
- package/dist/cjs/storage/StringifyTools.js.map +1 -1
- package/dist/cjs/transaction/Tx.js +5 -1
- package/dist/cjs/transaction/Tx.js.map +1 -1
- package/dist/cjs/util/Bytes.d.ts +29 -11
- package/dist/cjs/util/Bytes.d.ts.map +1 -1
- package/dist/cjs/util/Bytes.js +30 -11
- package/dist/cjs/util/Bytes.js.map +1 -1
- package/dist/cjs/util/DataReader.d.ts +2 -2
- package/dist/cjs/util/DataReader.d.ts.map +1 -1
- package/dist/cjs/util/DataReader.js +1 -1
- package/dist/cjs/util/DataReader.js.map +1 -1
- package/dist/cjs/util/DataWriter.d.ts +3 -3
- package/dist/cjs/util/DataWriter.d.ts.map +1 -1
- package/dist/cjs/util/DataWriter.js +1 -1
- package/dist/cjs/util/DataWriter.js.map +1 -1
- package/dist/cjs/util/String.d.ts.map +1 -1
- package/dist/cjs/util/String.js +3 -8
- package/dist/cjs/util/String.js.map +1 -1
- package/dist/esm/codec/DerCodec.d.ts +15 -14
- package/dist/esm/codec/DerCodec.d.ts.map +1 -1
- package/dist/esm/codec/DerCodec.js +19 -25
- package/dist/esm/codec/DerCodec.js.map +1 -1
- package/dist/esm/codec/DerTypes.d.ts +9 -8
- package/dist/esm/codec/DerTypes.d.ts.map +1 -1
- package/dist/esm/codec/DerTypes.js.map +1 -1
- package/dist/esm/codec/DnsCodec.d.ts +16 -16
- package/dist/esm/codec/DnsCodec.d.ts.map +1 -1
- package/dist/esm/codec/DnsCodec.js +7 -7
- package/dist/esm/codec/DnsCodec.js.map +1 -1
- package/dist/esm/crypto/Crypto.d.ts +11 -10
- package/dist/esm/crypto/Crypto.d.ts.map +1 -1
- package/dist/esm/crypto/Crypto.js +4 -4
- package/dist/esm/crypto/Crypto.js.map +1 -1
- package/dist/esm/crypto/Key.d.ts +22 -21
- package/dist/esm/crypto/Key.d.ts.map +1 -1
- package/dist/esm/crypto/Key.js +17 -16
- package/dist/esm/crypto/Key.js.map +1 -1
- package/dist/esm/crypto/MockCrypto.d.ts.map +1 -1
- package/dist/esm/crypto/MockCrypto.js +2 -1
- package/dist/esm/crypto/MockCrypto.js.map +1 -1
- package/dist/esm/crypto/Spake2p.d.ts +12 -11
- package/dist/esm/crypto/Spake2p.d.ts.map +1 -1
- package/dist/esm/crypto/Spake2p.js +15 -11
- package/dist/esm/crypto/Spake2p.js.map +1 -1
- package/dist/esm/crypto/StandardCrypto.d.ts +12 -11
- package/dist/esm/crypto/StandardCrypto.d.ts.map +1 -1
- package/dist/esm/crypto/StandardCrypto.js +27 -17
- package/dist/esm/crypto/StandardCrypto.js.map +1 -1
- package/dist/esm/crypto/aes/Aes.d.ts +2 -1
- package/dist/esm/crypto/aes/Aes.d.ts.map +1 -1
- package/dist/esm/crypto/aes/Aes.js +3 -1
- package/dist/esm/crypto/aes/Aes.js.map +1 -1
- package/dist/esm/crypto/aes/Ccm.d.ts +4 -3
- package/dist/esm/crypto/aes/Ccm.d.ts.map +1 -1
- package/dist/esm/crypto/aes/Ccm.js.map +1 -1
- package/dist/esm/log/Diagnostic.js +1 -1
- package/dist/esm/log/Diagnostic.js.map +1 -1
- package/dist/esm/log/LogFormat.js +1 -1
- package/dist/esm/log/LogFormat.js.map +1 -1
- package/dist/esm/log/Logger.js +1 -1
- package/dist/esm/log/Logger.js.map +1 -1
- package/dist/esm/net/NetInterface.d.ts +2 -1
- package/dist/esm/net/NetInterface.d.ts.map +1 -1
- package/dist/esm/net/NetInterface.js.map +1 -1
- package/dist/esm/net/TransportInterface.d.ts +2 -1
- package/dist/esm/net/TransportInterface.d.ts.map +1 -1
- package/dist/esm/net/TransportInterface.js.map +1 -1
- package/dist/esm/net/UdpChannel.d.ts +3 -3
- package/dist/esm/net/UdpChannel.d.ts.map +1 -1
- package/dist/esm/net/UdpInterface.d.ts +4 -3
- package/dist/esm/net/UdpInterface.d.ts.map +1 -1
- package/dist/esm/net/UdpInterface.js.map +1 -1
- package/dist/esm/net/UdpMulticastServer.d.ts +3 -2
- package/dist/esm/net/UdpMulticastServer.d.ts.map +1 -1
- package/dist/esm/net/UdpMulticastServer.js.map +1 -1
- package/dist/esm/net/mock/MockRouter.d.ts +1 -1
- package/dist/esm/net/mock/MockRouter.d.ts.map +1 -1
- package/dist/esm/net/mock/MockUdpChannel.d.ts +1 -1
- package/dist/esm/net/mock/MockUdpChannel.d.ts.map +1 -1
- package/dist/esm/net/mock/MockUdpChannel.js.map +1 -1
- package/dist/esm/net/mock/NetworkSimulator.d.ts +1 -1
- package/dist/esm/net/mock/NetworkSimulator.d.ts.map +1 -1
- package/dist/esm/storage/Storage.d.ts +1 -1
- package/dist/esm/storage/Storage.d.ts.map +1 -1
- package/dist/esm/storage/StorageBackendMemory.d.ts +1 -1
- package/dist/esm/storage/StorageBackendMemory.d.ts.map +1 -1
- package/dist/esm/storage/StorageBackendMemory.js +7 -5
- package/dist/esm/storage/StorageBackendMemory.js.map +1 -1
- package/dist/esm/storage/StorageContext.d.ts +1 -1
- package/dist/esm/storage/StorageContext.d.ts.map +1 -1
- package/dist/esm/storage/StorageContext.js.map +1 -1
- package/dist/esm/storage/StringifyTools.d.ts +2 -1
- package/dist/esm/storage/StringifyTools.d.ts.map +1 -1
- package/dist/esm/storage/StringifyTools.js +1 -1
- package/dist/esm/storage/StringifyTools.js.map +1 -1
- package/dist/esm/transaction/Tx.js +5 -1
- package/dist/esm/transaction/Tx.js.map +1 -1
- package/dist/esm/util/Bytes.d.ts +29 -11
- package/dist/esm/util/Bytes.d.ts.map +1 -1
- package/dist/esm/util/Bytes.js +31 -12
- package/dist/esm/util/Bytes.js.map +1 -1
- package/dist/esm/util/DataReader.d.ts +2 -2
- package/dist/esm/util/DataReader.d.ts.map +1 -1
- package/dist/esm/util/DataReader.js +1 -1
- package/dist/esm/util/DataReader.js.map +1 -1
- package/dist/esm/util/DataWriter.d.ts +3 -3
- package/dist/esm/util/DataWriter.d.ts.map +1 -1
- package/dist/esm/util/DataWriter.js +2 -2
- package/dist/esm/util/DataWriter.js.map +1 -1
- package/dist/esm/util/String.d.ts.map +1 -1
- package/dist/esm/util/String.js +3 -8
- package/dist/esm/util/String.js.map +1 -1
- package/package.json +2 -2
- package/src/codec/DerCodec.ts +32 -39
- package/src/codec/DerTypes.ts +4 -3
- package/src/codec/DnsCodec.ts +21 -21
- package/src/crypto/Crypto.ts +16 -26
- package/src/crypto/Key.ts +46 -41
- package/src/crypto/MockCrypto.ts +2 -1
- package/src/crypto/Spake2p.ts +26 -22
- package/src/crypto/StandardCrypto.ts +40 -31
- package/src/crypto/aes/Aes.ts +4 -2
- package/src/crypto/aes/Ccm.ts +4 -3
- package/src/log/Diagnostic.ts +1 -1
- package/src/log/LogFormat.ts +1 -1
- package/src/log/Logger.ts +1 -1
- package/src/net/NetInterface.ts +2 -1
- package/src/net/TransportInterface.ts +2 -1
- package/src/net/UdpChannel.ts +3 -3
- package/src/net/UdpInterface.ts +4 -3
- package/src/net/UdpMulticastServer.ts +3 -2
- package/src/net/mock/MockRouter.ts +1 -1
- package/src/net/mock/MockUdpChannel.ts +1 -1
- package/src/net/mock/NetworkSimulator.ts +1 -1
- package/src/storage/Storage.ts +1 -1
- package/src/storage/StorageBackendMemory.ts +8 -6
- package/src/storage/StorageContext.ts +1 -1
- package/src/storage/StringifyTools.ts +2 -2
- package/src/transaction/Tx.ts +5 -1
- package/src/util/Bytes.ts +59 -21
- package/src/util/DataReader.ts +2 -2
- package/src/util/DataWriter.ts +3 -3
- package/src/util/String.ts +3 -8
package/src/net/NetInterface.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import { Environment } from "#environment/Environment.js";
|
|
8
8
|
import { Environmental } from "#environment/Environmental.js";
|
|
9
|
+
import { Bytes } from "#util/Bytes.js";
|
|
9
10
|
import { Channel } from "./Channel.js";
|
|
10
11
|
import { ServerAddress } from "./ServerAddress.js";
|
|
11
12
|
import { TransportInterface, TransportInterfaceSet } from "./TransportInterface.js";
|
|
@@ -14,7 +15,7 @@ import { TransportInterface, TransportInterfaceSet } from "./TransportInterface.
|
|
|
14
15
|
* A Network interface enhances a TransportInterface with the ability to open a channel to a remote server.
|
|
15
16
|
*/
|
|
16
17
|
export interface NetInterface extends TransportInterface {
|
|
17
|
-
openChannel(address: ServerAddress): Promise<Channel<
|
|
18
|
+
openChannel(address: ServerAddress): Promise<Channel<Bytes>>;
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
export function isNetworkInterface(obj: TransportInterface | NetInterface): obj is NetInterface {
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import { Environment } from "#environment/Environment.js";
|
|
8
8
|
import { Environmental } from "#environment/Environmental.js";
|
|
9
|
+
import { Bytes } from "#util/Bytes.js";
|
|
9
10
|
import { BasicSet } from "#util/Set.js";
|
|
10
11
|
import { Channel, ChannelType } from "./Channel.js";
|
|
11
12
|
|
|
@@ -14,7 +15,7 @@ import { Channel, ChannelType } from "./Channel.js";
|
|
|
14
15
|
* It cannot open new connections.
|
|
15
16
|
*/
|
|
16
17
|
export interface TransportInterface {
|
|
17
|
-
onData(listener: (socket: Channel<
|
|
18
|
+
onData(listener: (socket: Channel<Bytes>, data: Bytes) => void): TransportInterface.Listener;
|
|
18
19
|
close(): Promise<void>;
|
|
19
20
|
supports(type: ChannelType, address?: string): boolean;
|
|
20
21
|
}
|
package/src/net/UdpChannel.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { MaybePromise } from "#util/index.js";
|
|
7
|
+
import { Bytes, MaybePromise } from "#util/index.js";
|
|
8
8
|
import { ChannelType } from "./Channel.js";
|
|
9
9
|
import { TransportInterface } from "./TransportInterface.js";
|
|
10
10
|
|
|
@@ -25,7 +25,7 @@ export interface UdpChannel {
|
|
|
25
25
|
addMembership(address: string): MaybePromise<void>;
|
|
26
26
|
dropMembership(address: string): MaybePromise<void>;
|
|
27
27
|
onData(listener: UdpChannel.Callback): TransportInterface.Listener;
|
|
28
|
-
send(host: string, port: number, data:
|
|
28
|
+
send(host: string, port: number, data: Bytes): Promise<void>;
|
|
29
29
|
close(): Promise<void>;
|
|
30
30
|
get port(): number;
|
|
31
31
|
supports(type: ChannelType, address?: string): boolean;
|
|
@@ -33,6 +33,6 @@ export interface UdpChannel {
|
|
|
33
33
|
|
|
34
34
|
export namespace UdpChannel {
|
|
35
35
|
export interface Callback {
|
|
36
|
-
(netInterface: string | undefined, peerAddress: string, peerPort: number, data:
|
|
36
|
+
(netInterface: string | undefined, peerAddress: string, peerPort: number, data: Bytes): void;
|
|
37
37
|
}
|
|
38
38
|
}
|
package/src/net/UdpInterface.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Bytes } from "#util/Bytes.js";
|
|
7
8
|
import { Channel, ChannelType, IpNetworkChannel } from "./Channel.js";
|
|
8
9
|
import { NetInterface } from "./NetInterface.js";
|
|
9
10
|
import { Network, NetworkError } from "./Network.js";
|
|
@@ -40,7 +41,7 @@ export class UdpInterface implements NetInterface {
|
|
|
40
41
|
return Promise.resolve(new UdpConnection(this.#server, ip, port));
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
onData(listener: (channel: Channel<
|
|
44
|
+
onData(listener: (channel: Channel<Bytes>, messageBytes: Bytes) => void): TransportInterface.Listener {
|
|
44
45
|
return this.#server.onData((_netInterface, peerHost, peerPort, data) =>
|
|
45
46
|
listener(new UdpConnection(this.#server, peerHost, peerPort), data),
|
|
46
47
|
);
|
|
@@ -63,7 +64,7 @@ export class UdpInterface implements NetInterface {
|
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
66
|
|
|
66
|
-
export class UdpConnection implements IpNetworkChannel<
|
|
67
|
+
export class UdpConnection implements IpNetworkChannel<Bytes> {
|
|
67
68
|
readonly isReliable = false;
|
|
68
69
|
readonly type = ChannelType.UDP;
|
|
69
70
|
readonly #server: UdpChannel;
|
|
@@ -80,7 +81,7 @@ export class UdpConnection implements IpNetworkChannel<Uint8Array> {
|
|
|
80
81
|
return this.#server.maxPayloadSize;
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
send(data:
|
|
84
|
+
send(data: Bytes) {
|
|
84
85
|
return this.#server.send(this.#peerAddress, this.#peerPort, data);
|
|
85
86
|
}
|
|
86
87
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { MatterAggregateError } from "#MatterError.js";
|
|
8
|
+
import { Bytes } from "#util/Bytes.js";
|
|
8
9
|
import { Logger } from "../log/Logger.js";
|
|
9
10
|
import { Cache } from "../util/Cache.js";
|
|
10
11
|
import { asError } from "../util/Error.js";
|
|
@@ -89,7 +90,7 @@ export class UdpMulticastServer {
|
|
|
89
90
|
return this.serverIpv4 !== undefined;
|
|
90
91
|
}
|
|
91
92
|
|
|
92
|
-
onMessage(listener: (message:
|
|
93
|
+
onMessage(listener: (message: Bytes, peerAddress: string, netInterface: string) => void) {
|
|
93
94
|
this.serverIpv4?.onData((netInterface, peerAddress, _port, message) => {
|
|
94
95
|
if (netInterface === undefined) {
|
|
95
96
|
// Ignore Network packages not coming over any known interface
|
|
@@ -106,7 +107,7 @@ export class UdpMulticastServer {
|
|
|
106
107
|
});
|
|
107
108
|
}
|
|
108
109
|
|
|
109
|
-
async send(message:
|
|
110
|
+
async send(message: Bytes, netInterface?: string, uniCastTarget?: string) {
|
|
110
111
|
netInterface = netInterface ?? this.netInterface;
|
|
111
112
|
|
|
112
113
|
// When we know the network interface and the unicast target, we can send unicast
|
|
@@ -62,7 +62,7 @@ export class MockUdpChannel implements UdpChannel {
|
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
async send(host: string, port: number, payload:
|
|
65
|
+
async send(host: string, port: number, payload: BufferSource) {
|
|
66
66
|
this.#host.simulator.router({
|
|
67
67
|
kind: "udp",
|
|
68
68
|
sourceAddress: this.#sendFrom,
|
|
@@ -20,5 +20,5 @@ export class NetworkSimulator {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export namespace NetworkSimulator {
|
|
23
|
-
export type Listener = (netInterface: string, peerAddress: string, peerPort: number, data:
|
|
23
|
+
export type Listener = (netInterface: string, peerAddress: string, peerPort: number, data: BufferSource) => void;
|
|
24
24
|
}
|
package/src/storage/Storage.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Bytes } from "#util/Bytes.js";
|
|
7
8
|
import { deepCopy } from "#util/DeepCopy.js";
|
|
8
9
|
import { CloneableStorage, Storage, StorageError } from "./Storage.js";
|
|
9
10
|
import { SupportedStorageTypes } from "./StringifyTools.js";
|
|
@@ -68,13 +69,13 @@ export class StorageBackendMemory extends Storage implements CloneableStorage {
|
|
|
68
69
|
if (value === undefined) {
|
|
69
70
|
return new Blob([]);
|
|
70
71
|
}
|
|
71
|
-
if (!(value
|
|
72
|
-
throw new StorageError("Value must be
|
|
72
|
+
if (!Bytes.isBytes(value)) {
|
|
73
|
+
throw new StorageError("Value must be a BufferSource to read as blob stream.");
|
|
73
74
|
}
|
|
74
|
-
return new Blob([value]);
|
|
75
|
+
return new Blob([Bytes.exclusive(value)]);
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
async writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<
|
|
78
|
+
async writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<BufferSource>): Promise<void> {
|
|
78
79
|
this.#assertInitialized();
|
|
79
80
|
const reader = stream.getReader();
|
|
80
81
|
const chunks: Uint8Array[] = [];
|
|
@@ -84,8 +85,9 @@ export class StorageBackendMemory extends Storage implements CloneableStorage {
|
|
|
84
85
|
while (true) {
|
|
85
86
|
const { done, value } = await reader.read();
|
|
86
87
|
if (done) break;
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
const data = Bytes.of(value);
|
|
89
|
+
chunks.push(data);
|
|
90
|
+
length += data.length;
|
|
89
91
|
}
|
|
90
92
|
const combined = new Uint8Array(length);
|
|
91
93
|
let offset = 0;
|
|
@@ -111,7 +111,7 @@ export class StorageContext implements StorageContextFactory {
|
|
|
111
111
|
return this.storage.openBlob(this.thisContexts, key);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
writeBlobFromStream(key: string, stream: ReadableStream<
|
|
114
|
+
writeBlobFromStream(key: string, stream: ReadableStream<BufferSource>) {
|
|
115
115
|
return this.storage.writeBlobFromStream(this.thisContexts, key, stream);
|
|
116
116
|
}
|
|
117
117
|
}
|
|
@@ -9,7 +9,7 @@ import { Bytes } from "../util/Bytes.js";
|
|
|
9
9
|
import { isObject } from "../util/Type.js";
|
|
10
10
|
|
|
11
11
|
/** Supported base types to stringify the data for the storage that can be used as keys and also values. */
|
|
12
|
-
type SupportedStorageBaseTypes = string | number | boolean | bigint |
|
|
12
|
+
type SupportedStorageBaseTypes = string | number | boolean | bigint | Bytes;
|
|
13
13
|
|
|
14
14
|
/** Supported combined types to stringify the data for the storage that can be used as values. */
|
|
15
15
|
type SupportedComplexStorageTypes =
|
|
@@ -38,7 +38,7 @@ export function toJson(object: SupportedStorageTypes, spaces?: number): string {
|
|
|
38
38
|
if (typeof value === "bigint") {
|
|
39
39
|
return `{"${JSON_SPECIAL_KEY_TYPE}":"BigInt","${JSON_SPECIAL_KEY_VALUE}":"${value.toString()}"}`;
|
|
40
40
|
}
|
|
41
|
-
if (value
|
|
41
|
+
if (Bytes.isBytes(value)) {
|
|
42
42
|
return `{"${JSON_SPECIAL_KEY_TYPE}":"Uint8Array","${JSON_SPECIAL_KEY_VALUE}":"${Bytes.toHex(value)}"}`;
|
|
43
43
|
}
|
|
44
44
|
//Node.js can sometimes pass in a native Buffer object in place of a Uint8Array, of which it is a subclass of, the Buffer class implements its own toJSON method which breaks our serialization.
|
package/src/transaction/Tx.ts
CHANGED
|
@@ -291,7 +291,11 @@ class Tx implements Transaction, Transaction.Finalization {
|
|
|
291
291
|
|
|
292
292
|
reject(cause: unknown): MaybePromise<never> {
|
|
293
293
|
if (this.#status === Status.Shared) {
|
|
294
|
-
|
|
294
|
+
try {
|
|
295
|
+
this.#reset("released");
|
|
296
|
+
} finally {
|
|
297
|
+
this[Symbol.dispose]();
|
|
298
|
+
}
|
|
295
299
|
throw cause;
|
|
296
300
|
}
|
|
297
301
|
|
package/src/util/Bytes.ts
CHANGED
|
@@ -4,13 +4,20 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { UnexpectedDataError } from "../MatterError.js";
|
|
7
|
+
import { ImplementationError, UnexpectedDataError } from "../MatterError.js";
|
|
8
8
|
|
|
9
9
|
export enum Endian {
|
|
10
10
|
Little,
|
|
11
11
|
Big,
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* A standard JS source of bytes.
|
|
16
|
+
*
|
|
17
|
+
* This alias mainly exists because "AllowedSharedBufferSource" is an annoying name.
|
|
18
|
+
*/
|
|
19
|
+
export type Bytes = AllowSharedBufferSource;
|
|
20
|
+
|
|
14
21
|
/**
|
|
15
22
|
* A string tag for hex literals.
|
|
16
23
|
*
|
|
@@ -34,29 +41,37 @@ export function b$(strings: TemplateStringsArray, ...values: unknown[]) {
|
|
|
34
41
|
* Utility functions for manipulating Uint8Array.
|
|
35
42
|
*/
|
|
36
43
|
export namespace Bytes {
|
|
37
|
-
export function toHex(array:
|
|
44
|
+
export function toHex(array: Bytes) {
|
|
38
45
|
const hexArray = new Array<string>();
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
const data = Bytes.of(array);
|
|
47
|
+
hexArray.length = data.length;
|
|
48
|
+
data.forEach(byte => hexArray.push(byte.toString(16).padStart(2, "0")));
|
|
41
49
|
return hexArray.join("");
|
|
42
50
|
}
|
|
43
51
|
|
|
44
|
-
export function toBase64(array:
|
|
52
|
+
export function toBase64(array: Bytes) {
|
|
45
53
|
let result = "";
|
|
46
|
-
|
|
54
|
+
const data = Bytes.of(array);
|
|
55
|
+
data.forEach(byte => (result += String.fromCharCode(byte)));
|
|
47
56
|
return btoa(result);
|
|
48
57
|
}
|
|
49
58
|
|
|
50
|
-
export function dataViewOf(array:
|
|
51
|
-
|
|
59
|
+
export function dataViewOf(array: Bytes) {
|
|
60
|
+
const data = Bytes.of(array);
|
|
61
|
+
return new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
52
62
|
}
|
|
53
63
|
|
|
54
|
-
export function areEqual(array1:
|
|
55
|
-
if (array1.
|
|
56
|
-
|
|
64
|
+
export function areEqual(array1: Bytes, array2: Bytes) {
|
|
65
|
+
if (array1.byteLength !== array2.byteLength) return false;
|
|
66
|
+
const data1 = Bytes.of(array1);
|
|
67
|
+
const data2 = Bytes.of(array2);
|
|
68
|
+
return data1.every((value, index) => data2[index] === value);
|
|
57
69
|
}
|
|
58
70
|
|
|
59
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Obtain a {@link Uint8Array} for {@link Bytes}.
|
|
73
|
+
*/
|
|
74
|
+
export function of(source: Bytes) {
|
|
60
75
|
if (source instanceof Uint8Array) {
|
|
61
76
|
return source;
|
|
62
77
|
}
|
|
@@ -68,7 +83,28 @@ export namespace Bytes {
|
|
|
68
83
|
return new Uint8Array(source);
|
|
69
84
|
}
|
|
70
85
|
|
|
71
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Like {@link of} for the few places where JS differentiates between {@link BufferSource} and
|
|
88
|
+
* {@link SharedBufferSource}.
|
|
89
|
+
*
|
|
90
|
+
* We generally do not deal with shared buffers and this is mostly relevant for security APIs. So we throw if for
|
|
91
|
+
* some reason the input sourde is not exclusive.
|
|
92
|
+
*/
|
|
93
|
+
export function exclusive(source: Bytes) {
|
|
94
|
+
const buffer = "buffer" in source ? source.buffer : source;
|
|
95
|
+
|
|
96
|
+
if (buffer[Symbol.toStringTag] !== "ArrayBuffer") {
|
|
97
|
+
throw new ImplementationError("A shared buffer source is not allowed here");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return source as BufferSource;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function isBytes(source: unknown): source is Bytes {
|
|
104
|
+
return source instanceof ArrayBuffer || ArrayBuffer.isView(source);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function fromHex(hexString: string): Bytes {
|
|
72
108
|
if (hexString.length === 0) return new Uint8Array(0);
|
|
73
109
|
if (hexString.length % 2 !== 0) throw new UnexpectedDataError("Hex string should have an even length.");
|
|
74
110
|
const bytes = hexString.match(/.{1,2}/g)?.map(byteHex => parseInt(byteHex, 16));
|
|
@@ -86,27 +122,29 @@ export namespace Bytes {
|
|
|
86
122
|
return fromHex(result);
|
|
87
123
|
}
|
|
88
124
|
|
|
89
|
-
export function fromString(string: string) {
|
|
125
|
+
export function fromString(string: string): Bytes {
|
|
90
126
|
return new TextEncoder().encode(string);
|
|
91
127
|
}
|
|
92
128
|
|
|
93
|
-
export function concat(...arrays:
|
|
129
|
+
export function concat(...arrays: Bytes[]): Bytes {
|
|
94
130
|
let length = 0;
|
|
95
|
-
arrays.
|
|
131
|
+
const data = arrays.map(array => Bytes.of(array));
|
|
132
|
+
data.forEach(array => (length += array.length));
|
|
96
133
|
const result = new Uint8Array(length);
|
|
97
134
|
let offset = 0;
|
|
98
|
-
|
|
135
|
+
data.forEach(array => {
|
|
99
136
|
result.set(array, offset);
|
|
100
137
|
offset += array.length;
|
|
101
138
|
});
|
|
102
139
|
return result;
|
|
103
140
|
}
|
|
104
141
|
|
|
105
|
-
export function asBigInt(bytes:
|
|
106
|
-
const view =
|
|
142
|
+
export function asBigInt(bytes: Bytes) {
|
|
143
|
+
const view = Bytes.dataViewOf(bytes);
|
|
107
144
|
let result = 0n;
|
|
108
|
-
|
|
109
|
-
|
|
145
|
+
const length = view.byteLength;
|
|
146
|
+
for (let i = 0; i < length; ) {
|
|
147
|
+
const remaining = length - i;
|
|
110
148
|
if (remaining >= 8) {
|
|
111
149
|
result = (result << 64n) + view.getBigUint64(i);
|
|
112
150
|
i += 8;
|
package/src/util/DataReader.ts
CHANGED
|
@@ -13,8 +13,8 @@ export class DataReader<E extends Endian = Endian.Big> {
|
|
|
13
13
|
readonly #buffer: Uint8Array;
|
|
14
14
|
#offset = 0;
|
|
15
15
|
|
|
16
|
-
constructor(buffer:
|
|
17
|
-
this.#buffer = buffer;
|
|
16
|
+
constructor(buffer: Bytes, endian?: E) {
|
|
17
|
+
this.#buffer = Bytes.of(buffer);
|
|
18
18
|
this.#dataView = Bytes.dataViewOf(this.#buffer);
|
|
19
19
|
this.#littleEndian = endian === Endian.Little;
|
|
20
20
|
}
|
package/src/util/DataWriter.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { Endian } from "./Bytes.js";
|
|
7
|
+
import { Bytes, Endian } from "./Bytes.js";
|
|
8
8
|
import { toNumber } from "./Number.js";
|
|
9
9
|
|
|
10
10
|
/** Writer that auto-increments its offset after each write. */
|
|
@@ -86,8 +86,8 @@ export class DataWriter<E extends Endian = Endian.Big> {
|
|
|
86
86
|
this.length += 8;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
writeByteArray(value:
|
|
90
|
-
this.chunks.push(value);
|
|
89
|
+
writeByteArray(value: Bytes) {
|
|
90
|
+
this.chunks.push(Bytes.of(value));
|
|
91
91
|
this.length += value.byteLength;
|
|
92
92
|
}
|
|
93
93
|
|
package/src/util/String.ts
CHANGED
|
@@ -139,13 +139,8 @@ export function serialize(value: any) {
|
|
|
139
139
|
if (typeof value === "boolean") {
|
|
140
140
|
return value ? "true" : "false";
|
|
141
141
|
}
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
const bytes = Array<string>();
|
|
145
|
-
for (let i = 0; i < dv.byteLength; i++) {
|
|
146
|
-
bytes.push(dv.getUint8(i).toString(16).padStart(2, "0"));
|
|
147
|
-
}
|
|
148
|
-
return bytes.join("");
|
|
142
|
+
if (Bytes.isBytes(value)) {
|
|
143
|
+
return Bytes.toHex(value);
|
|
149
144
|
}
|
|
150
145
|
|
|
151
146
|
// Composite objects after this
|
|
@@ -284,7 +279,7 @@ export function serializeToJs(value: unknown) {
|
|
|
284
279
|
return `new Date(${JSON.stringify(value.toISOString)})`;
|
|
285
280
|
}
|
|
286
281
|
|
|
287
|
-
if (value
|
|
282
|
+
if (Bytes.isBytes(value)) {
|
|
288
283
|
return `b$\`${Bytes.toHex(value)}\``;
|
|
289
284
|
}
|
|
290
285
|
|