@matter/types 0.17.2 → 0.17.3-alpha.0-20260617-ea3690abc
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/cluster/ClusterHelper.d.ts +4 -5
- package/dist/cjs/cluster/ClusterHelper.d.ts.map +1 -1
- package/dist/cjs/cluster/ClusterHelper.js +2 -13
- package/dist/cjs/cluster/ClusterHelper.js.map +1 -1
- package/dist/cjs/commissioning/CommissioningOptions.d.ts +1 -1
- package/dist/cjs/commissioning/CommissioningOptions.d.ts.map +1 -1
- package/dist/cjs/commissioning/CommissioningOptions.js +2 -14
- package/dist/cjs/commissioning/CommissioningOptions.js.map +1 -1
- package/dist/cjs/schema/PairingCodeSchema.d.ts +29 -0
- package/dist/cjs/schema/PairingCodeSchema.d.ts.map +1 -1
- package/dist/cjs/schema/PairingCodeSchema.js +44 -3
- package/dist/cjs/schema/PairingCodeSchema.js.map +1 -1
- package/dist/cjs/tlv/TlvNullable.d.ts.map +1 -1
- package/dist/cjs/tlv/TlvNullable.js +2 -0
- package/dist/cjs/tlv/TlvNullable.js.map +1 -1
- package/dist/cjs/tlv/TlvNumber.d.ts +18 -1
- package/dist/cjs/tlv/TlvNumber.d.ts.map +1 -1
- package/dist/cjs/tlv/TlvNumber.js +25 -5
- package/dist/cjs/tlv/TlvNumber.js.map +1 -1
- package/dist/esm/cluster/ClusterHelper.d.ts +4 -5
- package/dist/esm/cluster/ClusterHelper.d.ts.map +1 -1
- package/dist/esm/cluster/ClusterHelper.js +2 -13
- package/dist/esm/cluster/ClusterHelper.js.map +1 -1
- package/dist/esm/commissioning/CommissioningOptions.d.ts +1 -1
- package/dist/esm/commissioning/CommissioningOptions.d.ts.map +1 -1
- package/dist/esm/commissioning/CommissioningOptions.js +2 -14
- package/dist/esm/commissioning/CommissioningOptions.js.map +1 -1
- package/dist/esm/schema/PairingCodeSchema.d.ts +29 -0
- package/dist/esm/schema/PairingCodeSchema.d.ts.map +1 -1
- package/dist/esm/schema/PairingCodeSchema.js +53 -4
- package/dist/esm/schema/PairingCodeSchema.js.map +1 -1
- package/dist/esm/tlv/TlvNullable.d.ts.map +1 -1
- package/dist/esm/tlv/TlvNullable.js +3 -1
- package/dist/esm/tlv/TlvNullable.js.map +1 -1
- package/dist/esm/tlv/TlvNumber.d.ts +18 -1
- package/dist/esm/tlv/TlvNumber.d.ts.map +1 -1
- package/dist/esm/tlv/TlvNumber.js +25 -5
- package/dist/esm/tlv/TlvNumber.js.map +1 -1
- package/package.json +4 -4
- package/src/cluster/ClusterHelper.ts +4 -16
- package/src/commissioning/CommissioningOptions.ts +2 -4
- package/src/schema/PairingCodeSchema.ts +68 -2
- package/src/tlv/TlvNullable.ts +4 -1
- package/src/tlv/TlvNumber.ts +29 -5
|
@@ -100,7 +100,34 @@ export declare const QrCodeTlvDataDefaultFields: {
|
|
|
100
100
|
*/
|
|
101
101
|
commissioningTimeout: import("../tlv/TlvObject.js").OptionalFieldType<number>;
|
|
102
102
|
};
|
|
103
|
+
/**
|
|
104
|
+
* Inclusive lower bound of the valid passcode range `0x0000001..0x5F5E0FE`.
|
|
105
|
+
* See {@link MatterSpecification.v13.Core} § 5.1.1.6.
|
|
106
|
+
*/
|
|
107
|
+
export declare const PASSCODE_MIN = 1;
|
|
108
|
+
/**
|
|
109
|
+
* Inclusive upper bound of the valid passcode range `0x0000001..0x5F5E0FE`.
|
|
110
|
+
* See {@link MatterSpecification.v13.Core} § 5.1.1.6.
|
|
111
|
+
*/
|
|
112
|
+
export declare const PASSCODE_MAX = 99999998;
|
|
113
|
+
/**
|
|
114
|
+
* Trivial/insecure passcodes that SHALL NOT be used for PASE.
|
|
115
|
+
* See {@link MatterSpecification.v13.Core} § 5.1.7.1.
|
|
116
|
+
*/
|
|
117
|
+
export declare const INVALID_PASSCODES: readonly number[];
|
|
118
|
+
/**
|
|
119
|
+
* Returns true when the passcode is a valid setup passcode: within the {@link PASSCODE_MIN}..{@link PASSCODE_MAX} range
|
|
120
|
+
* and not one of the {@link INVALID_PASSCODES}. Mirrors CHIP's `PayloadContents::IsValidSetupPIN`.
|
|
121
|
+
*
|
|
122
|
+
* The onboarding codecs round-trip arbitrary 27-bit passcodes; use this to validate a decoded payload at parse time
|
|
123
|
+
* rather than deferring to the PASE layer. See {@link MatterSpecification.v13.Core} § 5.1.1.6 / § 5.1.7.1.
|
|
124
|
+
*/
|
|
125
|
+
export declare function isValidPasscode(passcode: number): boolean;
|
|
126
|
+
/** Throws {@link UnexpectedDataError} when {@link isValidPasscode} returns false. */
|
|
127
|
+
export declare function assertValidPasscode(passcode: number): void;
|
|
103
128
|
declare class QrPairingCodeSchema extends Schema<QrCodeData[], string> {
|
|
129
|
+
/** Rejects payloads carrying an invalid passcode per § 5.1.1.6 / § 5.1.7.1. */
|
|
130
|
+
validate(payloadData: QrCodeData[]): void;
|
|
104
131
|
protected encodeInternal(payloadData: QrCodeData[]): string;
|
|
105
132
|
protected decodeInternal(encoded: string): QrCodeData[];
|
|
106
133
|
/**
|
|
@@ -130,6 +157,8 @@ export type ManualPairingData = {
|
|
|
130
157
|
};
|
|
131
158
|
/** See {@link MatterSpecification.v10.Core} § 5.1.4.1 Table 38/39/40 */
|
|
132
159
|
declare class ManualPairingCodeSchema extends Schema<ManualPairingData, string> {
|
|
160
|
+
/** Rejects payloads carrying an invalid passcode per § 5.1.1.6 / § 5.1.7.1. */
|
|
161
|
+
validate({ passcode }: ManualPairingData): void;
|
|
133
162
|
protected encodeInternal({ discriminator, passcode, vendorId, productId }: ManualPairingData): string;
|
|
134
163
|
protected decodeInternal(encoded: string): ManualPairingData;
|
|
135
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PairingCodeSchema.d.ts","sourceRoot":"","sources":["../../../src/schema/PairingCodeSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"PairingCodeSchema.d.ts","sourceRoot":"","sources":["../../../src/schema/PairingCodeSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,15 @@
|
|
|
3
3
|
* Copyright 2022-2026 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
Bytes,
|
|
8
|
+
CRYPTO_PBKDF_ITERATIONS_MAX,
|
|
9
|
+
CRYPTO_PBKDF_ITERATIONS_MIN,
|
|
10
|
+
deepCopy,
|
|
11
|
+
ImplementationError,
|
|
12
|
+
UnexpectedDataError,
|
|
13
|
+
Verhoeff
|
|
14
|
+
} from "@matter/general";
|
|
7
15
|
import { VendorId } from "../datatype/VendorId.js";
|
|
8
16
|
import { TlvAny } from "../tlv/TlvAny.js";
|
|
9
17
|
import { TlvType } from "../tlv/TlvCodec.js";
|
|
@@ -61,8 +69,10 @@ const QrCodeTlvDataDefaultFields = {
|
|
|
61
69
|
/** Device Serial # */
|
|
62
70
|
serialNumber: TlvOptionalField(0, TlvAny),
|
|
63
71
|
// can be TlvString with up to 32 bytes or Unsigned Int up to 8 bytes
|
|
64
|
-
pbkdfIterations: TlvOptionalField(
|
|
65
|
-
|
|
72
|
+
pbkdfIterations: TlvOptionalField(
|
|
73
|
+
1,
|
|
74
|
+
TlvUInt32.bound({ min: CRYPTO_PBKDF_ITERATIONS_MIN, max: CRYPTO_PBKDF_ITERATIONS_MAX })
|
|
75
|
+
),
|
|
66
76
|
pbkdfSalt: TlvOptionalField(2, TlvByteString.bound({ minLength: 16, maxLength: 32 })),
|
|
67
77
|
/**
|
|
68
78
|
* Number of devices that are expected to be onboarded using this payload when using the Enhanced Commissioning
|
|
@@ -75,8 +85,38 @@ const QrCodeTlvDataDefaultFields = {
|
|
|
75
85
|
*/
|
|
76
86
|
commissioningTimeout: TlvOptionalField(4, TlvUInt16)
|
|
77
87
|
};
|
|
88
|
+
const PASSCODE_MIN = 1;
|
|
89
|
+
const PASSCODE_MAX = 99999998;
|
|
90
|
+
const INVALID_PASSCODES = [
|
|
91
|
+
0,
|
|
92
|
+
11111111,
|
|
93
|
+
22222222,
|
|
94
|
+
33333333,
|
|
95
|
+
44444444,
|
|
96
|
+
55555555,
|
|
97
|
+
66666666,
|
|
98
|
+
77777777,
|
|
99
|
+
88888888,
|
|
100
|
+
99999999,
|
|
101
|
+
12345678,
|
|
102
|
+
87654321
|
|
103
|
+
];
|
|
104
|
+
function isValidPasscode(passcode) {
|
|
105
|
+
return Number.isInteger(passcode) && passcode >= PASSCODE_MIN && passcode <= PASSCODE_MAX && !INVALID_PASSCODES.includes(passcode);
|
|
106
|
+
}
|
|
107
|
+
function assertValidPasscode(passcode) {
|
|
108
|
+
if (!isValidPasscode(passcode)) {
|
|
109
|
+
throw new UnexpectedDataError(`Invalid passcode ${passcode}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
78
112
|
const PREFIX = "MT:";
|
|
79
113
|
class QrPairingCodeSchema extends Schema {
|
|
114
|
+
/** Rejects payloads carrying an invalid passcode per § 5.1.1.6 / § 5.1.7.1. */
|
|
115
|
+
validate(payloadData) {
|
|
116
|
+
for (const { passcode } of payloadData) {
|
|
117
|
+
assertValidPasscode(passcode);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
80
120
|
encodeInternal(payloadData) {
|
|
81
121
|
if (payloadData.length === 0) throw new ImplementationError("Provided Payload data is empty");
|
|
82
122
|
const result = PREFIX + payloadData.map((payloadData2) => {
|
|
@@ -158,6 +198,10 @@ class QrPairingCodeSchema extends Schema {
|
|
|
158
198
|
}
|
|
159
199
|
const QrPairingCodeCodec = new QrPairingCodeSchema();
|
|
160
200
|
class ManualPairingCodeSchema extends Schema {
|
|
201
|
+
/** Rejects payloads carrying an invalid passcode per § 5.1.1.6 / § 5.1.7.1. */
|
|
202
|
+
validate({ passcode }) {
|
|
203
|
+
assertValidPasscode(passcode);
|
|
204
|
+
}
|
|
161
205
|
encodeInternal({ discriminator, passcode, vendorId, productId }) {
|
|
162
206
|
if (discriminator === void 0) throw new UnexpectedDataError("discriminator is required");
|
|
163
207
|
if (discriminator > 4095) throw new UnexpectedDataError("discriminator value must be less than 4096");
|
|
@@ -198,10 +242,15 @@ export {
|
|
|
198
242
|
CommissioningFlowType,
|
|
199
243
|
DiscoveryCapabilitiesBitmap,
|
|
200
244
|
DiscoveryCapabilitiesSchema,
|
|
245
|
+
INVALID_PASSCODES,
|
|
201
246
|
MATTER_QR_CODE_ALL_PAYLOAD_MAX_LENGTH,
|
|
202
247
|
MATTER_QR_CODE_SINGLE_PAYLOAD_MAX_LENGTH,
|
|
203
248
|
ManualPairingCodeCodec,
|
|
249
|
+
PASSCODE_MAX,
|
|
250
|
+
PASSCODE_MIN,
|
|
204
251
|
QrCodeTlvDataDefaultFields,
|
|
205
|
-
QrPairingCodeCodec
|
|
252
|
+
QrPairingCodeCodec,
|
|
253
|
+
assertValidPasscode,
|
|
254
|
+
isValidPasscode
|
|
206
255
|
};
|
|
207
256
|
//# sourceMappingURL=PairingCodeSchema.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/schema/PairingCodeSchema.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["CommissioningFlowType", "payloadData", "result"]
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TlvNullable.d.ts","sourceRoot":"","sources":["../../../src/tlv/TlvNullable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAW,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGrF;;;;GAIG;AACH,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAE9B,YAAY,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"TlvNullable.d.ts","sourceRoot":"","sources":["../../../src/tlv/TlvNullable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAW,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGrF;;;;GAIG;AACH,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAE9B,YAAY,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EA2B/B;IAED,0DAA0D;IAC1D,IAAa,OAAO,IAAI,SAAS,CAAC,OAAO,GAAG,SAAS,CAgBpD;IAEQ,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAM/G;IAEQ,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,GAAG,CAAC,GAAG,IAAI,CAuBtF;IAEQ,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAEvC;IAEQ,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,OAAO,GAAG,CAAC,CAK/G;IAEQ,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,OAAO,GAAG,CAAC,CAK9F;CACJ;AAID,2BAA2B;AAC3B,eAAO,MAAM,WAAW,GAAI,CAAC,UAAU,SAAS,CAAC,CAAC,CAAC,KAAG,cAAc,CAAC,CAAC,CAOrE,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2022-2026 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { TlvNumericSchema } from "#tlv/TlvNumber.js";
|
|
6
|
+
import { BitmapWrapper, TlvNumericSchema } from "#tlv/TlvNumber.js";
|
|
7
7
|
import { ArraySchema } from "./TlvArray.js";
|
|
8
8
|
import { TlvType } from "./TlvCodec.js";
|
|
9
9
|
import { TlvSchema } from "./TlvSchema.js";
|
|
@@ -26,6 +26,8 @@ class NullableSchema extends TlvSchema {
|
|
|
26
26
|
schema = schema.bound({ min: schema.baseTypeMin + BigInt(1), max: schema.max });
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
+
} else if (schema instanceof BitmapWrapper) {
|
|
30
|
+
schema = schema.withReservedMsb();
|
|
29
31
|
}
|
|
30
32
|
this.schema = schema;
|
|
31
33
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/tlv/TlvNullable.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,wBAAwB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BitSchema, TypeFromPartialBitSchema } from "../schema/BitmapSchema.js";
|
|
2
|
+
import { Schema } from "../schema/Schema.js";
|
|
2
3
|
import { TlvLength, TlvTag, TlvType, TlvTypeLength } from "./TlvCodec.js";
|
|
3
4
|
import { TlvReader, TlvSchema, TlvWriter } from "./TlvSchema.js";
|
|
4
5
|
import { TlvWrapper } from "./TlvWrapper.js";
|
|
@@ -51,7 +52,23 @@ export declare const TlvUInt24: TlvNumberSchema;
|
|
|
51
52
|
export declare const TlvUInt32: TlvNumberSchema;
|
|
52
53
|
export declare const TlvUInt64: TlvNumericSchema<number | bigint>;
|
|
53
54
|
export declare const TlvEnum: <T>() => TlvSchema<T>;
|
|
54
|
-
|
|
55
|
+
/**
|
|
56
|
+
* TLV wrapper for a bitmap. Tracks the underlying numeric schema and the bit schema so a nullable
|
|
57
|
+
* variant can reserve the most-significant bit per spec.
|
|
58
|
+
*/
|
|
59
|
+
export declare class BitmapWrapper<D> extends TlvWrapper<D, number> {
|
|
60
|
+
readonly numericSchema: TlvNumericSchema<number>;
|
|
61
|
+
private readonly bitmapSchema;
|
|
62
|
+
constructor(numericSchema: TlvNumericSchema<number>, bitmapSchema: Schema<D, number>);
|
|
63
|
+
/**
|
|
64
|
+
* Returns a variant that reserves the most-significant bit (it encodes NULL for nullable
|
|
65
|
+
* bitmaps, shrinking the usable range).
|
|
66
|
+
*
|
|
67
|
+
* @see {@link MatterSpecification.v16.Core} § 7.19.1.2
|
|
68
|
+
*/
|
|
69
|
+
withReservedMsb(): BitmapWrapper<D>;
|
|
70
|
+
}
|
|
71
|
+
export declare const TlvBitmap: <T extends BitSchema>(underlyingSchema: TlvNumberSchema, bitSchema: T) => BitmapWrapper<TypeFromPartialBitSchema<T>>;
|
|
55
72
|
export declare const TlvPercent: TlvNumericSchema<number>;
|
|
56
73
|
export declare const TlvPercent100ths: TlvNumericSchema<number>;
|
|
57
74
|
export declare const TlvPosixMs: TlvNumericSchema<number | bigint>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TlvNumber.d.ts","sourceRoot":"","sources":["../../../src/tlv/TlvNumber.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,SAAS,EAAgB,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"TlvNumber.d.ts","sourceRoot":"","sources":["../../../src/tlv/TlvNumber.ts"],"names":[],"mappings":"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"}
|
|
@@ -226,13 +226,32 @@ const TlvUInt64 = new TlvLongNumberSchema(
|
|
|
226
226
|
UINT64_MAX
|
|
227
227
|
);
|
|
228
228
|
const TlvEnum = () => TlvUInt32;
|
|
229
|
+
class BitmapWrapper extends TlvWrapper {
|
|
230
|
+
constructor(numericSchema, bitmapSchema) {
|
|
231
|
+
super(
|
|
232
|
+
numericSchema,
|
|
233
|
+
(bitmapData) => bitmapSchema.encode(bitmapData),
|
|
234
|
+
(value) => bitmapSchema.decode(value)
|
|
235
|
+
);
|
|
236
|
+
this.numericSchema = numericSchema;
|
|
237
|
+
this.bitmapSchema = bitmapSchema;
|
|
238
|
+
}
|
|
239
|
+
numericSchema;
|
|
240
|
+
bitmapSchema;
|
|
241
|
+
/**
|
|
242
|
+
* Returns a variant that reserves the most-significant bit (it encodes NULL for nullable
|
|
243
|
+
* bitmaps, shrinking the usable range).
|
|
244
|
+
*
|
|
245
|
+
* @see {@link MatterSpecification.v16.Core} § 7.19.1.2
|
|
246
|
+
*/
|
|
247
|
+
withReservedMsb() {
|
|
248
|
+
const { baseTypeMax } = this.numericSchema;
|
|
249
|
+
return new BitmapWrapper(this.numericSchema.bound({ max: Math.floor(baseTypeMax / 2) }), this.bitmapSchema);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
229
252
|
const TlvBitmap = (underlyingSchema, bitSchema) => {
|
|
230
253
|
const bitmapSchema = BitmapSchema(bitSchema);
|
|
231
|
-
return new
|
|
232
|
-
underlyingSchema,
|
|
233
|
-
(bitmapData) => bitmapSchema.encode(bitmapData),
|
|
234
|
-
(value) => bitmapSchema.decode(value)
|
|
235
|
-
);
|
|
254
|
+
return new BitmapWrapper(underlyingSchema, bitmapSchema);
|
|
236
255
|
};
|
|
237
256
|
const TlvPercent = TlvUInt8.bound({ max: 100 });
|
|
238
257
|
const TlvPercent100ths = TlvUInt16.bound({ max: 1e4 });
|
|
@@ -281,6 +300,7 @@ const TlvEpochUs = new TlvWrapper(
|
|
|
281
300
|
(epochUs) => BigInt(epochUs) + MATTER_EPOCH_OFFSET_US
|
|
282
301
|
);
|
|
283
302
|
export {
|
|
303
|
+
BitmapWrapper,
|
|
284
304
|
MATTER_EPOCH_OFFSET,
|
|
285
305
|
MATTER_EPOCH_OFFSET_S,
|
|
286
306
|
MATTER_EPOCH_OFFSET_US,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/tlv/TlvNumber.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/types",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.3-alpha.0-20260617-ea3690abc",
|
|
4
4
|
"description": "Definitions for Matter application",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"coverage": "c8 matter-test esm"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@matter/general": "0.17.
|
|
36
|
-
"@matter/model": "0.17.
|
|
35
|
+
"@matter/general": "0.17.3-alpha.0-20260617-ea3690abc",
|
|
36
|
+
"@matter/model": "0.17.3-alpha.0-20260617-ea3690abc"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@matter/testing": "0.17.
|
|
39
|
+
"@matter/testing": "0.17.3-alpha.0-20260617-ea3690abc"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/**/*",
|
|
@@ -8,8 +8,7 @@ import { AttributeModel, ClusterModel, CommandModel, EventModel, Matter } from "
|
|
|
8
8
|
import { ClusterId } from "../datatype/ClusterId.js";
|
|
9
9
|
import { EndpointNumber } from "../datatype/EndpointNumber.js";
|
|
10
10
|
import { NodeId } from "../datatype/NodeId.js";
|
|
11
|
-
import {
|
|
12
|
-
import { TypeFromSchema } from "../tlv/TlvSchema.js";
|
|
11
|
+
import { AttributePath, CommandPath, EventPath } from "../protocol/index.js";
|
|
13
12
|
|
|
14
13
|
function toHex(value: number | bigint | undefined) {
|
|
15
14
|
return value === undefined ? "*" : `0x${value.toString(16)}`;
|
|
@@ -53,12 +52,7 @@ function resolveElementName(cluster: ClusterModel | undefined, tag: string, elem
|
|
|
53
52
|
return undefined;
|
|
54
53
|
}
|
|
55
54
|
|
|
56
|
-
export function resolveAttributeName({
|
|
57
|
-
nodeId,
|
|
58
|
-
endpointId,
|
|
59
|
-
clusterId,
|
|
60
|
-
attributeId,
|
|
61
|
-
}: TypeFromSchema<typeof TlvAttributePath>) {
|
|
55
|
+
export function resolveAttributeName({ nodeId, endpointId, clusterId, attributeId }: AttributePath) {
|
|
62
56
|
const endpointClusterName = resolveEndpointClusterName(nodeId, endpointId, clusterId);
|
|
63
57
|
if (endpointId === undefined || clusterId === undefined || attributeId === undefined) {
|
|
64
58
|
return `${endpointClusterName}/${toHex(attributeId)}`;
|
|
@@ -71,13 +65,7 @@ export function resolveAttributeName({
|
|
|
71
65
|
return `${endpointClusterName}/${name}(${toHex(attributeId)})`;
|
|
72
66
|
}
|
|
73
67
|
|
|
74
|
-
export function resolveEventName({
|
|
75
|
-
nodeId,
|
|
76
|
-
endpointId,
|
|
77
|
-
clusterId,
|
|
78
|
-
eventId,
|
|
79
|
-
isUrgent,
|
|
80
|
-
}: TypeFromSchema<typeof TlvEventPath>) {
|
|
68
|
+
export function resolveEventName({ nodeId, endpointId, clusterId, eventId, isUrgent }: EventPath) {
|
|
81
69
|
const isUrgentStr = isUrgent ? "!" : "";
|
|
82
70
|
const endpointClusterName = resolveEndpointClusterName(nodeId, endpointId, clusterId);
|
|
83
71
|
if (endpointId === undefined || clusterId === undefined || eventId === undefined) {
|
|
@@ -91,7 +79,7 @@ export function resolveEventName({
|
|
|
91
79
|
return `${isUrgentStr}${endpointClusterName}/${name}(${toHex(eventId)})`;
|
|
92
80
|
}
|
|
93
81
|
|
|
94
|
-
export function resolveCommandName({ endpointId, clusterId, commandId }:
|
|
82
|
+
export function resolveCommandName({ endpointId, clusterId, commandId }: CommandPath) {
|
|
95
83
|
const endpointClusterName = resolveEndpointClusterName(undefined, endpointId, clusterId);
|
|
96
84
|
if (endpointId === undefined || clusterId === undefined || commandId === undefined) {
|
|
97
85
|
return `${endpointClusterName}/${toHex(commandId)}`;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import { Bytes, Duration } from "@matter/general";
|
|
8
8
|
import { ProductDescription } from "../common/ProductDescription.js";
|
|
9
|
-
import { CommissioningFlowType } from "../schema/PairingCodeSchema.js";
|
|
9
|
+
import { CommissioningFlowType, INVALID_PASSCODES } from "../schema/PairingCodeSchema.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Configuration for initial node commissioning.
|
|
@@ -14,9 +14,7 @@ import { CommissioningFlowType } from "../schema/PairingCodeSchema.js";
|
|
|
14
14
|
export interface CommissioningOptions extends Partial<CommissioningOptions.Configuration> {}
|
|
15
15
|
|
|
16
16
|
export namespace CommissioningOptions {
|
|
17
|
-
export const FORBIDDEN_PASSCODES =
|
|
18
|
-
0, 11111111, 22222222, 33333333, 44444444, 55555555, 66666666, 77777777, 88888888, 99999999, 12345678, 87654321,
|
|
19
|
-
];
|
|
17
|
+
export const FORBIDDEN_PASSCODES = INVALID_PASSCODES;
|
|
20
18
|
|
|
21
19
|
export interface Configuration {
|
|
22
20
|
/**
|
|
@@ -4,7 +4,15 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
Bytes,
|
|
9
|
+
CRYPTO_PBKDF_ITERATIONS_MAX,
|
|
10
|
+
CRYPTO_PBKDF_ITERATIONS_MIN,
|
|
11
|
+
deepCopy,
|
|
12
|
+
ImplementationError,
|
|
13
|
+
UnexpectedDataError,
|
|
14
|
+
Verhoeff,
|
|
15
|
+
} from "@matter/general";
|
|
8
16
|
import { VendorId } from "../datatype/VendorId.js";
|
|
9
17
|
import { TlvAny } from "../tlv/TlvAny.js";
|
|
10
18
|
import { TlvType } from "../tlv/TlvCodec.js";
|
|
@@ -93,7 +101,10 @@ export type QrCodeData = TypeFromBitmapSchema<typeof QrCodeDataSchema> & {
|
|
|
93
101
|
export const QrCodeTlvDataDefaultFields = {
|
|
94
102
|
/** Device Serial # */
|
|
95
103
|
serialNumber: TlvOptionalField(0x00, TlvAny), // can be TlvString with up to 32 bytes or Unsigned Int up to 8 bytes
|
|
96
|
-
pbkdfIterations: TlvOptionalField(
|
|
104
|
+
pbkdfIterations: TlvOptionalField(
|
|
105
|
+
0x01,
|
|
106
|
+
TlvUInt32.bound({ min: CRYPTO_PBKDF_ITERATIONS_MIN, max: CRYPTO_PBKDF_ITERATIONS_MAX }),
|
|
107
|
+
),
|
|
97
108
|
pbkdfSalt: TlvOptionalField(0x02, TlvByteString.bound({ minLength: 16, maxLength: 32 })),
|
|
98
109
|
|
|
99
110
|
/**
|
|
@@ -109,9 +120,59 @@ export const QrCodeTlvDataDefaultFields = {
|
|
|
109
120
|
commissioningTimeout: TlvOptionalField(0x04, TlvUInt16),
|
|
110
121
|
};
|
|
111
122
|
|
|
123
|
+
/**
|
|
124
|
+
* Inclusive lower bound of the valid passcode range `0x0000001..0x5F5E0FE`.
|
|
125
|
+
* See {@link MatterSpecification.v13.Core} § 5.1.1.6.
|
|
126
|
+
*/
|
|
127
|
+
export const PASSCODE_MIN = 0x0000001;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Inclusive upper bound of the valid passcode range `0x0000001..0x5F5E0FE`.
|
|
131
|
+
* See {@link MatterSpecification.v13.Core} § 5.1.1.6.
|
|
132
|
+
*/
|
|
133
|
+
export const PASSCODE_MAX = 0x5f5e0fe;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Trivial/insecure passcodes that SHALL NOT be used for PASE.
|
|
137
|
+
* See {@link MatterSpecification.v13.Core} § 5.1.7.1.
|
|
138
|
+
*/
|
|
139
|
+
export const INVALID_PASSCODES: readonly number[] = [
|
|
140
|
+
0, 11111111, 22222222, 33333333, 44444444, 55555555, 66666666, 77777777, 88888888, 99999999, 12345678, 87654321,
|
|
141
|
+
];
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Returns true when the passcode is a valid setup passcode: within the {@link PASSCODE_MIN}..{@link PASSCODE_MAX} range
|
|
145
|
+
* and not one of the {@link INVALID_PASSCODES}. Mirrors CHIP's `PayloadContents::IsValidSetupPIN`.
|
|
146
|
+
*
|
|
147
|
+
* The onboarding codecs round-trip arbitrary 27-bit passcodes; use this to validate a decoded payload at parse time
|
|
148
|
+
* rather than deferring to the PASE layer. See {@link MatterSpecification.v13.Core} § 5.1.1.6 / § 5.1.7.1.
|
|
149
|
+
*/
|
|
150
|
+
export function isValidPasscode(passcode: number): boolean {
|
|
151
|
+
return (
|
|
152
|
+
Number.isInteger(passcode) &&
|
|
153
|
+
passcode >= PASSCODE_MIN &&
|
|
154
|
+
passcode <= PASSCODE_MAX &&
|
|
155
|
+
!INVALID_PASSCODES.includes(passcode)
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** Throws {@link UnexpectedDataError} when {@link isValidPasscode} returns false. */
|
|
160
|
+
export function assertValidPasscode(passcode: number): void {
|
|
161
|
+
if (!isValidPasscode(passcode)) {
|
|
162
|
+
throw new UnexpectedDataError(`Invalid passcode ${passcode}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
112
166
|
const PREFIX = "MT:";
|
|
113
167
|
|
|
114
168
|
class QrPairingCodeSchema extends Schema<QrCodeData[], string> {
|
|
169
|
+
/** Rejects payloads carrying an invalid passcode per § 5.1.1.6 / § 5.1.7.1. */
|
|
170
|
+
override validate(payloadData: QrCodeData[]): void {
|
|
171
|
+
for (const { passcode } of payloadData) {
|
|
172
|
+
assertValidPasscode(passcode);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
115
176
|
protected encodeInternal(payloadData: QrCodeData[]): string {
|
|
116
177
|
if (payloadData.length === 0) throw new ImplementationError("Provided Payload data is empty");
|
|
117
178
|
const result =
|
|
@@ -221,6 +282,11 @@ export type ManualPairingData = {
|
|
|
221
282
|
|
|
222
283
|
/** See {@link MatterSpecification.v10.Core} § 5.1.4.1 Table 38/39/40 */
|
|
223
284
|
class ManualPairingCodeSchema extends Schema<ManualPairingData, string> {
|
|
285
|
+
/** Rejects payloads carrying an invalid passcode per § 5.1.1.6 / § 5.1.7.1. */
|
|
286
|
+
override validate({ passcode }: ManualPairingData): void {
|
|
287
|
+
assertValidPasscode(passcode);
|
|
288
|
+
}
|
|
289
|
+
|
|
224
290
|
protected encodeInternal({ discriminator, passcode, vendorId, productId }: ManualPairingData): string {
|
|
225
291
|
if (discriminator === undefined) throw new UnexpectedDataError("discriminator is required");
|
|
226
292
|
if (discriminator > 4095) throw new UnexpectedDataError("discriminator value must be less than 4096");
|
package/src/tlv/TlvNullable.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { TlvNumericSchema } from "#tlv/TlvNumber.js";
|
|
7
|
+
import { BitmapWrapper, TlvNumericSchema } from "#tlv/TlvNumber.js";
|
|
8
8
|
import { ArraySchema } from "./TlvArray.js";
|
|
9
9
|
import { TlvTag, TlvType, TlvTypeLength } from "./TlvCodec.js";
|
|
10
10
|
import { TlvEncodingOptions, TlvReader, TlvSchema, TlvWriter } from "./TlvSchema.js";
|
|
@@ -40,6 +40,9 @@ export class NullableSchema<T> extends TlvSchema<T | null> {
|
|
|
40
40
|
schema = schema.bound({ min: schema.baseTypeMin + BigInt(1), max: schema.max });
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
} else if (schema instanceof BitmapWrapper) {
|
|
44
|
+
// Nullable bitmaps reserve the most-significant bit to encode null.
|
|
45
|
+
schema = schema.withReservedMsb();
|
|
43
46
|
}
|
|
44
47
|
this.schema = schema;
|
|
45
48
|
}
|
package/src/tlv/TlvNumber.ts
CHANGED
|
@@ -273,6 +273,34 @@ export const TlvUInt64 = new TlvLongNumberSchema(
|
|
|
273
273
|
// We use internally 32bit here - in fact encoding is done by real value length anyway
|
|
274
274
|
export const TlvEnum = <T>() => TlvUInt32 as TlvSchema<number> as TlvSchema<T>;
|
|
275
275
|
|
|
276
|
+
/**
|
|
277
|
+
* TLV wrapper for a bitmap. Tracks the underlying numeric schema and the bit schema so a nullable
|
|
278
|
+
* variant can reserve the most-significant bit per spec.
|
|
279
|
+
*/
|
|
280
|
+
export class BitmapWrapper<D> extends TlvWrapper<D, number> {
|
|
281
|
+
constructor(
|
|
282
|
+
readonly numericSchema: TlvNumericSchema<number>,
|
|
283
|
+
private readonly bitmapSchema: Schema<D, number>,
|
|
284
|
+
) {
|
|
285
|
+
super(
|
|
286
|
+
numericSchema,
|
|
287
|
+
bitmapData => bitmapSchema.encode(bitmapData),
|
|
288
|
+
value => bitmapSchema.decode(value),
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Returns a variant that reserves the most-significant bit (it encodes NULL for nullable
|
|
294
|
+
* bitmaps, shrinking the usable range).
|
|
295
|
+
*
|
|
296
|
+
* @see {@link MatterSpecification.v16.Core} § 7.19.1.2
|
|
297
|
+
*/
|
|
298
|
+
withReservedMsb(): BitmapWrapper<D> {
|
|
299
|
+
const { baseTypeMax } = this.numericSchema;
|
|
300
|
+
return new BitmapWrapper(this.numericSchema.bound({ max: Math.floor(baseTypeMax / 2) }), this.bitmapSchema);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
276
304
|
export const TlvBitmap = <T extends BitSchema>(underlyingSchema: TlvNumberSchema, bitSchema: T) => {
|
|
277
305
|
// BitmapSchema supports encoding partial bit schemas but specifies its
|
|
278
306
|
// type as TypeFromBitSchema. Changing to TypeFromPartialBitSchema there
|
|
@@ -284,11 +312,7 @@ export const TlvBitmap = <T extends BitSchema>(underlyingSchema: TlvNumberSchema
|
|
|
284
312
|
// only used in places where we want to support partial bitmaps.
|
|
285
313
|
const bitmapSchema = BitmapSchema(bitSchema) as Schema<TypeFromPartialBitSchema<T>, number>;
|
|
286
314
|
|
|
287
|
-
return new
|
|
288
|
-
underlyingSchema,
|
|
289
|
-
(bitmapData: TypeFromPartialBitSchema<T>) => bitmapSchema.encode(bitmapData),
|
|
290
|
-
value => bitmapSchema.decode(value),
|
|
291
|
-
);
|
|
315
|
+
return new BitmapWrapper(underlyingSchema, bitmapSchema);
|
|
292
316
|
};
|
|
293
317
|
|
|
294
318
|
// Relative Number types
|