@matter/protocol 0.12.4-alpha.0-20250217-b0bba5179 → 0.12.4-alpha.0-20250224-e0964a795
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/action/client/ClientInteraction.d.ts +38 -0
- package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -0
- package/dist/cjs/action/client/ClientInteraction.js +91 -0
- package/dist/cjs/action/client/ClientInteraction.js.map +6 -0
- package/dist/cjs/action/client/index.d.ts +7 -0
- package/dist/cjs/action/client/index.d.ts.map +1 -0
- package/dist/cjs/action/client/index.js +24 -0
- package/dist/cjs/action/client/index.js.map +6 -0
- package/dist/cjs/action/index.d.ts +1 -0
- package/dist/cjs/action/index.d.ts.map +1 -1
- package/dist/cjs/action/index.js +1 -0
- package/dist/cjs/action/index.js.map +1 -1
- package/dist/cjs/interaction/DecodedDataReport.d.ts +15 -0
- package/dist/cjs/interaction/DecodedDataReport.d.ts.map +1 -0
- package/dist/cjs/interaction/DecodedDataReport.js +42 -0
- package/dist/cjs/interaction/DecodedDataReport.js.map +6 -0
- package/dist/cjs/interaction/InteractionClient.d.ts +13 -23
- package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionClient.js +99 -127
- package/dist/cjs/interaction/InteractionClient.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts +94 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +56 -37
- package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
- package/dist/cjs/interaction/InteractionServer.d.ts +4 -2
- package/dist/cjs/interaction/InteractionServer.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionServer.js +12 -4
- package/dist/cjs/interaction/InteractionServer.js.map +1 -1
- package/dist/cjs/interaction/SubscriptionClient.d.ts +38 -0
- package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -0
- package/dist/cjs/interaction/SubscriptionClient.js +98 -0
- package/dist/cjs/interaction/SubscriptionClient.js.map +6 -0
- package/dist/cjs/interaction/index.d.ts +1 -0
- package/dist/cjs/interaction/index.d.ts.map +1 -1
- package/dist/cjs/interaction/index.js +1 -0
- package/dist/cjs/interaction/index.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.d.ts +2 -2
- package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.js +4 -3
- package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
- package/dist/cjs/peer/InteractionQueue.d.ts +11 -0
- package/dist/cjs/peer/InteractionQueue.d.ts.map +1 -0
- package/dist/cjs/peer/InteractionQueue.js +42 -0
- package/dist/cjs/peer/InteractionQueue.js.map +6 -0
- package/dist/cjs/peer/PeerAddressStore.d.ts +1 -1
- package/dist/cjs/peer/PeerAddressStore.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.d.ts +16 -7
- package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.js +58 -61
- package/dist/cjs/peer/PeerSet.js.map +1 -1
- package/dist/cjs/peer/PhysicalDeviceProperties.d.ts +26 -0
- package/dist/cjs/peer/PhysicalDeviceProperties.d.ts.map +1 -0
- package/dist/cjs/peer/PhysicalDeviceProperties.js +74 -0
- package/dist/cjs/peer/PhysicalDeviceProperties.js.map +6 -0
- package/dist/cjs/peer/index.d.ts +1 -0
- package/dist/cjs/peer/index.d.ts.map +1 -1
- package/dist/cjs/peer/index.js +1 -0
- package/dist/cjs/peer/index.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts +1 -0
- package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +18 -11
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.d.ts +13 -1
- package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.js +2 -0
- package/dist/cjs/protocol/ExchangeProvider.js.map +1 -1
- package/dist/cjs/protocol/ProtocolHandler.d.ts +1 -1
- package/dist/cjs/protocol/ProtocolHandler.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.d.ts +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.js +1 -3
- package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/cjs/session/InsecureSession.d.ts.map +1 -1
- package/dist/cjs/session/InsecureSession.js +1 -0
- package/dist/cjs/session/InsecureSession.js.map +1 -1
- package/dist/cjs/session/SecureSession.d.ts.map +1 -1
- package/dist/cjs/session/SecureSession.js +4 -0
- package/dist/cjs/session/SecureSession.js.map +1 -1
- package/dist/cjs/session/Session.d.ts +3 -1
- package/dist/cjs/session/Session.d.ts.map +1 -1
- package/dist/cjs/session/Session.js +5 -1
- package/dist/cjs/session/Session.js.map +1 -1
- package/dist/cjs/session/SessionManager.d.ts.map +1 -1
- package/dist/cjs/session/SessionManager.js +1 -0
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseClient.js +22 -15
- package/dist/cjs/session/case/CaseClient.js.map +1 -1
- package/dist/cjs/session/case/CaseServer.d.ts +1 -1
- package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseServer.js +2 -4
- package/dist/cjs/session/case/CaseServer.js.map +1 -1
- package/dist/cjs/session/pase/PaseServer.d.ts +2 -3
- package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseServer.js +12 -14
- package/dist/cjs/session/pase/PaseServer.js.map +1 -1
- package/dist/esm/action/client/ClientInteraction.d.ts +38 -0
- package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -0
- package/dist/esm/action/client/ClientInteraction.js +71 -0
- package/dist/esm/action/client/ClientInteraction.js.map +6 -0
- package/dist/esm/action/client/index.d.ts +7 -0
- package/dist/esm/action/client/index.d.ts.map +1 -0
- package/dist/esm/action/client/index.js +7 -0
- package/dist/esm/action/client/index.js.map +6 -0
- package/dist/esm/action/index.d.ts +1 -0
- package/dist/esm/action/index.d.ts.map +1 -1
- package/dist/esm/action/index.js +1 -0
- package/dist/esm/action/index.js.map +1 -1
- package/dist/esm/interaction/DecodedDataReport.d.ts +15 -0
- package/dist/esm/interaction/DecodedDataReport.d.ts.map +1 -0
- package/dist/esm/interaction/DecodedDataReport.js +22 -0
- package/dist/esm/interaction/DecodedDataReport.js.map +6 -0
- package/dist/esm/interaction/InteractionClient.d.ts +13 -23
- package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionClient.js +101 -134
- package/dist/esm/interaction/InteractionClient.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts +94 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +56 -37
- package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
- package/dist/esm/interaction/InteractionServer.d.ts +4 -2
- package/dist/esm/interaction/InteractionServer.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionServer.js +12 -4
- package/dist/esm/interaction/InteractionServer.js.map +1 -1
- package/dist/esm/interaction/SubscriptionClient.d.ts +38 -0
- package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -0
- package/dist/esm/interaction/SubscriptionClient.js +78 -0
- package/dist/esm/interaction/SubscriptionClient.js.map +6 -0
- package/dist/esm/interaction/index.d.ts +1 -0
- package/dist/esm/interaction/index.d.ts.map +1 -1
- package/dist/esm/interaction/index.js +1 -0
- package/dist/esm/interaction/index.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.d.ts +2 -2
- package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.js +6 -5
- package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
- package/dist/esm/peer/InteractionQueue.d.ts +11 -0
- package/dist/esm/peer/InteractionQueue.d.ts.map +1 -0
- package/dist/esm/peer/InteractionQueue.js +22 -0
- package/dist/esm/peer/InteractionQueue.js.map +6 -0
- package/dist/esm/peer/PeerAddressStore.d.ts +1 -1
- package/dist/esm/peer/PeerAddressStore.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.d.ts +16 -7
- package/dist/esm/peer/PeerSet.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.js +59 -62
- package/dist/esm/peer/PeerSet.js.map +1 -1
- package/dist/esm/peer/PhysicalDeviceProperties.d.ts +26 -0
- package/dist/esm/peer/PhysicalDeviceProperties.d.ts.map +1 -0
- package/dist/esm/peer/PhysicalDeviceProperties.js +54 -0
- package/dist/esm/peer/PhysicalDeviceProperties.js.map +6 -0
- package/dist/esm/peer/index.d.ts +1 -0
- package/dist/esm/peer/index.d.ts.map +1 -1
- package/dist/esm/peer/index.js +1 -0
- package/dist/esm/peer/index.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts +1 -0
- package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +18 -11
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.d.ts +13 -1
- package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.js +2 -0
- package/dist/esm/protocol/ExchangeProvider.js.map +1 -1
- package/dist/esm/protocol/ProtocolHandler.d.ts +1 -1
- package/dist/esm/protocol/ProtocolHandler.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.d.ts +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.js +1 -3
- package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/esm/session/InsecureSession.d.ts.map +1 -1
- package/dist/esm/session/InsecureSession.js +1 -0
- package/dist/esm/session/InsecureSession.js.map +1 -1
- package/dist/esm/session/SecureSession.d.ts.map +1 -1
- package/dist/esm/session/SecureSession.js +4 -0
- package/dist/esm/session/SecureSession.js.map +1 -1
- package/dist/esm/session/Session.d.ts +3 -1
- package/dist/esm/session/Session.d.ts.map +1 -1
- package/dist/esm/session/Session.js +6 -2
- package/dist/esm/session/Session.js.map +1 -1
- package/dist/esm/session/SessionManager.d.ts.map +1 -1
- package/dist/esm/session/SessionManager.js +1 -0
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
- package/dist/esm/session/case/CaseClient.js +22 -15
- package/dist/esm/session/case/CaseClient.js.map +1 -1
- package/dist/esm/session/case/CaseServer.d.ts +1 -1
- package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
- package/dist/esm/session/case/CaseServer.js +2 -4
- package/dist/esm/session/case/CaseServer.js.map +1 -1
- package/dist/esm/session/pase/PaseServer.d.ts +2 -3
- package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseServer.js +12 -14
- package/dist/esm/session/pase/PaseServer.js.map +1 -1
- package/package.json +6 -6
- package/src/action/client/ClientInteraction.ts +110 -0
- package/src/action/client/index.ts +7 -0
- package/src/action/index.ts +1 -0
- package/src/interaction/DecodedDataReport.ts +29 -0
- package/src/interaction/InteractionClient.ts +112 -164
- package/src/interaction/InteractionMessenger.ts +63 -43
- package/src/interaction/InteractionServer.ts +18 -5
- package/src/interaction/SubscriptionClient.ts +107 -0
- package/src/interaction/index.ts +1 -0
- package/src/peer/ControllerCommissioner.ts +7 -6
- package/src/peer/InteractionQueue.ts +22 -0
- package/src/peer/PeerAddressStore.ts +1 -1
- package/src/peer/PeerSet.ts +69 -76
- package/src/peer/PhysicalDeviceProperties.ts +80 -0
- package/src/peer/index.ts +1 -0
- package/src/protocol/ExchangeManager.ts +19 -11
- package/src/protocol/ExchangeProvider.ts +14 -1
- package/src/protocol/ProtocolHandler.ts +1 -1
- package/src/securechannel/SecureChannelProtocol.ts +1 -3
- package/src/session/InsecureSession.ts +1 -0
- package/src/session/SecureSession.ts +4 -0
- package/src/session/Session.ts +7 -2
- package/src/session/SessionManager.ts +1 -0
- package/src/session/case/CaseClient.ts +18 -12
- package/src/session/case/CaseServer.ts +3 -5
- package/src/session/pase/PaseServer.ts +13 -15
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { MessageExchange } from "#protocol/MessageExchange.js";
|
|
7
|
+
import { ProtocolHandler } from "#protocol/ProtocolHandler.js";
|
|
8
|
+
import { Environment, Environmental, MaybePromise } from "@matter/general";
|
|
9
|
+
import { DataReport } from "./InteractionMessenger.js";
|
|
10
|
+
export interface RegisteredSubscription {
|
|
11
|
+
id: number;
|
|
12
|
+
maximumPeerResponseTime: number;
|
|
13
|
+
maxIntervalS: number;
|
|
14
|
+
onData: (dataReport: DataReport) => MaybePromise<void>;
|
|
15
|
+
onTimeout?: () => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A simple protocol handler that handles exchanges starting with data reports.
|
|
19
|
+
*
|
|
20
|
+
* Incoming data reports must match to a subscription registered with {@link add} or the exchange is invalid.
|
|
21
|
+
*/
|
|
22
|
+
export declare class SubscriptionClient implements ProtocolHandler {
|
|
23
|
+
#private;
|
|
24
|
+
constructor();
|
|
25
|
+
static [Environmental.create](env: Environment): SubscriptionClient;
|
|
26
|
+
readonly id = 1;
|
|
27
|
+
/**
|
|
28
|
+
* Register a subscription.
|
|
29
|
+
*/
|
|
30
|
+
add(subscription: RegisteredSubscription): void;
|
|
31
|
+
/**
|
|
32
|
+
* Unregister a subscription.
|
|
33
|
+
*/
|
|
34
|
+
delete(id: number): void;
|
|
35
|
+
onNewExchange(exchange: MessageExchange): Promise<void>;
|
|
36
|
+
close(): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=SubscriptionClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionClient.d.ts","sourceRoot":"","sources":["../../../src/interaction/SubscriptionClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAU,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAEhG,OAAO,EAAE,UAAU,EAAsC,MAAM,2BAA2B,CAAC;AAI3F,MAAM,WAAW,sBAAsB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,uBAAuB,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,eAAe;;;IAMtD,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAM9C,QAAQ,CAAC,EAAE,KAA2B;IAEtC;;OAEG;IACH,GAAG,CAAC,YAAY,EAAE,sBAAsB;IAuBxC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM;IASX,aAAa,CAAC,QAAQ,EAAE,eAAe;IAsBvC,KAAK;CAKd"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Environmental, Logger, Time } from "@matter/general";
|
|
7
|
+
import { INTERACTION_PROTOCOL_ID } from "@matter/types";
|
|
8
|
+
import { IncomingInteractionClientMessenger } from "./InteractionMessenger.js";
|
|
9
|
+
const logger = Logger.get("SubscriptionClient");
|
|
10
|
+
class SubscriptionClient {
|
|
11
|
+
#listeners = /* @__PURE__ */ new Map();
|
|
12
|
+
#timeouts = /* @__PURE__ */ new Map();
|
|
13
|
+
constructor() {
|
|
14
|
+
}
|
|
15
|
+
static [Environmental.create](env) {
|
|
16
|
+
const client = new SubscriptionClient();
|
|
17
|
+
env.set(SubscriptionClient, client);
|
|
18
|
+
return client;
|
|
19
|
+
}
|
|
20
|
+
id = INTERACTION_PROTOCOL_ID;
|
|
21
|
+
/**
|
|
22
|
+
* Register a subscription.
|
|
23
|
+
*/
|
|
24
|
+
add(subscription) {
|
|
25
|
+
const { id, onData, onTimeout } = subscription;
|
|
26
|
+
this.#listeners.set(id, onData);
|
|
27
|
+
if (onTimeout) {
|
|
28
|
+
let timer = this.#timeouts.get(id);
|
|
29
|
+
if (timer !== void 0) {
|
|
30
|
+
timer.stop();
|
|
31
|
+
this.#timeouts.delete(id);
|
|
32
|
+
}
|
|
33
|
+
const maxIntervalMs = subscription.maxIntervalS * 1e3 + subscription.maximumPeerResponseTime;
|
|
34
|
+
timer = Time.getTimer("Subscription timeout", maxIntervalMs, () => {
|
|
35
|
+
logger.info(`Subscription ${id} timed out after ${maxIntervalMs}ms`);
|
|
36
|
+
this.delete(id);
|
|
37
|
+
onTimeout();
|
|
38
|
+
}).start();
|
|
39
|
+
this.#timeouts.set(id, timer);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Unregister a subscription.
|
|
44
|
+
*/
|
|
45
|
+
delete(id) {
|
|
46
|
+
this.#listeners.delete(id);
|
|
47
|
+
const timer = this.#timeouts.get(id);
|
|
48
|
+
if (timer !== void 0) {
|
|
49
|
+
timer.stop();
|
|
50
|
+
this.#timeouts.delete(id);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async onNewExchange(exchange) {
|
|
54
|
+
const messenger = new IncomingInteractionClientMessenger(exchange);
|
|
55
|
+
let dataReport;
|
|
56
|
+
try {
|
|
57
|
+
dataReport = await messenger.readAggregateDataReport([...this.#listeners.keys()]);
|
|
58
|
+
} finally {
|
|
59
|
+
messenger.close().catch((error) => logger.info("Error closing client messenger", error));
|
|
60
|
+
}
|
|
61
|
+
const subscriptionId = dataReport.subscriptionId;
|
|
62
|
+
const listener = this.#listeners.get(subscriptionId);
|
|
63
|
+
const timer = this.#timeouts.get(subscriptionId);
|
|
64
|
+
if (timer !== void 0) {
|
|
65
|
+
timer.stop().start();
|
|
66
|
+
}
|
|
67
|
+
await listener?.(dataReport);
|
|
68
|
+
}
|
|
69
|
+
async close() {
|
|
70
|
+
this.#listeners.clear();
|
|
71
|
+
this.#timeouts.forEach((timer) => timer.stop());
|
|
72
|
+
this.#timeouts.clear();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
SubscriptionClient
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=SubscriptionClient.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/interaction/SubscriptionClient.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAsB,eAAe,QAAsB,YAAmB;AAC9E,SAAS,+BAA+B;AACxC,SAAqB,0CAA0C;AAE/D,MAAM,SAAS,OAAO,IAAI,oBAAoB;AAevC,MAAM,mBAA8C;AAAA,EAC9C,aAAa,oBAAI,IAA4D;AAAA,EAC7E,YAAY,oBAAI,IAAmB;AAAA,EAE5C,cAAc;AAAA,EAAC;AAAA,EAEf,QAAQ,cAAc,MAAM,EAAE,KAAkB;AAC5C,UAAM,SAAS,IAAI,mBAAmB;AACtC,QAAI,IAAI,oBAAoB,MAAM;AAClC,WAAO;AAAA,EACX;AAAA,EAES,KAAK;AAAA;AAAA;AAAA;AAAA,EAKd,IAAI,cAAsC;AACtC,UAAM,EAAE,IAAI,QAAQ,UAAU,IAAI;AAElC,SAAK,WAAW,IAAI,IAAI,MAAM;AAC9B,QAAI,WAAW;AACX,UAAI,QAAQ,KAAK,UAAU,IAAI,EAAE;AACjC,UAAI,UAAU,QAAW;AACrB,cAAM,KAAK;AACX,aAAK,UAAU,OAAO,EAAE;AAAA,MAC5B;AAEA,YAAM,gBAAgB,aAAa,eAAe,MAAO,aAAa;AAEtE,cAAQ,KAAK,SAAS,wBAAwB,eAAe,MAAM;AAC/D,eAAO,KAAK,gBAAgB,EAAE,oBAAoB,aAAa,IAAI;AACnE,aAAK,OAAO,EAAE;AACd,kBAAU;AAAA,MACd,CAAC,EAAE,MAAM;AAET,WAAK,UAAU,IAAI,IAAI,KAAK;AAAA,IAChC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAY;AACf,SAAK,WAAW,OAAO,EAAE;AACzB,UAAM,QAAQ,KAAK,UAAU,IAAI,EAAE;AACnC,QAAI,UAAU,QAAW;AACrB,YAAM,KAAK;AACX,WAAK,UAAU,OAAO,EAAE;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,UAA2B;AAC3C,UAAM,YAAY,IAAI,mCAAmC,QAAQ;AAEjE,QAAI;AACJ,QAAI;AAEA,mBAAa,MAAM,UAAU,wBAAwB,CAAC,GAAG,KAAK,WAAW,KAAK,CAAC,CAAC;AAAA,IACpF,UAAE;AACE,gBAAU,MAAM,EAAE,MAAM,WAAS,OAAO,KAAK,kCAAkC,KAAK,CAAC;AAAA,IACzF;AACA,UAAM,iBAAiB,WAAW;AAElC,UAAM,WAAW,KAAK,WAAW,IAAI,cAAc;AACnD,UAAM,QAAQ,KAAK,UAAU,IAAI,cAAc;AAE/C,QAAI,UAAU,QAAW;AACrB,YAAM,KAAK,EAAE,MAAM;AAAA,IACvB;AAEA,UAAM,WAAW,UAAU;AAAA,EAC/B;AAAA,EAEA,MAAM,QAAQ;AACV,SAAK,WAAW,MAAM;AACtB,SAAK,UAAU,QAAQ,WAAS,MAAM,KAAK,CAAC;AAC5C,SAAK,UAAU,MAAM;AAAA,EACzB;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/interaction/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/interaction/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/interaction/index.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -10,9 +10,9 @@ import { Environment, Environmental, NetInterfaceSet, ServerAddress } from "#gen
|
|
|
10
10
|
import { ControllerCommissioningFlowOptions } from "#peer/ControllerCommissioningFlow.js";
|
|
11
11
|
import { SessionManager } from "#session/SessionManager.js";
|
|
12
12
|
import { DiscoveryCapabilitiesBitmap, NodeId, TypeFromPartialBitSchema } from "#types";
|
|
13
|
+
import { InteractionClientProvider } from "../interaction/InteractionClient.js";
|
|
13
14
|
import { ExchangeManager } from "../protocol/ExchangeManager.js";
|
|
14
15
|
import { PeerAddress } from "./PeerAddress.js";
|
|
15
|
-
import { PeerSet } from "./PeerSet.js";
|
|
16
16
|
/**
|
|
17
17
|
* General commissioning options.
|
|
18
18
|
*/
|
|
@@ -75,7 +75,7 @@ export interface DiscoveryAndCommissioningOptions extends CommissioningOptions {
|
|
|
75
75
|
* Interfaces {@link ControllerCommissioner} with other components.
|
|
76
76
|
*/
|
|
77
77
|
export interface ControllerCommissionerContext {
|
|
78
|
-
|
|
78
|
+
clients: InteractionClientProvider;
|
|
79
79
|
scanners: ScannerSet;
|
|
80
80
|
netInterfaces: NetInterfaceSet;
|
|
81
81
|
sessions: SessionManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControllerCommissioner.d.ts","sourceRoot":"","sources":["../../../src/peer/ControllerCommissioner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAGH,WAAW,EACX,aAAa,EAGb,eAAe,EAEf,aAAa,EAEhB,MAAM,UAAU,CAAC;AAElB,OAAO,EAA+B,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAIvH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAA8B,wBAAwB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ControllerCommissioner.d.ts","sourceRoot":"","sources":["../../../src/peer/ControllerCommissioner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAGH,WAAW,EACX,aAAa,EAGb,eAAe,EAEf,aAAa,EAEhB,MAAM,UAAU,CAAC;AAElB,OAAO,EAA+B,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAIvH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAA8B,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AACnH,OAAO,EAAqB,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAkB,MAAM,gCAAgC,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,OAAO,CAAC,kCAAkC,CAAC;IACrF,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IAEf,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtG;AAED;;GAEG;AACH,MAAM,WAAW,+BAAgC,SAAQ,oBAAoB;IACzE,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,oBAAoB;IAC1E,iCAAiC;IACjC,SAAS,EAAE,CACL;QACI;;;;WAIG;QACH,cAAc,EAAE,+BAA+B,CAAC;KACnD,GACD;QACI;;;WAGG;QACH,oBAAoB,EAAE,oBAAoB,CAAC;KAC9C,CACN,GAAG;QACA;;;WAGG;QACH,qBAAqB,CAAC,EAAE,wBAAwB,CAAC,OAAO,2BAA2B,CAAC,CAAC;QAErF;;;WAGG;QACH,YAAY,CAAC,EAAE,aAAa,CAAC;QAE7B,wEAAwE;QACxE,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,yBAAyB,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,aAAa,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,EAAE,EAAE,oBAAoB,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,sBAAsB;;gBAInB,OAAO,EAAE,6BAA6B;IAKlD,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAa9C;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBhF;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,WAAW,CAAC;CA2QjG"}
|
|
@@ -22,10 +22,10 @@ import { ChannelStatusResponseError } from "#securechannel/index.js";
|
|
|
22
22
|
import { PaseClient } from "#session/index.js";
|
|
23
23
|
import { SessionManager } from "#session/SessionManager.js";
|
|
24
24
|
import { NodeId, SECURE_CHANNEL_PROTOCOL_ID } from "#types";
|
|
25
|
-
import { InteractionClient } from "../interaction/InteractionClient.js";
|
|
25
|
+
import { InteractionClient, InteractionClientProvider } from "../interaction/InteractionClient.js";
|
|
26
26
|
import { ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
|
|
27
27
|
import { DedicatedChannelExchangeProvider } from "../protocol/ExchangeProvider.js";
|
|
28
|
-
import { NodeDiscoveryType
|
|
28
|
+
import { NodeDiscoveryType } from "./PeerSet.js";
|
|
29
29
|
const logger = Logger.get("PeerCommissioner");
|
|
30
30
|
class ControllerCommissioner {
|
|
31
31
|
#context;
|
|
@@ -36,7 +36,7 @@ class ControllerCommissioner {
|
|
|
36
36
|
}
|
|
37
37
|
static [Environmental.create](env) {
|
|
38
38
|
const instance = new ControllerCommissioner({
|
|
39
|
-
|
|
39
|
+
clients: env.get(InteractionClientProvider),
|
|
40
40
|
scanners: env.get(ScannerSet),
|
|
41
41
|
netInterfaces: env.get(NetInterfaceSet),
|
|
42
42
|
sessions: env.get(SessionManager),
|
|
@@ -215,6 +215,7 @@ class ControllerCommissioner {
|
|
|
215
215
|
// Use the created secure session to do the commissioning
|
|
216
216
|
new InteractionClient(
|
|
217
217
|
new DedicatedChannelExchangeProvider(this.#context.exchanges, paseSecureMessageChannel),
|
|
218
|
+
this.#context.clients.peers.subscriptionClient,
|
|
218
219
|
address
|
|
219
220
|
),
|
|
220
221
|
this.#context.ca,
|
|
@@ -228,7 +229,7 @@ class ControllerCommissioner {
|
|
|
228
229
|
await performCaseCommissioning(address2, discoveryData);
|
|
229
230
|
return;
|
|
230
231
|
}
|
|
231
|
-
return await this.#context.
|
|
232
|
+
return await this.#context.clients.connect(
|
|
232
233
|
address2,
|
|
233
234
|
{
|
|
234
235
|
discoveryType: NodeDiscoveryType.TimedDiscovery,
|
|
@@ -242,7 +243,7 @@ class ControllerCommissioner {
|
|
|
242
243
|
try {
|
|
243
244
|
await commissioningManager.executeCommissioning();
|
|
244
245
|
} catch (error) {
|
|
245
|
-
await this.#context.peers.delete(address);
|
|
246
|
+
await this.#context.clients.peers.delete(address);
|
|
246
247
|
throw error;
|
|
247
248
|
} finally {
|
|
248
249
|
if (!paseSecureMessageChannel.closed) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/peer/ControllerCommissioner.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,4BAA4B;AACrC,SAAS,4BAA4B;AACrC,SAA+E,kBAAkB;AAEjG;AAAA,EAEI;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OACG;AACP,SAAS,mBAAmB;AAC5B,SAAS,mCAAuE;AAChF,SAAS,qBAAqB,2CAA2C;AACzE,SAAS,kCAAkC;AAC3C,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAsC,QAAQ,kCAA4D;AAC1G,SAAS,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["address"]
|
|
6
6
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Environment, Environmental, PromiseQueue } from "@matter/general";
|
|
7
|
+
export declare class InteractionQueue extends PromiseQueue {
|
|
8
|
+
constructor();
|
|
9
|
+
static [Environmental.create](env: Environment): InteractionQueue;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=InteractionQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractionQueue.d.ts","sourceRoot":"","sources":["../../../src/peer/InteractionQueue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK3E,qBAAa,gBAAiB,SAAQ,YAAY;;IAK9C,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;CAKjD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Environmental, PromiseQueue } from "@matter/general";
|
|
7
|
+
const CONCURRENT_QUEUED_INTERACTIONS = 4;
|
|
8
|
+
const INTERACTION_QUEUE_DELAY_MS = 100;
|
|
9
|
+
class InteractionQueue extends PromiseQueue {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(CONCURRENT_QUEUED_INTERACTIONS, INTERACTION_QUEUE_DELAY_MS);
|
|
12
|
+
}
|
|
13
|
+
static [Environmental.create](env) {
|
|
14
|
+
const instance = new InteractionQueue();
|
|
15
|
+
env.set(InteractionQueue, instance);
|
|
16
|
+
return instance;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
InteractionQueue
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=InteractionQueue.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/peer/InteractionQueue.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAsB,eAAe,oBAAoB;AAEzD,MAAM,iCAAiC;AACvC,MAAM,6BAA6B;AAE5B,MAAM,yBAAyB,aAAa;AAAA,EAC/C,cAAc;AACV,UAAM,gCAAgC,0BAA0B;AAAA,EACpE;AAAA,EAEA,QAAQ,cAAc,MAAM,EAAE,KAAkB;AAC5C,UAAM,WAAW,IAAI,iBAAiB;AACtC,QAAI,IAAI,kBAAkB,QAAQ;AAClC,WAAO;AAAA,EACX;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -15,7 +15,7 @@ export declare abstract class PeerAddressStore {
|
|
|
15
15
|
abstract loadPeers(): MaybePromise<Iterable<OperationalPeer>>;
|
|
16
16
|
abstract updatePeer(peer: OperationalPeer): MaybePromise<void>;
|
|
17
17
|
abstract deletePeer(address: PeerAddress): MaybePromise<void>;
|
|
18
|
-
abstract createNodeStore(address: PeerAddress):
|
|
18
|
+
abstract createNodeStore(address: PeerAddress): MaybePromise<PeerDataStore | undefined>;
|
|
19
19
|
}
|
|
20
20
|
export declare abstract class PeerDataStore {
|
|
21
21
|
abstract construction: Construction<PeerDataStore>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerAddressStore.d.ts","sourceRoot":"","sources":["../../../src/peer/PeerAddressStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;GAEG;AACH,8BAAsB,gBAAgB;IAClC,QAAQ,CAAC,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7D,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC;IAC9D,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC;IAC7D,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"PeerAddressStore.d.ts","sourceRoot":"","sources":["../../../src/peer/PeerAddressStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;GAEG;AACH,8BAAsB,gBAAgB;IAClC,QAAQ,CAAC,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7D,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC;IAC9D,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC;IAC7D,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC;CAC1F;AAED,8BAAsB,aAAa;IAC/B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IAEnD,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC;IAE5E,QAAQ,CAAC,iBAAiB,CAAC,UAAU,EAAE,2BAA2B,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC;IAG9F,QAAQ,CAAC,iBAAiB,CACtB,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACzB,2BAA2B,CAAC,GAAG,CAAC,GAAG,SAAS;IAC/C,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC,EAAE;IACjH,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IACpG,QAAQ,CAAC,sBAAsB,CAC3B,gBAAgB,CAAC,EAAE,cAAc,EACjC,eAAe,CAAC,EAAE,SAAS,GAC5B;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;CACjF"}
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { DiscoveryData, ScannerSet } from "#common/Scanner.js";
|
|
7
|
-
import { BasicSet, Construction, Environment, Environmental, ImmutableSet, MatterError, NetInterfaceSet, ObservableSet } from "#general";
|
|
8
|
-
import {
|
|
7
|
+
import { AsyncObservable, BasicSet, Construction, Environment, Environmental, ImmutableSet, MatterError, NetInterfaceSet, ObservableSet } from "#general";
|
|
8
|
+
import { SubscriptionClient } from "#interaction/SubscriptionClient.js";
|
|
9
9
|
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
10
10
|
import { SessionManager } from "#session/SessionManager.js";
|
|
11
11
|
import { ChannelManager } from "../protocol/ChannelManager.js";
|
|
12
|
-
import { ExchangeManager } from "../protocol/ExchangeManager.js";
|
|
12
|
+
import { ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
|
|
13
|
+
import { ReconnectableExchangeProvider } from "../protocol/ExchangeProvider.js";
|
|
14
|
+
import { InteractionQueue } from "./InteractionQueue.js";
|
|
13
15
|
import { OperationalPeer } from "./OperationalPeer.js";
|
|
14
16
|
import { PeerAddressStore } from "./PeerAddressStore.js";
|
|
15
17
|
/**
|
|
@@ -43,6 +45,7 @@ export interface PeerSetContext {
|
|
|
43
45
|
sessions: SessionManager;
|
|
44
46
|
channels: ChannelManager;
|
|
45
47
|
exchanges: ExchangeManager;
|
|
48
|
+
subscriptionClient: SubscriptionClient;
|
|
46
49
|
scanners: ScannerSet;
|
|
47
50
|
netInterfaces: NetInterfaceSet;
|
|
48
51
|
store: PeerAddressStore;
|
|
@@ -55,6 +58,7 @@ export declare class PeerSet implements ImmutableSet<OperationalPeer>, Observabl
|
|
|
55
58
|
constructor(context: PeerSetContext);
|
|
56
59
|
get added(): import("#general").Observable<[OperationalPeer], void>;
|
|
57
60
|
get deleted(): import("#general").Observable<[OperationalPeer], void>;
|
|
61
|
+
get disconnected(): AsyncObservable<[address: PeerAddress], void>;
|
|
58
62
|
has(item: PeerAddress | OperationalPeer): boolean;
|
|
59
63
|
get size(): number;
|
|
60
64
|
find(predicate: (item: OperationalPeer) => boolean | undefined): OperationalPeer | undefined;
|
|
@@ -64,11 +68,16 @@ export declare class PeerSet implements ImmutableSet<OperationalPeer>, Observabl
|
|
|
64
68
|
get construction(): Construction<PeerSet>;
|
|
65
69
|
static [Environmental.create](env: Environment): PeerSet;
|
|
66
70
|
get peers(): BasicSet<OperationalPeer, OperationalPeer>;
|
|
71
|
+
get subscriptionClient(): SubscriptionClient;
|
|
72
|
+
get interactionQueue(): InteractionQueue;
|
|
67
73
|
/**
|
|
68
|
-
*
|
|
74
|
+
* Ensure there is a channel to the designated peer.
|
|
69
75
|
*/
|
|
70
|
-
|
|
71
|
-
|
|
76
|
+
ensureConnection(address: PeerAddress, discoveryOptions: DiscoveryOptions, allowUnknownPeer?: boolean): Promise<MessageChannel | undefined>;
|
|
77
|
+
/**
|
|
78
|
+
* Obtain an exchange provider for the designated peer.
|
|
79
|
+
*/
|
|
80
|
+
exchangeProviderFor(address: PeerAddress, discoveryOptions?: DiscoveryOptions): Promise<ReconnectableExchangeProvider>;
|
|
72
81
|
/**
|
|
73
82
|
* Retrieve a peer by address.
|
|
74
83
|
*/
|
|
@@ -76,7 +85,7 @@ export declare class PeerSet implements ImmutableSet<OperationalPeer>, Observabl
|
|
|
76
85
|
/**
|
|
77
86
|
* Terminate any active peer connection.
|
|
78
87
|
*/
|
|
79
|
-
disconnect(
|
|
88
|
+
disconnect(peer: PeerAddress | OperationalPeer, sendSessionClose?: boolean): Promise<void>;
|
|
80
89
|
/**
|
|
81
90
|
* Forget a known peer.
|
|
82
91
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerSet.d.ts","sourceRoot":"","sources":["../../../src/peer/PeerSet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAEH,QAAQ,EAER,YAAY,EAEZ,WAAW,EACX,aAAa,EACb,YAAY,EAKZ,WAAW,EACX,eAAe,EAEf,aAAa,
|
|
1
|
+
{"version":3,"file":"PeerSet.d.ts","sourceRoot":"","sources":["../../../src/peer/PeerSet.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/peer/PeerSet.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { ScannerSet } from "#common/Scanner.js";
|
|
7
7
|
import {
|
|
8
8
|
anyPromise,
|
|
9
|
+
AsyncObservable,
|
|
9
10
|
BasicSet,
|
|
10
11
|
ChannelType,
|
|
11
12
|
Construction,
|
|
@@ -18,11 +19,10 @@ import {
|
|
|
18
19
|
MatterError,
|
|
19
20
|
NetInterfaceSet,
|
|
20
21
|
NoResponseTimeoutError,
|
|
21
|
-
PromiseQueue,
|
|
22
22
|
serverAddressToString,
|
|
23
23
|
Time
|
|
24
24
|
} from "#general";
|
|
25
|
-
import {
|
|
25
|
+
import { SubscriptionClient } from "#interaction/SubscriptionClient.js";
|
|
26
26
|
import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
|
|
27
27
|
import { CaseClient } from "#session/index.js";
|
|
28
28
|
import { SessionManager } from "#session/SessionManager.js";
|
|
@@ -32,12 +32,11 @@ import { ChannelNotConnectedError, ExchangeManager, MessageChannel } from "../pr
|
|
|
32
32
|
import { ReconnectableExchangeProvider } from "../protocol/ExchangeProvider.js";
|
|
33
33
|
import { RetransmissionLimitReachedError } from "../protocol/MessageExchange.js";
|
|
34
34
|
import { ControllerDiscovery, DiscoveryError, PairRetransmissionLimitReachedError } from "./ControllerDiscovery.js";
|
|
35
|
+
import { InteractionQueue } from "./InteractionQueue.js";
|
|
35
36
|
import { PeerAddressStore } from "./PeerAddressStore.js";
|
|
36
37
|
const logger = Logger.get("PeerSet");
|
|
37
38
|
const RECONNECTION_POLLING_INTERVAL_MS = 6e5;
|
|
38
39
|
const RETRANSMISSION_DISCOVERY_TIMEOUT_S = 5;
|
|
39
|
-
const CONCURRENT_QUEUED_INTERACTIONS = 4;
|
|
40
|
-
const INTERACTION_QUEUE_DELAY_MS = 100;
|
|
41
40
|
var NodeDiscoveryType = /* @__PURE__ */ ((NodeDiscoveryType2) => {
|
|
42
41
|
NodeDiscoveryType2[NodeDiscoveryType2["None"] = 0] = "None";
|
|
43
42
|
NodeDiscoveryType2[NodeDiscoveryType2["RetransmissionDiscovery"] = 1] = "RetransmissionDiscovery";
|
|
@@ -51,6 +50,7 @@ class PeerSet {
|
|
|
51
50
|
#sessions;
|
|
52
51
|
#channels;
|
|
53
52
|
#exchanges;
|
|
53
|
+
#subscriptionClient;
|
|
54
54
|
#scanners;
|
|
55
55
|
#netInterfaces;
|
|
56
56
|
#caseClient;
|
|
@@ -60,15 +60,16 @@ class PeerSet {
|
|
|
60
60
|
#runningPeerReconnections = new PeerAddressMap();
|
|
61
61
|
#construction;
|
|
62
62
|
#store;
|
|
63
|
-
#interactionQueue = new
|
|
63
|
+
#interactionQueue = new InteractionQueue();
|
|
64
64
|
#nodeCachedData = new PeerAddressMap();
|
|
65
65
|
// Temporarily until we store it in new API
|
|
66
|
-
#
|
|
66
|
+
#disconnected = AsyncObservable();
|
|
67
67
|
constructor(context) {
|
|
68
|
-
const { sessions, channels, exchanges, scanners, netInterfaces, store } = context;
|
|
68
|
+
const { sessions, channels, exchanges, subscriptionClient, scanners, netInterfaces, store } = context;
|
|
69
69
|
this.#sessions = sessions;
|
|
70
70
|
this.#channels = channels;
|
|
71
71
|
this.#exchanges = exchanges;
|
|
72
|
+
this.#subscriptionClient = subscriptionClient;
|
|
72
73
|
this.#scanners = scanners;
|
|
73
74
|
this.#netInterfaces = netInterfaces;
|
|
74
75
|
this.#store = store;
|
|
@@ -98,6 +99,9 @@ class PeerSet {
|
|
|
98
99
|
get deleted() {
|
|
99
100
|
return this.#peers.deleted;
|
|
100
101
|
}
|
|
102
|
+
get disconnected() {
|
|
103
|
+
return this.#disconnected;
|
|
104
|
+
}
|
|
101
105
|
has(item) {
|
|
102
106
|
if ("address" in item) {
|
|
103
107
|
return this.#peers.has(item);
|
|
@@ -127,6 +131,7 @@ class PeerSet {
|
|
|
127
131
|
sessions: env.get(SessionManager),
|
|
128
132
|
channels: env.get(ChannelManager),
|
|
129
133
|
exchanges: env.get(ExchangeManager),
|
|
134
|
+
subscriptionClient: env.get(SubscriptionClient),
|
|
130
135
|
scanners: env.get(ScannerSet),
|
|
131
136
|
netInterfaces: env.get(NetInterfaceSet),
|
|
132
137
|
store: env.get(PeerAddressStore)
|
|
@@ -137,14 +142,16 @@ class PeerSet {
|
|
|
137
142
|
get peers() {
|
|
138
143
|
return this.#peers;
|
|
139
144
|
}
|
|
145
|
+
get subscriptionClient() {
|
|
146
|
+
return this.#subscriptionClient;
|
|
147
|
+
}
|
|
148
|
+
get interactionQueue() {
|
|
149
|
+
return this.#interactionQueue;
|
|
150
|
+
}
|
|
140
151
|
/**
|
|
141
|
-
*
|
|
152
|
+
* Ensure there is a channel to the designated peer.
|
|
142
153
|
*/
|
|
143
|
-
async
|
|
144
|
-
await this.#ensureConnection(address, discoveryOptions, allowUnknownPeer);
|
|
145
|
-
return this.initializeInteractionClient(address, discoveryOptions);
|
|
146
|
-
}
|
|
147
|
-
async #ensureConnection(address, discoveryOptions, allowUnknownPeer = false) {
|
|
154
|
+
async ensureConnection(address, discoveryOptions, allowUnknownPeer = false) {
|
|
148
155
|
if (!this.#peersByAddress.has(address) && !allowUnknownPeer) {
|
|
149
156
|
throw new UnknownNodeError(`Cannot connect to unknown device ${PeerAddress(address)}`);
|
|
150
157
|
}
|
|
@@ -166,52 +173,38 @@ class PeerSet {
|
|
|
166
173
|
return promise;
|
|
167
174
|
}
|
|
168
175
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
const nodeStore = this.get(address)?.dataStore;
|
|
175
|
-
await nodeStore?.construction;
|
|
176
|
+
/**
|
|
177
|
+
* Obtain an exchange provider for the designated peer.
|
|
178
|
+
*/
|
|
179
|
+
async exchangeProviderFor(address, discoveryOptions) {
|
|
176
180
|
let initiallyConnected = this.#channels.hasChannel(address);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
if (!this.#channels.hasChannel(address)) {
|
|
187
|
-
throw new RetransmissionLimitReachedError(
|
|
188
|
-
`Device ${PeerAddress(address)} is currently not reachable.`
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
await this.#channels.removeAllNodeChannels(address);
|
|
192
|
-
const { discoveryData } = discoveryOptions ?? {
|
|
193
|
-
discoveryData: this.#peersByAddress.get(address)?.discoveryData
|
|
194
|
-
};
|
|
195
|
-
const operationalAddress = this.#knownOperationalAddressFor(address, true);
|
|
196
|
-
if (operationalAddress === void 0) {
|
|
197
|
-
logger.info(
|
|
198
|
-
`Re-discovering device failed (no address found), remove all sessions for ${PeerAddress(address)}`
|
|
199
|
-
);
|
|
200
|
-
await this.#sessions.removeAllSessionsForNode(address);
|
|
201
|
-
throw new RetransmissionLimitReachedError(
|
|
202
|
-
`No operational address found for ${PeerAddress(address)}`
|
|
203
|
-
);
|
|
181
|
+
return new ReconnectableExchangeProvider(this.#exchanges, this.#channels, address, async () => {
|
|
182
|
+
if (!initiallyConnected && !this.#channels.hasChannel(address)) {
|
|
183
|
+
await this.ensureConnection(address, { discoveryType: 0 /* None */ });
|
|
184
|
+
initiallyConnected = true;
|
|
185
|
+
if (this.#channels.hasChannel(address)) {
|
|
186
|
+
return;
|
|
204
187
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
address
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
188
|
+
}
|
|
189
|
+
if (!this.#channels.hasChannel(address)) {
|
|
190
|
+
throw new RetransmissionLimitReachedError(`Device ${PeerAddress(address)} is currently not reachable.`);
|
|
191
|
+
}
|
|
192
|
+
await this.#channels.removeAllNodeChannels(address);
|
|
193
|
+
const { discoveryData } = discoveryOptions ?? {
|
|
194
|
+
discoveryData: this.#peersByAddress.get(address)?.discoveryData
|
|
195
|
+
};
|
|
196
|
+
const operationalAddress = this.#knownOperationalAddressFor(address, true);
|
|
197
|
+
if (operationalAddress === void 0) {
|
|
198
|
+
logger.info(
|
|
199
|
+
`Re-discovering device failed (no address found), remove all sessions for ${PeerAddress(address)}`
|
|
200
|
+
);
|
|
201
|
+
await this.#sessions.removeAllSessionsForNode(address);
|
|
202
|
+
throw new RetransmissionLimitReachedError(`No operational address found for ${PeerAddress(address)}`);
|
|
203
|
+
}
|
|
204
|
+
if (await this.#reconnectKnownAddress(address, operationalAddress, discoveryData, 2e3) === void 0) {
|
|
205
|
+
throw new RetransmissionLimitReachedError(`${PeerAddress(address)} is not reachable.`);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
215
208
|
}
|
|
216
209
|
/**
|
|
217
210
|
* Retrieve a peer by address.
|
|
@@ -225,10 +218,14 @@ class PeerSet {
|
|
|
225
218
|
/**
|
|
226
219
|
* Terminate any active peer connection.
|
|
227
220
|
*/
|
|
228
|
-
async disconnect(
|
|
229
|
-
this
|
|
221
|
+
async disconnect(peer, sendSessionClose = true) {
|
|
222
|
+
const address = this.get(peer)?.address;
|
|
223
|
+
if (address === void 0) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
230
226
|
await this.#sessions.removeAllSessionsForNode(address, sendSessionClose);
|
|
231
227
|
await this.#channels.removeAllNodeChannels(address);
|
|
228
|
+
await this.#disconnected.emit(address);
|
|
232
229
|
}
|
|
233
230
|
/**
|
|
234
231
|
* Forget a known peer.
|
|
@@ -244,15 +241,15 @@ class PeerSet {
|
|
|
244
241
|
await this.#store.deletePeer(address);
|
|
245
242
|
await this.disconnect(address, false);
|
|
246
243
|
await this.#sessions.deleteResumptionRecord(address);
|
|
247
|
-
this.#clients.delete(address);
|
|
248
244
|
}
|
|
249
245
|
async close() {
|
|
250
246
|
for (const [address, { stopTimerFunc, mdnsScanner }] of this.#runningPeerDiscoveries.entries()) {
|
|
251
247
|
stopTimerFunc?.();
|
|
252
248
|
mdnsScanner?.cancelOperationalDeviceDiscovery(this.#sessions.fabricFor(address), address.nodeId, false);
|
|
253
249
|
}
|
|
254
|
-
this.#
|
|
255
|
-
|
|
250
|
+
for (const { address } of this.#peers) {
|
|
251
|
+
await this.disconnect(address, false);
|
|
252
|
+
}
|
|
256
253
|
this.#interactionQueue.close();
|
|
257
254
|
this.#runningPeerReconnections.forEach(
|
|
258
255
|
({ rejecter }) => rejecter(new ChannelNotConnectedError("PeerSet closed"))
|