@altronix/cli 0.2.0 → 0.3.0

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.
@@ -0,0 +1 @@
1
+ export declare function getter(): Promise<void>;
package/build/about.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getter = void 0;
4
+ const cbor_1 = require("@altronix/cbor");
5
+ const common_1 = require("./common");
6
+ function getter() {
7
+ return (0, common_1.cliRunGet)("/api/v1/about", cbor_1.About);
8
+ }
9
+ exports.getter = getter;
10
+ //# sourceMappingURL=about.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"about.js","sourceRoot":"","sources":["../src/about.ts"],"names":[],"mappings":";;;AAAA,yCAAuC;AACvC,qCAAqC;AAErC,SAAgB,MAAM;IACpB,OAAO,IAAA,kBAAS,EAAC,eAAe,EAAE,YAAK,CAAC,CAAC;AAC3C,CAAC;AAFD,wBAEC"}
@@ -0,0 +1,2 @@
1
+ export declare function setter(endpoint: string): Promise<void>;
2
+ export declare function getter(): Promise<void>;
package/build/cloud.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getter = exports.setter = void 0;
4
+ const cbor_1 = require("@altronix/cbor");
5
+ const common_1 = require("./common");
6
+ function setter(endpoint) {
7
+ const [ip, port] = endpoint.split(":");
8
+ const cbor = new cbor_1.NetCloud({ ip, port: parseInt(port), portEn: true });
9
+ return (0, common_1.cliRunPut)("/api/v1/net/cloud", cbor);
10
+ }
11
+ exports.setter = setter;
12
+ function getter() {
13
+ return (0, common_1.cliRunGet)("/api/v1/net/cloud", cbor_1.NetCloud);
14
+ }
15
+ exports.getter = getter;
16
+ //# sourceMappingURL=cloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.js","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAC1C,qCAAgD;AAEhD,SAAgB,MAAM,CAAC,QAAgB;IACrC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,eAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,OAAO,IAAA,kBAAS,EAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAJD,wBAIC;AAED,SAAgB,MAAM;IACpB,OAAO,IAAA,kBAAS,EAAC,mBAAmB,EAAE,eAAQ,CAAC,CAAC;AAClD,CAAC;AAFD,wBAEC"}
@@ -0,0 +1,16 @@
1
+ import { Writable } from "@altronix/cbor";
2
+ import { Observable } from "rxjs";
3
+ type Data = Writable & {
4
+ json: () => object;
5
+ };
6
+ type FromCbor = {
7
+ fromCbor(arg: Uint8Array): Data;
8
+ };
9
+ type FromCborArray = {
10
+ fromCborArray(arg: Uint8Array): Data[];
11
+ };
12
+ export declare function put<D extends Writable>(serial: string, path: string, data: D): Observable<void>;
13
+ export declare function cliRunGet<D extends FromCbor>(path: string, data: D): Promise<void>;
14
+ export declare function cliRunGetArray<D extends FromCborArray>(path: string, data: D): Promise<void>;
15
+ export declare function cliRunPut<D extends Data>(path: string, data: D): Promise<void>;
16
+ export {};
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cliRunPut = exports.cliRunGetArray = exports.cliRunGet = exports.put = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const device_1 = require("@altronix/device");
6
+ const rxjs_1 = require("rxjs");
7
+ const operators_1 = require("rxjs/operators");
8
+ const linq_1 = tslib_1.__importDefault(require("./linq"));
9
+ function put(serial, path, data) {
10
+ return (0, rxjs_1.concat)((0, rxjs_1.defer)(() => linq_1.default.put(serial, path, data)), (0, rxjs_1.defer)(() => linq_1.default.get(serial, "/api/v1/exe/saveAndReboot"))).pipe((0, operators_1.switchMap)(() => rxjs_1.EMPTY));
11
+ }
12
+ exports.put = put;
13
+ function cliRunGet(path, data) {
14
+ return new Promise((resolve, reject) => {
15
+ const logger = (0, device_1.getLogger)();
16
+ logger.debug(path);
17
+ const sub = linq_1.default
18
+ .listen()
19
+ .pipe((0, operators_1.filter)((ev) => ev.type == device_1.CONNECTED), (0, operators_1.take)(1), (0, operators_1.switchMap)(({ device }) => linq_1.default.get(device.about.sid, path)), (0, operators_1.map)(data.fromCbor))
20
+ .subscribe({
21
+ next: async (data) => {
22
+ logger.info("<-", { ...data.json() });
23
+ await linq_1.default.shutdown();
24
+ sub.unsubscribe();
25
+ resolve();
26
+ },
27
+ error: async (error) => (await linq_1.default.shutdown(), reject(error)),
28
+ complete: async () => (await linq_1.default.shutdown(), resolve()),
29
+ });
30
+ process.on("SIGINT", async () => {
31
+ await linq_1.default.shutdown();
32
+ sub.unsubscribe();
33
+ resolve();
34
+ });
35
+ });
36
+ }
37
+ exports.cliRunGet = cliRunGet;
38
+ function cliRunGetArray(path, data) {
39
+ return new Promise((resolve, reject) => {
40
+ const logger = (0, device_1.getLogger)();
41
+ logger.debug(path);
42
+ const sub = linq_1.default
43
+ .listen()
44
+ .pipe((0, operators_1.filter)((ev) => ev.type == device_1.CONNECTED), (0, operators_1.take)(1), (0, operators_1.switchMap)(({ device }) => linq_1.default.get(device.about.sid, path)), (0, operators_1.map)(data.fromCborArray))
45
+ .subscribe({
46
+ next: async (data) => {
47
+ data.forEach((d, idx) => logger.info(`<- ${idx}`, { ...d.json() }));
48
+ await linq_1.default.shutdown();
49
+ sub.unsubscribe();
50
+ resolve();
51
+ },
52
+ error: async (error) => (await linq_1.default.shutdown(), reject(error)),
53
+ complete: async () => (await linq_1.default.shutdown(), resolve()),
54
+ });
55
+ process.on("SIGINT", async () => {
56
+ await linq_1.default.shutdown();
57
+ sub.unsubscribe();
58
+ resolve();
59
+ });
60
+ });
61
+ }
62
+ exports.cliRunGetArray = cliRunGetArray;
63
+ function cliRunPut(path, data) {
64
+ return new Promise((resolve, reject) => {
65
+ const logger = (0, device_1.getLogger)();
66
+ logger.debug(path, data.json());
67
+ const sub = linq_1.default
68
+ .listen()
69
+ .pipe((0, operators_1.filter)((ev) => ev.type == device_1.CONNECTED), (0, operators_1.take)(1), (0, operators_1.switchMap)(({ device }) => put(device.about.sid, path, data)))
70
+ .subscribe({
71
+ next: async () => (await linq_1.default.shutdown(), sub.unsubscribe(), resolve()),
72
+ error: async (error) => (await linq_1.default.shutdown(), reject(error)),
73
+ complete: async () => (await linq_1.default.shutdown(), resolve()),
74
+ });
75
+ process.on("SIGINT", async () => {
76
+ await linq_1.default.shutdown();
77
+ sub.unsubscribe();
78
+ resolve();
79
+ });
80
+ });
81
+ }
82
+ exports.cliRunPut = cliRunPut;
83
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function setter(): Promise<void>;
package/build/dhcp.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setter = void 0;
4
+ const cbor_1 = require("@altronix/cbor");
5
+ const common_1 = require("./common");
6
+ async function setter() {
7
+ return (0, common_1.cliRunPut)("/api/v1/net/ip", new cbor_1.NetIp({ dhcp: true }));
8
+ }
9
+ exports.setter = setter;
10
+ //# sourceMappingURL=dhcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dhcp.js","sourceRoot":"","sources":["../src/dhcp.ts"],"names":[],"mappings":";;;AAAA,yCAAuC;AACvC,qCAAqC;AAE9B,KAAK,UAAU,MAAM;IAC1B,OAAO,IAAA,kBAAS,EAAC,gBAAgB,EAAE,IAAI,YAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAFD,wBAEC"}
package/build/index.js CHANGED
@@ -3,28 +3,67 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const device_1 = require("@altronix/device");
5
5
  const commander_1 = require("commander");
