@matter/nodejs-shell 0.17.0-alpha.0-20260507-059f7763b → 0.17.0-alpha.0-20260508-29ff5ae9e

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 (49) hide show
  1. package/package.json +9 -9
  2. package/src/MatterNode.ts +13 -12
  3. package/src/shell/cmd_cert.ts +34 -0
  4. package/src/shell/cmd_commission.ts +24 -1
  5. package/src/shell/cmd_config.ts +140 -0
  6. package/src/shell/cmd_nodes.ts +1 -3
  7. package/dist/esm/MatterNode.js +0 -189
  8. package/dist/esm/MatterNode.js.map +0 -6
  9. package/dist/esm/app.js +0 -167
  10. package/dist/esm/app.js.map +0 -6
  11. package/dist/esm/package.json +0 -3
  12. package/dist/esm/shell/Shell.js +0 -201
  13. package/dist/esm/shell/Shell.js.map +0 -6
  14. package/dist/esm/shell/cmd_cert.js +0 -134
  15. package/dist/esm/shell/cmd_cert.js.map +0 -6
  16. package/dist/esm/shell/cmd_cluster-attributes.js +0 -295
  17. package/dist/esm/shell/cmd_cluster-attributes.js.map +0 -6
  18. package/dist/esm/shell/cmd_cluster-commands.js +0 -137
  19. package/dist/esm/shell/cmd_cluster-commands.js.map +0 -6
  20. package/dist/esm/shell/cmd_cluster-events.js +0 -77
  21. package/dist/esm/shell/cmd_cluster-events.js.map +0 -6
  22. package/dist/esm/shell/cmd_commission.js +0 -269
  23. package/dist/esm/shell/cmd_commission.js.map +0 -6
  24. package/dist/esm/shell/cmd_config.js +0 -462
  25. package/dist/esm/shell/cmd_config.js.map +0 -6
  26. package/dist/esm/shell/cmd_dcl.js +0 -178
  27. package/dist/esm/shell/cmd_dcl.js.map +0 -6
  28. package/dist/esm/shell/cmd_discover.js +0 -115
  29. package/dist/esm/shell/cmd_discover.js.map +0 -6
  30. package/dist/esm/shell/cmd_identify.js +0 -46
  31. package/dist/esm/shell/cmd_identify.js.map +0 -6
  32. package/dist/esm/shell/cmd_nodes.js +0 -688
  33. package/dist/esm/shell/cmd_nodes.js.map +0 -6
  34. package/dist/esm/shell/cmd_ota.js +0 -493
  35. package/dist/esm/shell/cmd_ota.js.map +0 -6
  36. package/dist/esm/shell/cmd_session.js +0 -23
  37. package/dist/esm/shell/cmd_session.js.map +0 -6
  38. package/dist/esm/shell/cmd_subscribe.js +0 -39
  39. package/dist/esm/shell/cmd_subscribe.js.map +0 -6
  40. package/dist/esm/shell/cmd_tlv.js +0 -167
  41. package/dist/esm/shell/cmd_tlv.js.map +0 -6
  42. package/dist/esm/shell/cmd_vendor.js +0 -135
  43. package/dist/esm/shell/cmd_vendor.js.map +0 -6
  44. package/dist/esm/util/CommandlineParser.js +0 -87
  45. package/dist/esm/util/CommandlineParser.js.map +0 -6
  46. package/dist/esm/util/Json.js +0 -45
  47. package/dist/esm/util/Json.js.map +0 -6
  48. package/dist/esm/web_plumbing.js +0 -140
  49. package/dist/esm/web_plumbing.js.map +0 -6
