@bridgething/updater 0.8.0 → 0.9.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.
- package/README.md +17 -76
- package/dist/cli.js +73 -196
- package/dist/cli.js.map +1 -1
- package/package.json +5 -30
- package/dist/ack-window.d.ts +0 -38
- package/dist/ack-window.d.ts.map +0 -1
- package/dist/ack-window.js +0 -89
- package/dist/ack-window.js.map +0 -1
- package/dist/driver.d.ts +0 -57
- package/dist/driver.d.ts.map +0 -1
- package/dist/driver.js +0 -245
- package/dist/driver.js.map +0 -1
- package/dist/fragments.d.ts +0 -29
- package/dist/fragments.d.ts.map +0 -1
- package/dist/fragments.js +0 -45
- package/dist/fragments.js.map +0 -1
- package/dist/gateway-device.d.ts +0 -3
- package/dist/gateway-device.d.ts.map +0 -1
- package/dist/gateway-device.js +0 -2
- package/dist/gateway-device.js.map +0 -1
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -6
- package/dist/index.js.map +0 -1
- package/dist/manifest.d.ts +0 -75
- package/dist/manifest.d.ts.map +0 -1
- package/dist/manifest.js +0 -69
- package/dist/manifest.js.map +0 -1
- package/dist/node.d.ts +0 -3
- package/dist/node.d.ts.map +0 -1
- package/dist/node.js +0 -15
- package/dist/node.js.map +0 -1
- package/dist/range-serve.d.ts +0 -5
- package/dist/range-serve.d.ts.map +0 -1
- package/dist/range-serve.js +0 -59
- package/dist/range-serve.js.map +0 -1
- package/dist/source.d.ts +0 -10
- package/dist/source.d.ts.map +0 -1
- package/dist/source.js +0 -52
- package/dist/source.js.map +0 -1
- package/dist/web-serial.d.ts +0 -2
- package/dist/web-serial.d.ts.map +0 -1
- package/dist/web-serial.js +0 -2
- package/dist/web-serial.js.map +0 -1
- package/dist/websocket.d.ts +0 -2
- package/dist/websocket.d.ts.map +0 -1
- package/dist/websocket.js +0 -2
- package/dist/websocket.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,36 +1,31 @@
|
|
|
1
1
|
# @bridgething/updater
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
on a channel, plus the library the CLI is built from.
|
|
3
|
+
CLI that brings a [bridgething](https://github.com/JoeyEamigh/bridgething) Spotify
|
|
4
|
+
Car Thing to a release on a channel.
|
|
6
5
|
|
|
7
6
|
It updates the **device** (daemon binary and/or full image), not a webapp. To
|
|
8
7
|
install or share a webapp, use [`@bridgething/client`](https://www.npmjs.com/package/@bridgething/client)
|
|
9
8
|
and the `push`/`share` scripts a [`create-bridgething`](https://www.npmjs.com/package/create-bridgething)
|
|
10
9
|
project ships.
|
|
11
10
|
|
|
12
|
-
## CLI
|
|
13
|
-
|
|
14
11
|
```sh
|
|
15
12
|
bunx @bridgething/updater
|
|
16
13
|
```
|
|
17
14
|
|
|
18
|
-
Connects to a Car Thing over the daemon's network gateway (the USB-gadget link
|
|
19
|
-
|
|
20
|
-
composite version,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
Options:
|
|
15
|
+
Connects to a Car Thing over the daemon's network gateway (the USB-gadget link by
|
|
16
|
+
default), reads the discover manifest, resolves the target channel's `latest`
|
|
17
|
+
composite version, and applies it. If the image half of the version changed it
|
|
18
|
+
pushes a full image OTA, otherwise it pushes just the daemon binary, preferring a
|
|
19
|
+
published delta over a full artifact. A release that is yanked or deprecated is
|
|
20
|
+
refused.
|
|
26
21
|
|
|
27
22
|
| Flag | Default | Meaning |
|
|
28
23
|
| --- | --- | --- |
|
|
29
24
|
| `--root <url>` | `https://ota.bridgething.com` | Manifest + artifact root. |
|
|
30
|
-
| `--channel <name>` |
|
|
25
|
+
| `--channel <name>` | the channel the device reports | Channel to track. |
|
|
31
26
|
| `--host <ws-url>` | `ws://bridgething.local:8892/` | Daemon network gateway. |
|
|
32
|
-
| `--cache-dir <path>` | OS tmpdir
|
|
33
|
-
| `--
|
|
27
|
+
| `--cache-dir <path>` | a directory under the OS tmpdir | Artifact download cache. |
|
|
28
|
+
| `--version <ver>` | the channel's `latest` | Composite version to install. |
|
|
34
29
|
|
|
35
30
|
Multiple devices on the network resolve to distinct mDNS names; point `--host` at
|
|
36
31
|
the one you mean:
|
|
@@ -39,67 +34,13 @@ the one you mean:
|
|
|
39
34
|
bunx @bridgething/updater --host ws://bridgething-<serial>.local:8892/
|
|
40
35
|
```
|
|
41
36
|
|
|
42
|
-
##
|
|
43
|
-
|
|
44
|
-
The CLI is a thin driver over `OtaDriver`, which streams an artifact to the
|
|
45
|
-
daemon with sender-side flow control and reports progress to a terminal state.
|
|
46
|
-
|
|
47
|
-
```ts
|
|
48
|
-
import { BridgethingGateway } from '@bridgething/gateway';
|
|
49
|
-
import { NetworkAdapter } from '@bridgething/adapter-network';
|
|
50
|
-
import { OtaDriver } from '@bridgething/updater';
|
|
51
|
-
import { fileArtifactSource } from '@bridgething/updater/node';
|
|
52
|
-
|
|
53
|
-
const gateway = new BridgethingGateway(new NetworkAdapter());
|
|
54
|
-
await gateway.start();
|
|
55
|
-
// resolve a deviceId from a 'version' announce event, then:
|
|
56
|
-
|
|
57
|
-
const driver = new OtaDriver(gateway, deviceId);
|
|
58
|
-
try {
|
|
59
|
-
const snapshot = await driver.pushDaemon(await fileArtifactSource('./bridgething'), s =>
|
|
60
|
-
console.log(s.phase, 'percent' in s ? s.percent : ''),
|
|
61
|
-
);
|
|
62
|
-
if (snapshot.phase === 'failed') console.error(snapshot.reason);
|
|
63
|
-
} finally {
|
|
64
|
-
driver.close();
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
`OtaDriver` covers every OTA kind the daemon accepts:
|
|
69
|
-
|
|
70
|
-
- `pushImage({ source, zcks, updateUrlBase })` - full image OTA. When the daemon
|
|
71
|
-
requests delta ranges of the compressed asset, `zcks` (a map of asset name to
|
|
72
|
-
source) serves them back over the same link; `serveAssetRanges` wires that up.
|
|
73
|
-
- `pushDaemon(source)` - stage and activate a new daemon binary.
|
|
74
|
-
- `pushBuiltinWebapp(source)` - stage and activate a built-in webapp.
|
|
75
|
-
- `pushBandaidBatch(artifacts)` - stage several bandaid artifacts, then commit
|
|
76
|
-
them together.
|
|
77
|
-
- `installWebapp(source)` - install a third-party webapp bundle.
|
|
78
|
-
|
|
79
|
-
### Artifact sources
|
|
80
|
-
|
|
81
|
-
An `ArtifactSource` is a random-access, sized byte source. The driver reads it in
|
|
82
|
-
64 KiB fragments and never buffers the whole file. Construct one from wherever
|
|
83
|
-
the bytes live:
|
|
84
|
-
|
|
85
|
-
- `fileArtifactSource(path)` from `@bridgething/updater/node` - a filesystem file.
|
|
86
|
-
- `bytesArtifactSource(bytes)` - an in-memory `Uint8Array`.
|
|
87
|
-
- `blobArtifactSource(blob)` - a browser `Blob` / `File`.
|
|
88
|
-
|
|
89
|
-
### Manifest helpers
|
|
90
|
-
|
|
91
|
-
`@bridgething/updater/manifest` exposes the discover-manifest types and helpers
|
|
92
|
-
the CLI uses: `fetchManifest`, `parseCompositeVersion`, `otaArtifactUrls`, and
|
|
93
|
-
`builtinWebappUrl`.
|
|
94
|
-
|
|
95
|
-
### Adapters
|
|
96
|
-
|
|
97
|
-
Re-exported for convenience so a consumer needs one import:
|
|
37
|
+
## What it is built on
|
|
98
38
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
39
|
+
Everything below the flags - the wire protocol, transfer pacing, delta selection,
|
|
40
|
+
artifact downloads, and the OTA state machine - runs in the Rust delivery core,
|
|
41
|
+
reached through [`@bridgething/core-node`](https://www.npmjs.com/package/@bridgething/core-node).
|
|
42
|
+
Drive updates from your own program by using that package directly. For the same
|
|
43
|
+
thing in a browser, use [`@bridgething/browser`](https://www.npmjs.com/package/@bridgething/browser).
|
|
103
44
|
|
|
104
45
|
## Posture
|
|
105
46
|
|
package/dist/cli.js
CHANGED
|
@@ -1,33 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { BridgethingGateway } from '@bridgething/gateway';
|
|
6
|
-
import { OtaDriver } from './driver.js';
|
|
7
|
-
import { daemonPatchUrl, fetchManifest, imageVariantForChannel, otaArtifactUrls, parseCompositeVersion, } from './manifest.js';
|
|
8
|
-
import { fileArtifactSource } from './node.js';
|
|
9
|
-
import { NetworkAdapter } from './websocket.js';
|
|
2
|
+
import { DeliveryClient, parseCompositeVersion } from '@bridgething/core-node';
|
|
10
3
|
const DEFAULT_ROOT = 'https://ota.bridgething.com';
|
|
11
4
|
const DEFAULT_HOST = 'ws://bridgething.local:8892/';
|
|
12
|
-
const CONNECT_TIMEOUT_MS = 15_000;
|
|
13
5
|
function parseArgs(argv) {
|
|
14
|
-
|
|
15
|
-
let channel = null;
|
|
16
|
-
let host = DEFAULT_HOST;
|
|
17
|
-
let cacheDir = join(tmpdir(), 'bridgething-updater');
|
|
18
|
-
let daemonOnly = false;
|
|
6
|
+
const args = { root: DEFAULT_ROOT, channel: null, host: DEFAULT_HOST, cacheDir: null, version: null };
|
|
19
7
|
for (let i = 0; i < argv.length; i++) {
|
|
20
8
|
const arg = argv[i];
|
|
21
9
|
if (arg === '--root')
|
|
22
|
-
root = requireValue(argv, ++i, arg);
|
|
10
|
+
args.root = requireValue(argv, ++i, arg);
|
|
23
11
|
else if (arg === '--channel')
|
|
24
|
-
channel = requireValue(argv, ++i, arg);
|
|
12
|
+
args.channel = requireValue(argv, ++i, arg);
|
|
25
13
|
else if (arg === '--host')
|
|
26
|
-
host = requireValue(argv, ++i, arg);
|
|
14
|
+
args.host = requireValue(argv, ++i, arg);
|
|
27
15
|
else if (arg === '--cache-dir')
|
|
28
|
-
cacheDir = requireValue(argv, ++i, arg);
|
|
29
|
-
else if (arg === '--
|
|
30
|
-
|
|
16
|
+
args.cacheDir = requireValue(argv, ++i, arg);
|
|
17
|
+
else if (arg === '--version')
|
|
18
|
+
args.version = requireValue(argv, ++i, arg);
|
|
31
19
|
else if (arg === '--help' || arg === '-h') {
|
|
32
20
|
printHelp();
|
|
33
21
|
process.exit(0);
|
|
@@ -38,7 +26,8 @@ function parseArgs(argv) {
|
|
|
38
26
|
process.exit(1);
|
|
39
27
|
}
|
|
40
28
|
}
|
|
41
|
-
|
|
29
|
+
args.root = args.root.replace(/\/$/, '');
|
|
30
|
+
return args;
|
|
42
31
|
}
|
|
43
32
|
function requireValue(argv, idx, flag) {
|
|
44
33
|
const value = argv[idx];
|
|
@@ -51,198 +40,86 @@ function requireValue(argv, idx, flag) {
|
|
|
51
40
|
function printHelp() {
|
|
52
41
|
console.log(`Usage: bridgething-updater [options]
|
|
53
42
|
|
|
54
|
-
Updates a Car Thing over its network gateway (USB-gadget by default) to
|
|
55
|
-
|
|
43
|
+
Updates a Car Thing over its network gateway (USB-gadget by default) to a release
|
|
44
|
+
on a channel, per the discover manifest.
|
|
56
45
|
|
|
57
46
|
Options:
|
|
58
|
-
--root <url>
|
|
47
|
+
--root <url> Manifest root URL. Default ${DEFAULT_ROOT}.
|
|
59
48
|
--channel <name> Channel to track. Defaults to the channel the device reports.
|
|
60
49
|
--host <ws-url> Daemon network gateway URL. Default ${DEFAULT_HOST}.
|
|
61
|
-
--cache-dir <path> Artifact download cache.
|
|
62
|
-
--
|
|
50
|
+
--cache-dir <path> Artifact download cache. Defaults to a directory under the OS tmpdir.
|
|
51
|
+
--version <ver> Composite version to install. Defaults to the channel's latest.
|
|
63
52
|
`);
|
|
64
53
|
}
|
|
65
54
|
async function main() {
|
|
66
55
|
const args = parseArgs(process.argv.slice(2));
|
|
67
|
-
await mkdir(args.cacheDir, { recursive: true });
|
|
68
56
|
console.log(`connecting to ${args.host} ...`);
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
57
|
+
const client = await DeliveryClient.connect(args.host, {
|
|
58
|
+
appName: 'bridgething-updater',
|
|
59
|
+
cacheDir: args.cacheDir ?? undefined,
|
|
60
|
+
});
|
|
61
|
+
const meta = (await client.meta());
|
|
62
|
+
if (!meta)
|
|
63
|
+
fail('the device connected but never announced its version');
|
|
64
|
+
console.log(`connected: ${meta.modelName} (${client.deviceId()}) - daemon ${meta.appVersion}, image ${meta.imageVersion} (${meta.imageVariant}/${meta.channel})`);
|
|
74
65
|
const channelName = args.channel ?? meta.channel;
|
|
75
66
|
console.log(`fetching manifest from ${args.root} (channel ${channelName}) ...`);
|
|
76
|
-
const manifest = await
|
|
67
|
+
const manifest = (await client.discoverManifest(args.root));
|
|
77
68
|
const channel = manifest.channels[channelName];
|
|
78
|
-
if (!channel)
|
|
79
|
-
fail(`channel '${channelName}' not
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
if (!composite) {
|
|
83
|
-
fail(`channel.latest '${channel.latest}' is not a composite version`);
|
|
84
|
-
}
|
|
85
|
-
const release = manifest.releases[channel.latest];
|
|
69
|
+
if (!channel)
|
|
70
|
+
fail(`channel '${channelName}' is not in the manifest`);
|
|
71
|
+
const version = args.version ?? channel.latest;
|
|
72
|
+
const release = manifest.releases[version];
|
|
86
73
|
if (release && (release.yanked !== null || release.deprecated)) {
|
|
87
|
-
fail(
|
|
74
|
+
fail(`${version} is ${release.yanked !== null ? 'yanked' : 'deprecated'}; refusing to install`);
|
|
88
75
|
}
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
});
|
|
96
|
-
const driver = new OtaDriver(gateway, deviceId);
|
|
97
|
-
let ok = true;
|
|
98
|
-
try {
|
|
99
|
-
if (!args.daemonOnly && meta.imageVersion !== composite.image) {
|
|
100
|
-
ok = await runImagePush(driver, args, urls, `${channelName}-${composite.image}`);
|
|
101
|
-
}
|
|
102
|
-
else if (meta.appVersion !== composite.daemon) {
|
|
103
|
-
ok = await runDaemonPush(driver, args, {
|
|
104
|
-
fullUrl: urls.daemonBinary,
|
|
105
|
-
zstUrl: urls.daemonBinaryZst,
|
|
106
|
-
toVersion: composite.daemon,
|
|
107
|
-
fromVersion: meta.appVersion,
|
|
108
|
-
fromSha256: meta.daemonSha256 ?? null,
|
|
109
|
-
channel: channelName,
|
|
110
|
-
release,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
console.log('already up to date.');
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
finally {
|
|
118
|
-
driver.close();
|
|
76
|
+
const target = parseCompositeVersion(version);
|
|
77
|
+
if (!target)
|
|
78
|
+
fail(`'${version}' is not a composite version`);
|
|
79
|
+
if (meta.appVersion === target.daemon && meta.imageVersion === target.image) {
|
|
80
|
+
console.log('already up to date.');
|
|
81
|
+
process.exit(0);
|
|
119
82
|
}
|
|
120
|
-
|
|
121
|
-
|
|
83
|
+
console.log(`applying ${version} ...`);
|
|
84
|
+
const watching = watch(client);
|
|
85
|
+
await client.applyVersion(channelName, version, args.root);
|
|
86
|
+
process.exit((await watching) ? 0 : 1);
|
|
122
87
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
console.log(`downloading daemon delta ${opts.fromVersion} -> ${opts.toVersion} ...`);
|
|
148
|
-
const patchUrl = daemonPatchUrl({
|
|
149
|
-
rootURL: args.root,
|
|
150
|
-
channel: opts.channel,
|
|
151
|
-
toVersion: opts.toVersion,
|
|
152
|
-
fromVersion: opts.fromVersion,
|
|
153
|
-
});
|
|
154
|
-
const patchPath = await downloadIfNeeded(patchUrl, args.cacheDir, `daemon-${opts.toVersion}-from-${opts.fromVersion}.patch`);
|
|
155
|
-
const patchSource = await fileArtifactSource(patchPath);
|
|
156
|
-
console.log('pushing daemon delta OTA ...');
|
|
157
|
-
const snapshot = await driver.pushDaemon(patchSource, logProgress, {
|
|
158
|
-
algorithm: 'zstdPatchFrom',
|
|
159
|
-
resultSha256: daemonDigest.sha256,
|
|
160
|
-
resultSize: daemonDigest.size,
|
|
161
|
-
sourceSha256: patchDigest.source_sha256 ?? null,
|
|
162
|
-
});
|
|
163
|
-
if (snapshot.phase !== 'failed')
|
|
164
|
-
return reportOutcome(snapshot);
|
|
165
|
-
console.log(`daemon delta failed (${snapshot.reason}); falling back to full binary ...`);
|
|
166
|
-
}
|
|
167
|
-
const zst = artifacts?.daemon_zst;
|
|
168
|
-
if (zst && daemonDigest) {
|
|
169
|
-
console.log(`downloading compressed daemon ${opts.toVersion} ...`);
|
|
170
|
-
const zstPath = await downloadIfNeeded(opts.zstUrl, args.cacheDir, `daemon-${opts.toVersion}.zst`);
|
|
171
|
-
const zstSource = await fileArtifactSource(zstPath);
|
|
172
|
-
console.log('pushing compressed daemon OTA ...');
|
|
173
|
-
const snapshot = await driver.pushDaemon(zstSource, logProgress, {
|
|
174
|
-
algorithm: 'zstd',
|
|
175
|
-
resultSha256: daemonDigest.sha256,
|
|
176
|
-
resultSize: daemonDigest.size,
|
|
177
|
-
sourceSha256: null,
|
|
178
|
-
});
|
|
179
|
-
if (snapshot.phase !== 'failed')
|
|
180
|
-
return reportOutcome(snapshot);
|
|
181
|
-
console.log(`compressed daemon push failed (${snapshot.reason}); falling back to the raw binary ...`);
|
|
182
|
-
}
|
|
183
|
-
console.log(`downloading daemon ${opts.toVersion} ...`);
|
|
184
|
-
const path = await downloadIfNeeded(opts.fullUrl, args.cacheDir, `daemon-${opts.toVersion}`);
|
|
185
|
-
const source = await fileArtifactSource(path);
|
|
186
|
-
console.log('pushing daemon OTA ...');
|
|
187
|
-
const snapshot = await driver.pushDaemon(source, logProgress);
|
|
188
|
-
return reportOutcome(snapshot);
|
|
189
|
-
}
|
|
190
|
-
function logProgress(snapshot) {
|
|
191
|
-
switch (snapshot.phase) {
|
|
192
|
-
case 'streaming':
|
|
193
|
-
console.log(` streaming: ${snapshot.percent}%`);
|
|
194
|
-
break;
|
|
195
|
-
case 'applying':
|
|
196
|
-
console.log(` ${snapshot.otaPhase}: ${snapshot.percent}%`);
|
|
197
|
-
break;
|
|
198
|
-
case 'staged':
|
|
199
|
-
console.log(' staged, activating ...');
|
|
200
|
-
break;
|
|
201
|
-
case 'completed':
|
|
202
|
-
console.log(' completed.');
|
|
203
|
-
break;
|
|
204
|
-
case 'failed':
|
|
205
|
-
console.error(` failed: ${snapshot.reason}`);
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
function reportOutcome(snapshot) {
|
|
210
|
-
if (snapshot.phase === 'failed') {
|
|
211
|
-
console.error(`update failed: ${snapshot.reason}`);
|
|
212
|
-
return false;
|
|
213
|
-
}
|
|
214
|
-
console.log('update finished.');
|
|
215
|
-
return true;
|
|
216
|
-
}
|
|
217
|
-
async function waitForDevice(gateway) {
|
|
218
|
-
return new Promise((resolve, reject) => {
|
|
219
|
-
const timeout = setTimeout(() => {
|
|
220
|
-
unsubscribe();
|
|
221
|
-
reject(new Error(`no device announced itself within ${CONNECT_TIMEOUT_MS / 1000}s`));
|
|
222
|
-
}, CONNECT_TIMEOUT_MS);
|
|
223
|
-
const unsubscribe = gateway.on(event => {
|
|
224
|
-
if (event.type !== 'message')
|
|
225
|
-
return;
|
|
226
|
-
if (event.message.data.type !== 'version')
|
|
227
|
-
return;
|
|
228
|
-
clearTimeout(timeout);
|
|
229
|
-
unsubscribe();
|
|
230
|
-
resolve({ deviceId: event.deviceId, meta: event.message.data.data });
|
|
231
|
-
});
|
|
232
|
-
});
|
|
88
|
+
function watch(client) {
|
|
89
|
+
return (async () => {
|
|
90
|
+
for (;;) {
|
|
91
|
+
const event = await client.nextEvent();
|
|
92
|
+
switch (event.kind) {
|
|
93
|
+
case 'planned':
|
|
94
|
+
console.log(` plan: ${(event.steps ?? []).map(step => step.label).join(' -> ')}`);
|
|
95
|
+
break;
|
|
96
|
+
case 'progress':
|
|
97
|
+
if (event.phase)
|
|
98
|
+
console.log(` ${describe(event.phase)}`);
|
|
99
|
+
break;
|
|
100
|
+
case 'updated':
|
|
101
|
+
console.log(`update finished: ${event.version ?? ''}`.trimEnd());
|
|
102
|
+
return true;
|
|
103
|
+
case 'failed':
|
|
104
|
+
console.error(`update failed: ${event.reason ?? 'no reason given'}`);
|
|
105
|
+
return false;
|
|
106
|
+
case 'lagged':
|
|
107
|
+
console.log(' (progress entries were dropped)');
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
})();
|
|
233
112
|
}
|
|
234
|
-
|
|
235
|
-
const
|
|
236
|
-
const
|
|
237
|
-
if (
|
|
238
|
-
return
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
await writeFile(target, bytes);
|
|
245
|
-
return target;
|
|
113
|
+
function describe(phase) {
|
|
114
|
+
const head = [phase.kind, phase.asset].filter(Boolean).join(' ');
|
|
115
|
+
const done = phase.received ?? phase.sent;
|
|
116
|
+
if (done !== undefined && phase.total)
|
|
117
|
+
return `${head} ${Math.floor((done * 100) / phase.total)}%`;
|
|
118
|
+
if (phase.writePercent !== undefined)
|
|
119
|
+
return `${head} ${phase.writePercent}%`;
|
|
120
|
+
if (phase.reason)
|
|
121
|
+
return `${head}: ${phase.reason}`;
|
|
122
|
+
return head;
|
|
246
123
|
}
|
|
247
124
|
function fail(message) {
|
|
248
125
|
console.error(message);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bridgething/updater",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"description": "Update a Spotify Car Thing from the command line, over its network gateway.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Joey Eamigh <55670930+JoeyEamigh@users.noreply.github.com> (https://github.com/JoeyEamigh)",
|
|
7
7
|
"homepage": "https://bridgething.com",
|
|
@@ -19,45 +19,20 @@
|
|
|
19
19
|
"registry": "https://registry.npmjs.org/"
|
|
20
20
|
},
|
|
21
21
|
"type": "module",
|
|
22
|
-
"types": "./dist/index.d.ts",
|
|
23
22
|
"bin": {
|
|
24
23
|
"bridgething-updater": "./dist/cli.js"
|
|
25
24
|
},
|
|
26
|
-
"exports": {
|
|
27
|
-
".": {
|
|
28
|
-
"types": "./dist/index.d.ts",
|
|
29
|
-
"default": "./dist/index.js"
|
|
30
|
-
},
|
|
31
|
-
"./manifest": {
|
|
32
|
-
"types": "./dist/manifest.d.ts",
|
|
33
|
-
"default": "./dist/manifest.js"
|
|
34
|
-
},
|
|
35
|
-
"./node": {
|
|
36
|
-
"types": "./dist/node.d.ts",
|
|
37
|
-
"default": "./dist/node.js"
|
|
38
|
-
},
|
|
39
|
-
"./websocket": {
|
|
40
|
-
"types": "./dist/websocket.d.ts",
|
|
41
|
-
"default": "./dist/websocket.js"
|
|
42
|
-
},
|
|
43
|
-
"./web-serial": {
|
|
44
|
-
"types": "./dist/web-serial.d.ts",
|
|
45
|
-
"default": "./dist/web-serial.js"
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
25
|
"files": ["dist"],
|
|
49
26
|
"scripts": {
|
|
50
27
|
"prebuild": "rm -rf dist",
|
|
51
28
|
"build": "tsc -p tsconfig.build.json && chmod +x dist/cli.js",
|
|
52
29
|
"dev": "tsc -p tsconfig.build.json --watch",
|
|
53
30
|
"typecheck": "tsc --noEmit",
|
|
54
|
-
"lint": "eslint ."
|
|
55
|
-
"test": "bun test"
|
|
31
|
+
"lint": "eslint ."
|
|
56
32
|
},
|
|
57
33
|
"dependencies": {
|
|
58
|
-
"@bridgething/
|
|
59
|
-
"@bridgething/
|
|
60
|
-
"@bridgething/lib": "0.8.0"
|
|
34
|
+
"@bridgething/core-node": "0.9.0",
|
|
35
|
+
"@bridgething/lib": "0.9.0"
|
|
61
36
|
},
|
|
62
37
|
"peerDependencies": {
|
|
63
38
|
"typescript": "^6.0.3"
|
package/dist/ack-window.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sender-side flow control, ported from `host-gateway`'s `AckWindow`/`AckRegistry`
|
|
3
|
-
* (`crates/host-gateway/src/transfer.rs`): the daemon acks the byte offset it has durably
|
|
4
|
-
* consumed, and the streamer holds no more than `OTA_WINDOW_BYTES` past that. Acks are absolute
|
|
5
|
-
* file offsets, so the baseline seeds to the resume point.
|
|
6
|
-
*
|
|
7
|
-
* The Rust version uses an atomic + `Notify` with `notify_one` specifically to avoid a lost
|
|
8
|
-
* wakeup between a waiter's recheck and its `await`. That race doesn't exist here: JS is
|
|
9
|
-
* single-threaded, so a synchronous "check the ack, then register a listener" pair can't be
|
|
10
|
-
* interleaved by another callback - there's no gap for a `note()` to land in.
|
|
11
|
-
*/
|
|
12
|
-
export type AckWindowOptions = {
|
|
13
|
-
windowBytes?: number;
|
|
14
|
-
ackTimeoutMs?: number;
|
|
15
|
-
};
|
|
16
|
-
export declare class AckWindow {
|
|
17
|
-
private acked;
|
|
18
|
-
private waiters;
|
|
19
|
-
private readonly windowBytes;
|
|
20
|
-
private readonly ackTimeoutMs;
|
|
21
|
-
constructor(baseline: number, options?: AckWindowOptions);
|
|
22
|
-
note(received: number): void;
|
|
23
|
-
get ackedBytes(): number;
|
|
24
|
-
waitForRoom(offset: number): Promise<boolean>;
|
|
25
|
-
private waitForProgress;
|
|
26
|
-
}
|
|
27
|
-
export declare class AckRegistry {
|
|
28
|
-
private readonly windowOptions;
|
|
29
|
-
private readonly windows;
|
|
30
|
-
constructor(windowOptions?: AckWindowOptions);
|
|
31
|
-
register(transferId: string, baseline: number): AckWindow;
|
|
32
|
-
deregister(transferId: string): void;
|
|
33
|
-
note(transferId: string, received: number): void;
|
|
34
|
-
}
|
|
35
|
-
export declare class TransferStalledError extends Error {
|
|
36
|
-
constructor(offset: number, totalSize: number);
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=ack-window.d.ts.map
|
package/dist/ack-window.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ack-window.d.ts","sourceRoot":"","sources":["../src/ack-window.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAM5D,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ5B,IAAI,UAAU,IAAI,MAAM,CAEvB;IAEK,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD,OAAO,CAAC,eAAe;CAgBxB;AAED,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;gBAE3B,aAAa,GAAE,gBAAqB;IAEjE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;IAMzD,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIpC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAGjD;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAI9C"}
|