6
- const setCloud_1 = tslib_1.__importDefault(require("./setCloud"));
7
- const setIp_1 = tslib_1.__importDefault(require("./setIp"));
8
- const setDhcp_1 = tslib_1.__importDefault(require("./setDhcp"));
6
+ const poe = tslib_1.__importStar(require("./poe"));
7
+ const cloud = tslib_1.__importStar(require("./cloud"));
8
+ const ip = tslib_1.__importStar(require("./ip"));
9
+ const dhcp = tslib_1.__importStar(require("./dhcp"));
10
+ const about = tslib_1.__importStar(require("./about"));
11
+ const update_1 = require("./update");
9
12
  (async function main() {
10
13
  (0, device_1.getLogger)().debug("starting app");
11
14
  commander_1.program.name("atx").description("access linq device via cli").version("TODO");
15
+ commander_1.program
16
+ .command("get-about")
17
+ .description("get about data on the device")
18
+ .action(about.getter);
12
19
  commander_1.program
13
20
  .command("set-cloud")
14
21
  .description("update network interface on the device")
15
22
  .argument("<endpoint>", "cloud service location")
16
- .action(setCloud_1.default);
23
+ .action(cloud.setter);
24
+ commander_1.program
25
+ .command("get-cloud")
26
+ .description("get cloud endpoint on the device")
27
+ .action(cloud.getter);
17
28
  commander_1.program
18
29
  .command("set-ip")
19
30
  .description("update ip interface on the device")
20
31
  .argument("<ip>", "set IP address")
21
32
  .argument("<sn>", "set SN address")
22
33
  .argument("<gw>", "set GW address")
23
- .action(setIp_1.default);
34
+ .action(ip.setter);
35
+ commander_1.program
36
+ .command("get-ip")
37
+ .description("get ip interface on the device")
38
+ .action(ip.getter);
24
39
  commander_1.program
25
40
  .command("set-dhcp")
26
41
  .description("update ip interface [DHCP]")
27
- .action(setDhcp_1.default);
28
- await commander_1.program.parseAsync();
42
+ .action(dhcp.setter);
43
+ commander_1.program
44
+ .command("set-poe-port-on")
45
+ .description("turn on a poe port")
46
+ .argument("<port>", "index of port to turn on")
47
+ .action(poe.setPortOn);
48
+ commander_1.program
49
+ .command("set-poe-port-off")
50
+ .description("turn off a poe port")
51
+ .argument("<port>", "index of port to turn on")
52
+ .action(poe.setPortOff);
53
+ commander_1.program
54
+ .command("get-poe-ports")
55
+ .description("read the poe port data")
56
+ .action(poe.getPorts);
57
+ commander_1.program
58
+ .command("update")
59
+ .description("run firmware update from file")
60
+ .argument("<file>", "file to update device with")
61
+ .action(update_1.runUpdate);
62
+ try {
63
+ await commander_1.program.parseAsync();
64
+ }
65
+ catch (e) {
66
+ console.error(e.json ? e.json() : e);
67
+ }
29
68
  })();
