@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.
- package/package.json +9 -9
- package/src/MatterNode.ts +13 -12
- package/src/shell/cmd_cert.ts +34 -0
- package/src/shell/cmd_commission.ts +24 -1
- package/src/shell/cmd_config.ts +140 -0
- package/src/shell/cmd_nodes.ts +1 -3
- package/dist/esm/MatterNode.js +0 -189
- package/dist/esm/MatterNode.js.map +0 -6
- package/dist/esm/app.js +0 -167
- package/dist/esm/app.js.map +0 -6
- package/dist/esm/package.json +0 -3
- package/dist/esm/shell/Shell.js +0 -201
- package/dist/esm/shell/Shell.js.map +0 -6
- package/dist/esm/shell/cmd_cert.js +0 -134
- package/dist/esm/shell/cmd_cert.js.map +0 -6
- package/dist/esm/shell/cmd_cluster-attributes.js +0 -295
- package/dist/esm/shell/cmd_cluster-attributes.js.map +0 -6
- package/dist/esm/shell/cmd_cluster-commands.js +0 -137
- package/dist/esm/shell/cmd_cluster-commands.js.map +0 -6
- package/dist/esm/shell/cmd_cluster-events.js +0 -77
- package/dist/esm/shell/cmd_cluster-events.js.map +0 -6
- package/dist/esm/shell/cmd_commission.js +0 -269
- package/dist/esm/shell/cmd_commission.js.map +0 -6
- package/dist/esm/shell/cmd_config.js +0 -462
- package/dist/esm/shell/cmd_config.js.map +0 -6
- package/dist/esm/shell/cmd_dcl.js +0 -178
- package/dist/esm/shell/cmd_dcl.js.map +0 -6
- package/dist/esm/shell/cmd_discover.js +0 -115
- package/dist/esm/shell/cmd_discover.js.map +0 -6
- package/dist/esm/shell/cmd_identify.js +0 -46
- package/dist/esm/shell/cmd_identify.js.map +0 -6
- package/dist/esm/shell/cmd_nodes.js +0 -688
- package/dist/esm/shell/cmd_nodes.js.map +0 -6
- package/dist/esm/shell/cmd_ota.js +0 -493
- package/dist/esm/shell/cmd_ota.js.map +0 -6
- package/dist/esm/shell/cmd_session.js +0 -23
- package/dist/esm/shell/cmd_session.js.map +0 -6
- package/dist/esm/shell/cmd_subscribe.js +0 -39
- package/dist/esm/shell/cmd_subscribe.js.map +0 -6
- package/dist/esm/shell/cmd_tlv.js +0 -167
- package/dist/esm/shell/cmd_tlv.js.map +0 -6
- package/dist/esm/shell/cmd_vendor.js +0 -135
- package/dist/esm/shell/cmd_vendor.js.map +0 -6
- package/dist/esm/util/CommandlineParser.js +0 -87
- package/dist/esm/util/CommandlineParser.js.map +0 -6
- package/dist/esm/util/Json.js +0 -45
- package/dist/esm/util/Json.js.map +0 -6
- package/dist/esm/web_plumbing.js +0 -140
- 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
|
-
}
|
package/dist/esm/util/Json.js
DELETED
|
@@ -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
|
-
}
|
package/dist/esm/web_plumbing.js
DELETED
|
@@ -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": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,QAAkB,2BAA2B;AACtD,SAAS,UAAU,gBAAgB;AACnC,OAAO,aAAmB,uBAAuB;AAEjD,SAAS,aAAa;AAEtB,OAAO,QAAQ;AACf,OAAO,UAAsB;AAC7B,OAAO,UAAU;AAGjB,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,MAAM,eAAe;AAEd,SAAS,sBACZ,SACA,SACA,eACA,WACI;AACJ,MAAI,WAAW;AACX,UAAM,OAAe,KAAK,QAAQ,SAAS,KAAK;AAEhD,aAAS,KACJ,aAAa,CAAC,KAAK,QAAQ;AACxB,YAAM,MAAM,IAAI,OAAO;AACvB,YAAM,WAAmB,KAAK;AAAA,QAC1B,KAAK,KAAK,MAAM,mBAAmB,QAAQ,MAAM,gBAAgB,GAAG,CAAC;AAAA,MACzE;AAGA,UAAI,CAAC,SAAS,WAAW,IAAI,GAAG;AAC5B,YAAI,UAAU,GAAG,EAAE,IAAI,WAAW;AAClC;AAAA,MACJ;AAEA,SAAG,SAAS,UAAU,CAAC,KAAK,SAAS;AACjC,YAAI,IAAK,QAAO,IAAI,UAAU,GAAG,EAAE,IAAI,WAAW;AAClD,YAAI,UAAU,GAAG,EAAE,IAAI,IAAI;AAAA,MAC/B,CAAC;AAAA,IACL,CAAC,EACA,OAAO,aAAa;AACzB,UAAM,IAAI,gBAAgB,EAAE,OAAO,CAAC;AAAA,EACxC,MAAO,OAAM,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAExD,UAAQ,KAAK,8CAA8C,aAAa,EAAE;AAE1E,UAAQ;AAAA,EAEJ,QAAQ,OACR,QAAQ,OACR,QAAQ,QACJ,IAAI,SAAgB;AAChB,QAAI,UAAU,OAAO,eAAe,UAAU,MAAM;AAChD,aAAO,KAAK,KAAK,IAAI,SAAQ,OAAO,QAAQ,WAAW,KAAK,UAAU,GAAG,IAAI,GAAI,EAAE,KAAK,GAAG,CAAC;AAAA,IAChG;AACI,cAAQ,OAAO;AAAA,QACX,KAAK,IAAI,SAAQ,OAAO,QAAQ,WAAW,KAAK,UAAU,GAAG,IAAI,GAAI,EAAE,KAAK,GAAG,IAAI;AAAA,MACvF;AAAA,EACR;AAER,MAAI,GAAG,cAAc,CAAC,OAAkB;AACpC,QAAI,UAAU,OAAO,eAAe,UAAU,MAAM;AAChD,SAAG,KAAK,uCAAuC;AAC/C,SAAG,MAAM;AACT;AAAA,IACJ;AAEA,aAAS;AAET,0BAAsB,EAAE,EACnB,KAAK,YAAU;AACZ,aAAO,aAAa,OAAO;AAC3B,aAAO,UAAU,cAAc,MAAM;AAAA,IACzC,CAAC,EACA,MAAM,SAAO;AACV,UAAI,EAAE,eAAe,sBAAsB;AACvC,gBAAQ,MAAM,qCAAqC,GAAG;AAAA,MAC1D;AAAA,IACJ,CAAC;AAEL,UAAM,QAAQ,IAAI,MAAM,SAAS,SAAS,IAAI,qBAAqB,EAAE,GAAG,qBAAqB,EAAE,CAAC;AAChG,UAAM,MAAM,QAAQ,eAAe;AAEnC,OAAG,GAAG,SAAS,MAAM;AACjB,cAAQ,OAAO,MAAM,uBAAuB;AAC5C,UAAI;AACA,YAAI,OAAO,uBAAuB,YAAY,MAAM,QAAW;AAC3D,iBAAO,aAAa,YAAY;AAAA,QACpC;AAAA,MACJ,SAAS,KAAK;AAAA,MAEd;AAEA,eAAS;AAAA,IACb,CAAC;AACD,OAAG,GAAG,SAAS,SAAO;AAClB,cAAQ,OAAO,MAAM,oBAAoB,IAAI,OAAO;AAAA,CAAI;AACxD,UAAI;AACA,YAAI,OAAO,uBAAuB,YAAY,MAAM,QAAW;AAC3D,iBAAO,aAAa,YAAY;AAAA,QACpC;AAAA,MACJ,SAASA,MAAK;AAAA,MAEd;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;AAED,iBAAe,sBAAsB,QAA6E;AAC9G,QAAI,OAAO,eAAe,UAAU,YAAY;AAC5C,YAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AACzC,eAAO,SAAS,MAAM,QAAQ;AAC9B,eAAO,UAAU,SAAO,OAAO,IAAI,MAAM,oBAAoB,IAAI,IAAI,EAAE,CAAC;AAAA,MAC5E,CAAC;AAAA,IACL;AAEA,WAAO,CAAC,SAAmB,iBAAyB;AAChD,UAAI,OAAO,eAAe,UAAU,MAAM;AACtC,eAAO,KAAK,YAAY;AAAA,MAC5B,OAAO;AACH,gBAAQ,OAAO,MAAM,2CAA2C,YAAY;AAAA,CAAI;AAAA,MACpF;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,SAAS,qBAAqB,IAAyB;AACnD,QAAM,WAAW,IAAI,SAAS,EAAE,OAAO;AAAA,EAAC,EAAE,CAAC;AAE3C,KAAG,GAAG,WAAW,CAAC,SAAe;AAC7B,UAAM,QAAQ,OAAO,SAAS,IAAI,IAAI,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;AAGxE,aAAS,KAAK,KAAK;AAAA,EACvB,CAAC;AAED,KAAG,GAAG,SAAS,MAAM;AACjB,aAAS,KAAK,IAAI;AAAA,EACtB,CAAC;AACD,KAAG,GAAG,SAAS,SAAO;AAClB,aAAS,KAAK,SAAS,GAAG;AAC1B,aAAS,KAAK,IAAI;AAAA,EACtB,CAAC;AAED,SAAO;AACX;AACA,SAAS,qBAAqB,IAAyB;AACnD,QAAM,WAAW,IAAI,SAAS;AAAA,IAC1B,MAAM,OAAe,WAAmB,UAA0C;AAC9E,UAAI,GAAG,eAAe,UAAU,MAAM;AAClC,WAAG,KAAK,OAAO,QAAQ;AAAA,MAC3B,OAAO;AACH,YAAI,MAAM,SAAS,EAAG,SAAQ,OAAO,MAAM,iDAAiD,KAAK;AAAA,CAAK;AAAA,MAC1G;AAAA,IACJ;AAAA,IACA,MAAM,UAA0C;AAC5C,UAAI,GAAG,eAAe,UAAU,MAAM;AAClC,WAAG,MAAM;AAAA,MACb;AACA,eAAS;AAAA,IACb;AAAA,EACJ,CAAC;AAED,KAAG,GAAG,SAAS,SAAO,SAAS,KAAK,2BAA2B,GAAG,CAAC;AACnE,SAAO;AACX;",
|
|
5
|
-
"names": ["err"]
|
|
6
|
-
}
|