@altronix/cli 0.6.11 → 0.7.1
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/build/build.d.ts +2 -0
- package/build/build.js +240 -0
- package/build/build.js.map +1 -0
- package/build/index.d.ts +1 -1
- package/build/index.js +39 -86
- package/build/index.js.map +1 -1
- package/build/seedle.d.ts +2 -0
- package/build/seedle.js +41 -0
- package/build/seedle.js.map +1 -0
- package/package.json +21 -21
- package/src/build.ts +354 -0
- package/src/index.ts +25 -86
- package/src/seedle.ts +39 -0
- package/tsconfig.json +1 -1
- package/tsconfig.lib.tsbuildinfo +1 -1
- package/build/about.d.ts +0 -3
- package/build/about.js +0 -38
- package/build/about.js.map +0 -1
- package/build/cloud.d.ts +0 -2
- package/build/cloud.js +0 -42
- package/build/cloud.js.map +0 -1
- package/build/common.d.ts +0 -5
- package/build/common.js +0 -49
- package/build/common.js.map +0 -1
- package/build/confirmDevice.d.ts +0 -5
- package/build/confirmDevice.js +0 -36
- package/build/confirmDevice.js.map +0 -1
- package/build/context.d.ts +0 -8
- package/build/context.js +0 -23
- package/build/context.js.map +0 -1
- package/build/dhcp.d.ts +0 -1
- package/build/dhcp.js +0 -10
- package/build/dhcp.js.map +0 -1
- package/build/exe.d.ts +0 -4
- package/build/exe.js +0 -43
- package/build/exe.js.map +0 -1
- package/build/ip.d.ts +0 -2
- package/build/ip.js +0 -18
- package/build/ip.js.map +0 -1
- package/build/linq.d.ts +0 -1
- package/build/linq.js +0 -3
- package/build/linq.js.map +0 -1
- package/build/listen.d.ts +0 -1
- package/build/listen.js +0 -24
- package/build/listen.js.map +0 -1
- package/build/net.d.ts +0 -3
- package/build/net.js +0 -47
- package/build/net.js.map +0 -1
- package/build/poe.d.ts +0 -1
- package/build/poe.js +0 -3
- package/build/poe.js.map +0 -1
- package/build/reboot.d.ts +0 -1
- package/build/reboot.js +0 -16
- package/build/reboot.js.map +0 -1
- package/build/site.d.ts +0 -2
- package/build/site.js +0 -19
- package/build/site.js.map +0 -1
- package/build/stress.d.ts +0 -1
- package/build/stress.js +0 -30
- package/build/stress.js.map +0 -1
- package/build/unix.d.ts +0 -1
- package/build/unix.js +0 -14
- package/build/unix.js.map +0 -1
- package/build/update.d.ts +0 -1
- package/build/update.js +0 -61
- package/build/update.js.map +0 -1
- package/build/west.d.ts +0 -1
- package/build/west.js +0 -3
- package/build/west.js.map +0 -1
- package/src/about.ts +0 -47
- package/src/cloud.ts +0 -55
- package/src/exe.ts +0 -54
- package/src/listen.ts +0 -23
- package/src/net.ts +0 -68
- package/src/poe.ts +0 -1
- package/src/stress.ts +0 -37
- package/src/update.ts +0 -85
- package/src/update.ts.bak +0 -98
package/build/update.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.update = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const device_1 = tslib_1.__importStar(require("@altronix/device"));
|
|
6
|
-
const zdk_1 = require("@altronix/wasm/zdk");
|
|
7
|
-
const rxjs_1 = require("rxjs");
|
|
8
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
9
|
-
function chunks(data, size) {
|
|
10
|
-
let arr = [];
|
|
11
|
-
let remainder = data.length % size;
|
|
12
|
-
function slicer(n) {
|
|
13
|
-
for (let i = 0; i < n; i++) {
|
|
14
|
-
let idx = i * size;
|
|
15
|
-
arr.push(data.slice(idx, idx + size));
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
if (remainder == 0) {
|
|
19
|
-
slicer(data.length / size);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
let n = Math.ceil(data.length / size);
|
|
23
|
-
let end = size * (n - 1);
|
|
24
|
-
slicer(n - 1);
|
|
25
|
-
let last = new Uint8Array(size);
|
|
26
|
-
last.set(data.slice(end));
|
|
27
|
-
arr.push(last);
|
|
28
|
-
}
|
|
29
|
-
return arr;
|
|
30
|
-
}
|
|
31
|
-
function updateMap(data, idx) {
|
|
32
|
-
let update = new zdk_1.Update({ data, offset: idx * 512 });
|
|
33
|
-
// NOTE: Have to initialize the Uint8Array across binding this way
|
|
34
|
-
// https://gitlab.altronix.com/software-engineering/sdk/atx-zdk/-/issues/1
|
|
35
|
-
update.data = data;
|
|
36
|
-
return update;
|
|
37
|
-
}
|
|
38
|
-
function updater(linq, serial) {
|
|
39
|
-
return (acc, update) => linq
|
|
40
|
-
// @ts-ignore
|
|
41
|
-
.put(serial, "/api/v1/update/transfer", update.cbor())
|
|
42
|
-
.pipe((0, rxjs_1.map)(({ meta }) => ({ ...meta, remaining: acc.remaining - 1 })));
|
|
43
|
-
}
|
|
44
|
-
async function update(file) {
|
|
45
|
-
const linq = new device_1.default();
|
|
46
|
-
const dev$ = linq.connections().pipe((0, rxjs_1.take)(1));
|
|
47
|
-
const obs = (0, rxjs_1.from)(fs_1.default.promises.readFile(file)).pipe((0, rxjs_1.switchMap)((bin) => dev$.pipe((0, rxjs_1.map)(({ about }) => ({ about, bin })))), (0, rxjs_1.switchMap)(({ about, bin }) => {
|
|
48
|
-
const { sid: serial } = about;
|
|
49
|
-
device_1.log.info("starting update", { serial });
|
|
50
|
-
const update = chunks(bin, 512).map(updateMap);
|
|
51
|
-
const start$ = (0, rxjs_1.defer)(() => linq.get(serial, "/api/v1/update/start"));
|
|
52
|
-
const finish$ = (0, rxjs_1.defer)(() => linq.get(serial, "/api/v1/update/finish"));
|
|
53
|
-
const transfer$ = (0, rxjs_1.from)(update).pipe((0, rxjs_1.mergeScan)(updater(linq, serial), { remaining: update.length }, 1), (0, rxjs_1.tap)(({ remaining }) => device_1.log.info("update", { remaining })));
|
|
54
|
-
return (0, rxjs_1.concat)(start$, transfer$, finish$);
|
|
55
|
-
}), (0, rxjs_1.finalize)(() => linq.shutdown()));
|
|
56
|
-
return (0, rxjs_1.lastValueFrom)(obs).then(() => {
|
|
57
|
-
device_1.log.info("update complete");
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
exports.update = update;
|
|
61
|
-
//# sourceMappingURL=update.js.map
|
package/build/update.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/build/west.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/build/west.js
DELETED
package/build/west.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"west.js","sourceRoot":"","sources":["../src/west.ts"],"names":[],"mappings":""}
|
package/src/about.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { About } from "@altronix/wasm/zdk";
|
|
2
|
-
import Linq, { log } from "@altronix/device";
|
|
3
|
-
import { finalize, firstValueFrom, map, switchMap, take } from "rxjs";
|
|
4
|
-
import { ResponseBody, ResponseMeta } from "@altronix/device";
|
|
5
|
-
import { cborDecodeStr } from "@altronix/netway";
|
|
6
|
-
|
|
7
|
-
export async function getAbout(): Promise<void> {
|
|
8
|
-
const linq = new Linq();
|
|
9
|
-
const path = "/api/v1/about";
|
|
10
|
-
const obs = linq.connections().pipe(
|
|
11
|
-
take(1),
|
|
12
|
-
switchMap(({ about }) => linq.get<ResponseBody>(about.sid, path)),
|
|
13
|
-
map((resp) => About.fromCbor(resp.body)),
|
|
14
|
-
finalize(() => linq.shutdown())
|
|
15
|
-
);
|
|
16
|
-
return firstValueFrom(obs).then((about) => {
|
|
17
|
-
log.info(`request complete`, { ...about.toJson() });
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export async function getSite(): Promise<void> {
|
|
22
|
-
const linq = new Linq();
|
|
23
|
-
const path = "/api/v1/about/site";
|
|
24
|
-
const obs = linq.connections().pipe(
|
|
25
|
-
take(1),
|
|
26
|
-
switchMap(({ about }) => linq.get<ResponseBody>(about.sid, path)),
|
|
27
|
-
map((resp) => ({ site: cborDecodeStr(resp.body) })),
|
|
28
|
-
finalize(() => linq.shutdown())
|
|
29
|
-
);
|
|
30
|
-
return firstValueFrom(obs).then((site) => {
|
|
31
|
-
log.info(`request complete`, { ...site });
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export async function setSite(site: string): Promise<void> {
|
|
36
|
-
const linq = new Linq();
|
|
37
|
-
const path = "/api/v1/about/site";
|
|
38
|
-
const obs = linq.connections().pipe(
|
|
39
|
-
take(1),
|
|
40
|
-
// @ts-ignore
|
|
41
|
-
switchMap(({ about }) => linq.put<ResponseMeta>(about.sid, path, site)),
|
|
42
|
-
finalize(() => linq.shutdown())
|
|
43
|
-
);
|
|
44
|
-
return firstValueFrom(obs).then(({ meta }) => {
|
|
45
|
-
log.info(`request complete`, { code: meta.code, message: meta.mesg });
|
|
46
|
-
});
|
|
47
|
-
}
|
package/src/cloud.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { cborDecodeNum, NetCloud } from "@altronix/netway";
|
|
2
|
-
import Linq, { log } from "@altronix/device";
|
|
3
|
-
import { ResponseBody, ResponseMeta } from "@altronix/device";
|
|
4
|
-
import {
|
|
5
|
-
concat,
|
|
6
|
-
finalize,
|
|
7
|
-
lastValueFrom,
|
|
8
|
-
map,
|
|
9
|
-
reduce,
|
|
10
|
-
switchMap,
|
|
11
|
-
take,
|
|
12
|
-
} from "rxjs";
|
|
13
|
-
|
|
14
|
-
export async function getCloud(): Promise<void> {
|
|
15
|
-
const linq = new Linq();
|
|
16
|
-
const path = "/api/v1/net/cloud";
|
|
17
|
-
const status = "/api/v1/net/cloud/status";
|
|
18
|
-
const obs = linq.connections().pipe(
|
|
19
|
-
take(1),
|
|
20
|
-
switchMap(({ about }) => {
|
|
21
|
-
const o0 = linq
|
|
22
|
-
.get<ResponseBody>(about.sid, path)
|
|
23
|
-
.pipe(map((resp) => NetCloud.fromCbor(resp.body).toJson()));
|
|
24
|
-
const o1 = linq
|
|
25
|
-
.get<ResponseBody>(about.sid, status)
|
|
26
|
-
.pipe(map((resp) => ({ status: cborDecodeNum(resp.body) })));
|
|
27
|
-
return concat(o0, o1);
|
|
28
|
-
}),
|
|
29
|
-
reduce((acc, curr) => ({ ...acc, ...curr })),
|
|
30
|
-
finalize(() => linq.shutdown())
|
|
31
|
-
);
|
|
32
|
-
return lastValueFrom(obs).then((cloud) => {
|
|
33
|
-
log.info(`request complete`, { ...cloud });
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export async function setCloud(endpoint: string) {
|
|
38
|
-
const [ip, port] = endpoint.split(":");
|
|
39
|
-
const body = new NetCloud({ ip, port: parseInt(port), portEn: true });
|
|
40
|
-
const path = "/api/v1/net/cloud";
|
|
41
|
-
const save = "/api/v1/exe/saveAndReboot";
|
|
42
|
-
const linq = new Linq();
|
|
43
|
-
const obs = linq.connections().pipe(
|
|
44
|
-
take(1),
|
|
45
|
-
switchMap(({ about }) => {
|
|
46
|
-
const o0 = linq.put<ResponseMeta>(about.sid, path, body);
|
|
47
|
-
const o1 = linq.get<ResponseMeta>(about.sid, save);
|
|
48
|
-
return concat(o0, o1);
|
|
49
|
-
}),
|
|
50
|
-
finalize(() => linq.shutdown())
|
|
51
|
-
);
|
|
52
|
-
return lastValueFrom(obs).then(({ meta }) => {
|
|
53
|
-
log.info(`request complete`, { code: meta.code, message: meta.mesg });
|
|
54
|
-
});
|
|
55
|
-
}
|
package/src/exe.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import Linq, { log, ResponseMeta } from "@altronix/device";
|
|
2
|
-
import { finalize, firstValueFrom, switchMap, take } from "rxjs";
|
|
3
|
-
|
|
4
|
-
export async function reboot(): Promise<void> {
|
|
5
|
-
const linq = new Linq();
|
|
6
|
-
const path = "/api/v1/exe/reboot";
|
|
7
|
-
const obs = linq.connections().pipe(
|
|
8
|
-
take(1),
|
|
9
|
-
switchMap(({ about }) => linq.get<ResponseMeta>(about.sid, path)),
|
|
10
|
-
finalize(() => linq.shutdown())
|
|
11
|
-
);
|
|
12
|
-
return firstValueFrom(obs).then(({ meta }) => {
|
|
13
|
-
log.info(`request complete`, { code: meta.code, message: meta.mesg });
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function save(): Promise<void> {
|
|
18
|
-
const linq = new Linq();
|
|
19
|
-
const path = "/api/v1/exe/save";
|
|
20
|
-
const obs = linq.connections().pipe(
|
|
21
|
-
take(1),
|
|
22
|
-
switchMap(({ about }) => linq.get<ResponseMeta>(about.sid, path)),
|
|
23
|
-
finalize(() => linq.shutdown())
|
|
24
|
-
);
|
|
25
|
-
return firstValueFrom(obs).then(({ meta }) => {
|
|
26
|
-
log.info(`request complete`, { code: meta.code, message: meta.mesg });
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export async function saveAndReboot(): Promise<void> {
|
|
31
|
-
const linq = new Linq();
|
|
32
|
-
const path = "/api/v1/exe/saveAndReboot";
|
|
33
|
-
const obs = linq.connections().pipe(
|
|
34
|
-
take(1),
|
|
35
|
-
switchMap(({ about }) => linq.get<ResponseMeta>(about.sid, path)),
|
|
36
|
-
finalize(() => linq.shutdown())
|
|
37
|
-
);
|
|
38
|
-
return firstValueFrom(obs).then(({ meta }) => {
|
|
39
|
-
log.info(`request complete`, { code: meta.code, message: meta.mesg });
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export async function erase(): Promise<void> {
|
|
44
|
-
const linq = new Linq();
|
|
45
|
-
const path = "/api/v1/exe/erase";
|
|
46
|
-
const obs = linq.connections().pipe(
|
|
47
|
-
take(1),
|
|
48
|
-
switchMap(({ about }) => linq.get<ResponseMeta>(about.sid, path)),
|
|
49
|
-
finalize(() => linq.shutdown())
|
|
50
|
-
);
|
|
51
|
-
return firstValueFrom(obs).then(({ meta }) => {
|
|
52
|
-
log.info(`request complete`, { code: meta.code, message: meta.mesg });
|
|
53
|
-
});
|
|
54
|
-
}
|
package/src/listen.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import Linq, { log } from "@altronix/device";
|
|
2
|
-
import { EMPTY, timer } from "rxjs";
|
|
3
|
-
|
|
4
|
-
export async function listen(ms: number): Promise<void> {
|
|
5
|
-
const linq = new Linq();
|
|
6
|
-
const abort = ms > 0 ? timer(ms) : EMPTY;
|
|
7
|
-
|
|
8
|
-
abort.subscribe(() => linq.shutdown());
|
|
9
|
-
|
|
10
|
-
linq.connections().subscribe(({ about, transport }) => {
|
|
11
|
-
log.info("new connection", { ...about, transport });
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
linq.alerts().subscribe(({ about, transport, alert }) => {
|
|
15
|
-
const { sid: serial } = about;
|
|
16
|
-
log.info("new alert", { serial, transport, ...alert.toJson() });
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
linq.heartbeats().subscribe(({ about, transport, heartbeat }) => {
|
|
20
|
-
const { sid: serial } = about;
|
|
21
|
-
log.info("new heartbeat", { serial, transport, ...heartbeat.toJson() });
|
|
22
|
-
});
|
|
23
|
-
}
|
package/src/net.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import Linq, { log } from "@altronix/device";
|
|
2
|
-
import {
|
|
3
|
-
concat,
|
|
4
|
-
finalize,
|
|
5
|
-
firstValueFrom,
|
|
6
|
-
lastValueFrom,
|
|
7
|
-
map,
|
|
8
|
-
switchMap,
|
|
9
|
-
take,
|
|
10
|
-
} from "rxjs";
|
|
11
|
-
import { ResponseBody, ResponseMeta } from "@altronix/device";
|
|
12
|
-
import { NetIp } from "@altronix/netway";
|
|
13
|
-
|
|
14
|
-
export async function getNet(): Promise<void> {
|
|
15
|
-
const linq = new Linq();
|
|
16
|
-
const path = "/api/v1/net/ip";
|
|
17
|
-
const obs = linq.connections().pipe(
|
|
18
|
-
take(1),
|
|
19
|
-
switchMap(({ about }) => linq.get<ResponseBody>(about.sid, path)),
|
|
20
|
-
map((resp) => NetIp.fromCbor(resp.body)),
|
|
21
|
-
finalize(() => linq.shutdown())
|
|
22
|
-
);
|
|
23
|
-
return firstValueFrom(obs).then((net) => {
|
|
24
|
-
log.info(`request complete`, { ...net.toJson() });
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export async function setNet(
|
|
29
|
-
ip: string,
|
|
30
|
-
sn: string,
|
|
31
|
-
gw: string
|
|
32
|
-
): Promise<void> {
|
|
33
|
-
const linq = new Linq();
|
|
34
|
-
const path = "/api/v1/net/ip";
|
|
35
|
-
const save = "/api/v1/exe/saveAndReboot";
|
|
36
|
-
const body = new NetIp({ ip, sn, gw, dhcp: false });
|
|
37
|
-
const obs = linq.connections().pipe(
|
|
38
|
-
take(1),
|
|
39
|
-
switchMap(({ about }) => {
|
|
40
|
-
const o0 = linq.put<ResponseMeta>(about.sid, path, body);
|
|
41
|
-
const o1 = linq.get<ResponseMeta>(about.sid, save);
|
|
42
|
-
return concat(o0, o1);
|
|
43
|
-
}),
|
|
44
|
-
finalize(() => linq.shutdown())
|
|
45
|
-
);
|
|
46
|
-
return lastValueFrom(obs).then(({ meta }) => {
|
|
47
|
-
log.info(`request complete`, { code: meta.code, message: meta.mesg });
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export async function setDhcp(): Promise<void> {
|
|
52
|
-
const linq = new Linq();
|
|
53
|
-
const path = "/api/v1/net/ip";
|
|
54
|
-
const save = "/api/v1/exe/saveAndReboot";
|
|
55
|
-
const body = new NetIp({ dhcp: true });
|
|
56
|
-
const obs = linq.connections().pipe(
|
|
57
|
-
take(1),
|
|
58
|
-
switchMap(({ about }) => {
|
|
59
|
-
const o0 = linq.put<ResponseMeta>(about.sid, path, body);
|
|
60
|
-
const o1 = linq.get<ResponseMeta>(about.sid, save);
|
|
61
|
-
return concat(o0, o1);
|
|
62
|
-
}),
|
|
63
|
-
finalize(() => linq.shutdown())
|
|
64
|
-
);
|
|
65
|
-
return lastValueFrom(obs).then(({ meta }) => {
|
|
66
|
-
log.info(`request complete`, { code: meta.code, message: meta.mesg });
|
|
67
|
-
});
|
|
68
|
-
}
|
package/src/poe.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
package/src/stress.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { About } from "@altronix/wasm/zdk";
|
|
2
|
-
import Linq, { log } from "@altronix/device";
|
|
3
|
-
import { lastValueFrom, map, repeat, switchScan, take, tap } from "rxjs";
|
|
4
|
-
import { ResponseBody } from "@altronix/device";
|
|
5
|
-
import { METH_CONSTANTS } from "@altronix/netway";
|
|
6
|
-
|
|
7
|
-
export async function stress(count: number): Promise<void> {
|
|
8
|
-
const linq = new Linq();
|
|
9
|
-
const path = "/api/v1/about";
|
|
10
|
-
const request = {
|
|
11
|
-
path,
|
|
12
|
-
meth: METH_CONSTANTS.GET,
|
|
13
|
-
retry: 100,
|
|
14
|
-
timeout: 500,
|
|
15
|
-
};
|
|
16
|
-
const obs = linq.connections().pipe(
|
|
17
|
-
take(1),
|
|
18
|
-
switchScan(
|
|
19
|
-
(acc, { about }) =>
|
|
20
|
-
linq.request<ResponseBody>(about.sid, request).pipe(
|
|
21
|
-
map((resp) => ({
|
|
22
|
-
...About.fromCbor(resp.body).toJson(),
|
|
23
|
-
count: acc.count++,
|
|
24
|
-
})),
|
|
25
|
-
repeat(count)
|
|
26
|
-
),
|
|
27
|
-
{ count: 0 }
|
|
28
|
-
),
|
|
29
|
-
tap({
|
|
30
|
-
next: (about) => log.info("response", { ...about }),
|
|
31
|
-
finalize: () => linq.shutdown(),
|
|
32
|
-
})
|
|
33
|
-
);
|
|
34
|
-
return lastValueFrom(obs).then(() => {
|
|
35
|
-
log.info(`stress test complete`);
|
|
36
|
-
});
|
|
37
|
-
}
|
package/src/update.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import Linq, { log } from "@altronix/device";
|
|
2
|
-
import { Update } from "@altronix/wasm/zdk";
|
|
3
|
-
import {
|
|
4
|
-
concat,
|
|
5
|
-
defer,
|
|
6
|
-
finalize,
|
|
7
|
-
from,
|
|
8
|
-
lastValueFrom,
|
|
9
|
-
map,
|
|
10
|
-
mergeScan,
|
|
11
|
-
Observable,
|
|
12
|
-
switchMap,
|
|
13
|
-
take,
|
|
14
|
-
tap,
|
|
15
|
-
} from "rxjs";
|
|
16
|
-
import fs from "fs";
|
|
17
|
-
|
|
18
|
-
function chunks(data: Uint8Array, size: number): Uint8Array[] {
|
|
19
|
-
let arr = [];
|
|
20
|
-
let remainder = data.length % size;
|
|
21
|
-
function slicer(n: number) {
|
|
22
|
-
for (let i = 0; i < n; i++) {
|
|
23
|
-
let idx = i * size;
|
|
24
|
-
arr.push(data.slice(idx, idx + size));
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
if (remainder == 0) {
|
|
28
|
-
slicer(data.length / size);
|
|
29
|
-
} else {
|
|
30
|
-
let n = Math.ceil(data.length / size);
|
|
31
|
-
let end = size * (n - 1);
|
|
32
|
-
slicer(n - 1);
|
|
33
|
-
let last = new Uint8Array(size);
|
|
34
|
-
last.set(data.slice(end));
|
|
35
|
-
arr.push(last);
|
|
36
|
-
}
|
|
37
|
-
return arr;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function updateMap(data: Uint8Array, idx: number): Update {
|
|
41
|
-
let update = new 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 update;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
interface UpdateState {
|
|
49
|
-
remaining: number;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function updater(
|
|
53
|
-
linq: Linq,
|
|
54
|
-
serial: string
|
|
55
|
-
): (acc: UpdateState, update: Update) => Observable<UpdateState> {
|
|
56
|
-
return (acc, update) =>
|
|
57
|
-
linq
|
|
58
|
-
// @ts-ignore
|
|
59
|
-
.put(serial, "/api/v1/update/transfer", update.cbor())
|
|
60
|
-
.pipe(map(({ meta }) => ({ ...meta, remaining: acc.remaining - 1 })));
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export async function update(file: string): Promise<void> {
|
|
64
|
-
const linq = new Linq();
|
|
65
|
-
const dev$ = linq.connections().pipe(take(1));
|
|
66
|
-
const obs = from(fs.promises.readFile(file)).pipe(
|
|
67
|
-
switchMap((bin) => dev$.pipe(map(({ about }) => ({ about, bin })))),
|
|
68
|
-
switchMap(({ about, bin }) => {
|
|
69
|
-
const { sid: serial } = about;
|
|
70
|
-
log.info("starting update", { serial });
|
|
71
|
-
const update = chunks(bin, 512).map(updateMap);
|
|
72
|
-
const start$ = defer(() => linq.get(serial, "/api/v1/update/start"));
|
|
73
|
-
const finish$ = defer(() => linq.get(serial, "/api/v1/update/finish"));
|
|
74
|
-
const transfer$ = from(update).pipe(
|
|
75
|
-
mergeScan(updater(linq, serial), { remaining: update.length }, 1),
|
|
76
|
-
tap(({ remaining }) => log.info("update", { remaining }))
|
|
77
|
-
);
|
|
78
|
-
return concat(start$, transfer$, finish$);
|
|
79
|
-
}),
|
|
80
|
-
finalize(() => linq.shutdown())
|
|
81
|
-
);
|
|
82
|
-
return lastValueFrom(obs).then(() => {
|
|
83
|
-
log.info("update complete");
|
|
84
|
-
});
|
|
85
|
-
}
|
package/src/update.ts.bak
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* This example will listen for the first connected device and make a get
|
|
3
|
-
* request for the about data and log the about data to the console.
|
|
4
|
-
*/
|
|
5
|
-
import {
|
|
6
|
-
ConnectedEvent,
|
|
7
|
-
installDebugLogger,
|
|
8
|
-
getLogger,
|
|
9
|
-
CONNECTED,
|
|
10
|
-
} from "@altronix/device";
|
|
11
|
-
import { About, Update } from "@altronix/wasm/zdk";
|
|
12
|
-
import { from, concat, defer } from "rxjs";
|
|
13
|
-
import { take, filter, switchMap, concatMap, map, tap } from "rxjs/operators";
|
|
14
|
-
import linq from "./linq";
|
|
15
|
-
import fs from "fs";
|
|
16
|
-
|
|
17
|
-
function chunks(data: Uint8Array, size: number): Uint8Array[] {
|
|
18
|
-
let arr = [];
|
|
19
|
-
let remainder = data.length % size;
|
|
20
|
-
function slicer(n: number) {
|
|
21
|
-
for (let i = 0; i < n; i++) {
|
|
22
|
-
let idx = i * size;
|
|
23
|
-
arr.push(data.slice(idx, idx + size));
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
if (remainder == 0) {
|
|
27
|
-
slicer(data.length / size);
|
|
28
|
-
} else {
|
|
29
|
-
let n = Math.ceil(data.length / size);
|
|
30
|
-
let end = size * (n - 1);
|
|
31
|
-
slicer(n - 1);
|
|
32
|
-
let last = new Uint8Array(size);
|
|
33
|
-
last.set(data.slice(end));
|
|
34
|
-
arr.push(last);
|
|
35
|
-
}
|
|
36
|
-
return arr;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
installDebugLogger();
|
|
40
|
-
const logger = getLogger();
|
|
41
|
-
|
|
42
|
-
// Reduce a blob of binary data and convert into an Update[]
|
|
43
|
-
function updateReducer(arr: Update[], data: Uint8Array, idx: number) {
|
|
44
|
-
let update = new Update({ data, offset: idx * 512 });
|
|
45
|
-
// NOTE: Have to initialize the Uint8Array across binding this way
|
|
46
|
-
// https://gitlab.altronix.com/software-engineering/sdk/atx-zdk/-/issues/1
|
|
47
|
-
update.data = data;
|
|
48
|
-
return arr.concat(update);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function runUpdate(file: string): Promise<void> {
|
|
52
|
-
return new Promise((resolve, reject) => {
|
|
53
|
-
const sub = linq
|
|
54
|
-
.listen()
|
|
55
|
-
.pipe(
|
|
56
|
-
filter((ev): ev is ConnectedEvent => ev.type == CONNECTED),
|
|
57
|
-
take(1),
|
|
58
|
-
switchMap(({ device }) => linq.get(device.about.sid, "/api/v1/about")),
|
|
59
|
-
map(About.fromCbor),
|
|
60
|
-
switchMap(({ sid: serial, verPrj }) => {
|
|
61
|
-
logger.info("found device", { serial, version: verPrj });
|
|
62
|
-
logger.info("sending update :", { file });
|
|
63
|
-
return from(fs.promises.readFile(file)).pipe(
|
|
64
|
-
switchMap((update) => {
|
|
65
|
-
// Chunk up the update file into packets and send update to device
|
|
66
|
-
const packets = chunks(update, 512).reduce(updateReducer, []);
|
|
67
|
-
const length = packets.length;
|
|
68
|
-
const urlStart = "/api/v1/update/start";
|
|
69
|
-
const urlTransfer = "/api/v1/update/transfer";
|
|
70
|
-
const urlFinish = "/api/v1/update/finish";
|
|
71
|
-
let sent = 0;
|
|
72
|
-
const start$ = defer(() => linq.get(serial, urlStart));
|
|
73
|
-
const transfer$ = from(packets).pipe(
|
|
74
|
-
concatMap((u) => linq.put(serial, urlTransfer, u.cbor())),
|
|
75
|
-
map((meta) => ({ code: meta.json().code, sent, length })),
|
|
76
|
-
tap(() => sent++)
|
|
77
|
-
);
|
|
78
|
-
const finished$ = defer(() => linq.get(serial, urlFinish));
|
|
79
|
-
return concat(start$, transfer$, finished$);
|
|
80
|
-
})
|
|
81
|
-
);
|
|
82
|
-
})
|
|
83
|
-
)
|
|
84
|
-
.subscribe({
|
|
85
|
-
next: async (mesg) => {
|
|
86
|
-
logger.info("<-", { ...mesg });
|
|
87
|
-
resolve();
|
|
88
|
-
},
|
|
89
|
-
error: async (error) => (await linq.shutdown(), reject(error)),
|
|
90
|
-
complete: async () => (await linq.shutdown(), resolve()),
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
process.on("SIGINT", async () => {
|
|
94
|
-
await linq.shutdown();
|
|
95
|
-
sub.unsubscribe();
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
}
|