30
69
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAC7C,yCAAoC;AACpC,kEAAkC;AAClC,4DAA4B;AAC5B,gEAAgC;AAEhC,CAAC,KAAK,UAAU,IAAI;IAClB,IAAA,kBAAS,GAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAElC,mBAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9E,mBAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wCAAwC,CAAC;SACrD,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAChD,MAAM,CAAC,kBAAQ,CAAC,CAAC;IAEpB,mBAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,eAAK,CAAC,CAAC;IAEjB,mBAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,iBAAO,CAAC,CAAC;IAEnB,MAAM,mBAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAC7C,yCAAoC;AACpC,mDAA6B;AAC7B,uDAAiC;AACjC,iDAA2B;AAC3B,qDAA+B;AAC/B,uDAAiC;AACjC,qCAAqC;AAErC,CAAC,KAAK,UAAU,IAAI;IAClB,IAAA,kBAAS,GAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAElC,mBAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9E,mBAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAExB,mBAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wCAAwC,CAAC;SACrD,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAChD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAExB,mBAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAExB,mBAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAErB,mBAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAErB,mBAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvB,mBAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,oBAAoB,CAAC;SACjC,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEzB,mBAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,qBAAqB,CAAC;SAClC,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE1B,mBAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExB,mBAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;SAChD,MAAM,CAAC,kBAAS,CAAC,CAAC;IAErB,IAAI;QACF,MAAM,mBAAO,CAAC,UAAU,EAAE,CAAC;KAC5B;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACtC;AACH,CAAC,CAAC,EAAE,CAAC"}
package/build/ip.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function setter(ip: string, sn: string, gw: string): Promise<void>;
2
+ export declare function getter(): Promise<void>;
package/build/ip.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getter = exports.setter = void 0;
4
+ const cbor_1 = require("@altronix/cbor");
5
+ const common_1 = require("./common");
6
+ function setter(ip, sn, gw) {
7
+ return (0, common_1.cliRunPut)("/api/v1/net/ip", new cbor_1.NetIp({ ip, sn, gw }));
8
+ }
9
+ exports.setter = setter;
10
+ function getter() {
11
+ return (0, common_1.cliRunGet)("/api/v1/net/ip", cbor_1.NetIp);
12
+ }
13
+ exports.getter = getter;
14
+ //# sourceMappingURL=ip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip.js","sourceRoot":"","sources":["../src/ip.ts"],"names":[],"mappings":";;;AAAA,yCAAuC;AACvC,qCAAgD;AAEhD,SAAgB,MAAM,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU;IACvD,OAAO,IAAA,kBAAS,EAAC,gBAAgB,EAAE,IAAI,YAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAFD,wBAEC;AAED,SAAgB,MAAM;IACpB,OAAO,IAAA,kBAAS,EAAC,gBAAgB,EAAE,YAAK,CAAC,CAAC;AAC5C,CAAC;AAFD,wBAEC"}
package/build/poe.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare function getPorts(): Promise<void>;
2
+ export declare function setPortOn(port: number): Promise<void>;
3
+ export declare function setPortOff(port: number): Promise<void>;
package/build/poe.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setPortOff = exports.setPortOn = exports.getPorts = void 0;
4
+ const cbor_1 = require("@altronix/cbor");
5
+ const common_1 = require("./common");
6
+ function getPorts() {
7
+ return (0, common_1.cliRunGetArray)("/api/v1/netway/ports", cbor_1.PoePort);
8
+ }
9
+ exports.getPorts = getPorts;
10
+ function setPortOn(port) {
11
+ let data = new cbor_1.PoePort({ enabled: true });
12
+ return (0, common_1.cliRunPut)(`/api/v1/netway/ports?port=${port}`, data);
13
+ }
14
+ exports.setPortOn = setPortOn;
15
+ function setPortOff(port) {
16
+ let data = new cbor_1.PoePort({ enabled: false });
17
+ return (0, common_1.cliRunPut)(`/api/v1/netway/ports?port=${port}`, data);
18
+ }
19
+ exports.setPortOff = setPortOff;
20
+ //# sourceMappingURL=poe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poe.js","sourceRoot":"","sources":["../src/poe.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AACzC,qCAAqD;AAErD,SAAgB,QAAQ;IACtB,OAAO,IAAA,uBAAc,EAAC,sBAAsB,EAAE,cAAO,CAAC,CAAC;AACzD,CAAC;AAFD,4BAEC;AAED,SAAgB,SAAS,CAAC,IAAY;IACpC,IAAI,IAAI,GAAG,IAAI,cAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,OAAO,IAAA,kBAAS,EAAC,6BAA6B,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAHD,8BAGC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,IAAI,IAAI,GAAG,IAAI,cAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3C,OAAO,IAAA,kBAAS,EAAC,6BAA6B,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAHD,gCAGC"}
@@ -0,0 +1 @@
1
+ export declare function runUpdate(file: string): Promise<void>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runUpdate = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /*
6
+ * This example will listen for the first connected device and make a get
7
+ * request for the about data and log the about data to the console.
8
+ */
9
+ const device_1 = require("@altronix/device");
10
+ const cbor_1 = require("@altronix/cbor");
11
+ const rxjs_1 = require("rxjs");
12
+ const operators_1 = require("rxjs/operators");
13
+ const linq_1 = tslib_1.__importDefault(require("./linq"));
14
+ const fs_1 = tslib_1.__importDefault(require("fs"));
15
+ function chunks(data, size) {
16
+ let arr = [];
17
+ let remainder = data.length % size;
18
+ function slicer(n) {
19
+ for (let i = 0; i < n; i++) {
20
+ let idx = i * size;
21
+ arr.push(data.slice(idx, idx + size));
22
+ }
23
+ }
24
+ if (remainder == 0) {
25
+ slicer(data.length / size);
26
+ }
27
+ else {
28
+ let n = Math.ceil(data.length / size);
29
+ let end = size * (n - 1);
30
+ slicer(n - 1);
31
+ let last = new Uint8Array(size);
32
+ last.set(data.slice(end));
33
+ arr.push(last);
34
+ }
35
+ return arr;
36
+ }
37
+ (0, device_1.installDebugLogger)();
38
+ const logger = (0, device_1.getLogger)();
39
+ // Reduce a blob of binary data and convert into an Update[]
40
+ function updateReducer(arr, data, idx) {
41
+ let update = new cbor_1.Update({ data, offset: idx * 512 });
42
+ // NOTE: Have to initialize the Uint8Array across binding this way
43
+ // https://gitlab.altronix.com/software-engineering/sdk/atx-zdk/-/issues/1
44
+ update.data = data;
45
+ return arr.concat(update);
46
+ }
47
+ function runUpdate(file) {
48
+ return new Promise((resolve, reject) => {
49
+ const sub = linq_1.default
50
+ .listen()
51
+ .pipe((0, operators_1.filter)((ev) => ev.type == device_1.CONNECTED), (0, operators_1.take)(1), (0, operators_1.switchMap)(({ device }) => linq_1.default.get(device.about.sid, "/api/v1/about")), (0, operators_1.map)(cbor_1.About.fromCbor), (0, operators_1.switchMap)(({ sid: serial, verPrj }) => {
52
+ logger.info("found device", { serial, version: verPrj });
53
+ logger.info("sending update :", { file });
54
+ return (0, rxjs_1.from)(fs_1.default.promises.readFile(file)).pipe((0, operators_1.switchMap)((update) => {
55
+ // Chunk up the update file into packets and send update to device
56
+ const packets = chunks(update, 512).reduce(updateReducer, []);
57
+ const length = packets.length;
58
+ const urlStart = "/api/v1/update/start";
59
+ const urlTransfer = "/api/v1/update/transfer";
60
+ const urlFinish = "/api/v1/update/finish";
61
+ let sent = 0;
62
+ const start$ = (0, rxjs_1.defer)(() => linq_1.default.get(serial, urlStart));
63
+ const transfer$ = (0, rxjs_1.from)(packets).pipe((0, operators_1.concatMap)((u) => linq_1.default.put(serial, urlTransfer, u.cbor())), (0, operators_1.map)((meta) => ({ code: meta.json().code, sent, length })), (0, operators_1.tap)(() => sent++));
64
+ const finished$ = (0, rxjs_1.defer)(() => linq_1.default.get(serial, urlFinish));
65
+ return (0, rxjs_1.concat)(start$, transfer$, finished$);
66
+ }));
67
+ }))
68
+ .subscribe({
69
+ next: async (mesg) => {
70
+ logger.info("<-", { ...mesg });
71
+ resolve();
72
+ },
73
+ error: async (error) => (await linq_1.default.shutdown(), reject(error)),
74
+ complete: async () => (await linq_1.default.shutdown(), resolve()),
75
+ });
76
+ process.on("SIGINT", async () => {
77
+ await linq_1.default.shutdown();
78
+ sub.unsubscribe();
79
+ });
80
+ });
81
+ }
82
+ exports.runUpdate = runUpdate;
83
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "@altronix/cli",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "",
5
- "main": "index.js",
5
+ "bin": {
6
+ "atx": "build/index.js"
7
+ },
6
8
  "devDependencies": {
7
9
  "@types/jest": "~29.2",
8
10
  "@types/node": "~18",
@@ -27,8 +29,8 @@
27
29
  "commander": "^10.0.0",
28
30
  "rxjs": "^7.6.0",
29
31
  "serialport": "^10.5.0",
30
- "@altronix/cbor": "0.2.0",
31
- "@altronix/device": "0.2.0"
32
+ "@altronix/cbor": "0.4.2",
33
+ "@altronix/device": "0.4.2"
32
34
  },
