@matter/protocol 0.15.0-alpha.0-20250620-16e218ed3 → 0.15.0-alpha.0-20250624-e8c89f458

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/cjs/certificate/kinds/X509Base.d.ts +1 -1
  2. package/dist/cjs/certificate/kinds/X509Base.d.ts.map +1 -1
  3. package/dist/cjs/certificate/kinds/X509Base.js +40 -14
  4. package/dist/cjs/certificate/kinds/X509Base.js.map +1 -1
  5. package/dist/cjs/dcl/DclClient.d.ts +26 -0
  6. package/dist/cjs/dcl/DclClient.d.ts.map +1 -0
  7. package/dist/cjs/dcl/DclClient.js +119 -0
  8. package/dist/cjs/dcl/DclClient.js.map +6 -0
  9. package/dist/cjs/dcl/DclRestApiTypes.d.ts +49 -0
  10. package/dist/cjs/dcl/DclRestApiTypes.d.ts.map +1 -0
  11. package/dist/cjs/dcl/DclRestApiTypes.js +22 -0
  12. package/dist/cjs/dcl/DclRestApiTypes.js.map +6 -0
  13. package/dist/cjs/dcl/index.d.ts +7 -0
  14. package/dist/cjs/dcl/index.d.ts.map +1 -0
  15. package/dist/cjs/dcl/index.js +24 -0
  16. package/dist/cjs/dcl/index.js.map +6 -0
  17. package/dist/cjs/index.d.ts +1 -0
  18. package/dist/cjs/index.d.ts.map +1 -1
  19. package/dist/cjs/index.js +1 -0
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/esm/certificate/kinds/X509Base.d.ts +1 -1
  22. package/dist/esm/certificate/kinds/X509Base.d.ts.map +1 -1
  23. package/dist/esm/certificate/kinds/X509Base.js +40 -14
  24. package/dist/esm/certificate/kinds/X509Base.js.map +1 -1
  25. package/dist/esm/dcl/DclClient.d.ts +26 -0
  26. package/dist/esm/dcl/DclClient.d.ts.map +1 -0
  27. package/dist/esm/dcl/DclClient.js +99 -0
  28. package/dist/esm/dcl/DclClient.js.map +6 -0
  29. package/dist/esm/dcl/DclRestApiTypes.d.ts +49 -0
  30. package/dist/esm/dcl/DclRestApiTypes.d.ts.map +1 -0
  31. package/dist/esm/dcl/DclRestApiTypes.js +6 -0
  32. package/dist/esm/dcl/DclRestApiTypes.js.map +6 -0
  33. package/dist/esm/dcl/index.d.ts +7 -0
  34. package/dist/esm/dcl/index.d.ts.map +1 -0
  35. package/dist/esm/dcl/index.js +7 -0
  36. package/dist/esm/dcl/index.js.map +6 -0
  37. package/dist/esm/index.d.ts +1 -0
  38. package/dist/esm/index.d.ts.map +1 -1
  39. package/dist/esm/index.js +1 -0
  40. package/dist/esm/index.js.map +1 -1
  41. package/package.json +6 -6
  42. package/src/certificate/kinds/X509Base.ts +54 -18
  43. package/src/dcl/DclClient.ts +140 -0
  44. package/src/dcl/DclRestApiTypes.ts +55 -0
  45. package/src/dcl/index.ts +7 -0
  46. package/src/index.ts +1 -0
@@ -87,6 +87,6 @@ export declare abstract class X509Base<CT extends X509Certificate> {
87
87
  /**
88
88
  * Extract the public key from a Certificate Signing Request (CSR) in ASN.1 DER format.
89
89
  */
90
- static getPublicKeyFromCsr(crypto: Crypto, csr: Uint8Array): Promise<Uint8Array<ArrayBufferLike>>;
90
+ static getPublicKeyFromCsr(crypto: Crypto, encodedCsr: Uint8Array): Promise<Uint8Array<ArrayBufferLike>>;
91
91
  }
92
92
  //# sourceMappingURL=X509Base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"X509Base.d.ts","sourceRoot":"","sources":["../../../../src/certificate/kinds/X509Base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGH,MAAM,EAKN,OAAO,EACP,GAAG,EAMN,MAAM,UAAU,CAAC;AAElB,OAAO,EAA8C,QAAQ,EAAE,MAAM,aAAa,CAAC;AAYnF,OAAO,EAAoD,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG1G;;;;GAIG;AACH,8BAAsB,QAAQ,CAAC,EAAE,SAAS,eAAe;;gBAIzC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IAOnC,IAAI,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC,CAEvB;IAED,IAAI,QAAQ,YAEX;IAED;;;OAGG;IACH,IAAI,SAAS,IAWY,UAAU,CANlC;IAED;;;OAGG;IACH,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,EAKlC;IAED;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;IAI1C;;OAEG;IACH,cAAc,IAAI,UAAU,CAAC,eAAe,CAAC;IAiM7C;;OAEG;IACH,SAAS,CAAC,yBAAyB,CAAC,EAChC,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,sBAAsB,EACtB,UAAU,GACb,EAAE,QAAQ,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBf;;OAEG;WACU,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG;IAerE;;OAEG;WACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;CAqCnE"}