@@ -1,167 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Bytes, Diagnostic, Logger, serialize, UnexpectedDataError } from "@matter/general";
7
- import { TlvAny, TlvArrayReader, TlvType } from "@matter/types";
8
- const logger = Logger.get("tlv");
9
- const TlvTypeNames = {
10
- [TlvType.Null]: "Null(",
11
- [TlvType.Boolean]: "Boolean(",
12
- [TlvType.UnsignedInt]: "UnsignedInt(",
13
- [TlvType.SignedInt]: "SignedInt(",
14
- [TlvType.Float]: "Float(",
15
- [TlvType.Utf8String]: "Utf8String(",
16
- [TlvType.ByteString]: "ByteString(",
17
- [TlvType.Array]: "Array {",
18
- [TlvType.List]: "List {",
19
- [TlvType.Structure]: "Structure {",
20
- [TlvType.EndOfContainer]: "}"
21
- };
22
- function logAnyTlvStream(encoded) {
23
- if (encoded.length === 0) {
24
- return void 0;
25
- }
26
- const reader = new TlvArrayReader(encoded);
27
- logGenericElement(reader);
28
- const nextElement = reader.readTagType();
29
- if (nextElement !== void 0) {
30
- throw new UnexpectedDataError(`Unexpected data left after parsing all data: ${Diagnostic.json(nextElement)}`);
31
- }
32
- }
33
- function logGenericElement(reader, preReadElement, allowTag = false) {
34
- const element = preReadElement ?? reader.readTagType();
35
- const {
36
- tag,
37
- typeLength: { type }
38
- } = element;
39
- switch (type) {
40
- case TlvType.Null:
41
- case TlvType.Boolean:
42
- case TlvType.UnsignedInt:
43
- case TlvType.SignedInt:
44
- case TlvType.Float:
45
- case TlvType.Utf8String:
46
- case TlvType.ByteString:
47
- if (tag !== void 0 && !allowTag) {
48
- throw new UnexpectedDataError(`Tag detected for a native type: ${Diagnostic.json(element)}`);
49
- }
50
- const value = reader.readPrimitive(element.typeLength);
51
- const logValue = Bytes.isBytes(value) ? Bytes.toHex(value) : value;
52
- const logNumberHex = typeof value === "number" || typeof value === "bigint" ? value.toString(16) : void 0;
53
- logger.info(
54
- tag?.id !== void 0 ? `${tag.id}/0x${tag?.id?.toString(16)} => ` : "",
55
- TlvTypeNames[type],
56
- `${logValue}${logNumberHex !== void 0 ? `/0x${logNumberHex}` : ""}`,
57
- ")"
58
- );
59
- break;
60
- case TlvType.Array:
61
- case TlvType.List:
62
- if (tag?.id !== void 0) {
63
- logger.info(`${tag.id}/0x${tag.id.toString(16)} => `, TlvTypeNames[type]);
64
- } else {
65
- logger.info(TlvTypeNames[type]);
66
- }
67
- Logger.nest(() => logGenericArrayOrList(reader, type === TlvType.List));
68
- logger.info(TlvTypeNames[TlvType.EndOfContainer]);
69
- break;
70
- case TlvType.Structure:
71
- if (tag?.id !== void 0) {
72
- logger.info(`${tag.id}/0x${tag.id.toString(16)} => `, TlvTypeNames[type]);
73
- } else {
74
- logger.info(TlvTypeNames[type]);
75
- }
76
- Logger.nest(() => logGenericStructure(reader));
77
- logger.info(TlvTypeNames[TlvType.EndOfContainer]);
78
- break;
79
- default:
80
- throw new UnexpectedDataError(`Unknown type: ${type}`);
81
- }
82
- }
83
- function logGenericArrayOrList(reader, allowTag = false) {
84
- const result = new Array();
85
- while (true) {
86
- const element = reader.readTagType();
87
- const {
88
- tag,
89
- typeLength: { type }
90
- } = element;
91
- if (type === TlvType.EndOfContainer) break;
92
- if (tag !== void 0 && !allowTag) {
93
- throw new UnexpectedDataError(`Tag detected : ${Diagnostic.json(element)}`);
94
- }
95
- logGenericElement(reader, element, allowTag);
96
- }
97
- return result;
98
- }
99
- function logGenericStructure(reader) {
100
- const result = {};
101
- while (true) {
102
- const element = reader.readTagType();
103
- const {
104
- tag,
105
- typeLength: { type }
106
- } = element;
107
- if (type === TlvType.EndOfContainer) break;
108
- if (tag === void 0 || tag.id === void 0) {
109
- throw new UnexpectedDataError(`Tag missing for a structure: ${Diagnostic.json(element)}`);
110
- }
111
- logGenericElement(reader, element, true);
112
- }
113
- return result;
114
- }
115
- function commands() {
116
- return {
117
- command: "tlv",
118
- describe: "TLV decoding tools",
119
- builder: (yargs) => {
120
- return yargs.command(
121
- "decode [value]",
122
- "Decodes a TLV string (hex) into matter.js JavaScript object",
123
- (yargs2) => {
124
- return yargs2.positional("value", {
125
- describe: "The TLV value as hex string",
126
- type: "string",
127
- demandOption: true
128
- });
129
- },
130
- async (argv) => {
131
- const { value } = argv;
132
- const bytes = Bytes.fromHex(value);
133
- const tlvEncoded = TlvAny.decode(bytes);
134
- const decoded = TlvAny.decodeAnyTlvStream(tlvEncoded);
135
- console.log("Decoded:", serialize(decoded));
136
- }
137
- ).command(
138
- "log [value]",
139
- "Decodes a TLV string (hex string) and logs it's structure",
140
- (yargs2) => {
141
- return yargs2.positional("value", {
142
- describe: "The TLV value as hex string",
143
- type: "string",
144
- demandOption: true
145
- });
146
- },
147
- async (argv) => {
148
- const { value } = argv;
149
- if (!value) {
150
- console.error("Please provide a Hex value to decode");
151
- return;
152
- }
153
- const bytes = Bytes.fromHex(value);
154
- const tlvEncoded = TlvAny.decode(bytes);
155
- logAnyTlvStream(tlvEncoded);
156
- }
157
- );
158
- },
159
- handler: async (argv) => {
160
- argv.unhandled = true;
161
- }
162
- };
163
- }
164
- export {
165
- commands as default
166
- };
167
- //# sourceMappingURL=cmd_tlv.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/shell/cmd_tlv.ts"],
4
- "mappings": "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",
5
- "names": ["yargs"]
6
- }
@@ -1,135 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Diagnostic } from "@matter/general";
7
- function commands(theNode) {
8
- return {
9
- command: "vendor",
10
- describe: "Vendor information management operations",
11
- builder: (yargs) => yargs.command(
12
- ["*", "list"],
13
- "List all stored vendor information",
14
- () => {
15
- },
16
- async () => {
17
- await theNode.start();
18
- const vendorService = await theNode.vendorInfoService();
19
- const vendors = [...vendorService.vendors.values()];
20
- if (vendors.length === 0) {
21
- console.log("No vendor information found in storage.");
22
- return;
23
- }
24
- console.log(`
25
- Found ${vendors.length} vendor(s):
26
- `);
27
- vendors.sort((a, b) => a.vendorId - b.vendorId);
28
- vendors.forEach((vendor) => {
29
- console.log(
30
- `Vendor ID: ${vendor.vendorId} (0x${vendor.vendorId.toString(16).toUpperCase().padStart(4, "0")})`
31
- );
32
- console.log(` Name: ${vendor.vendorName}`);
33
- console.log(` Legal Name: ${vendor.companyLegalName}`);
34
- console.log(` Preferred Name: ${vendor.companyPreferredName}`);
35
- console.log(` Landing Page: ${vendor.vendorLandingPageUrl}`);
36
- console.log("");
37
- });
38
- }
39
- ).command(
40
- "get <vendor-id>",
41
- "Display detailed information about a vendor",
42
- (yargs2) => {
43
- return yargs2.positional("vendor-id", {
44
- describe: "Vendor ID (hex format like 0xFFF1 or decimal)",
45
- type: "string",
46
- demandOption: true
47
- });
48
- },
49
- async (argv) => {
50
- const { vendorId: vendorIdStr } = argv;
51
- let vendorId;
52
- if (vendorIdStr.startsWith("0x")) {
53
- const hexStr = vendorIdStr.replace(/^0x/i, "");
54
- vendorId = parseInt(hexStr, 16);
55
- } else {
56
- vendorId = parseInt(vendorIdStr, 10);
57
- }
58
- if (!isFinite(vendorId)) {
59
- console.error(`Error: Invalid vendor ID "${vendorIdStr}"`);
60
- return;
61
- }
62
- await theNode.start();
63
- const vendor = (await theNode.vendorInfoService()).infoFor(vendorId);
64
- if (!vendor) {
65
- console.error(`Vendor with ID ${vendorIdStr} not found`);
66
- return;
67
- }
68
- console.log("\nVendor Details:");
69
- console.log(Diagnostic.json(vendor));
70
- }
71
- ).command(
72
- "product <vendor-id> <product-id>",
73
- "Fetch and display product details from DCL for a vendor/product ID combination",
74
- (yargs2) => {
75
- return yargs2.positional("vendor-id", {
76
- describe: "Vendor ID (hex format like 0xFFF1 or decimal)",
77
- type: "string",
78
- demandOption: true
79
- }).positional("product-id", {
80
- describe: "Product ID (hex format like 0x8000 or decimal)",
81
- type: "string",
82
- demandOption: true
83
- });
84
- },
85
- async (argv) => {
86
- const { "vendor-id": vendorIdStr, "product-id": productIdStr } = argv;
87
- const vendorId = vendorIdStr.startsWith("0x") ? parseInt(vendorIdStr.replace(/^0x/i, ""), 16) : parseInt(vendorIdStr, 10);
88
- const productId = productIdStr.startsWith("0x") ? parseInt(productIdStr.replace(/^0x/i, ""), 16) : parseInt(productIdStr, 10);
89
- if (!isFinite(vendorId)) {
90
- console.error(`Error: Invalid vendor ID "${vendorIdStr}"`);
91
- return;
92
- }
93
- if (!isFinite(productId)) {
94
- console.error(`Error: Invalid product ID "${productIdStr}"`);
95
- return;
96
- }
97
- await theNode.start();
98
- const product = await (await theNode.vendorInfoService()).productInfoFor(vendorId, productId);
99
- if (!product) {
100
- console.error(
101
- `Product with vendor ID ${vendorIdStr} and product ID ${productIdStr} not found in DCL`
102
- );
103
- return;
104
- }
105
- console.log("\nProduct Details:");
106
- console.log(JSON.stringify(product, null, 2));
107
- }
108
- ).command(
109
- "update",
110
- "Update vendor information from DCL",
111
- () => {
112
- },
113
- async () => {
114
- await theNode.start();
115
- const vendorService = await theNode.vendorInfoService();
116
- console.log("Updating vendor information from DCL...");
117
- try {
118
- await vendorService.update();
119
- console.log(`Successfully updated. ${vendorService.vendors.size} vendor(s) now available.`);
120
- } catch (error) {
121
- console.error(
122
- `Failed to update vendor information: ${error instanceof Error ? error.message : error}`
123
- );
124
- }
125
- }
126
- ),
127
- handler: async (argv) => {
128
- argv.unhandled = true;
129
- }
130
- };
131
- }
132
- export {
133
- commands as default
134
- };
135
- //# sourceMappingURL=cmd_vendor.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/shell/cmd_vendor.ts"],
4
- "mappings": "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",
5
- "names": ["yargs"]
6
- }
@@ -1,87 +0,0 @@
1
- /**
2
- * Quote aware Command line parser
3
- *
4
- * @license
5
- * Copyright 2022-2026 Matter.js Authors
6
- * SPDX-License-Identifier: Apache-2.0
7
- */
8
- class StringReader {
9
- constructor(str) {
10
- this.str = str;
11
- this.pos = -1;
12
- }
13
- str;
14
- pos;
15
- current;
16
- next() {
17
- if (this.pos < this.str.length) {
18
- this.current = this.str[++this.pos];
19
- }
20
- return this.current;
21
- }
22
- }
23
- function isWhitespace(c) {
24
- return c === " ";
25
- }
26
- function consumeWhitespace(r) {
27
- while (r.current !== void 0 && isWhitespace(r.current)) {
28
- r.next();
29
- }
30
- }
31
- function escaped(r) {
32
- const n = r.next();
33
- if (n === void 0) {
34
- throw new Error("Unterminated escape sequence");
35
- }
36
- return n;
37
- }
38
- function quoted(r) {
39
- let s = "";
40
- const q = r.current;
41
- const e = q === '"';
42
- for (let c = r.next(); c !== q; c = r.next()) {
43
- if (c === void 0) {
44
- throw new Error(`Unterminated quote: ${q}`);
45
- }
46
- if (e && c === "\\") {
47
- s += escaped(r);
48
- } else {
49
- s += c;
50
- }
51
- }
52
- return s;
53
- }
54
- function commandlineParser(line) {
55
- const args = [];
56
- let s = "";
57
- const r = new StringReader(line);
58
- r.next();
59
- consumeWhitespace(r);
60
- let sawQuote = false;
61
- while (r.current !== void 0) {
62
- if (isWhitespace(r.current)) {
63
- args.push(s);
64
- sawQuote = false;
65
- s = "";
66
- consumeWhitespace(r);
67
- } else if (r.current === "\\") {
68
- s += escaped(r);
69
- r.next();
70
- } else if (r.current === "'" || r.current === '"') {
71
- s += quoted(r);
72
- sawQuote = true;
73
- r.next();
74
- } else {
75
- s += r.current;
76
- r.next();
77
- }
78
- }
79
- if (sawQuote || s.length) {
80
- args.push(s);
81
- }
82
- return args;
83
- }
84
- export {
85
- commandlineParser
86
- };
87
- //# sourceMappingURL=CommandlineParser.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/util/CommandlineParser.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA,MAAM,aAAa;AAAA,EAIf,YAA6B,KAAa;AAAb;AACzB,SAAK,MAAM;AAAA,EACf;AAAA,EAF6B;AAAA,EAHrB;AAAA,EACD;AAAA,EAMP,OAAO;AACH,QAAI,KAAK,MAAM,KAAK,IAAI,QAAQ;AAC5B,WAAK,UAAU,KAAK,IAAI,EAAE,KAAK,GAAG;AAAA,IACtC;AAEA,WAAO,KAAK;AAAA,EAChB;AACJ;AAEA,SAAS,aAAa,GAAW;AAC7B,SAAO,MAAM;AACjB;AAEA,SAAS,kBAAkB,GAAiB;AACxC,SAAO,EAAE,YAAY,UAAa,aAAa,EAAE,OAAO,GAAG;AACvD,MAAE,KAAK;AAAA,EACX;AACJ;AAEA,SAAS,QAAQ,GAAiB;AAC9B,QAAM,IAAI,EAAE,KAAK;AACjB,MAAI,MAAM,QAAW;AACjB,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAClD;AAEA,SAAO;AACX;AAEA,SAAS,OAAO,GAAiB;AAC7B,MAAI,IAAI;AAER,QAAM,IAAI,EAAE;AACZ,QAAM,IAAI,MAAM;AAEhB,WAAS,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,EAAE,KAAK,GAAG;AAC1C,QAAI,MAAM,QAAW;AACjB,YAAM,IAAI,MAAM,uBAAuB,CAAC,EAAE;AAAA,IAC9C;AAEA,QAAI,KAAK,MAAM,MAAM;AACjB,WAAK,QAAQ,CAAC;AAAA,IAClB,OAAO;AACH,WAAK;AAAA,IACT;AAAA,EACJ;AAEA,SAAO;AACX;AAEO,SAAS,kBAAkB,MAAc;AAC5C,QAAM,OAAO,CAAC;AACd,MAAI,IAAI;AAER,QAAM,IAAI,IAAI,aAAa,IAAI;AAC/B,IAAE,KAAK;AACP,oBAAkB,CAAC;AAKnB,MAAI,WAAW;AAEf,SAAO,EAAE,YAAY,QAAW;AAC5B,QAAI,aAAa,EAAE,OAAO,GAAG;AACzB,WAAK,KAAK,CAAC;AACX,iBAAW;AACX,UAAI;AAEJ,wBAAkB,CAAC;AAAA,IACvB,WAAW,EAAE,YAAY,MAAM;AAC3B,WAAK,QAAQ,CAAC;AACd,QAAE,KAAK;AAAA,IACX,WAAW,EAAE,YAAY,OAAO,EAAE,YAAY,KAAK;AAC/C,WAAK,OAAO,CAAC;AACb,iBAAW;AACX,QAAE,KAAK;AAAA,IACX,OAAO;AACH,WAAK,EAAE;AACP,QAAE,KAAK;AAAA,IACX;AAAA,EACJ;AAEA,MAAI,YAAY,EAAE,QAAQ;AACtB,SAAK,KAAK,CAAC;AAAA,EACf;AAEA,SAAO;AACX;",
5
- "names": []
6
- }
@@ -1,45 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Bytes } from "@matter/general";
7
- import { ValidationDatatypeMismatchError } from "@matter/types";
8
- function convertJsonDataWithModel(model, data) {
9
- const definingModel = model.definingModel ?? model;
10
- switch (definingModel.effectiveMetatype) {
11
- case "array":
12
- if (!Array.isArray(data)) {
13
- throw new ValidationDatatypeMismatchError(`Expected array, got ${typeof data}`);
14
- }
15
- return data.map((item) => convertJsonDataWithModel(definingModel.children[0], item));
16
- case "object":
17
- if (typeof data !== "object") {
18
- throw new ValidationDatatypeMismatchError(`Expected object, got ${typeof data}`);
19
- }
20
- for (const child of definingModel.children) {
21
- const childKeyName = child.propertyName;
22
- data[childKeyName] = convertJsonDataWithModel(child, data[childKeyName]);
23
- }
24
- return data;
25
- case "integer":
26
- if (typeof data === "string") {
27
- if (definingModel.metabase?.byteSize !== void 0 && definingModel.metabase.byteSize > 6) {
28
- return BigInt(data);
29
- } else if (data.startsWith("0x")) {
30
- return parseInt(data.substring(2), 16);
31
- }
32
- }
33
- break;
34
- case "bytes":
35
- if (typeof data === "string") {
36
- return Bytes.fromHex(data);
37
- }
38
- break;
39
- }
40
- return data;
41
- }
42
- export {
43
- convertJsonDataWithModel
44
- };
45
- //# sourceMappingURL=Json.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/util/Json.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,aAAa;AAEtB,SAAS,uCAAuC;AAEzC,SAAS,yBAAyB,OAAmB,MAAgB;AACxE,QAAM,gBAAgB,MAAM,iBAAiB;AAC7C,UAAQ,cAAc,mBAAmB;AAAA,IACrC,KAAK;AACD,UAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACtB,cAAM,IAAI,gCAAgC,uBAAuB,OAAO,IAAI,EAAE;AAAA,MAClF;AACA,aAAO,KAAK,IAAI,UAAQ,yBAAyB,cAAc,SAAS,CAAC,GAAG,IAAI,CAAC;AAAA,IACrF,KAAK;AACD,UAAI,OAAO,SAAS,UAAU;AAC1B,cAAM,IAAI,gCAAgC,wBAAwB,OAAO,IAAI,EAAE;AAAA,MACnF;AACA,iBAAW,SAAS,cAAc,UAAU;AACxC,cAAM,eAAe,MAAM;AAC3B,aAAK,YAAY,IAAI,yBAAyB,OAAO,KAAK,YAAY,CAAC;AAAA,MAC3E;AACA,aAAO;AAAA,IACX,KAAK;AACD,UAAI,OAAO,SAAS,UAAU;AAC1B,YAAI,cAAc,UAAU,aAAa,UAAa,cAAc,SAAS,WAAW,GAAG;AAGvF,iBAAO,OAAO,IAAI;AAAA,QACtB,WAAW,KAAK,WAAW,IAAI,GAAG;AAE9B,iBAAO,SAAS,KAAK,UAAU,CAAC,GAAG,EAAE;AAAA,QACzC;AAAA,MACJ;AACA;AAAA,IACJ,KAAK;AACD,UAAI,OAAO,SAAS,UAAU;AAE1B,eAAO,MAAM,QAAQ,IAAI;AAAA,MAC7B;AACA;AAAA,EACR;AAEA,SAAO;AACX;",
5
- "names": []
6
- }
@@ -1,140 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Logger, NotImplementedError } from "@matter/general";
7
- import { Readable, Writable } from "node:stream";
8
- import WebSocket, { WebSocketServer } from "ws";
9
- import { Shell } from "./shell/Shell.js";
10
- import fs from "fs";
11
- import http from "node:http";
12
- import path from "path";
13
- let client;
14
- let server;
15
- let wss;
16
- const socketLogger = "websocket";
17
- function initializeWebPlumbing(theNode, nodeNum, webSocketPort, webServer) {
18
- if (webServer) {
19
- const root = path.resolve(__dirname) ?? "./";
20
- server = http.createServer((req, res) => {
21
- const url = req.url ?? "/";
22
- const safePath = path.normalize(
23
- path.join(root, decodeURIComponent(url === "/" ? "/index.html" : url))
24
- );
25
- if (!safePath.startsWith(root)) {
26
- res.writeHead(403).end("Forbidden");
27
- return;
28
- }
29
- fs.readFile(safePath, (err, data) => {
30
- if (err) return res.writeHead(404).end("Not Found");
31
- res.writeHead(200).end(data);
32
- });
33
- }).listen(webSocketPort);
34
- wss = new WebSocketServer({ server });
35
- } else wss = new WebSocketServer({ port: webSocketPort });
36
- console.info(`WebSocket server running on ws://localhost:${webSocketPort}`);
37
- console.log = // console.debug = // too much traffic - kills the websocket
38
- console.info = console.warn = console.error = (...args) => {
39
- if (client && client.readyState === WebSocket.OPEN) {
40
- client.send(args.map((arg) => typeof arg === "object" ? JSON.stringify(arg) : arg).join(" "));
41
- } else
42
- process.stdout.write(
43
- args.map((arg) => typeof arg === "object" ? JSON.stringify(arg) : arg).join(" ") + "\n"
44
- );
45
- };
46
- wss.on("connection", (ws) => {
47
- if (client && client.readyState === WebSocket.OPEN) {
48
- ws.send("ERROR: Shell in use by another client");
49
- ws.close();
50
- return;
51
- }
52
- client = ws;
53
- createWebSocketLogger(ws).then((logger) => {
54
- Logger.removeLogger("Shell");
55
- Logger.addLogger(socketLogger, logger);
56
- }).catch((err) => {
57
- if (!(err instanceof NotImplementedError)) {
58
- console.error("Failed to add WebSocket logger: " + err);
59
- }
60
- });
61
- const shell = new Shell(theNode, nodeNum, "", createReadableStream(ws), createWritableStream(ws));
62
- shell.start(theNode.storageLocation);
63
- ws.on("close", () => {
64
- process.stdout.write("Client disconnected\n");
65
- try {
66
- if (Logger.getLoggerForIdentifier(socketLogger) !== void 0) {
67
- Logger.removeLogger(socketLogger);
68
- }
69
- } catch (err) {
70
- }
71
- client = ws;
72
- });
73
- ws.on("error", (err) => {
74
- process.stderr.write(`WebSocket error: ${err.message}
75
- `);
76
- try {
77
- if (Logger.getLoggerForIdentifier(socketLogger) !== void 0) {
78
- Logger.removeLogger(socketLogger);
79
- }
80
- } catch (err2) {
81
- }
82
- });
83
- });
84
- async function createWebSocketLogger(socket) {
85
- if (socket.readyState === WebSocket.CONNECTING) {
86
- await new Promise((resolve, reject) => {
87
- socket.onopen = () => resolve();
88
- socket.onerror = (err) => reject(new Error(`WebSocket error: ${err.type}`));
89
- });
90
- }
91
- return (__level, formattedLog) => {
92
- if (socket.readyState === WebSocket.OPEN) {
93
- socket.send(formattedLog);
94
- } else {
95
- process.stderr.write(`WebSocket logger not open, log dropped: ${formattedLog}
96
- `);
97
- }
98
- };
99
- }
100
- }
101
- function createReadableStream(ws) {
102
- const readable = new Readable({ read() {
103
- } });
104
- ws.on("message", (data) => {
105
- const chunk = Buffer.isBuffer(data) ? data : Buffer.from(data.toString());
106
- readable.push(chunk);
107
- });
108
- ws.on("close", () => {
109
- readable.push(null);
110
- });
111
- ws.on("error", (err) => {
112
- readable.emit("error", err);
113
- readable.push(null);
114
- });
115
- return readable;
116
- }
117
- function createWritableStream(ws) {
118
- const writable = new Writable({
119
- write(chunk, _encoding, callback) {
120
- if (ws.readyState === WebSocket.OPEN) {
121
- ws.send(chunk, callback);
122
- } else {
123
- if (chunk.length > 0) process.stderr.write(`ERROR: WebSocket is not open. Failed to send "${chunk}"
124
- `);
125
- }
126
- },
127
- final(callback) {
128
- if (ws.readyState === WebSocket.OPEN) {
129
- ws.close();
130
- }
131
- callback();
132
- }
133
- });
134
- ws.on("error", (err) => writable.emit("WebSocket Write Error: ", err));
135
- return writable;
136
- }
137
- export {
138
- initializeWebPlumbing
139
- };
140
- //# sourceMappingURL=web_plumbing.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/web_plumbing.ts"],
4
- "mappings": "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",
5
- "names": ["err"]
6
- }