@matter/protocol 0.16.0-alpha.0-20250913-0bc2515df → 0.16.0-alpha.0-20250920-809524dba
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/bdx/BdxClient.d.ts +31 -0
- package/dist/cjs/bdx/BdxClient.d.ts.map +1 -0
- package/dist/cjs/bdx/BdxClient.js +57 -0
- package/dist/cjs/bdx/BdxClient.js.map +6 -0
- package/dist/cjs/bdx/BdxError.d.ts +21 -0
- package/dist/cjs/bdx/BdxError.d.ts.map +1 -0
- package/dist/cjs/bdx/BdxError.js +54 -0
- package/dist/cjs/bdx/BdxError.js.map +6 -0
- package/dist/cjs/bdx/BdxMessenger.d.ts +77 -0
- package/dist/cjs/bdx/BdxMessenger.d.ts.map +1 -0
- package/dist/cjs/bdx/BdxMessenger.js +245 -0
- package/dist/cjs/bdx/BdxMessenger.js.map +6 -0
- package/dist/cjs/bdx/BdxProtocol.d.ts +25 -0
- package/dist/cjs/bdx/BdxProtocol.d.ts.map +1 -0
- package/dist/cjs/bdx/BdxProtocol.js +102 -0
- package/dist/cjs/bdx/BdxProtocol.js.map +6 -0
- package/dist/cjs/bdx/BdxSession.d.ts +36 -0
- package/dist/cjs/bdx/BdxSession.d.ts.map +1 -0
- package/dist/cjs/bdx/BdxSession.js +153 -0
- package/dist/cjs/bdx/BdxSession.js.map +6 -0
- package/dist/cjs/bdx/BdxSessionConfiguration.d.ts +61 -0
- package/dist/cjs/bdx/BdxSessionConfiguration.d.ts.map +1 -0
- package/dist/cjs/bdx/BdxSessionConfiguration.js +95 -0
- package/dist/cjs/bdx/BdxSessionConfiguration.js.map +6 -0
- package/dist/cjs/bdx/FileDesignator.d.ts +21 -0
- package/dist/cjs/bdx/FileDesignator.d.ts.map +1 -0
- package/dist/cjs/bdx/FileDesignator.js +62 -0
- package/dist/cjs/bdx/FileDesignator.js.map +6 -0
- package/dist/cjs/bdx/PersistedFileDesignator.d.ts +16 -0
- package/dist/cjs/bdx/PersistedFileDesignator.d.ts.map +1 -0
- package/dist/cjs/bdx/PersistedFileDesignator.js +57 -0
- package/dist/cjs/bdx/PersistedFileDesignator.js.map +6 -0
- package/dist/cjs/bdx/bdx-session-initiator.d.ts +14 -0
- package/dist/cjs/bdx/bdx-session-initiator.d.ts.map +1 -0
- package/dist/cjs/bdx/bdx-session-initiator.js +218 -0
- package/dist/cjs/bdx/bdx-session-initiator.js.map +6 -0
- package/dist/cjs/bdx/flow/DrivenSendingFlow.d.ts +15 -0
- package/dist/cjs/bdx/flow/DrivenSendingFlow.d.ts.map +1 -0
- package/dist/cjs/bdx/flow/DrivenSendingFlow.js +49 -0
- package/dist/cjs/bdx/flow/DrivenSendingFlow.js.map +6 -0
- package/dist/cjs/bdx/flow/DrivingReceivingFlow.d.ts +15 -0
- package/dist/cjs/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -0
- package/dist/cjs/bdx/flow/DrivingReceivingFlow.js +47 -0
- package/dist/cjs/bdx/flow/DrivingReceivingFlow.js.map +6 -0
- package/dist/cjs/bdx/flow/Flow.d.ts +48 -0
- package/dist/cjs/bdx/flow/Flow.d.ts.map +1 -0
- package/dist/cjs/bdx/flow/Flow.js +112 -0
- package/dist/cjs/bdx/flow/Flow.js.map +6 -0
- package/dist/cjs/bdx/flow/FollowingReceivingFlow.d.ts +16 -0
- package/dist/cjs/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -0
- package/dist/cjs/bdx/flow/FollowingReceivingFlow.js +60 -0
- package/dist/cjs/bdx/flow/FollowingReceivingFlow.js.map +6 -0
- package/dist/cjs/bdx/flow/FollowingSendingFlow.d.ts +15 -0
- package/dist/cjs/bdx/flow/FollowingSendingFlow.d.ts.map +1 -0
- package/dist/cjs/bdx/flow/FollowingSendingFlow.js +49 -0
- package/dist/cjs/bdx/flow/FollowingSendingFlow.js.map +6 -0
- package/dist/cjs/bdx/flow/InboundFlow.d.ts +26 -0
- package/dist/cjs/bdx/flow/InboundFlow.d.ts.map +1 -0
- package/dist/cjs/bdx/flow/InboundFlow.js +101 -0
- package/dist/cjs/bdx/flow/InboundFlow.js.map +6 -0
- package/dist/cjs/bdx/flow/OutboundFlow.d.ts +31 -0
- package/dist/cjs/bdx/flow/OutboundFlow.d.ts.map +1 -0
- package/dist/cjs/bdx/flow/OutboundFlow.js +124 -0
- package/dist/cjs/bdx/flow/OutboundFlow.js.map +6 -0
- package/dist/cjs/bdx/index.d.ts +16 -0
- package/dist/cjs/bdx/index.d.ts.map +1 -0
- package/dist/cjs/bdx/index.js +33 -0
- package/dist/cjs/bdx/index.js.map +6 -0
- package/dist/cjs/bdx/schema/BdxAcceptMessagesSchema.d.ts +50 -0
- package/dist/cjs/bdx/schema/BdxAcceptMessagesSchema.d.ts.map +1 -0
- package/dist/cjs/bdx/schema/BdxAcceptMessagesSchema.js +125 -0
- package/dist/cjs/bdx/schema/BdxAcceptMessagesSchema.js.map +6 -0
- package/dist/cjs/bdx/schema/BdxBlockMessagesSchema.d.ts +53 -0
- package/dist/cjs/bdx/schema/BdxBlockMessagesSchema.d.ts.map +1 -0
- package/dist/cjs/bdx/schema/BdxBlockMessagesSchema.js +92 -0
- package/dist/cjs/bdx/schema/BdxBlockMessagesSchema.js.map +6 -0
- package/dist/cjs/bdx/schema/BdxInitMessagesSchema.d.ts +117 -0
- package/dist/cjs/bdx/schema/BdxInitMessagesSchema.d.ts.map +1 -0
- package/dist/cjs/bdx/schema/BdxInitMessagesSchema.js +153 -0
- package/dist/cjs/bdx/schema/BdxInitMessagesSchema.js.map +6 -0
- package/dist/cjs/bdx/schema/BdxMessage.d.ts +23 -0
- package/dist/cjs/bdx/schema/BdxMessage.d.ts.map +1 -0
- package/dist/cjs/bdx/schema/BdxMessage.js +75 -0
- package/dist/cjs/bdx/schema/BdxMessage.js.map +6 -0
- package/dist/cjs/bdx/schema/BdxStatusMessageSchema.d.ts +12 -0
- package/dist/cjs/bdx/schema/BdxStatusMessageSchema.d.ts.map +1 -0
- package/dist/cjs/bdx/schema/BdxStatusMessageSchema.js +35 -0
- package/dist/cjs/bdx/schema/BdxStatusMessageSchema.js.map +6 -0
- package/dist/cjs/bdx/schema/index.d.ts +11 -0
- package/dist/cjs/bdx/schema/index.d.ts.map +1 -0
- package/dist/cjs/bdx/schema/index.js +28 -0
- package/dist/cjs/bdx/schema/index.js.map +6 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/mdns/MdnsClient.js +2 -2
- package/dist/cjs/mdns/MdnsClient.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +4 -2
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/cjs/protocol/MessageExchange.d.ts +2 -0
- package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +14 -8
- package/dist/cjs/protocol/MessageExchange.js.map +2 -2
- package/dist/cjs/protocol/ProtocolStatusMessage.d.ts +1 -1
- package/dist/cjs/protocol/ProtocolStatusMessage.d.ts.map +1 -1
- package/dist/cjs/protocol/ProtocolStatusMessage.js.map +1 -1
- package/dist/esm/bdx/BdxClient.d.ts +31 -0
- package/dist/esm/bdx/BdxClient.d.ts.map +1 -0
- package/dist/esm/bdx/BdxClient.js +37 -0
- package/dist/esm/bdx/BdxClient.js.map +6 -0
- package/dist/esm/bdx/BdxError.d.ts +21 -0
- package/dist/esm/bdx/BdxError.d.ts.map +1 -0
- package/dist/esm/bdx/BdxError.js +34 -0
- package/dist/esm/bdx/BdxError.js.map +6 -0
- package/dist/esm/bdx/BdxMessenger.d.ts +77 -0
- package/dist/esm/bdx/BdxMessenger.d.ts.map +1 -0
- package/dist/esm/bdx/BdxMessenger.js +233 -0
- package/dist/esm/bdx/BdxMessenger.js.map +6 -0
- package/dist/esm/bdx/BdxProtocol.d.ts +25 -0
- package/dist/esm/bdx/BdxProtocol.d.ts.map +1 -0
- package/dist/esm/bdx/BdxProtocol.js +82 -0
- package/dist/esm/bdx/BdxProtocol.js.map +6 -0
- package/dist/esm/bdx/BdxSession.d.ts +36 -0
- package/dist/esm/bdx/BdxSession.d.ts.map +1 -0
- package/dist/esm/bdx/BdxSession.js +133 -0
- package/dist/esm/bdx/BdxSession.js.map +6 -0
- package/dist/esm/bdx/BdxSessionConfiguration.d.ts +61 -0
- package/dist/esm/bdx/BdxSessionConfiguration.d.ts.map +1 -0
- package/dist/esm/bdx/BdxSessionConfiguration.js +75 -0
- package/dist/esm/bdx/BdxSessionConfiguration.js.map +6 -0
- package/dist/esm/bdx/FileDesignator.d.ts +21 -0
- package/dist/esm/bdx/FileDesignator.d.ts.map +1 -0
- package/dist/esm/bdx/FileDesignator.js +42 -0
- package/dist/esm/bdx/FileDesignator.js.map +6 -0
- package/dist/esm/bdx/PersistedFileDesignator.d.ts +16 -0
- package/dist/esm/bdx/PersistedFileDesignator.d.ts.map +1 -0
- package/dist/esm/bdx/PersistedFileDesignator.js +37 -0
- package/dist/esm/bdx/PersistedFileDesignator.js.map +6 -0
- package/dist/esm/bdx/bdx-session-initiator.d.ts +14 -0
- package/dist/esm/bdx/bdx-session-initiator.d.ts.map +1 -0
- package/dist/esm/bdx/bdx-session-initiator.js +198 -0
- package/dist/esm/bdx/bdx-session-initiator.js.map +6 -0
- package/dist/esm/bdx/flow/DrivenSendingFlow.d.ts +15 -0
- package/dist/esm/bdx/flow/DrivenSendingFlow.d.ts.map +1 -0
- package/dist/esm/bdx/flow/DrivenSendingFlow.js +29 -0
- package/dist/esm/bdx/flow/DrivenSendingFlow.js.map +6 -0
- package/dist/esm/bdx/flow/DrivingReceivingFlow.d.ts +15 -0
- package/dist/esm/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -0
- package/dist/esm/bdx/flow/DrivingReceivingFlow.js +27 -0
- package/dist/esm/bdx/flow/DrivingReceivingFlow.js.map +6 -0
- package/dist/esm/bdx/flow/Flow.d.ts +48 -0
- package/dist/esm/bdx/flow/Flow.d.ts.map +1 -0
- package/dist/esm/bdx/flow/Flow.js +92 -0
- package/dist/esm/bdx/flow/Flow.js.map +6 -0
- package/dist/esm/bdx/flow/FollowingReceivingFlow.d.ts +16 -0
- package/dist/esm/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -0
- package/dist/esm/bdx/flow/FollowingReceivingFlow.js +40 -0
- package/dist/esm/bdx/flow/FollowingReceivingFlow.js.map +6 -0
- package/dist/esm/bdx/flow/FollowingSendingFlow.d.ts +15 -0
- package/dist/esm/bdx/flow/FollowingSendingFlow.d.ts.map +1 -0
- package/dist/esm/bdx/flow/FollowingSendingFlow.js +29 -0
- package/dist/esm/bdx/flow/FollowingSendingFlow.js.map +6 -0
- package/dist/esm/bdx/flow/InboundFlow.d.ts +26 -0
- package/dist/esm/bdx/flow/InboundFlow.d.ts.map +1 -0
- package/dist/esm/bdx/flow/InboundFlow.js +81 -0
- package/dist/esm/bdx/flow/InboundFlow.js.map +6 -0
- package/dist/esm/bdx/flow/OutboundFlow.d.ts +31 -0
- package/dist/esm/bdx/flow/OutboundFlow.d.ts.map +1 -0
- package/dist/esm/bdx/flow/OutboundFlow.js +104 -0
- package/dist/esm/bdx/flow/OutboundFlow.js.map +6 -0
- package/dist/esm/bdx/index.d.ts +16 -0
- package/dist/esm/bdx/index.d.ts.map +1 -0
- package/dist/esm/bdx/index.js +16 -0
- package/dist/esm/bdx/index.js.map +6 -0
- package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.d.ts +50 -0
- package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.d.ts.map +1 -0
- package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.js +109 -0
- package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.js.map +6 -0
- package/dist/esm/bdx/schema/BdxBlockMessagesSchema.d.ts +53 -0
- package/dist/esm/bdx/schema/BdxBlockMessagesSchema.d.ts.map +1 -0
- package/dist/esm/bdx/schema/BdxBlockMessagesSchema.js +72 -0
- package/dist/esm/bdx/schema/BdxBlockMessagesSchema.js.map +6 -0
- package/dist/esm/bdx/schema/BdxInitMessagesSchema.d.ts +117 -0
- package/dist/esm/bdx/schema/BdxInitMessagesSchema.d.ts.map +1 -0
- package/dist/esm/bdx/schema/BdxInitMessagesSchema.js +133 -0
- package/dist/esm/bdx/schema/BdxInitMessagesSchema.js.map +6 -0
- package/dist/esm/bdx/schema/BdxMessage.d.ts +23 -0
- package/dist/esm/bdx/schema/BdxMessage.d.ts.map +1 -0
- package/dist/esm/bdx/schema/BdxMessage.js +62 -0
- package/dist/esm/bdx/schema/BdxMessage.js.map +6 -0
- package/dist/esm/bdx/schema/BdxStatusMessageSchema.d.ts +12 -0
- package/dist/esm/bdx/schema/BdxStatusMessageSchema.d.ts.map +1 -0
- package/dist/esm/bdx/schema/BdxStatusMessageSchema.js +15 -0
- package/dist/esm/bdx/schema/BdxStatusMessageSchema.js.map +6 -0
- package/dist/esm/bdx/schema/index.d.ts +11 -0
- package/dist/esm/bdx/schema/index.d.ts.map +1 -0
- package/dist/esm/bdx/schema/index.js +11 -0
- package/dist/esm/bdx/schema/index.js.map +6 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mdns/MdnsClient.js +2 -2
- package/dist/esm/mdns/MdnsClient.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +4 -2
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/protocol/MessageExchange.d.ts +2 -0
- package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +14 -8
- package/dist/esm/protocol/MessageExchange.js.map +2 -2
- package/dist/esm/protocol/ProtocolStatusMessage.d.ts +1 -1
- package/dist/esm/protocol/ProtocolStatusMessage.d.ts.map +1 -1
- package/dist/esm/protocol/ProtocolStatusMessage.js.map +1 -1
- package/package.json +6 -6
- package/src/bdx/BdxClient.ts +47 -0
- package/src/bdx/BdxError.ts +39 -0
- package/src/bdx/BdxMessenger.ts +291 -0
- package/src/bdx/BdxProtocol.ts +93 -0
- package/src/bdx/BdxSession.ts +174 -0
- package/src/bdx/BdxSessionConfiguration.ts +134 -0
- package/src/bdx/FileDesignator.ts +49 -0
- package/src/bdx/PersistedFileDesignator.ts +40 -0
- package/src/bdx/bdx-session-initiator.ts +246 -0
- package/src/bdx/flow/DrivenSendingFlow.ts +40 -0
- package/src/bdx/flow/DrivingReceivingFlow.ts +39 -0
- package/src/bdx/flow/Flow.ts +124 -0
- package/src/bdx/flow/FollowingReceivingFlow.ts +53 -0
- package/src/bdx/flow/FollowingSendingFlow.ts +38 -0
- package/src/bdx/flow/InboundFlow.ts +104 -0
- package/src/bdx/flow/OutboundFlow.ts +124 -0
- package/src/bdx/index.ts +16 -0
- package/src/bdx/schema/BdxAcceptMessagesSchema.ts +159 -0
- package/src/bdx/schema/BdxBlockMessagesSchema.ts +99 -0
- package/src/bdx/schema/BdxInitMessagesSchema.ts +213 -0
- package/src/bdx/schema/BdxMessage.ts +70 -0
- package/src/bdx/schema/BdxStatusMessageSchema.ts +14 -0
- package/src/bdx/schema/index.ts +11 -0
- package/src/index.ts +1 -0
- package/src/mdns/MdnsClient.ts +2 -2
- package/src/protocol/ExchangeManager.ts +2 -0
- package/src/protocol/MessageExchange.ts +17 -6
- package/src/protocol/ProtocolStatusMessage.ts +1 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { InternalError } from "#general";
|
|
7
|
+
import { BdxMessageType, BdxStatusCode } from "#types";
|
|
8
|
+
import { BdxError } from "../BdxError.js";
|
|
9
|
+
import { Flow } from "./Flow.js";
|
|
10
|
+
class InboundFlow extends Flow {
|
|
11
|
+
#closeStreams;
|
|
12
|
+
#writeController;
|
|
13
|
+
#writePromise;
|
|
14
|
+
/**
|
|
15
|
+
* Returns initialized streams for the transfer and initializes the #closeStream class function
|
|
16
|
+
*/
|
|
17
|
+
async initTransfer() {
|
|
18
|
+
let writeController;
|
|
19
|
+
const stream = new ReadableStream({
|
|
20
|
+
start: (controller) => {
|
|
21
|
+
writeController = controller;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
const { fileDesignator } = this.transferParameters;
|
|
25
|
+
const writePromise = fileDesignator.writeFromStream(stream);
|
|
26
|
+
this.#closeStreams = async (error) => {
|
|
27
|
+
if (writeController !== void 0) {
|
|
28
|
+
if (error != void 0) {
|
|
29
|
+
writeController.error(error);
|
|
30
|
+
try {
|
|
31
|
+
await writePromise;
|
|
32
|
+
} catch {
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!stream.locked) {
|
|
37
|
+
await stream.cancel();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
this.#writeController = writeController;
|
|
41
|
+
this.#writePromise = writePromise;
|
|
42
|
+
}
|
|
43
|
+
get stream() {
|
|
44
|
+
if (!this.#writeController || !this.#writePromise) {
|
|
45
|
+
throw new InternalError("Transfer not initialized. Call initTransfer() before starting the transfer.");
|
|
46
|
+
}
|
|
47
|
+
return { writeController: this.#writeController, writePromise: this.#writePromise };
|
|
48
|
+
}
|
|
49
|
+
async finalizeTransfer() {
|
|
50
|
+
const { writePromise } = this.stream;
|
|
51
|
+
const blockCounter = this.finalBlockCounter;
|
|
52
|
+
await writePromise;
|
|
53
|
+
await this.messenger.sendBlockAckEof({ blockCounter });
|
|
54
|
+
}
|
|
55
|
+
writeDataChunk(writeController, data, messageType) {
|
|
56
|
+
writeController.enqueue(data);
|
|
57
|
+
if (this.bytesLeft !== void 0) {
|
|
58
|
+
this.bytesLeft -= data.byteLength;
|
|
59
|
+
}
|
|
60
|
+
let done = false;
|
|
61
|
+
if (messageType === BdxMessageType.BlockEof) {
|
|
62
|
+
if (this.bytesLeft !== void 0 && this.bytesLeft !== 0) {
|
|
63
|
+
throw new BdxError(
|
|
64
|
+
`Received BlockEof with ${this.bytesLeft}bytes left, but no more data available`,
|
|
65
|
+
this.bytesLeft > 0 ? BdxStatusCode.LengthTooShort : BdxStatusCode.LengthTooLarge
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
done = true;
|
|
69
|
+
writeController.close();
|
|
70
|
+
}
|
|
71
|
+
return done;
|
|
72
|
+
}
|
|
73
|
+
async close(error) {
|
|
74
|
+
await super.close(error);
|
|
75
|
+
await this.#closeStreams?.(error);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export {
|
|
79
|
+
InboundFlow
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=InboundFlow.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/bdx/flow/InboundFlow.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAgB,qBAAmC;AACnD,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAKd,MAAe,oBAAoB,KAAK;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,eAAe;AAE3B,QAAI;AACJ,UAAM,SAAS,IAAI,eAAsB;AAAA,MACrC,OAAO,gBAAc;AACjB,0BAAkB;AAAA,MACtB;AAAA,IACJ,CAAC;AACD,UAAM,EAAE,eAAe,IAAI,KAAK;AAChC,UAAM,eAAe,eAAe,gBAAgB,MAAM;AAG1D,SAAK,gBAAgB,OAAO,UAAoB;AAC5C,UAAI,oBAAoB,QAAW;AAC/B,YAAI,SAAS,QAAW;AAEpB,0BAAgB,MAAM,KAAK;AAC3B,cAAI;AACA,kBAAM;AAAA,UACV,QAAQ;AAAA,UAER;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,CAAC,OAAO,QAAQ;AAChB,cAAM,OAAO,OAAO;AAAA,MACxB;AAAA,IACJ;AAEA,SAAK,mBAAmB;AACxB,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEA,IAAc,SAAS;AACnB,QAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,eAAe;AAC/C,YAAM,IAAI,cAAc,6EAA6E;AAAA,IACzG;AACA,WAAO,EAAE,iBAAiB,KAAK,kBAAkB,cAAc,KAAK,cAAc;AAAA,EACtF;AAAA,EAEA,MAAgB,mBAAmB;AAC/B,UAAM,EAAE,aAAa,IAAI,KAAK;AAC9B,UAAM,eAAe,KAAK;AAC1B,UAAM;AACN,UAAM,KAAK,UAAU,gBAAgB,EAAE,aAAa,CAAC;AAAA,EACzD;AAAA,EAEU,eACN,iBACA,MACA,aACF;AAEE,oBAAgB,QAAQ,IAAI;AAC5B,QAAI,KAAK,cAAc,QAAW;AAC9B,WAAK,aAAa,KAAK;AAAA,IAC3B;AAEA,QAAI,OAAO;AAGX,QAAI,gBAAgB,eAAe,UAAU;AACzC,UAAI,KAAK,cAAc,UAAa,KAAK,cAAc,GAAG;AACtD,cAAM,IAAI;AAAA,UACN,0BAA0B,KAAK,SAAS;AAAA,UACxC,KAAK,YAAY,IAAI,cAAc,iBAAiB,cAAc;AAAA,QACtE;AAAA,MACJ;AAEA,aAAO;AACP,sBAAgB,MAAM;AAAA,IAC1B;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAe,MAAM,OAAiB;AAClC,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,KAAK,gBAAgB,KAAK;AAAA,EACpC;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BytesStreamReader } from "#general";
|
|
7
|
+
import { Flow } from "./Flow.js";
|
|
8
|
+
/**
|
|
9
|
+
* Base class for outbound BDX transfer flows where data is read from our node and sent to the peer.
|
|
10
|
+
*/
|
|
11
|
+
export declare abstract class OutboundFlow extends Flow {
|
|
12
|
+
#private;
|
|
13
|
+
protected get stream(): {
|
|
14
|
+
iterator: AsyncGenerator<Uint8Array<ArrayBufferLike>, void, unknown>;
|
|
15
|
+
streamReader: BytesStreamReader;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Returns initialized streams for the transfer and initializes the #closeStream class function
|
|
19
|
+
*/
|
|
20
|
+
protected initTransfer(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Reads one data chunk from the reader and does some basic checks.
|
|
23
|
+
*/
|
|
24
|
+
protected readDataChunk(reader: AsyncGenerator<Uint8Array<ArrayBufferLike>, void, unknown>): Promise<{
|
|
25
|
+
data: Uint8Array<ArrayBufferLike>;
|
|
26
|
+
done: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
protected finalizeTransfer(): Promise<void>;
|
|
29
|
+
close(error?: unknown): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=OutboundFlow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutboundFlow.d.ts","sourceRoot":"","sources":["../../../../src/bdx/flow/OutboundFlow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AAG5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,8BAAsB,YAAa,SAAQ,IAAI;;IAK3C,SAAS,KAAK,MAAM;;;MAKnB;IAED;;OAEG;cACa,YAAY;IAoC5B;;OAEG;cACa,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;;;;cA6ChF,gBAAgB;IAMjB,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;CAIvC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BytesStreamReader, InternalError } from "#general";
|
|
7
|
+
import { BdxStatusCode } from "#types";
|
|
8
|
+
import { BdxError } from "../BdxError.js";
|
|
9
|
+
import { Flow } from "./Flow.js";
|
|
10
|
+
class OutboundFlow extends Flow {
|
|
11
|
+
#closeStreams;
|
|
12
|
+
#iterator;
|
|
13
|
+
#streamReader;
|
|
14
|
+
get stream() {
|
|
15
|
+
if (this.#iterator === void 0 || this.#streamReader === void 0) {
|
|
16
|
+
throw new InternalError("Read stream not initialized");
|
|
17
|
+
}
|
|
18
|
+
return { iterator: this.#iterator, streamReader: this.#streamReader };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns initialized streams for the transfer and initializes the #closeStream class function
|
|
22
|
+
*/
|
|
23
|
+
async initTransfer() {
|
|
24
|
+
const { blockSize } = this.transferParameters;
|
|
25
|
+
const blob = await this.transferParameters.fileDesignator.openBlob();
|
|
26
|
+
const blobSize = blob.size;
|
|
27
|
+
const { startOffset = 0, dataLength = blobSize } = this.transferParameters;
|
|
28
|
+
const dataBlob = startOffset > 0 || dataLength !== blobSize ? blob.slice(startOffset, startOffset + dataLength) : blob;
|
|
29
|
+
const stream = dataBlob.stream();
|
|
30
|
+
const reader = stream.getReader();
|
|
31
|
+
this.#closeStreams = async (_error) => {
|
|
32
|
+
if (stream.locked) {
|
|
33
|
+
reader?.releaseLock();
|
|
34
|
+
try {
|
|
35
|
+
await reader?.cancel();
|
|
36
|
+
} catch (error) {
|
|
37
|
+
if (!(error instanceof TypeError)) {
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
await stream.cancel();
|
|
43
|
+
};
|
|
44
|
+
const streamReader = new BytesStreamReader(reader);
|
|
45
|
+
this.#iterator = streamReader.read(blockSize);
|
|
46
|
+
this.#streamReader = streamReader;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reads one data chunk from the reader and does some basic checks.
|
|
50
|
+
*/
|
|
51
|
+
async readDataChunk(reader) {
|
|
52
|
+
const { blockSize, dataLength } = this.transferParameters;
|
|
53
|
+
let { value, done = false } = await reader.next();
|
|
54
|
+
if (value === void 0) {
|
|
55
|
+
if (!done) {
|
|
56
|
+
throw new BdxError(
|
|
57
|
+
`Data length too short, expected ${blockSize}bytes, but got less`,
|
|
58
|
+
BdxStatusCode.LengthTooShort
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
value = new Uint8Array();
|
|
62
|
+
} else if (value.byteLength < blockSize) {
|
|
63
|
+
({ done = false } = await reader.next());
|
|
64
|
+
if (!done) {
|
|
65
|
+
throw new BdxError(
|
|
66
|
+
`Data length too short, expected ${blockSize}bytes, but got less`,
|
|
67
|
+
BdxStatusCode.LengthTooShort
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (this.bytesLeft !== void 0 && dataLength !== void 0) {
|
|
72
|
+
this.bytesLeft -= value.byteLength;
|
|
73
|
+
if (this.bytesLeft < 0) {
|
|
74
|
+
throw new BdxError(
|
|
75
|
+
`Data length exceeded, expected ${dataLength}bytes, but got ${-this.bytesLeft}bytes more`,
|
|
76
|
+
BdxStatusCode.LengthTooLarge
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
if (done && this.bytesLeft > 0) {
|
|
80
|
+
throw new BdxError(
|
|
81
|
+
`Data length too short, expected ${dataLength}bytes, but got ${this.bytesLeft}bytes less`,
|
|
82
|
+
BdxStatusCode.LengthTooShort
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
if (this.bytesLeft === 0) {
|
|
86
|
+
done = true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { data: value, done };
|
|
90
|
+
}
|
|
91
|
+
async finalizeTransfer() {
|
|
92
|
+
const blockCounter = this.finalBlockCounter;
|
|
93
|
+
const { blockCounter: ackedBlockCounter } = await this.messenger.readBlockAckEof();
|
|
94
|
+
this.validateCounter(ackedBlockCounter, blockCounter);
|
|
95
|
+
}
|
|
96
|
+
async close(error) {
|
|
97
|
+
await super.close(error);
|
|
98
|
+
await this.#closeStreams?.(error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export {
|
|
102
|
+
OutboundFlow
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=OutboundFlow.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/bdx/flow/OutboundFlow.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,mBAAmB,qBAAqB;AACjD,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAKd,MAAe,qBAAqB,KAAK;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EAEA,IAAc,SAAS;AACnB,QAAI,KAAK,cAAc,UAAa,KAAK,kBAAkB,QAAW;AAClE,YAAM,IAAI,cAAc,6BAA6B;AAAA,IACzD;AACA,WAAO,EAAE,UAAU,KAAK,WAAW,cAAc,KAAK,cAAc;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,eAAe;AAC3B,UAAM,EAAE,UAAU,IAAI,KAAK;AAE3B,UAAM,OAAO,MAAM,KAAK,mBAAmB,eAAe,SAAS;AACnE,UAAM,WAAW,KAAK;AAGtB,UAAM,EAAE,cAAc,GAAG,aAAa,SAAS,IAAI,KAAK;AAExD,UAAM,WACF,cAAc,KAAK,eAAe,WAAW,KAAK,MAAM,aAAa,cAAc,UAAU,IAAI;AAErG,UAAM,SAAS,SAAS,OAAO;AAE/B,UAAM,SAAS,OAAO,UAAU;AAEhC,SAAK,gBAAgB,OAAO,WAAqB;AAC7C,UAAI,OAAO,QAAQ;AACf,gBAAQ,YAAY;AACpB,YAAI;AACA,gBAAM,QAAQ,OAAO;AAAA,QACzB,SAAS,OAAO;AAEZ,cAAI,EAAE,iBAAiB,YAAY;AAC/B,kBAAM;AAAA,UACV;AAAA,QACJ;AAAA,MACJ;AACA,YAAM,OAAO,OAAO;AAAA,IACxB;AAEA,UAAM,eAAe,IAAI,kBAAkB,MAAM;AACjD,SAAK,YAAY,aAAa,KAAK,SAAS;AAC5C,SAAK,gBAAgB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,cAAc,QAAoE;AAC9F,UAAM,EAAE,WAAW,WAAW,IAAI,KAAK;AACvC,QAAI,EAAE,OAAO,OAAO,MAAM,IAAI,MAAM,OAAO,KAAK;AAChD,QAAI,UAAU,QAAW;AAErB,UAAI,CAAC,MAAM;AACP,cAAM,IAAI;AAAA,UACN,mCAAmC,SAAS;AAAA,UAC5C,cAAc;AAAA,QAClB;AAAA,MACJ;AACA,cAAQ,IAAI,WAAW;AAAA,IAC3B,WAAW,MAAM,aAAa,WAAW;AAErC,OAAC,EAAE,OAAO,MAAM,IAAI,MAAM,OAAO,KAAK;AACtC,UAAI,CAAC,MAAM;AACP,cAAM,IAAI;AAAA,UACN,mCAAmC,SAAS;AAAA,UAC5C,cAAc;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,KAAK,cAAc,UAAa,eAAe,QAAW;AAC1D,WAAK,aAAa,MAAM;AACxB,UAAI,KAAK,YAAY,GAAG;AACpB,cAAM,IAAI;AAAA,UACN,kCAAkC,UAAU,kBAAkB,CAAC,KAAK,SAAS;AAAA,UAC7E,cAAc;AAAA,QAClB;AAAA,MACJ;AACA,UAAI,QAAQ,KAAK,YAAY,GAAG;AAC5B,cAAM,IAAI;AAAA,UACN,mCAAmC,UAAU,kBAAkB,KAAK,SAAS;AAAA,UAC7E,cAAc;AAAA,QAClB;AAAA,MACJ;AACA,UAAI,KAAK,cAAc,GAAG;AACtB,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO,EAAE,MAAM,OAAO,KAAK;AAAA,EAC/B;AAAA,EAEA,MAAgB,mBAAmB;AAC/B,UAAM,eAAe,KAAK;AAC1B,UAAM,EAAE,cAAc,kBAAkB,IAAI,MAAM,KAAK,UAAU,gBAAgB;AACjF,SAAK,gBAAgB,mBAAmB,YAAY;AAAA,EACxD;AAAA,EAEA,MAAe,MAAM,OAAiB;AAClC,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,KAAK,gBAAgB,KAAK;AAAA,EACpC;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export * from "./BdxClient.js";
|
|
7
|
+
export * from "./BdxError.js";
|
|
8
|
+
export * from "./BdxMessenger.js";
|
|
9
|
+
export * from "./BdxProtocol.js";
|
|
10
|
+
export * from "./BdxSession.js";
|
|
11
|
+
export * from "./BdxSessionConfiguration.js";
|
|
12
|
+
export * from "./FileDesignator.js";
|
|
13
|
+
export * from "./flow/Flow.js";
|
|
14
|
+
export * from "./PersistedFileDesignator.js";
|
|
15
|
+
export * from "./schema/index.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bdx/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export * from "./BdxClient.js";
|
|
7
|
+
export * from "./BdxError.js";
|
|
8
|
+
export * from "./BdxMessenger.js";
|
|
9
|
+
export * from "./BdxProtocol.js";
|
|
10
|
+
export * from "./BdxSession.js";
|
|
11
|
+
export * from "./BdxSessionConfiguration.js";
|
|
12
|
+
export * from "./FileDesignator.js";
|
|
13
|
+
export * from "./flow/Flow.js";
|
|
14
|
+
export * from "./PersistedFileDesignator.js";
|
|
15
|
+
export * from "./schema/index.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Bytes } from "#general";
|
|
7
|
+
import { Schema, TypeFromPartialBitSchema } from "#types";
|
|
8
|
+
import { BdxTransferControlBitmap } from "./BdxInitMessagesSchema.js";
|
|
9
|
+
/** @see {@link MatterSpecification.v141.Core}, section 11.22.5.2 */
|
|
10
|
+
export interface BdxSendAccept {
|
|
11
|
+
/**
|
|
12
|
+
* Transfer control details
|
|
13
|
+
* TC
|
|
14
|
+
* 1 octet
|
|
15
|
+
*/
|
|
16
|
+
transferControl: TypeFromPartialBitSchema<typeof BdxTransferControlBitmap>;
|
|
17
|
+
/**
|
|
18
|
+
* Specifies the maximum data size (in bytes) of the block that the Initiator supports, exclusive of block header
|
|
19
|
+
* fields, such as a block counter.
|
|
20
|
+
* MBS, 2 octets
|
|
21
|
+
*/
|
|
22
|
+
maxBlockSize: number;
|
|
23
|
+
/**
|
|
24
|
+
* Allows the Initiator to send additional application-specific information about the file to be transferred
|
|
25
|
+
* MD, Variable length, TLV
|
|
26
|
+
*/
|
|
27
|
+
metaData?: Bytes;
|
|
28
|
+
}
|
|
29
|
+
/** @see {@link MatterSpecification.v141.Core}, section 11.22.5.3 */
|
|
30
|
+
export interface BdxReceiveAccept extends BdxSendAccept {
|
|
31
|
+
/**
|
|
32
|
+
* Specifies a predetermined definite length for the transfer
|
|
33
|
+
* DEFLEN, 4/8 octets
|
|
34
|
+
*/
|
|
35
|
+
length?: number | bigint;
|
|
36
|
+
}
|
|
37
|
+
/** Schema for BDX SendAccept message */
|
|
38
|
+
export declare class BdxSendAcceptMessageSchema<M extends BdxSendAccept> extends Schema<M> {
|
|
39
|
+
encodeInternal(message: M): Uint8Array<ArrayBufferLike>;
|
|
40
|
+
decodeInternal(bytes: Bytes): M;
|
|
41
|
+
validate({ transferControl, maxBlockSize }: M): void;
|
|
42
|
+
}
|
|
43
|
+
export declare const BdxSendAcceptMessage: BdxSendAcceptMessageSchema<BdxSendAccept>;
|
|
44
|
+
/** Schema for Bdx ReceiveAccept message */
|
|
45
|
+
export declare class BdxReceiveAcceptMessageSchema extends BdxSendAcceptMessageSchema<BdxReceiveAccept> {
|
|
46
|
+
encodeInternal(message: BdxReceiveAccept): Uint8Array<ArrayBufferLike>;
|
|
47
|
+
decodeInternal(bytes: Bytes): BdxReceiveAccept;
|
|
48
|
+
}
|
|
49
|
+
export declare const BdxReceiveAcceptMessage: BdxReceiveAcceptMessageSchema;
|
|
50
|
+
//# sourceMappingURL=BdxAcceptMessagesSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BdxAcceptMessagesSchema.d.ts","sourceRoot":"","sources":["../../../../src/bdx/schema/BdxAcceptMessagesSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAkC,MAAM,UAAU,CAAC;AACjE,OAAO,EAAiB,MAAM,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAGH,wBAAwB,EAE3B,MAAM,4BAA4B,CAAC;AAEpC,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC1B;;;;OAIG;IACH,eAAe,EAAE,wBAAwB,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAE3E;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACnD;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,wCAAwC;AACxC,qBAAa,0BAA0B,CAAC,CAAC,SAAS,aAAa,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9E,cAAc,CAAC,OAAO,EAAE,CAAC;IAezB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC;IAgBtB,QAAQ,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,CAAC;CAiBzD;AACD,eAAO,MAAM,oBAAoB,2CAAmC,CAAC;AAErE,2CAA2C;AAC3C,qBAAa,6BAA8B,SAAQ,0BAA0B,CAAC,gBAAgB,CAAC;IAClF,cAAc,CAAC,OAAO,EAAE,gBAAgB;IA6BxC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB;CAyB1D;AACD,eAAO,MAAM,uBAAuB,+BAAsC,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { DataReader, DataWriter, Endian } from "#general";
|
|
7
|
+
import { BdxStatusCode, Schema } from "#types";
|
|
8
|
+
import { BdxError } from "../BdxError.js";
|
|
9
|
+
import {
|
|
10
|
+
BDX_VERSION,
|
|
11
|
+
BdxRangeControlSchema,
|
|
12
|
+
BdxTransferControlSchema
|
|
13
|
+
} from "./BdxInitMessagesSchema.js";
|
|
14
|
+
class BdxSendAcceptMessageSchema extends Schema {
|
|
15
|
+
encodeInternal(message) {
|
|
16
|
+
this.validate(message);
|
|
17
|
+
const { transferControl, maxBlockSize, metaData } = message;
|
|
18
|
+
const writer = new DataWriter(Endian.Little);
|
|
19
|
+
writer.writeUInt8(BdxTransferControlSchema.encode(transferControl));
|
|
20
|
+
writer.writeUInt16(maxBlockSize);
|
|
21
|
+
if (metaData && metaData.byteLength > 0) {
|
|
22
|
+
writer.writeByteArray(metaData);
|
|
23
|
+
}
|
|
24
|
+
return writer.toByteArray();
|
|
25
|
+
}
|
|
26
|
+
decodeInternal(bytes) {
|
|
27
|
+
const reader = new DataReader(bytes, Endian.Little);
|
|
28
|
+
const transferControl = BdxTransferControlSchema.decode(reader.readUInt8());
|
|
29
|
+
const maxBlockSize = reader.readUInt16();
|
|
30
|
+
const metaData = reader.remainingBytesCount > 0 ? reader.remainingBytes : void 0;
|
|
31
|
+
const result = {
|
|
32
|
+
transferControl,
|
|
33
|
+
maxBlockSize,
|
|
34
|
+
metaData
|
|
35
|
+
};
|
|
36
|
+
this.validate(result);
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
validate({ transferControl, maxBlockSize }) {
|
|
40
|
+
if (transferControl.version !== BDX_VERSION) {
|
|
41
|
+
throw new BdxError(
|
|
42
|
+
`Unsupported BDX version: ${transferControl.version}`,
|
|
43
|
+
BdxStatusCode.VersionNotSupported
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
if (!transferControl.senderDrive && !transferControl.receiverDrive && !transferControl.asynchronousTransfer) {
|
|
47
|
+
throw new BdxError(
|
|
48
|
+
"BDX transfer control need to specify at least one of sender drive, receiver drive or asynchronousTransfer",
|
|
49
|
+
BdxStatusCode.BadMessageContent
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
if (maxBlockSize < 1 || maxBlockSize > 65535) {
|
|
53
|
+
throw new BdxError("Max Block Size must be between 1 and 65535bytes", BdxStatusCode.BadMessageContent);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const BdxSendAcceptMessage = new BdxSendAcceptMessageSchema();
|
|
58
|
+
class BdxReceiveAcceptMessageSchema extends BdxSendAcceptMessageSchema {
|
|
59
|
+
encodeInternal(message) {
|
|
60
|
+
this.validate(message);
|
|
61
|
+
const { transferControl, maxBlockSize, metaData, length } = message;
|
|
62
|
+
const rangeControl = {
|
|
63
|
+
definiteLength: length !== void 0 && length !== 0,
|
|
64
|
+
wideRange: typeof length === "bigint"
|
|
65
|
+
};
|
|
66
|
+
const writer = new DataWriter(Endian.Little);
|
|
67
|
+
writer.writeUInt8(BdxTransferControlSchema.encode(transferControl));
|
|
68
|
+
writer.writeUInt8(BdxRangeControlSchema.encode(rangeControl));
|
|
69
|
+
writer.writeUInt16(maxBlockSize);
|
|
70
|
+
if (length !== void 0 && length !== 0) {
|
|
71
|
+
if (rangeControl.wideRange) {
|
|
72
|
+
writer.writeUInt64(length);
|
|
73
|
+
} else {
|
|
74
|
+
writer.writeUInt32(length);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (metaData && metaData.byteLength > 0) {
|
|
78
|
+
writer.writeByteArray(metaData);
|
|
79
|
+
}
|
|
80
|
+
return writer.toByteArray();
|
|
81
|
+
}
|
|
82
|
+
decodeInternal(bytes) {
|
|
83
|
+
const reader = new DataReader(bytes, Endian.Little);
|
|
84
|
+
const transferControl = BdxTransferControlSchema.decode(reader.readUInt8());
|
|
85
|
+
const rangeControl = BdxRangeControlSchema.decode(reader.readUInt8());
|
|
86
|
+
const maxBlockSize = reader.readUInt16();
|
|
87
|
+
let length = rangeControl.definiteLength ? rangeControl.wideRange ? reader.readUInt64() : reader.readUInt32() : void 0;
|
|
88
|
+
if (length === 0) {
|
|
89
|
+
length = void 0;
|
|
90
|
+
}
|
|
91
|
+
const metaData = reader.remainingBytesCount > 0 ? reader.remainingBytes : void 0;
|
|
92
|
+
const result = {
|
|
93
|
+
transferControl,
|
|
94
|
+
maxBlockSize,
|
|
95
|
+
metaData,
|
|
96
|
+
length
|
|
97
|
+
};
|
|
98
|
+
this.validate(result);
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const BdxReceiveAcceptMessage = new BdxReceiveAcceptMessageSchema();
|
|
103
|
+
export {
|
|
104
|
+
BdxReceiveAcceptMessage,
|
|
105
|
+
BdxReceiveAcceptMessageSchema,
|
|
106
|
+
BdxSendAcceptMessage,
|
|
107
|
+
BdxSendAcceptMessageSchema
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=BdxAcceptMessagesSchema.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/bdx/schema/BdxAcceptMessagesSchema.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Bytes } from "#general";
|
|
7
|
+
import { Schema } from "#types";
|
|
8
|
+
interface BdxCounterOnly {
|
|
9
|
+
blockCounter: number;
|
|
10
|
+
}
|
|
11
|
+
/** @see {@link MatterSpecification.v141.Core}, section 11.22.6.2 */
|
|
12
|
+
export interface BdxBlockQuery extends BdxCounterOnly {
|
|
13
|
+
}
|
|
14
|
+
/** @see {@link MatterSpecification.v141.Core}, section 11.22.6.6 */
|
|
15
|
+
export interface BdxBlockAck extends BdxCounterOnly {
|
|
16
|
+
}
|
|
17
|
+
/** @see {@link MatterSpecification.v141.Core}, section 11.22.6.7 */
|
|
18
|
+
export interface BdxBlockAckEof extends BdxCounterOnly {
|
|
19
|
+
}
|
|
20
|
+
/** @see {@link MatterSpecification.v141.Core}, section 11.22.6.3 */
|
|
21
|
+
export interface BdxBlockQueryWithSkip extends BdxCounterOnly {
|
|
22
|
+
bytesToSkip: number | bigint;
|
|
23
|
+
}
|
|
24
|
+
/** @see {@link MatterSpecification.v141.Core}, section 11.22.6.4 */
|
|
25
|
+
export interface BdxBlock extends BdxCounterOnly {
|
|
26
|
+
data: Bytes;
|
|
27
|
+
}
|
|
28
|
+
/** @see {@link MatterSpecification.v141.Core}, section 11.22.6.5 */
|
|
29
|
+
export interface BdxBlockEof extends BdxBlock {
|
|
30
|
+
}
|
|
31
|
+
/** Schema for BDX messages that only contain a block counter: BlockQuery, BlockAck, BlockAckEof. */
|
|
32
|
+
export declare class BdxCounterOnlyMessageSchema extends Schema<BdxCounterOnly> {
|
|
33
|
+
encodeInternal(message: BdxCounterOnly): Uint8Array<ArrayBufferLike>;
|
|
34
|
+
decodeInternal(bytes: Bytes): BdxCounterOnly;
|
|
35
|
+
}
|
|
36
|
+
export declare const BdxBlockQueryMessage: BdxCounterOnlyMessageSchema;
|
|
37
|
+
export declare const BdxBlockAckMessage: BdxCounterOnlyMessageSchema;
|
|
38
|
+
export declare const BdxBlockAckEofMessage: BdxCounterOnlyMessageSchema;
|
|
39
|
+
/** Schema for BDX BlockQueryWithSkip message. */
|
|
40
|
+
export declare class BdxBlockQueryWithSkipMessageSchema extends Schema<BdxBlockQueryWithSkip> {
|
|
41
|
+
encodeInternal(message: BdxBlockQueryWithSkip): Uint8Array<ArrayBufferLike>;
|
|
42
|
+
decodeInternal(bytes: Bytes): BdxBlockQueryWithSkip;
|
|
43
|
+
}
|
|
44
|
+
export declare const BdxBlockQueryWithSkipMessage: BdxBlockQueryWithSkipMessageSchema;
|
|
45
|
+
/** Schema for BDX Block and BlockEof message that contain Block data. */
|
|
46
|
+
export declare class BdxBlockMessageSchema extends Schema<BdxBlock> {
|
|
47
|
+
encodeInternal(message: BdxBlock): Uint8Array<ArrayBufferLike>;
|
|
48
|
+
decodeInternal(bytes: Bytes): BdxBlock;
|
|
49
|
+
}
|
|
50
|
+
export declare const BdxBlockMessage: BdxBlockMessageSchema;
|
|
51
|
+
export declare const BdxBlockEofMessage: BdxBlockMessageSchema;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=BdxBlockMessagesSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BdxBlockMessagesSchema.d.ts","sourceRoot":"","sources":["../../../../src/bdx/schema/BdxBlockMessagesSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAkC,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,UAAU,cAAc;IACpB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAc,SAAQ,cAAc;CAAG;AAExD,oEAAoE;AACpE,MAAM,WAAW,WAAY,SAAQ,cAAc;CAAG;AAEtD,oEAAoE;AACpE,MAAM,WAAW,cAAe,SAAQ,cAAc;CAAG;AAEzD,oEAAoE;AACpE,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IACzD,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,oEAAoE;AACpE,MAAM,WAAW,QAAS,SAAQ,cAAc;IAC5C,IAAI,EAAE,KAAK,CAAC;CACf;AAED,oEAAoE;AACpE,MAAM,WAAW,WAAY,SAAQ,QAAQ;CAAG;AAEhD,oGAAoG;AACpG,qBAAa,2BAA4B,SAAQ,MAAM,CAAC,cAAc,CAAC;IACnE,cAAc,CAAC,OAAO,EAAE,cAAc;IAQtC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc;CAM/C;AAED,eAAO,MAAM,oBAAoB,6BAAwB,CAAC;AAC1D,eAAO,MAAM,kBAAkB,6BAAwB,CAAC;AACxD,eAAO,MAAM,qBAAqB,6BAAwB,CAAC;AAE3D,iDAAiD;AACjD,qBAAa,kCAAmC,SAAQ,MAAM,CAAC,qBAAqB,CAAC;IACjF,cAAc,CAAC,OAAO,EAAE,qBAAqB;IAS7C,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,qBAAqB;CAOtD;AACD,eAAO,MAAM,4BAA4B,oCAA2C,CAAC;AAErF,yEAAyE;AACzE,qBAAa,qBAAsB,SAAQ,MAAM,CAAC,QAAQ,CAAC;IACvD,cAAc,CAAC,OAAO,EAAE,QAAQ;IAShC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ;CAOzC;AACD,eAAO,MAAM,eAAe,uBAA8B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,uBAAkB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { DataReader, DataWriter, Endian } from "#general";
|
|
7
|
+
import { Schema } from "#types";
|
|
8
|
+
class BdxCounterOnlyMessageSchema extends Schema {
|
|
9
|
+
encodeInternal(message) {
|
|
10
|
+
const { blockCounter } = message;
|
|
11
|
+
const writer = new DataWriter(Endian.Little);
|
|
12
|
+
writer.writeUInt32(blockCounter);
|
|
13
|
+
return writer.toByteArray();
|
|
14
|
+
}
|
|
15
|
+
decodeInternal(bytes) {
|
|
16
|
+
const reader = new DataReader(bytes, Endian.Little);
|
|
17
|
+
return {
|
|
18
|
+
blockCounter: reader.readUInt32()
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const BdxCounterOnlyMessage = new BdxCounterOnlyMessageSchema();
|
|
23
|
+
const BdxBlockQueryMessage = BdxCounterOnlyMessage;
|
|
24
|
+
const BdxBlockAckMessage = BdxCounterOnlyMessage;
|
|
25
|
+
const BdxBlockAckEofMessage = BdxCounterOnlyMessage;
|
|
26
|
+
class BdxBlockQueryWithSkipMessageSchema extends Schema {
|
|
27
|
+
encodeInternal(message) {
|
|
28
|
+
const { blockCounter, bytesToSkip } = message;
|
|
29
|
+
const writer = new DataWriter(Endian.Little);
|
|
30
|
+
writer.writeUInt32(blockCounter);
|
|
31
|
+
writer.writeUInt64(bytesToSkip);
|
|
32
|
+
return writer.toByteArray();
|
|
33
|
+
}
|
|
34
|
+
decodeInternal(bytes) {
|
|
35
|
+
const reader = new DataReader(bytes, Endian.Little);
|
|
36
|
+
return {
|
|
37
|
+
blockCounter: reader.readUInt32(),
|
|
38
|
+
bytesToSkip: reader.readUInt64()
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const BdxBlockQueryWithSkipMessage = new BdxBlockQueryWithSkipMessageSchema();
|
|
43
|
+
class BdxBlockMessageSchema extends Schema {
|
|
44
|
+
encodeInternal(message) {
|
|
45
|
+
const { blockCounter, data } = message;
|
|
46
|
+
const writer = new DataWriter(Endian.Little);
|
|
47
|
+
writer.writeUInt32(blockCounter);
|
|
48
|
+
writer.writeByteArray(data);
|
|
49
|
+
return writer.toByteArray();
|
|
50
|
+
}
|
|
51
|
+
decodeInternal(bytes) {
|
|
52
|
+
const reader = new DataReader(bytes, Endian.Little);
|
|
53
|
+
return {
|
|
54
|
+
blockCounter: reader.readUInt32(),
|
|
55
|
+
data: reader.remainingBytes
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const BdxBlockMessage = new BdxBlockMessageSchema();
|
|
60
|
+
const BdxBlockEofMessage = BdxBlockMessage;
|
|
61
|
+
export {
|
|
62
|
+
BdxBlockAckEofMessage,
|
|
63
|
+
BdxBlockAckMessage,
|
|
64
|
+
BdxBlockEofMessage,
|
|
65
|
+
BdxBlockMessage,
|
|
66
|
+
BdxBlockMessageSchema,
|
|
67
|
+
BdxBlockQueryMessage,
|
|
68
|
+
BdxBlockQueryWithSkipMessage,
|
|
69
|
+
BdxBlockQueryWithSkipMessageSchema,
|
|
70
|
+
BdxCounterOnlyMessageSchema
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=BdxBlockMessagesSchema.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/bdx/schema/BdxBlockMessagesSchema.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAgB,YAAY,YAAY,cAAc;AACtD,SAAS,cAAc;AA6BhB,MAAM,oCAAoC,OAAuB;AAAA,EACpE,eAAe,SAAyB;AACpC,UAAM,EAAE,aAAa,IAAI;AAEzB,UAAM,SAAS,IAAI,WAAW,OAAO,MAAM;AAC3C,WAAO,YAAY,YAAY;AAC/B,WAAO,OAAO,YAAY;AAAA,EAC9B;AAAA,EAEA,eAAe,OAA8B;AACzC,UAAM,SAAS,IAAI,WAAW,OAAO,OAAO,MAAM;AAClD,WAAO;AAAA,MACH,cAAc,OAAO,WAAW;AAAA,IACpC;AAAA,EACJ;AACJ;AACA,MAAM,wBAAwB,IAAI,4BAA4B;AACvD,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB;AAC3B,MAAM,wBAAwB;AAG9B,MAAM,2CAA2C,OAA8B;AAAA,EAClF,eAAe,SAAgC;AAC3C,UAAM,EAAE,cAAc,YAAY,IAAI;AAEtC,UAAM,SAAS,IAAI,WAAW,OAAO,MAAM;AAC3C,WAAO,YAAY,YAAY;AAC/B,WAAO,YAAY,WAAW;AAC9B,WAAO,OAAO,YAAY;AAAA,EAC9B;AAAA,EAEA,eAAe,OAAqC;AAChD,UAAM,SAAS,IAAI,WAAW,OAAO,OAAO,MAAM;AAClD,WAAO;AAAA,MACH,cAAc,OAAO,WAAW;AAAA,MAChC,aAAa,OAAO,WAAW;AAAA,IACnC;AAAA,EACJ;AACJ;AACO,MAAM,+BAA+B,IAAI,mCAAmC;AAG5E,MAAM,8BAA8B,OAAiB;AAAA,EACxD,eAAe,SAAmB;AAC9B,UAAM,EAAE,cAAc,KAAK,IAAI;AAE/B,UAAM,SAAS,IAAI,WAAW,OAAO,MAAM;AAC3C,WAAO,YAAY,YAAY;AAC/B,WAAO,eAAe,IAAI;AAC1B,WAAO,OAAO,YAAY;AAAA,EAC9B;AAAA,EAEA,eAAe,OAAwB;AACnC,UAAM,SAAS,IAAI,WAAW,OAAO,OAAO,MAAM;AAClD,WAAO;AAAA,MACH,cAAc,OAAO,WAAW;AAAA,MAChC,MAAM,OAAO;AAAA,IACjB;AAAA,EACJ;AACJ;AACO,MAAM,kBAAkB,IAAI,sBAAsB;AAClD,MAAM,qBAAqB;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|