1
+ {"version":3,"file":"X509Base.d.ts","sourceRoot":"","sources":["../../../../src/certificate/kinds/X509Base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGH,MAAM,EAKN,OAAO,EACP,GAAG,EAMN,MAAM,UAAU,CAAC;AAElB,OAAO,EAA8C,QAAQ,EAAE,MAAM,aAAa,CAAC;AAYnF,OAAO,EAAoD,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG1G;;;;GAIG;AACH,8BAAsB,QAAQ,CAAC,EAAE,SAAS,eAAe;;gBAIzC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IAOnC,IAAI,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC,CAEvB;IAED,IAAI,QAAQ,YAEX;IAED;;;OAGG;IACH,IAAI,SAAS,IAWY,UAAU,CANlC;IAED;;;OAGG;IACH,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,EAKlC;IAED;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;IAI1C;;OAEG;IACH,cAAc,IAAI,UAAU,CAAC,eAAe,CAAC;IAiM7C;;OAEG;IACH,SAAS,CAAC,yBAAyB,CAAC,EAChC,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,sBAAsB,EACtB,UAAU,GACb,EAAE,QAAQ,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBf;;OAEG;WACU,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG;IAerE;;OAEG;WACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;CAyE1E"}
@@ -314,24 +314,50 @@ class X509Base {
314
314
  /**
315
315
  * Extract the public key from a Certificate Signing Request (CSR) in ASN.1 DER format.
316
316
  */
317
- static async getPublicKeyFromCsr(crypto, csr) {
318
- const { [import_general.DerKey.Elements]: rootElements } = import_general.DerCodec.decode(csr);
319
- if (rootElements?.length !== 3) throw new import_common.CertificateError("Invalid CSR data");
317
+ static async getPublicKeyFromCsr(crypto, encodedCsr) {
318
+ const { [import_general.DerKey.Elements]: rootElements } = import_general.DerCodec.decode(encodedCsr);
319
+ if (rootElements?.length !== 3) {
320
+ throw new import_common.CertificateError("Invalid CSR data");
321
+ }
320
322
  const [requestNode, signAlgorithmNode, signatureNode] = rootElements;
321
323
  const { [import_general.DerKey.Elements]: requestElements } = requestNode;
322
- if (requestElements?.length !== 4) throw new import_common.CertificateError("Invalid CSR data");
323
- const [versionNode, _subjectNode, publicKeyNode] = requestElements;
324
- const requestVersion = versionNode[import_general.DerKey.Bytes][0];
325
- if (requestVersion !== 0) throw new import_common.CertificateError(`Unsupported request version ${requestVersion}`);
324
+ if (requestElements?.length !== 4) {
325
+ throw new import_common.CertificateError("Invalid CSR data");
326
+ }
327
+ const [versionNode, subjectNode, publicKeyNode] = requestElements;
328
+ const requestVersionBytes = versionNode[import_general.DerKey.Bytes];
329
+ if (requestVersionBytes.length !== 1 || requestVersionBytes[0] !== 0) {
330
+ throw new import_common.CertificateError(`Unsupported CSR version ${requestVersionBytes[0]}`);
331
+ }
332
+ if (!subjectNode[import_general.DerKey.Elements]?.length) {
333
+ throw new import_common.CertificateError("Missing subject in CSR data");
334
+ }
326
335
  const { [import_general.DerKey.Elements]: publicKeyElements } = publicKeyNode;
327
- if (publicKeyElements?.length !== 2) throw new import_common.CertificateError("Invalid CSR data");
328
- const [_publicKeyTypeNode, publicKeyBytesNode] = publicKeyElements;
336
+ if (publicKeyElements?.length !== 2) {
337
+ throw new import_common.CertificateError("Invalid CSR data");
338
+ }
339
+ const [publicKeyTypeNode, publicKeyBytesNode] = publicKeyElements;
340
+ const { [import_general.DerKey.Elements]: publicKeyTypeNodeElements } = publicKeyTypeNode;
341
+ if (publicKeyTypeNodeElements?.length !== 2) {
342
+ throw new import_common.CertificateError("Invalid public key type in CSR");
343
+ }
344
+ if (!import_general.Bytes.areEqual(
345
+ publicKeyTypeNodeElements[0][import_general.DerKey.Bytes],
346
+ import_general.X962.PublicKeyAlgorithmEcPublicKey[import_general.DerKey.Bytes]
347
+ )) {
348
+ throw new import_common.CertificateError("Unsupported public key algorithm in CSR");
349
+ }
350
+ if (!import_general.Bytes.areEqual(
351
+ publicKeyTypeNodeElements[1][import_general.DerKey.Bytes],
352
+ import_general.X962.PublicKeyAlgorithmEcPublicKeyP256[import_general.DerKey.Bytes]
353
+ )) {
354
+ throw new import_common.CertificateError("Unsupported public key curve in CSR");
355
+ }
329
356
  const publicKey = publicKeyBytesNode[import_general.DerKey.Bytes];
330
- if (signAlgorithmNode[import_general.DerKey.Elements]?.[0]?.[import_general.DerKey.Bytes] === void 0 || !import_general.Bytes.areEqual(
331
- import_general.X962.EcdsaWithSHA256[import_general.DerKey.ObjectId][import_general.DerKey.Bytes],
332
- signAlgorithmNode[import_general.DerKey.Elements]?.[0]?.[import_general.DerKey.Bytes]
333
- ))
334
- throw new import_common.CertificateError("Unsupported signature type");
357
+ const signatureAlgorithmBytes = signAlgorithmNode[import_general.DerKey.Elements]?.[0]?.[import_general.DerKey.Bytes];
358
+ if (signatureAlgorithmBytes === void 0 || !import_general.Bytes.areEqual(import_general.X962.EcdsaWithSHA256[import_general.DerKey.ObjectId][import_general.DerKey.Bytes], signatureAlgorithmBytes)) {
359
+ throw new import_common.CertificateError("Unsupported signature algorithm in CSR");
360
+ }
335
361
  await crypto.verifyEcdsa(
336
362
  (0, import_general.PublicKey)(publicKey),
337
363
  import_general.DerCodec.encode(requestNode),
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/certificate/kinds/X509Base.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DclApiErrorResponse, DclPkiRootCertificateSubjectReference } from "#dcl/DclRestApiTypes.js";
7
+ import { MatterError } from "#general";
8
+ /** Base class for all DCL-related errors */
9
+ export declare class MatterDclError extends MatterError {
10
+ }
11
+ /** Error thrown when fetching data from DCL fails */
12
+ export declare class MatterDclResponseError extends MatterDclError {
13
+ constructor(path: string, error: DclApiErrorResponse);
14
+ }
15
+ /** A client clas to use "fetch" to get REST DAta from DCL (Decentraland) */
16
+ export declare class DclClient {
17
+ #private;
18
+ private readonly production;
19
+ constructor(production?: boolean);
20
+ fetchRootCertificateList(): Promise<DclPkiRootCertificateSubjectReference[]>;
21
+ fetchRootCertificateBySubject(subject: DclPkiRootCertificateSubjectReference): Promise<import("@matter/types").ProductAttestationDclSchema[]>;
22
+ fetchModelByVidPid(vid: number, pid: number): Promise<import("@matter/types").DeviceModelDclSchema>;
23
+ fetchModelVersionsByVidPid(vid: number, pid: number): Promise<number[]>;
24
+ fetchModelVersionByVidPidSoftwareVersion(vid: number, pid: number, softwareVersion: number): Promise<import("@matter/types").DeviceSoftwareVersionModelDclSchema>;
25
+ }
26
+ //# sourceMappingURL=DclClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DclClient.d.ts","sourceRoot":"","sources":["../../../src/dcl/DclClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACH,mBAAmB,EAMnB,qCAAqC,EACxC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKvC,4CAA4C;AAC5C,qBAAa,cAAe,SAAQ,WAAW;CAAG;AAElD,qDAAqD;AACrD,qBAAa,sBAAuB,SAAQ,cAAc;gBAC1C,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;CAGvD;AAED,4EAA4E;AAC5E,qBAAa,SAAS;;IAGN,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,GAAE,OAAc;IAgCjD,wBAAwB;IAUxB,6BAA6B,CAAC,OAAO,EAAE,qCAAqC;IAiB5E,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAe3C,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAenD,wCAAwC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;CAiBnG"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var DclClient_exports = {};
20
+ __export(DclClient_exports, {
21
+ DclClient: () => DclClient,
22
+ MatterDclError: () => MatterDclError,
23
+ MatterDclResponseError: () => MatterDclResponseError
24
+ });
25
+ module.exports = __toCommonJS(DclClient_exports);
26
+ var import_general = require("#general");
27
+ /**
28
+ * @license
29
+ * Copyright 2022-2025 Matter.js Authors
30
+ * SPDX-License-Identifier: Apache-2.0
31
+ */
32
+ const DCL_PRODUCTION_URL = "https://on.dcl.csa-iot.org";
33
+ const DCL_TEST_URL = "https://on.test-net.dcl.csa-iot.org";
34
+ class MatterDclError extends import_general.MatterError {
35
+ }
36
+ class MatterDclResponseError extends MatterDclError {
37
+ constructor(path, error) {
38
+ super(`Error fetching ${path} from DCL: ${error.code} - ${error.message}`);
39
+ }
40
+ }
41
+ class DclClient {
42
+ constructor(production = true) {
43
+ this.production = production;
44
+ this.#baseUrl = this.production ? DCL_PRODUCTION_URL : DCL_TEST_URL;
45
+ }
46
+ #baseUrl;
47
+ async #fetchJson(path) {
48
+ const url = new URL(path, this.#baseUrl);
49
+ try {
50
+ const response = await fetch(url.toString(), {
51
+ method: "GET",
52
+ headers: {
53
+ "Content-Type": "application/json"
54
+ },
55
+ signal: AbortSignal.timeout(5e3)
56
+ // 5 seconds timeout
57
+ });
58
+ if (!response.ok) {
59
+ throw new MatterDclResponseError(path, await response.json());
60
+ }
61
+ return await response.json();
62
+ } catch (error) {
63
+ if (error instanceof MatterDclResponseError) {
64
+ throw error;
65
+ }
66
+ throw new MatterDclResponseError(path, {
67
+ code: 500,
68
+ message: error instanceof Error ? error.message : "Unknown Error",
69
+ details: []
70
+ });
71
+ }
72
+ }
73
+ async fetchRootCertificateList() {
74
+ const certList = await this.#fetchJson("/certificates/approved");
75
+ if (certList?.approvedRootCertificates?.schemaVersion !== 0) {
76
+ throw new MatterDclError(
77
+ `Unsupported DCL Root Certificate schema version: ${certList.approvedRootCertificates.schemaVersion}`
78
+ );
79
+ }
80
+ return certList.approvedRootCertificates.certs;
81
+ }
82
+ async fetchRootCertificateBySubject(subject) {
83
+ const path = `/certificates/${encodeURIComponent(subject.subject)}/${encodeURIComponent(subject.subjectKeyId)}`;
84
+ const response = await this.#fetchJson(path);
85
+ if (!response || !response.approvedRootCertificates || response.approvedRootCertificates.subject !== subject.subject || response.approvedRootCertificates.subjectKeyId !== subject.subjectKeyId || response.approvedRootCertificates.schemaVersion !== 0) {
86
+ throw new MatterDclError(
87
+ `Root certificate not found for subject: ${subject.subject}, subjectKeyId: ${subject.subjectKeyId}`
88
+ );
89
+ }
90
+ return response.approvedRootCertificates.certs;
91
+ }
92
+ async fetchModelByVidPid(vid, pid) {
93
+ const path = `/models/model/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}`;
94
+ const response = await this.#fetchJson(path);
95
+ if (!response || !response.model || response.model.vid !== vid || response.model.pid !== pid || response.model.schemaVersion !== 0) {
96
+ throw new MatterDclError(`Model not found for VID: ${vid}, PID: ${pid}`);
97
+ }
98
+ return response.model;
99
+ }
100
+ async fetchModelVersionsByVidPid(vid, pid) {
101
+ const path = `/models/versions/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}`;
102
+ const response = await this.#fetchJson(path);
103
+ if (!response || !response.modelVersions || response.modelVersions.vid !== vid || response.modelVersions.pid !== pid || response.modelVersions.schemaVersion !== 0) {
104
+ throw new MatterDclError(`Model versions not found for VID: ${vid}, PID: ${pid}`);
105
+ }
106
+ return response.modelVersions.softwareVersions;
107
+ }
108
+ async fetchModelVersionByVidPidSoftwareVersion(vid, pid, softwareVersion) {
109
+ const path = `/models/versions/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}/${encodeURIComponent(softwareVersion)}`;
110
+ const response = await this.#fetchJson(path);
111
+ if (!response || !response.modelVersion || response.modelVersion.vid !== vid || response.modelVersion.pid !== pid || response.modelVersion.softwareVersion !== softwareVersion || response.modelVersion.schemaVersion !== 0) {
112
+ throw new MatterDclError(
113
+ `Model version not found for VID: ${vid}, PID: ${pid}, Software Version: ${softwareVersion}`
114
+ );
115
+ }
116
+ return response.modelVersion;
117
+ }
118
+ }
119
+ //# sourceMappingURL=DclClient.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/dcl/DclClient.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DeviceModelDclSchema, DeviceSoftwareVersionModelDclSchema, ProductAttestationDclSchema } from "@matter/types";
7
+ export interface DclApiErrorResponse {
8
+ code: number;
9
+ message: string;
10
+ details: string[];
11
+ }
12
+ export interface DclPkiRootCertificateSubjectReference {
13
+ subject: string;
14
+ subjectKeyId: string;
15
+ }
16
+ /** Response for /dcl/pki/certificates/approved */
17
+ export interface DclPkiRootCertificatesResponse {
18
+ approvedRootCertificates: {
19
+ certs: DclPkiRootCertificateSubjectReference[];
20
+ schemaVersion: number;
21
+ };
22
+ }
23
+ /** Response for /dcl/pki/certificates/{subject}/{subjectKeyId} */
24
+ export interface DclPkiCertificateResponse {
25
+ approvedRootCertificates: {
26
+ subject: string;
27
+ subjectKeyId: string;
28
+ certs: ProductAttestationDclSchema[];
29
+ schemaVersion: number;
30
+ };
31
+ }
32
+ /** Response for /dcl/models/model/{vid}/{pid} */
33
+ export interface DclModelModelsWithVidPidResponse {
34
+ model: DeviceModelDclSchema;
35
+ }
36
+ /** Response for /dcl/model/versions/{vid}/{pid} */
37
+ export interface DclModelVersionsWithVidPidResponse {
38
+ modelVersions: {
39
+ vid: number;
40
+ pid: number;
41
+ softwareVersions: number[];
42
+ schemaVersion: number;
43
+ };
44
+ }
45
+ /** Response for /dcl/model/versions/{vid}/{pid}/{softwareVersion} */
46
+ export interface DclModelVersionWithVidPidSoftwareVersionResponse {
47
+ modelVersion: DeviceSoftwareVersionModelDclSchema;
48
+ }
49
+ //# sourceMappingURL=DclRestApiTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DclRestApiTypes.d.ts","sourceRoot":"","sources":["../../../src/dcl/DclRestApiTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,mCAAmC,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAEvH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,qCAAqC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,8BAA8B;IAC3C,wBAAwB,EAAE;QACtB,KAAK,EAAE,qCAAqC,EAAE,CAAC;QAC/C,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;CACL;AAED,kEAAkE;AAClE,MAAM,WAAW,yBAAyB;IACtC,wBAAwB,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,2BAA2B,EAAE,CAAC;QACrC,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;CACL;AAED,iDAAiD;AACjD,MAAM,WAAW,gCAAgC;IAC7C,KAAK,EAAE,oBAAoB,CAAC;CAC/B;AAED,mDAAmD;AACnD,MAAM,WAAW,kCAAkC;IAC/C,aAAa,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;CACL;AAED,qEAAqE;AACrE,MAAM,WAAW,gDAAgD;IAC7D,YAAY,EAAE,mCAAmC,CAAC;CACrD"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var DclRestApiTypes_exports = {};
16
+ module.exports = __toCommonJS(DclRestApiTypes_exports);
17
+ /**
18
+ * @license
19
+ * Copyright 2022-2025 Matter.js Authors
20
+ * SPDX-License-Identifier: Apache-2.0
21
+ */
22
+ //# sourceMappingURL=DclRestApiTypes.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/dcl/DclRestApiTypes.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
5
+ "names": []
6
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./DclClient.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dcl/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var dcl_exports = {};
17
+ module.exports = __toCommonJS(dcl_exports);
18
+ __reExport(dcl_exports, require("./DclClient.js"), module.exports);
19
+ /**
20
+ * @license
21
+ * Copyright 2022-2025 Matter.js Authors
22
+ * SPDX-License-Identifier: Apache-2.0
23
+ */
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/dcl/index.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,wBAAc,2BANd;AAAA;AAAA;AAAA;AAAA;AAAA;",
5
+ "names": []
6
+ }
@@ -9,6 +9,7 @@ export * from "./certificate/index.js";
9
9
  export * from "./cluster/index.js";
10
10
  export * from "./codec/index.js";
11
11
  export * from "./common/index.js";
12
+ export * from "./dcl/index.js";
12
13
  export * from "./events/index.js";
13
14
  export * from "./fabric/index.js";
14
15
  export * from "./groups/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -21,6 +21,7 @@ __reExport(src_exports, require("./certificate/index.js"), module.exports);
21
21
  __reExport(src_exports, require("./cluster/index.js"), module.exports);
22
22
  __reExport(src_exports, require("./codec/index.js"), module.exports);
23
23
  __reExport(src_exports, require("./common/index.js"), module.exports);
24
+ __reExport(src_exports, require("./dcl/index.js"), module.exports);
24
25
  __reExport(src_exports, require("./events/index.js"), module.exports);
25
26
  __reExport(src_exports, require("./fabric/index.js"), module.exports);
26
27
  __reExport(src_exports, require("./groups/index.js"), module.exports);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,wBAAc,8BANd;AAOA,wBAAc,2BAPd;AAQA,wBAAc,mCARd;AASA,wBAAc,+BATd;AAUA,wBAAc,6BAVd;AAWA,wBAAc,8BAXd;AAYA,wBAAc,8BAZd;AAaA,wBAAc,8BAbd;AAcA,wBAAc,8BAdd;AAeA,wBAAc,mCAfd;AAgBA,wBAAc,4BAhBd;AAiBA,wBAAc,4BAjBd;AAkBA,wBAAc,gCAlBd;AAmBA,wBAAc,qCAnBd;AAoBA,wBAAc,+BApBd;AAAA;AAAA;AAAA;AAAA;AAAA;",
4
+ "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,wBAAc,8BANd;AAOA,wBAAc,2BAPd;AAQA,wBAAc,mCARd;AASA,wBAAc,+BATd;AAUA,wBAAc,6BAVd;AAWA,wBAAc,8BAXd;AAYA,wBAAc,2BAZd;AAaA,wBAAc,8BAbd;AAcA,wBAAc,8BAdd;AAeA,wBAAc,8BAfd;AAgBA,wBAAc,mCAhBd;AAiBA,wBAAc,4BAjBd;AAkBA,wBAAc,4BAlBd;AAmBA,wBAAc,gCAnBd;AAoBA,wBAAc,qCApBd;AAqBA,wBAAc,+BArBd;AAAA;AAAA;AAAA;AAAA;AAAA;",
5
5
  "names": []
6
6
  }
@@ -87,6 +87,6 @@ export declare abstract class X509Base<CT extends X509Certificate> {
87
87
  /**
88
88
  * Extract the public key from a Certificate Signing Request (CSR) in ASN.1 DER format.
89
89
  */
90
- static getPublicKeyFromCsr(crypto: Crypto, csr: Uint8Array): Promise<Uint8Array<ArrayBufferLike>>;
90
+ static getPublicKeyFromCsr(crypto: Crypto, encodedCsr: Uint8Array): Promise<Uint8Array<ArrayBufferLike>>;
91
91
  }
92
92
  //# sourceMappingURL=X509Base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"X509Base.d.ts","sourceRoot":"","sources":["../../../../src/certificate/kinds/X509Base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGH,MAAM,EAKN,OAAO,EACP,GAAG,EAMN,MAAM,UAAU,CAAC;AAElB,OAAO,EAA8C,QAAQ,EAAE,MAAM,aAAa,CAAC;AAYnF,OAAO,EAAoD,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG1G;;;;GAIG;AACH,8BAAsB,QAAQ,CAAC,EAAE,SAAS,eAAe;;gBAIzC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IAOnC,IAAI,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC,CAEvB;IAED,IAAI,QAAQ,YAEX;IAED;;;OAGG;IACH,IAAI,SAAS,IAWY,UAAU,CANlC;IAED;;;OAGG;IACH,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,EAKlC;IAED;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;IAI1C;;OAEG;IACH,cAAc,IAAI,UAAU,CAAC,eAAe,CAAC;IAiM7C;;OAEG;IACH,SAAS,CAAC,yBAAyB,CAAC,EAChC,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,sBAAsB,EACtB,UAAU,GACb,EAAE,QAAQ,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBf;;OAEG;WACU,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG;IAerE;;OAEG;WACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;CAqCnE"}
1
+ {"version":3,"file":"X509Base.d.ts","sourceRoot":"","sources":["../../../../src/certificate/kinds/X509Base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGH,MAAM,EAKN,OAAO,EACP,GAAG,EAMN,MAAM,UAAU,CAAC;AAElB,OAAO,EAA8C,QAAQ,EAAE,MAAM,aAAa,CAAC;AAYnF,OAAO,EAAoD,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG1G;;;;GAIG;AACH,8BAAsB,QAAQ,CAAC,EAAE,SAAS,eAAe;;gBAIzC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IAOnC,IAAI,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC,CAEvB;IAED,IAAI,QAAQ,YAEX;IAED;;;OAGG;IACH,IAAI,SAAS,IAWY,UAAU,CANlC;IAED;;;OAGG;IACH,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,EAKlC;IAED;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;IAI1C;;OAEG;IACH,cAAc,IAAI,UAAU,CAAC,eAAe,CAAC;IAiM7C;;OAEG;IACH,SAAS,CAAC,yBAAyB,CAAC,EAChC,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,sBAAsB,EACtB,UAAU,GACb,EAAE,QAAQ,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBf;;OAEG;WACU,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG;IAerE;;OAEG;WACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;CAyE1E"}
@@ -314,24 +314,50 @@ class X509Base {
314
314
  /**
315
315
  * Extract the public key from a Certificate Signing Request (CSR) in ASN.1 DER format.
316
316
  */
317
- static async getPublicKeyFromCsr(crypto, csr) {
318
- const { [DerKey.Elements]: rootElements } = DerCodec.decode(csr);
319
- if (rootElements?.length !== 3) throw new CertificateError("Invalid CSR data");
317
+ static async getPublicKeyFromCsr(crypto, encodedCsr) {
318
+ const { [DerKey.Elements]: rootElements } = DerCodec.decode(encodedCsr);
319
+ if (rootElements?.length !== 3) {
320
+ throw new CertificateError("Invalid CSR data");
321
+ }
320
322
  const [requestNode, signAlgorithmNode, signatureNode] = rootElements;
321
323
  const { [DerKey.Elements]: requestElements } = requestNode;
322
- if (requestElements?.length !== 4) throw new CertificateError("Invalid CSR data");
323
- const [versionNode, _subjectNode, publicKeyNode] = requestElements;
324
- const requestVersion = versionNode[DerKey.Bytes][0];
325
- if (requestVersion !== 0) throw new CertificateError(`Unsupported request version ${requestVersion}`);
324
+ if (requestElements?.length !== 4) {
325
+ throw new CertificateError("Invalid CSR data");
326
+ }
327
+ const [versionNode, subjectNode, publicKeyNode] = requestElements;
328
+ const requestVersionBytes = versionNode[DerKey.Bytes];
329
+ if (requestVersionBytes.length !== 1 || requestVersionBytes[0] !== 0) {
330
+ throw new CertificateError(`Unsupported CSR version ${requestVersionBytes[0]}`);
331
+ }
332
+ if (!subjectNode[DerKey.Elements]?.length) {
333
+ throw new CertificateError("Missing subject in CSR data");
334
+ }
326
335
  const { [DerKey.Elements]: publicKeyElements } = publicKeyNode;
327
- if (publicKeyElements?.length !== 2) throw new CertificateError("Invalid CSR data");
328
- const [_publicKeyTypeNode, publicKeyBytesNode] = publicKeyElements;
336
+ if (publicKeyElements?.length !== 2) {
337
+ throw new CertificateError("Invalid CSR data");
338
+ }
339
+ const [publicKeyTypeNode, publicKeyBytesNode] = publicKeyElements;
340
+ const { [DerKey.Elements]: publicKeyTypeNodeElements } = publicKeyTypeNode;
341
+ if (publicKeyTypeNodeElements?.length !== 2) {
342
+ throw new CertificateError("Invalid public key type in CSR");
343
+ }
344
+ if (!Bytes.areEqual(
345
+ publicKeyTypeNodeElements[0][DerKey.Bytes],
346
+ X962.PublicKeyAlgorithmEcPublicKey[DerKey.Bytes]
347
+ )) {
348
+ throw new CertificateError("Unsupported public key algorithm in CSR");
349
+ }
350
+ if (!Bytes.areEqual(
351
+ publicKeyTypeNodeElements[1][DerKey.Bytes],
352
+ X962.PublicKeyAlgorithmEcPublicKeyP256[DerKey.Bytes]
353
+ )) {
354
+ throw new CertificateError("Unsupported public key curve in CSR");
355
+ }
329
356
  const publicKey = publicKeyBytesNode[DerKey.Bytes];
330
- if (signAlgorithmNode[DerKey.Elements]?.[0]?.[DerKey.Bytes] === void 0 || !Bytes.areEqual(
331
- X962.EcdsaWithSHA256[DerKey.ObjectId][DerKey.Bytes],
332
- signAlgorithmNode[DerKey.Elements]?.[0]?.[DerKey.Bytes]
333
- ))
334
- throw new CertificateError("Unsupported signature type");
357
+ const signatureAlgorithmBytes = signAlgorithmNode[DerKey.Elements]?.[0]?.[DerKey.Bytes];
358
+ if (signatureAlgorithmBytes === void 0 || !Bytes.areEqual(X962.EcdsaWithSHA256[DerKey.ObjectId][DerKey.Bytes], signatureAlgorithmBytes)) {
359
+ throw new CertificateError("Unsupported signature algorithm in CSR");
360
+ }
335
361
  await crypto.verifyEcdsa(
336
362
  PublicKey(publicKey),
337
363
  DerCodec.encode(requestNode),
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/certificate/kinds/X509Base.ts"],
4
- "mappings": "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",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EACI;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,4BAAkF;AAC3F,SAAS,0BAA0B,wBAAkC;AACrE;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAkC,+BAAgD;AAQ3E,MAAe,SAAqC;AAAA,EACvD;AAAA,EACA;AAAA,EAEA,YAAY,MAAyB;AACjC,SAAK,QAAQ;AACb,QAAI,eAAe,MAAM;AACrB,WAAK,aAAa,KAAK;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEA,IAAI,OAAqB;AACrB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,WAAW;AACX,WAAO,KAAK,eAAe;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,YAAY;AACZ,QAAI,KAAK,eAAe,QAAW;AAC/B,YAAM,IAAI,iBAAiB,2BAA2B;AAAA,IAC1D;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAU,WAAuB;AACjC,QAAI,KAAK,UAAU;AACf,YAAM,IAAI,iBAAiB,+BAA+B;AAAA,IAC9D;AACA,SAAK,aAAa;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,QAAgB,KAAiB;AACxC,SAAK,YAAY,MAAM,OAAO,UAAU,KAAK,KAAK,eAAe,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,iBAA8C;AAC1C,UAAM,YAAY,SAAS,OAAO,KAAK,0BAA0B,KAAK,IAAI,CAAC;AAC3E,6BAAyB,SAAS;AAClC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAuB,MAAgC;AACnD,UAAM,MAAM,CAAC;AACb,WAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3C,UAAI,UAAU,QAAW;AACrB;AAAA,MACJ;AACA,cAAQ,KAAK;AAAA,QACT,KAAK;AACD,cAAI,aAAa,KAAK,WAAW,KAAe;AAChD;AAAA,QACJ,KAAK;AACD,cAAI,WAAW,KAAK,QAAQ,KAAe;AAC3C;AAAA,QACJ,KAAK;AACD,cAAI,YAAY,KAAK,aAAa,KAAe;AACjD;AAAA,QACJ,KAAK;AACD,cAAI,cAAc,KAAK,YAAY,KAAe;AAClD;AAAA,QACJ,KAAK;AACD,cAAI,eAAe,KAAK,aAAa,KAAe;AACpD;AAAA,QACJ,KAAK;AACD,cAAI,sBAAsB,KAAK,oBAAoB,KAAe;AAClE;AAAA,QACJ,KAAK;AACD,cAAI,UAAU,KAAK,iBAAiB,KAAe;AACnD;AAAA,QACJ,KAAK;AACD,cAAI,cAAc,KAAK,uBAAuB,KAAe;AAC7D;AAAA,QACJ,KAAK;AACD,cAAI,QAAQ,KAAK,MAAM,KAAe;AACtC;AAAA,QACJ,KAAK;AACD,cAAI,OAAO,KAAK,KAAK,KAAe;AACpC;AAAA,QACJ,KAAK;AACD,cAAI,YAAY,KAAK,UAAU,KAAe;AAC9C;AAAA,QACJ,KAAK;AACD,cAAI,WAAW,KAAK,SAAS,KAAe;AAC5C;AAAA,QACJ,KAAK;AACD,cAAI,eAAe,KAAK,oBAAoB,KAAe;AAC3D;AAAA,QACJ,KAAK;AACD,cAAI,cAAc,KAAK,YAAY,KAAe;AAClD;AAAA,QACJ,KAAK;AACD,cAAI,YAAY,KAAK,UAAU,KAAe;AAC9C;AAAA,QACJ,KAAK;AACD,cAAI,kBAAkB,KAAK,gBAAgB,KAAe;AAC1D;AAAA,QACJ,KAAK;AACD,cAAI,SAAS,cAAc,KAAe;AAC1C;AAAA,QACJ,KAAK;AACD,cAAI,oBAAoB,yBAAyB,KAAe;AAChE;AAAA,QACJ,KAAK;AACD,cAAI,SAAS,cAAc,KAAwB;AACnD;AAAA,QACJ,KAAK;AACD,cAAI,SAAS,cAAc,KAAwB;AACnD;AAAA,QACJ,KAAK;AACD,cAAI,WAAW,gBAAgB,KAAiB;AAChD;AAAA,QACJ,KAAK;AAID,gBAAM,wBAAwB;AAC9B,+BAAqB,mBAAmB,qBAAqB;AAE7D,gBAAM,OAAO,sBAAsB,CAAC;AACpC,gBAAM,OAAO,sBAAsB,CAAC;AACpC,gBAAM,OAAO,sBAAsB,CAAC;AACpC,cAAI,SAAS,QAAW;AACpB,gBAAI,wBAAwB,cAAc,IAAI;AAAA,UAClD;AACA,cAAI,SAAS,QAAW;AACpB,gBAAI,wBAAwB,cAAc,IAAI;AAAA,UAClD;AACA,cAAI,SAAS,QAAW;AACpB,gBAAI,wBAAwB,cAAc,IAAI;AAAA,UAClD;AACA;AAAA,QACJ,KAAK;AACD,cAAI,WAAW,gBAAgB,KAAiB;AAChD;AAAA,QACJ,KAAK;AACD,cAAI,YAAY,iBAAiB,KAAe;AAChD;AAAA,QACJ,KAAK;AACD,cAAI,eAAe,KAAK,WAAW,OAAiB,IAAI;AACxD;AAAA,QACJ,KAAK;AACD,cAAI,aAAa,KAAK,QAAQ,OAAiB,IAAI;AACnD;AAAA,QACJ,KAAK;AACD,cAAI,cAAc,KAAK,aAAa,OAAiB,IAAI;AACzD;AAAA,QACJ,KAAK;AACD,cAAI,gBAAgB,KAAK,YAAY,OAAiB,IAAI;AAC1D;AAAA,QACJ,KAAK;AACD,cAAI,iBAAiB,KAAK,aAAa,OAAiB,IAAI;AAC5D;AAAA,QACJ,KAAK;AACD,cAAI,wBAAwB,KAAK,oBAAoB,OAAiB,IAAI;AAC1E;AAAA,QACJ,KAAK;AACD,cAAI,YAAY,KAAK,iBAAiB,OAAiB,IAAI;AAC3D;AAAA,QACJ,KAAK;AACD,cAAI,gBAAgB,KAAK,uBAAuB,OAAiB,IAAI;AACrE;AAAA,QACJ,KAAK;AACD,cAAI,UAAU,KAAK,MAAM,OAAiB,IAAI;AAC9C;AAAA,QACJ,KAAK;AACD,cAAI,SAAS,KAAK,KAAK,OAAiB,IAAI;AAC5C;AAAA,QACJ,KAAK;AACD,cAAI,cAAc,KAAK,UAAU,OAAiB,IAAI;AACtD;AAAA,QACJ,KAAK;AACD,cAAI,aAAa,KAAK,SAAS,OAAiB,IAAI;AACpD;AAAA,QACJ,KAAK;AACD,cAAI,iBAAiB,KAAK,oBAAoB,OAAiB,IAAI;AACnE;AAAA,QACJ,KAAK;AACD,cAAI,gBAAgB,KAAK,YAAY,OAAiB,IAAI;AAC1D;AAAA,QACJ,KAAK;AACD,cAAI,cAAc,KAAK,UAAU,OAAiB,IAAI;AACtD;AAAA,MACR;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,YAAkC;AAChD,UAAM,MAAM,CAAC;AACb,WAAO,QAAQ,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACjD,UAAI,UAAU,QAAW;AACrB;AAAA,MACJ;AACA,cAAQ,KAAK;AAAA,QACT,KAAK;AACD,cAAI,mBAAmB,KAAK,iBAAiB,KAAK;AAClD;AAAA,QACJ,KAAK;AACD,cAAI,WAAW,KAAK;AAAA,YAChB,wBAAwB;AAAA,cACpB;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,QACJ,KAAK;AACD,cAAI,mBAAmB,KAAK,iBAAiB,KAA6B;AAC1E;AAAA,QACJ,KAAK;AACD,cAAI,uBAAuB,KAAK,qBAAqB,KAAmB;AACxE;AAAA,QACJ,KAAK;AACD,cAAI,yBAAyB,KAAK,uBAAuB,KAAmB;AAC5E;AAAA,QACJ,KAAK;AACD,cAAI,kBAAkB,SAAS,MAAM,OAAO,GAAK,SAAsC,CAAC,CAAE,CAAC;AAC3F;AAAA,MACR;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKU,0BAA0B;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAAiB;AACb,UAAM;AAAA,MACF,kBAAkB,EAAE,MAAM,QAAQ;AAAA,IACtC,IAAI;AACJ,QAAI,CAAC,QAAQ,YAAY,QAAW;AAChC,YAAM,IAAI,iBAAiB,wDAAwD;AAAA,IACvF;AACA,WAAO;AAAA,MACH,SAAS,cAAc,GAAG,CAAC;AAAA;AAAA,MAC3B,cAAc,iBAAiB,QAAQ,SAAS,YAAY;AAAA,MAC5D,oBAAoB,KAAK;AAAA,MACzB,QAAQ,KAAK,uBAAuB,MAAM;AAAA,MAC1C,UAAU;AAAA,QACN,WAAW,eAAe,SAAS;AAAA,QACnC,UAAU,eAAe,QAAQ;AAAA,MACrC;AAAA,MACA,SAAS,KAAK,uBAAuB,OAAO;AAAA,MAC5C,WAAW,KAAK,sBAAsB,sBAAsB;AAAA,MAC5D,YAAY,cAAc,GAAG,KAAK,kBAAkB,UAAU,CAAC;AAAA,IACnE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,gCAAgC,QAAgB,KAAU;AACnE,UAAM,UAAU;AAAA,MACZ,SAAS;AAAA,MACT,SAAS,EAAE,cAAc,KAAK,iBAAiB,KAAK,EAAE;AAAA,MACtD,WAAW,KAAK,sBAAsB,IAAI,SAAS;AAAA,MACnD,gBAAgB,cAAc,CAAC;AAAA,IACnC;AAEA,WAAO,SAAS,OAAO;AAAA,MACnB;AAAA,MACA,eAAe,KAAK;AAAA,MACpB,WAAW,aAAa,MAAM,OAAO,UAAU,KAAK,SAAS,OAAO,OAAO,GAAG,KAAK,CAAC;AAAA,IACxF,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,oBAAoB,QAAgB,YAAwB;AACrE,UAAM,EAAE,CAAC,OAAO,QAAQ,GAAG,aAAa,IAAI,SAAS,OAAO,UAAU;AACtE,QAAI,cAAc,WAAW,GAAG;AAC5B,YAAM,IAAI,iBAAiB,kBAAkB;AAAA,IACjD;AACA,UAAM,CAAC,aAAa,mBAAmB,aAAa,IAAI;AAGxD,UAAM,EAAE,CAAC,OAAO,QAAQ,GAAG,gBAAgB,IAAI;AAC/C,QAAI,iBAAiB,WAAW,GAAG;AAC/B,YAAM,IAAI,iBAAiB,kBAAkB;AAAA,IACjD;AACA,UAAM,CAAC,aAAa,aAAa,aAAa,IAAI;AAClD,UAAM,sBAAsB,YAAY,OAAO,KAAK;AACpD,QAAI,oBAAoB,WAAW,KAAK,oBAAoB,CAAC,MAAM,GAAG;AAClE,YAAM,IAAI,iBAAiB,2BAA2B,oBAAoB,CAAC,CAAC,EAAE;AAAA,IAClF;AAGA,QAAI,CAAC,YAAY,OAAO,QAAQ,GAAG,QAAQ;AACvC,YAAM,IAAI,iBAAiB,6BAA6B;AAAA,IAC5D;AAEA,UAAM,EAAE,CAAC,OAAO,QAAQ,GAAG,kBAAkB,IAAI;AACjD,QAAI,mBAAmB,WAAW,GAAG;AACjC,YAAM,IAAI,iBAAiB,kBAAkB;AAAA,IACjD;AACA,UAAM,CAAC,mBAAmB,kBAAkB,IAAI;AAGhD,UAAM,EAAE,CAAC,OAAO,QAAQ,GAAG,0BAA0B,IAAI;AACzD,QAAI,2BAA2B,WAAW,GAAG;AACzC,YAAM,IAAI,iBAAiB,gCAAgC;AAAA,IAC/D;AACA,QACI,CAAC,MAAM;AAAA,MACH,0BAA0B,CAAC,EAAE,OAAO,KAAK;AAAA,MACzC,KAAK,8BAA8B,OAAO,KAAK;AAAA,IACnD,GACF;AACE,YAAM,IAAI,iBAAiB,yCAAyC;AAAA,IACxE;AAEA,QACI,CAAC,MAAM;AAAA,MACH,0BAA0B,CAAC,EAAE,OAAO,KAAK;AAAA,MACzC,KAAK,kCAAkC,OAAO,KAAK;AAAA,IACvD,GACF;AACE,YAAM,IAAI,iBAAiB,qCAAqC;AAAA,IACpE;AAEA,UAAM,YAAY,mBAAmB,OAAO,KAAK;AAGjD,UAAM,0BAA0B,kBAAkB,OAAO,QAAQ,IAAI,CAAC,IAAI,OAAO,KAAK;AACtF,QACI,4BAA4B,UAC5B,CAAC,MAAM,SAAS,KAAK,gBAAgB,OAAO,QAAQ,EAAE,OAAO,KAAK,GAAG,uBAAuB,GAC9F;AACE,YAAM,IAAI,iBAAiB,wCAAwC;AAAA,IACvE;AAGA,UAAM,OAAO;AAAA,MACT,UAAU,SAAS;AAAA,MACnB,SAAS,OAAO,WAAW;AAAA,MAC3B,cAAc,OAAO,KAAK;AAAA,MAC1B;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DclApiErrorResponse, DclPkiRootCertificateSubjectReference } from "#dcl/DclRestApiTypes.js";
7
+ import { MatterError } from "#general";
8
+ /** Base class for all DCL-related errors */
9
+ export declare class MatterDclError extends MatterError {
10
+ }
11
+ /** Error thrown when fetching data from DCL fails */
12
+ export declare class MatterDclResponseError extends MatterDclError {
13
+ constructor(path: string, error: DclApiErrorResponse);
14
+ }
15
+ /** A client clas to use "fetch" to get REST DAta from DCL (Decentraland) */
16
+ export declare class DclClient {
17
+ #private;
18
+ private readonly production;
19
+ constructor(production?: boolean);
20
+ fetchRootCertificateList(): Promise<DclPkiRootCertificateSubjectReference[]>;
21
+ fetchRootCertificateBySubject(subject: DclPkiRootCertificateSubjectReference): Promise<import("@matter/types").ProductAttestationDclSchema[]>;
22
+ fetchModelByVidPid(vid: number, pid: number): Promise<import("@matter/types").DeviceModelDclSchema>;
23
+ fetchModelVersionsByVidPid(vid: number, pid: number): Promise<number[]>;
24
+ fetchModelVersionByVidPidSoftwareVersion(vid: number, pid: number, softwareVersion: number): Promise<import("@matter/types").DeviceSoftwareVersionModelDclSchema>;
25
+ }
26
+ //# sourceMappingURL=DclClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DclClient.d.ts","sourceRoot":"","sources":["../../../src/dcl/DclClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACH,mBAAmB,EAMnB,qCAAqC,EACxC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKvC,4CAA4C;AAC5C,qBAAa,cAAe,SAAQ,WAAW;CAAG;AAElD,qDAAqD;AACrD,qBAAa,sBAAuB,SAAQ,cAAc;gBAC1C,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;CAGvD;AAED,4EAA4E;AAC5E,qBAAa,SAAS;;IAGN,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,GAAE,OAAc;IAgCjD,wBAAwB;IAUxB,6BAA6B,CAAC,OAAO,EAAE,qCAAqC;IAiB5E,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAe3C,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAenD,wCAAwC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;CAiBnG"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { MatterError } from "#general";
7
+ const DCL_PRODUCTION_URL = "https://on.dcl.csa-iot.org";
8
+ const DCL_TEST_URL = "https://on.test-net.dcl.csa-iot.org";
9
+ class MatterDclError extends MatterError {
10
+ }
11
+ class MatterDclResponseError extends MatterDclError {
12
+ constructor(path, error) {
13
+ super(`Error fetching ${path} from DCL: ${error.code} - ${error.message}`);
14
+ }
15
+ }
16
+ class DclClient {
17
+ constructor(production = true) {
18
+ this.production = production;
19
+ this.#baseUrl = this.production ? DCL_PRODUCTION_URL : DCL_TEST_URL;
20
+ }
21
+ #baseUrl;
22
+ async #fetchJson(path) {
23
+ const url = new URL(path, this.#baseUrl);
24
+ try {
25
+ const response = await fetch(url.toString(), {
26
+ method: "GET",
27
+ headers: {
28
+ "Content-Type": "application/json"
29
+ },
30
+ signal: AbortSignal.timeout(5e3)
31
+ // 5 seconds timeout
32
+ });
33
+ if (!response.ok) {
34
+ throw new MatterDclResponseError(path, await response.json());
35
+ }
36
+ return await response.json();
37
+ } catch (error) {
38
+ if (error instanceof MatterDclResponseError) {
39
+ throw error;
40
+ }
41
+ throw new MatterDclResponseError(path, {
42
+ code: 500,
43
+ message: error instanceof Error ? error.message : "Unknown Error",
44
+ details: []
45
+ });
46
+ }
47
+ }
48
+ async fetchRootCertificateList() {
49
+ const certList = await this.#fetchJson("/certificates/approved");
50
+ if (certList?.approvedRootCertificates?.schemaVersion !== 0) {
51
+ throw new MatterDclError(
52
+ `Unsupported DCL Root Certificate schema version: ${certList.approvedRootCertificates.schemaVersion}`
53
+ );
54
+ }
55
+ return certList.approvedRootCertificates.certs;
56
+ }
57
+ async fetchRootCertificateBySubject(subject) {
58
+ const path = `/certificates/${encodeURIComponent(subject.subject)}/${encodeURIComponent(subject.subjectKeyId)}`;
59
+ const response = await this.#fetchJson(path);
60
+ if (!response || !response.approvedRootCertificates || response.approvedRootCertificates.subject !== subject.subject || response.approvedRootCertificates.subjectKeyId !== subject.subjectKeyId || response.approvedRootCertificates.schemaVersion !== 0) {
61
+ throw new MatterDclError(
62
+ `Root certificate not found for subject: ${subject.subject}, subjectKeyId: ${subject.subjectKeyId}`
63
+ );
64
+ }
65
+ return response.approvedRootCertificates.certs;
66
+ }
67
+ async fetchModelByVidPid(vid, pid) {
68
+ const path = `/models/model/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}`;
69
+ const response = await this.#fetchJson(path);
70
+ if (!response || !response.model || response.model.vid !== vid || response.model.pid !== pid || response.model.schemaVersion !== 0) {
71
+ throw new MatterDclError(`Model not found for VID: ${vid}, PID: ${pid}`);
72
+ }
73
+ return response.model;
74
+ }
75
+ async fetchModelVersionsByVidPid(vid, pid) {
76
+ const path = `/models/versions/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}`;
77
+ const response = await this.#fetchJson(path);
78
+ if (!response || !response.modelVersions || response.modelVersions.vid !== vid || response.modelVersions.pid !== pid || response.modelVersions.schemaVersion !== 0) {
79
+ throw new MatterDclError(`Model versions not found for VID: ${vid}, PID: ${pid}`);
80
+ }
81
+ return response.modelVersions.softwareVersions;
82
+ }
83
+ async fetchModelVersionByVidPidSoftwareVersion(vid, pid, softwareVersion) {
84
+ const path = `/models/versions/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}/${encodeURIComponent(softwareVersion)}`;
85
+ const response = await this.#fetchJson(path);
86
+ if (!response || !response.modelVersion || response.modelVersion.vid !== vid || response.modelVersion.pid !== pid || response.modelVersion.softwareVersion !== softwareVersion || response.modelVersion.schemaVersion !== 0) {
87
+ throw new MatterDclError(
88
+ `Model version not found for VID: ${vid}, PID: ${pid}, Software Version: ${softwareVersion}`
89
+ );
90
+ }
91
+ return response.modelVersion;
92
+ }
93
+ }
94
+ export {
95
+ DclClient,
96
+ MatterDclError,
97
+ MatterDclResponseError
98
+ };
99
+ //# sourceMappingURL=DclClient.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/dcl/DclClient.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DeviceModelDclSchema, DeviceSoftwareVersionModelDclSchema, ProductAttestationDclSchema } from "@matter/types";
7
+ export interface DclApiErrorResponse {
8
+ code: number;
9
+ message: string;
10
+ details: string[];
11
+ }
12
+ export interface DclPkiRootCertificateSubjectReference {
13
+ subject: string;
14
+ subjectKeyId: string;
15
+ }
16
+ /** Response for /dcl/pki/certificates/approved */
17
+ export interface DclPkiRootCertificatesResponse {
18
+ approvedRootCertificates: {
19
+ certs: DclPkiRootCertificateSubjectReference[];
20
+ schemaVersion: number;
21
+ };
22
+ }
23
+ /** Response for /dcl/pki/certificates/{subject}/{subjectKeyId} */
24
+ export interface DclPkiCertificateResponse {
25
+ approvedRootCertificates: {
26
+ subject: string;
27
+ subjectKeyId: string;
28
+ certs: ProductAttestationDclSchema[];
29
+ schemaVersion: number;
30
+ };
31
+ }
32
+ /** Response for /dcl/models/model/{vid}/{pid} */
33
+ export interface DclModelModelsWithVidPidResponse {
34
+ model: DeviceModelDclSchema;
35
+ }
36
+ /** Response for /dcl/model/versions/{vid}/{pid} */
37
+ export interface DclModelVersionsWithVidPidResponse {
38
+ modelVersions: {
39
+ vid: number;
40
+ pid: number;
41
+ softwareVersions: number[];
42
+ schemaVersion: number;
43
+ };
44
+ }
45
+ /** Response for /dcl/model/versions/{vid}/{pid}/{softwareVersion} */
46
+ export interface DclModelVersionWithVidPidSoftwareVersionResponse {
47
+ modelVersion: DeviceSoftwareVersionModelDclSchema;
48
+ }
49
+ //# sourceMappingURL=DclRestApiTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DclRestApiTypes.d.ts","sourceRoot":"","sources":["../../../src/dcl/DclRestApiTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,mCAAmC,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAEvH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,qCAAqC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,8BAA8B;IAC3C,wBAAwB,EAAE;QACtB,KAAK,EAAE,qCAAqC,EAAE,CAAC;QAC/C,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;CACL;AAED,kEAAkE;AAClE,MAAM,WAAW,yBAAyB;IACtC,wBAAwB,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,2BAA2B,EAAE,CAAC;QACrC,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;CACL;AAED,iDAAiD;AACjD,MAAM,WAAW,gCAAgC;IAC7C,KAAK,EAAE,oBAAoB,CAAC;CAC/B;AAED,mDAAmD;AACnD,MAAM,WAAW,kCAAkC;IAC/C,aAAa,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;CACL;AAED,qEAAqE;AACrE,MAAM,WAAW,gDAAgD;IAC7D,YAAY,EAAE,mCAAmC,CAAC;CACrD"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ //# sourceMappingURL=DclRestApiTypes.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/dcl/DclRestApiTypes.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;",
5
+ "names": []
6
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./DclClient.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dcl/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./DclClient.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/dcl/index.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;",
5
+ "names": []
6
+ }
@@ -9,6 +9,7 @@ export * from "./certificate/index.js";
9
9
  export * from "./cluster/index.js";
10
10
  export * from "./codec/index.js";
11
11
  export * from "./common/index.js";
12
+ export * from "./dcl/index.js";
12
13
  export * from "./events/index.js";
13
14
  export * from "./fabric/index.js";
14
15
  export * from "./groups/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -9,6 +9,7 @@ export * from "./certificate/index.js";
9
9
  export * from "./cluster/index.js";
10
10
  export * from "./codec/index.js";
11
11
  export * from "./common/index.js";
12
+ export * from "./dcl/index.js";
12
13
  export * from "./events/index.js";
13
14
  export * from "./fabric/index.js";
14
15
  export * from "./groups/index.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/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;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;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/protocol",
3
- "version": "0.15.0-alpha.0-20250620-16e218ed3",
3
+ "version": "0.15.0-alpha.0-20250624-e8c89f458",
4
4
  "description": "Low-level APIs for Matter interaction",
5
5
  "keywords": [
6
6
  "iot",
@@ -40,13 +40,13 @@
40
40
  "#*": "./src/*"
41
41
  },
42
42
  "dependencies": {
43
- "@matter/general": "0.15.0-alpha.0-20250620-16e218ed3",
44
- "@matter/model": "0.15.0-alpha.0-20250620-16e218ed3",
45
- "@matter/types": "0.15.0-alpha.0-20250620-16e218ed3"
43
+ "@matter/general": "0.15.0-alpha.0-20250624-e8c89f458",
44
+ "@matter/model": "0.15.0-alpha.0-20250624-e8c89f458",
45
+ "@matter/types": "0.15.0-alpha.0-20250624-e8c89f458"
46
46
  },
47
47
  "devDependencies": {
48
- "@matter/tools": "0.15.0-alpha.0-20250620-16e218ed3",
49
- "@matter/testing": "0.15.0-alpha.0-20250620-16e218ed3"
48
+ "@matter/tools": "0.15.0-alpha.0-20250624-e8c89f458",
49
+ "@matter/testing": "0.15.0-alpha.0-20250624-e8c89f458"
50
50
  },
51
51
  "files": [
52
52
  "dist/**/*",
@@ -340,34 +340,70 @@ export abstract class X509Base<CT extends X509Certificate> {
340
340
  /**
341
341
  * Extract the public key from a Certificate Signing Request (CSR) in ASN.1 DER format.
342
342
  */
343
- static async getPublicKeyFromCsr(crypto: Crypto, csr: Uint8Array) {
344
- const { [DerKey.Elements]: rootElements } = DerCodec.decode(csr);
345
- if (rootElements?.length !== 3) throw new CertificateError("Invalid CSR data");
343
+ static async getPublicKeyFromCsr(crypto: Crypto, encodedCsr: Uint8Array) {
344
+ const { [DerKey.Elements]: rootElements } = DerCodec.decode(encodedCsr);
345
+ if (rootElements?.length !== 3) {
346
+ throw new CertificateError("Invalid CSR data");
347
+ }
346
348
  const [requestNode, signAlgorithmNode, signatureNode] = rootElements;
347
349
 
348
350
  // Extract the public key
349
351
  const { [DerKey.Elements]: requestElements } = requestNode;
350
- if (requestElements?.length !== 4) throw new CertificateError("Invalid CSR data");
351
- const [versionNode, _subjectNode, publicKeyNode] = requestElements;
352
- const requestVersion = versionNode[DerKey.Bytes][0];
353
- if (requestVersion !== 0) throw new CertificateError(`Unsupported request version ${requestVersion}`);
354
- // TODO: verify subject = { OrganisationName: "CSR" }
352
+ if (requestElements?.length !== 4) {
353
+ throw new CertificateError("Invalid CSR data");
354
+ }
355
+ const [versionNode, subjectNode, publicKeyNode] = requestElements;
356
+ const requestVersionBytes = versionNode[DerKey.Bytes];
357
+ if (requestVersionBytes.length !== 1 || requestVersionBytes[0] !== 0) {
358
+ throw new CertificateError(`Unsupported CSR version ${requestVersionBytes[0]}`);
359
+ }
360
+
361
+ // Verify the subject, according to spec can be "any value", so just check that it exists
362
+ if (!subjectNode[DerKey.Elements]?.length) {
363
+ throw new CertificateError("Missing subject in CSR data");
364
+ }
355
365
 
356
366
  const { [DerKey.Elements]: publicKeyElements } = publicKeyNode;
357
- if (publicKeyElements?.length !== 2) throw new CertificateError("Invalid CSR data");
358
- const [_publicKeyTypeNode, publicKeyBytesNode] = publicKeyElements;
359
- // TODO: verify publicKey algorithm
360
- const publicKey = publicKeyBytesNode[DerKey.Bytes];
367
+ if (publicKeyElements?.length !== 2) {
368
+ throw new CertificateError("Invalid CSR data");
369
+ }
370
+ const [publicKeyTypeNode, publicKeyBytesNode] = publicKeyElements;
361
371
 
362
- // Verify the CSR signature
372
+ // Verify Public Key Algorithm Type
373
+ const { [DerKey.Elements]: publicKeyTypeNodeElements } = publicKeyTypeNode;
374
+ if (publicKeyTypeNodeElements?.length !== 2) {
375
+ throw new CertificateError("Invalid public key type in CSR");
376
+ }
363
377
  if (
364
- signAlgorithmNode[DerKey.Elements]?.[0]?.[DerKey.Bytes] === undefined ||
365
378
  !Bytes.areEqual(
366
- X962.EcdsaWithSHA256[DerKey.ObjectId][DerKey.Bytes],
367
- signAlgorithmNode[DerKey.Elements]?.[0]?.[DerKey.Bytes],
379
+ publicKeyTypeNodeElements[0][DerKey.Bytes],
380
+ X962.PublicKeyAlgorithmEcPublicKey[DerKey.Bytes],
368
381
  )
369
- )
370
- throw new CertificateError("Unsupported signature type");
382
+ ) {
383
+ throw new CertificateError("Unsupported public key algorithm in CSR");
384
+ }
385
+ // Verify Public Key Curve Type (Parameter to Algorithm)
386
+ if (
387
+ !Bytes.areEqual(
388
+ publicKeyTypeNodeElements[1][DerKey.Bytes],
389
+ X962.PublicKeyAlgorithmEcPublicKeyP256[DerKey.Bytes],
390
+ )
391
+ ) {
392
+ throw new CertificateError("Unsupported public key curve in CSR");
393
+ }
394
+
395
+ const publicKey = publicKeyBytesNode[DerKey.Bytes];
396
+
397
+ // Verify the CSR signature algorithm
398
+ const signatureAlgorithmBytes = signAlgorithmNode[DerKey.Elements]?.[0]?.[DerKey.Bytes];
399
+ if (
400
+ signatureAlgorithmBytes === undefined ||
401
+ !Bytes.areEqual(X962.EcdsaWithSHA256[DerKey.ObjectId][DerKey.Bytes], signatureAlgorithmBytes)
402
+ ) {
403
+ throw new CertificateError("Unsupported signature algorithm in CSR");
404
+ }
405
+
406
+ // Verify the CSR signature
371
407
  await crypto.verifyEcdsa(
372
408
  PublicKey(publicKey),
373
409
  DerCodec.encode(requestNode),
@@ -0,0 +1,140 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import {
7
+ DclApiErrorResponse,
8
+ DclModelModelsWithVidPidResponse,
9
+ DclModelVersionsWithVidPidResponse,
10
+ DclModelVersionWithVidPidSoftwareVersionResponse,
11
+ DclPkiCertificateResponse,
12
+ DclPkiRootCertificatesResponse,
13
+ DclPkiRootCertificateSubjectReference,
14
+ } from "#dcl/DclRestApiTypes.js";
15
+ import { MatterError } from "#general";
16
+
17
+ const DCL_PRODUCTION_URL = "https://on.dcl.csa-iot.org";
18
+ const DCL_TEST_URL = "https://on.test-net.dcl.csa-iot.org";
19
+
20
+ /** Base class for all DCL-related errors */
21
+ export class MatterDclError extends MatterError {}
22
+
23
+ /** Error thrown when fetching data from DCL fails */
24
+ export class MatterDclResponseError extends MatterDclError {
25
+ constructor(path: string, error: DclApiErrorResponse) {
26
+ super(`Error fetching ${path} from DCL: ${error.code} - ${error.message}`);
27
+ }
28
+ }
29
+
30
+ /** A client clas to use "fetch" to get REST DAta from DCL (Decentraland) */
31
+ export class DclClient {
32
+ #baseUrl: string;
33
+
34
+ constructor(private readonly production: boolean = true) {
35
+ this.#baseUrl = this.production ? DCL_PRODUCTION_URL : DCL_TEST_URL;
36
+ }
37
+
38
+ async #fetchJson<ResponseT>(path: string): Promise<ResponseT> {
39
+ const url = new URL(path, this.#baseUrl);
40
+ try {
41
+ const response = await fetch(url.toString(), {
42
+ method: "GET",
43
+ headers: {
44
+ "Content-Type": "application/json",
45
+ },
46
+ signal: AbortSignal.timeout(5_000), // 5 seconds timeout
47
+ });
48
+
49
+ if (!response.ok) {
50
+ throw new MatterDclResponseError(path, await response.json());
51
+ }
52
+
53
+ return await response.json();
54
+ } catch (error) {
55
+ if (error instanceof MatterDclResponseError) {
56
+ throw error; // Re-throw custom DCL error
57
+ }
58
+ throw new MatterDclResponseError(path, {
59
+ code: 500,
60
+ message: error instanceof Error ? error.message : "Unknown Error",
61
+ details: [],
62
+ });
63
+ }
64
+ }
65
+
66
+ async fetchRootCertificateList() {
67
+ const certList = await this.#fetchJson<DclPkiRootCertificatesResponse>("/certificates/approved");
68
+ if (certList?.approvedRootCertificates?.schemaVersion !== 0) {
69
+ throw new MatterDclError(
70
+ `Unsupported DCL Root Certificate schema version: ${certList.approvedRootCertificates.schemaVersion}`,
71
+ );
72
+ }
73
+ return certList.approvedRootCertificates.certs;
74
+ }
75
+
76
+ async fetchRootCertificateBySubject(subject: DclPkiRootCertificateSubjectReference) {
77
+ const path = `/certificates/${encodeURIComponent(subject.subject)}/${encodeURIComponent(subject.subjectKeyId)}`;
78
+ const response = await this.#fetchJson<DclPkiCertificateResponse>(path);
79
+ if (
80
+ !response ||
81
+ !response.approvedRootCertificates ||
82
+ response.approvedRootCertificates.subject !== subject.subject ||
83
+ response.approvedRootCertificates.subjectKeyId !== subject.subjectKeyId ||
84
+ response.approvedRootCertificates.schemaVersion !== 0
85
+ ) {
86
+ throw new MatterDclError(
87
+ `Root certificate not found for subject: ${subject.subject}, subjectKeyId: ${subject.subjectKeyId}`,
88
+ );
89
+ }
90
+ return response.approvedRootCertificates.certs;
91
+ }
92
+
93
+ async fetchModelByVidPid(vid: number, pid: number) {
94
+ const path = `/models/model/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}`;
95
+ const response = await this.#fetchJson<DclModelModelsWithVidPidResponse>(path);
96
+ if (
97
+ !response ||
98
+ !response.model ||
99
+ response.model.vid !== vid ||
100
+ response.model.pid !== pid ||
101
+ response.model.schemaVersion !== 0
102
+ ) {
103
+ throw new MatterDclError(`Model not found for VID: ${vid}, PID: ${pid}`);
104
+ }
105
+ return response.model;
106
+ }
107
+
108
+ async fetchModelVersionsByVidPid(vid: number, pid: number) {
109
+ const path = `/models/versions/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}`;
110
+ const response = await this.#fetchJson<DclModelVersionsWithVidPidResponse>(path);
111
+ if (
112
+ !response ||
113
+ !response.modelVersions ||
114
+ response.modelVersions.vid !== vid ||
115
+ response.modelVersions.pid !== pid ||
116
+ response.modelVersions.schemaVersion !== 0
117
+ ) {
118
+ throw new MatterDclError(`Model versions not found for VID: ${vid}, PID: ${pid}`);
119
+ }
120
+ return response.modelVersions.softwareVersions;
121
+ }
122
+
123
+ async fetchModelVersionByVidPidSoftwareVersion(vid: number, pid: number, softwareVersion: number) {
124
+ const path = `/models/versions/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}/${encodeURIComponent(softwareVersion)}`;
125
+ const response = await this.#fetchJson<DclModelVersionWithVidPidSoftwareVersionResponse>(path);
126
+ if (
127
+ !response ||
128
+ !response.modelVersion ||
129
+ response.modelVersion.vid !== vid ||
130
+ response.modelVersion.pid !== pid ||
131
+ response.modelVersion.softwareVersion !== softwareVersion ||
132
+ response.modelVersion.schemaVersion !== 0
133
+ ) {
134
+ throw new MatterDclError(
135
+ `Model version not found for VID: ${vid}, PID: ${pid}, Software Version: ${softwareVersion}`,
136
+ );
137
+ }
138
+ return response.modelVersion;
139
+ }
140
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DeviceModelDclSchema, DeviceSoftwareVersionModelDclSchema, ProductAttestationDclSchema } from "@matter/types";
7
+
8
+ export interface DclApiErrorResponse {
9
+ code: number;
10
+ message: string;
11
+ details: string[];
12
+ }
13
+
14
+ export interface DclPkiRootCertificateSubjectReference {
15
+ subject: string;
16
+ subjectKeyId: string;
17
+ }
18
+
19
+ /** Response for /dcl/pki/certificates/approved */
20
+ export interface DclPkiRootCertificatesResponse {
21
+ approvedRootCertificates: {
22
+ certs: DclPkiRootCertificateSubjectReference[];
23
+ schemaVersion: number;
24
+ };
25
+ }
26
+
27
+ /** Response for /dcl/pki/certificates/{subject}/{subjectKeyId} */
28
+ export interface DclPkiCertificateResponse {
29
+ approvedRootCertificates: {
30
+ subject: string;
31
+ subjectKeyId: string;
32
+ certs: ProductAttestationDclSchema[];
33
+ schemaVersion: number;
34
+ };
35
+ }
36
+
37
+ /** Response for /dcl/models/model/{vid}/{pid} */
38
+ export interface DclModelModelsWithVidPidResponse {
39
+ model: DeviceModelDclSchema;
40
+ }
41
+
42
+ /** Response for /dcl/model/versions/{vid}/{pid} */
43
+ export interface DclModelVersionsWithVidPidResponse {
44
+ modelVersions: {
45
+ vid: number;
46
+ pid: number;
47
+ softwareVersions: number[];
48
+ schemaVersion: number;
49
+ };
50
+ }
51
+
52
+ /** Response for /dcl/model/versions/{vid}/{pid}/{softwareVersion} */
53
+ export interface DclModelVersionWithVidPidSoftwareVersionResponse {
54
+ modelVersion: DeviceSoftwareVersionModelDclSchema;
55
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ export * from "./DclClient.js";
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ export * from "./certificate/index.js";
10
10
  export * from "./cluster/index.js";
11
11
  export * from "./codec/index.js";
12
12
  export * from "./common/index.js";
13
+ export * from "./dcl/index.js";
13
14
  export * from "./events/index.js";
14
15
  export * from "./fabric/index.js";
15
16
  export * from "./groups/index.js";