33
35
  "scripts": {
34
36
  "start": "node ./build/index.js",
package/src/about.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { About } from "@altronix/cbor";
2
+ import { cliRunGet } from "./common";
3
+
4
+ export function getter(): Promise<void> {
5
+ return cliRunGet("/api/v1/about", About);
6
+ }
package/src/cloud.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { NetCloud } from "@altronix/cbor";
2
+ import { cliRunGet, cliRunPut } from "./common";
3
+
4
+ export function setter(endpoint: string): Promise<void> {
5
+ const [ip, port] = endpoint.split(":");
6
+ const cbor = new NetCloud({ ip, port: parseInt(port), portEn: true });
7
+ return cliRunPut("/api/v1/net/cloud", cbor);
8
+ }
9
+
10
+ export function getter(): Promise<void> {
11
+ return cliRunGet("/api/v1/net/cloud", NetCloud);
12
+ }
package/src/common.ts ADDED
@@ -0,0 +1,113 @@
1
+ import { ConnectedEvent, getLogger, CONNECTED } from "@altronix/device";
2
+ import { Writable } from "@altronix/cbor";
3
+ import { Observable, defer, EMPTY, concat } from "rxjs";
4
+ import { take, filter, switchMap, map } from "rxjs/operators";
5
+ import linq from "./linq";
6
+
7
+ type Data = Writable & { json: () => object };
8
+ type FromCbor = { fromCbor(arg: Uint8Array): Data };
9
+ type FromCborArray = { fromCborArray(arg: Uint8Array): Data[] };
10
+
11
+ export function put<D extends Writable>(
12
+ serial: string,
13
+ path: string,
14
+ data: D
15
+ ): Observable<void> {
16
+ return concat(
17
+ defer(() => linq.put(serial, path, data)),
18
+ defer(() => linq.get(serial, "/api/v1/exe/saveAndReboot"))
19
+ ).pipe(switchMap(() => EMPTY));
20
+ }
21
+
22
+ export function cliRunGet<D extends FromCbor>(
23
+ path: string,
24
+ data: D
25
+ ): Promise<void> {
26
+ return new Promise((resolve, reject) => {
27
+ const logger = getLogger();
28
+ logger.debug(path);
29
+ const sub = linq
30
+ .listen()
31
+ .pipe(
32
+ filter((ev): ev is ConnectedEvent => ev.type == CONNECTED),
33
+ take(1),
34
+ switchMap(({ device }) => linq.get(device.about.sid, path)),
35
+ map(data.fromCbor)
36
+ )
37
+ .subscribe({
38
+ next: async (data) => {
39
+ logger.info("<-", { ...data.json() });
40
+ await linq.shutdown();
41
+ sub.unsubscribe();
42
+ resolve();
43
+ },
44
+ error: async (error) => (await linq.shutdown(), reject(error)),
45
+ complete: async () => (await linq.shutdown(), resolve()),
46
+ });
47
+ process.on("SIGINT", async () => {
48
+ await linq.shutdown();
49
+ sub.unsubscribe();
50
+ resolve();
51
+ });
52
+ });
53
+ }
54
+
55
+ export function cliRunGetArray<D extends FromCborArray>(
56
+ path: string,
57
+ data: D
58
+ ): Promise<void> {
59
+ return new Promise((resolve, reject) => {
60
+ const logger = getLogger();
61
+ logger.debug(path);
62
+ const sub = linq
63
+ .listen()
64
+ .pipe(
65
+ filter((ev): ev is ConnectedEvent => ev.type == CONNECTED),
66
+ take(1),
67
+ switchMap(({ device }) => linq.get(device.about.sid, path)),
68
+ map(data.fromCborArray)
69
+ )
70
+ .subscribe({
71
+ next: async (data) => {
72
+ data.forEach((d, idx) => logger.info(`<- ${idx}`, { ...d.json() }));
73
+ await linq.shutdown();
74
+ sub.unsubscribe();
75
+ resolve();
76
+ },
77
+ error: async (error) => (await linq.shutdown(), reject(error)),
78
+ complete: async () => (await linq.shutdown(), resolve()),
79
+ });
80
+ process.on("SIGINT", async () => {
81
+ await linq.shutdown();
82
+ sub.unsubscribe();
83
+ resolve();
84
+ });
85
+ });
86
+ }
87
+
88
+ export function cliRunPut<D extends Data>(
89
+ path: string,
90
+ data: D
91
+ ): Promise<void> {
92
+ return new Promise((resolve, reject) => {
93
+ const logger = getLogger();
94
+ logger.debug(path, data.json());
95
+ const sub = linq
96
+ .listen()
97
+ .pipe(
98
+ filter((ev): ev is ConnectedEvent => ev.type == CONNECTED),
99
+ take(1),
100
+ switchMap(({ device }) => put(device.about.sid, path, data))
101
+ )
102
+ .subscribe({
103
+ next: async () => (await linq.shutdown(), sub.unsubscribe(), resolve()),
104
+ error: async (error) => (await linq.shutdown(), reject(error)),
105
+ complete: async () => (await linq.shutdown(), resolve()),
106
+ });
107
+ process.on("SIGINT", async () => {
108
+ await linq.shutdown();
109
+ sub.unsubscribe();
110
+ resolve();
111
+ });
112
+ });
113
+ }
package/src/dhcp.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { NetIp } from "@altronix/cbor";
2
+ import { cliRunPut } from "./common";
3
+
4
+ export async function setter(): Promise<void> {
5
+ return cliRunPut("/api/v1/net/ip", new NetIp({ dhcp: true }));
6
+ }