@intentic/machine 1.337.0 → 1.339.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 +105 -1
- package/dist/agent-trial.d.ts.map +1 -1
- package/dist/agent-trial.js +5 -15
- package/dist/agent-trial.js.map +1 -1
- package/dist/autostart/autostart.d.ts +2 -0
- package/dist/autostart/autostart.d.ts.map +1 -1
- package/dist/autostart/autostart.js +20 -0
- package/dist/autostart/autostart.js.map +1 -1
- package/dist/autostart/before-sign-in.d.ts +12 -0
- package/dist/autostart/before-sign-in.d.ts.map +1 -0
- package/dist/autostart/before-sign-in.js +103 -0
- package/dist/autostart/before-sign-in.js.map +1 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +10 -1
- package/dist/commands.js.map +1 -1
- package/dist/daemon-base.d.ts.map +1 -1
- package/dist/daemon-base.js +2 -1
- package/dist/daemon-base.js.map +1 -1
- package/dist/device/commands.js +1 -1
- package/dist/device/commands.js.map +1 -1
- package/dist/device/config.d.ts +1 -1
- package/dist/device/config.d.ts.map +1 -1
- package/dist/device/config.js +3 -7
- package/dist/device/config.js.map +1 -1
- package/dist/device/connection.d.ts.map +1 -1
- package/dist/device/connection.js +1 -1
- package/dist/device/connection.js.map +1 -1
- package/dist/device/grant.d.ts +226 -1
- package/dist/device/grant.d.ts.map +1 -1
- package/dist/device/grant.js +2 -1
- package/dist/device/grant.js.map +1 -1
- package/dist/device/loopback-catch.d.ts +1 -1
- package/dist/device/loopback-catch.d.ts.map +1 -1
- package/dist/device/loopback-catch.js +1 -1
- package/dist/device/loopback-catch.js.map +1 -1
- package/dist/device/mcp.d.ts +2 -0
- package/dist/device/mcp.d.ts.map +1 -1
- package/dist/device/mcp.js +28 -17
- package/dist/device/mcp.js.map +1 -1
- package/dist/device/policy.d.ts +1 -1
- package/dist/device/policy.d.ts.map +1 -1
- package/dist/device/router.d.ts +227 -1
- package/dist/device/router.d.ts.map +1 -1
- package/dist/device/router.js +11 -0
- package/dist/device/router.js.map +1 -1
- package/dist/device/sandbox-rounds/auto-backup.d.ts +1 -1
- package/dist/device/sandbox-rounds/auto-backup.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/auto-backup.js +3 -18
- package/dist/device/sandbox-rounds/auto-backup.js.map +1 -1
- package/dist/device/sandbox-rounds/auto-prepare.d.ts +1 -1
- package/dist/device/sandbox-rounds/auto-prepare.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/ic-swaps.d.ts +1 -1
- package/dist/device/sandbox-rounds/ic-swaps.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/ic-swaps.js +3 -8
- package/dist/device/sandbox-rounds/ic-swaps.js.map +1 -1
- package/dist/device/sandbox-rounds/keeper.d.ts +1 -1
- package/dist/device/sandbox-rounds/keeper.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/keeper.js +2 -9
- package/dist/device/sandbox-rounds/keeper.js.map +1 -1
- package/dist/device/sandbox-rounds/probation-watch.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/probation-watch.js +2 -9
- package/dist/device/sandbox-rounds/probation-watch.js.map +1 -1
- package/dist/device/sandbox-rounds/sleep.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/sleep.js +3 -7
- package/dist/device/sandbox-rounds/sleep.js.map +1 -1
- package/dist/device/sandbox-rounds/swaps-fallback.d.ts +1 -1
- package/dist/device/sandbox-rounds/swaps-fallback.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/swaps-fallback.js +3 -2
- package/dist/device/sandbox-rounds/swaps-fallback.js.map +1 -1
- package/dist/device/session.d.ts +5 -0
- package/dist/device/session.d.ts.map +1 -0
- package/dist/device/session.js +13 -0
- package/dist/device/session.js.map +1 -0
- package/dist/device/tools/agent.d.ts +1 -1
- package/dist/device/tools/agent.d.ts.map +1 -1
- package/dist/device/tools/agent.js +2 -2
- package/dist/device/tools/agent.js.map +1 -1
- package/dist/device/tools/android-parse.d.ts +4 -0
- package/dist/device/tools/android-parse.d.ts.map +1 -1
- package/dist/device/tools/android-parse.js +12 -3
- package/dist/device/tools/android-parse.js.map +1 -1
- package/dist/device/tools/android.d.ts +1 -1
- package/dist/device/tools/android.d.ts.map +1 -1
- package/dist/device/tools/android.js +71 -14
- package/dist/device/tools/android.js.map +1 -1
- package/dist/device/tools/apps.d.ts +1 -1
- package/dist/device/tools/apps.d.ts.map +1 -1
- package/dist/device/tools/browser.d.ts +1 -1
- package/dist/device/tools/browser.d.ts.map +1 -1
- package/dist/device/tools/command-ledger.d.ts.map +1 -1
- package/dist/device/tools/command-ledger.js +3 -11
- package/dist/device/tools/command-ledger.js.map +1 -1
- package/dist/device/tools/describe.d.ts +2 -1
- package/dist/device/tools/describe.d.ts.map +1 -1
- package/dist/device/tools/describe.js +13 -3
- package/dist/device/tools/describe.js.map +1 -1
- package/dist/device/tools/device.d.ts +1 -1
- package/dist/device/tools/device.d.ts.map +1 -1
- package/dist/device/tools/device.js +1 -1
- package/dist/device/tools/device.js.map +1 -1
- package/dist/device/tools/elements.d.ts +1 -1
- package/dist/device/tools/elements.d.ts.map +1 -1
- package/dist/device/tools/files.d.ts +1 -1
- package/dist/device/tools/files.d.ts.map +1 -1
- package/dist/device/tools/ic-binary.d.ts +3 -1
- package/dist/device/tools/ic-binary.d.ts.map +1 -1
- package/dist/device/tools/ic-binary.js +14 -7
- package/dist/device/tools/ic-binary.js.map +1 -1
- package/dist/device/tools/logs/logs.d.ts +1 -1
- package/dist/device/tools/logs/logs.d.ts.map +1 -1
- package/dist/device/tools/logs/logs.js +5 -11
- package/dist/device/tools/logs/logs.js.map +1 -1
- package/dist/device/tools/os/os.d.ts +10 -2
- package/dist/device/tools/os/os.d.ts.map +1 -1
- package/dist/device/tools/os/os.js +10 -14
- package/dist/device/tools/os/os.js.map +1 -1
- package/dist/device/tools/os/settings.d.ts +35 -0
- package/dist/device/tools/os/settings.d.ts.map +1 -0
- package/dist/device/tools/os/settings.js +357 -0
- package/dist/device/tools/os/settings.js.map +1 -0
- package/dist/device/tools/programs/artifacts.d.ts +2 -1
- package/dist/device/tools/programs/artifacts.d.ts.map +1 -1
- package/dist/device/tools/programs/artifacts.js.map +1 -1
- package/dist/device/tools/programs/device-tunnel.d.ts +2 -1
- package/dist/device/tools/programs/device-tunnel.d.ts.map +1 -1
- package/dist/device/tools/programs/device-tunnel.js.map +1 -1
- package/dist/device/tools/programs/programs.d.ts +1 -1
- package/dist/device/tools/programs/programs.d.ts.map +1 -1
- package/dist/device/tools/programs/programs.js +7 -11
- package/dist/device/tools/programs/programs.js.map +1 -1
- package/dist/device/tools/sandboxes.d.ts +5 -3
- package/dist/device/tools/sandboxes.d.ts.map +1 -1
- package/dist/device/tools/sandboxes.js +8 -4
- package/dist/device/tools/sandboxes.js.map +1 -1
- package/dist/device/tools/shell.d.ts +5 -1
- package/dist/device/tools/shell.d.ts.map +1 -1
- package/dist/device/tools/shell.js +10 -3
- package/dist/device/tools/shell.js.map +1 -1
- package/dist/engine-env.d.ts.map +1 -1
- package/dist/engine-env.js +2 -7
- package/dist/engine-env.js.map +1 -1
- package/dist/environments/auto-upgrade.d.ts +1 -1
- package/dist/environments/auto-upgrade.d.ts.map +1 -1
- package/dist/environments/auto-upgrade.js +1 -1
- package/dist/environments/auto-upgrade.js.map +1 -1
- package/dist/environments/crossing.js +1 -1
- package/dist/environments/crossing.js.map +1 -1
- package/dist/environments/machine-upgrade.js +1 -1
- package/dist/environments/machine-upgrade.js.map +1 -1
- package/dist/environments/machine.d.ts +1 -0
- package/dist/environments/machine.d.ts.map +1 -1
- package/dist/environments/machine.js +14 -4
- package/dist/environments/machine.js.map +1 -1
- package/dist/environments/wsl.js +4 -5
- package/dist/environments/wsl.js.map +1 -1
- package/dist/install.d.ts +2 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +11 -22
- package/dist/install.js.map +1 -1
- package/dist/keyring/answer.d.ts +18 -0
- package/dist/keyring/answer.d.ts.map +1 -0
- package/dist/keyring/answer.js +46 -0
- package/dist/keyring/answer.js.map +1 -0
- package/dist/keyring/askpass.d.ts +31 -0
- package/dist/keyring/askpass.d.ts.map +1 -0
- package/dist/keyring/askpass.js +120 -0
- package/dist/keyring/askpass.js.map +1 -0
- package/dist/keyring/commands.d.ts +24 -0
- package/dist/keyring/commands.d.ts.map +1 -0
- package/dist/keyring/commands.js +384 -0
- package/dist/keyring/commands.js.map +1 -0
- package/dist/keyring/feature.d.ts +10 -0
- package/dist/keyring/feature.d.ts.map +1 -0
- package/dist/keyring/feature.js +36 -0
- package/dist/keyring/feature.js.map +1 -0
- package/dist/keyring/flags.d.ts +63 -0
- package/dist/keyring/flags.d.ts.map +1 -0
- package/dist/keyring/flags.js +177 -0
- package/dist/keyring/flags.js.map +1 -0
- package/dist/keyring/keyring-status.d.ts +32 -0
- package/dist/keyring/keyring-status.d.ts.map +1 -0
- package/dist/keyring/keyring-status.js +41 -0
- package/dist/keyring/keyring-status.js.map +1 -0
- package/dist/keyring/relay.d.ts +22 -0
- package/dist/keyring/relay.d.ts.map +1 -0
- package/dist/keyring/relay.js +104 -0
- package/dist/keyring/relay.js.map +1 -0
- package/dist/keyring/secret-input.d.ts +14 -0
- package/dist/keyring/secret-input.d.ts.map +1 -0
- package/dist/keyring/secret-input.js +78 -0
- package/dist/keyring/secret-input.js.map +1 -0
- package/dist/keyring/service.d.ts +44 -0
- package/dist/keyring/service.d.ts.map +1 -0
- package/dist/keyring/service.js +258 -0
- package/dist/keyring/service.js.map +1 -0
- package/dist/machine-id.d.ts.map +1 -1
- package/dist/machine-id.js +4 -5
- package/dist/machine-id.js.map +1 -1
- package/dist/release/release-signature.d.ts +17 -0
- package/dist/release/release-signature.d.ts.map +1 -0
- package/dist/release/release-signature.js +78 -0
- package/dist/release/release-signature.js.map +1 -0
- package/dist/release/release-verify.d.ts +11 -0
- package/dist/release/release-verify.d.ts.map +1 -0
- package/dist/release/release-verify.js +74 -0
- package/dist/release/release-verify.js.map +1 -0
- package/dist/release.d.ts +6 -0
- package/dist/release.d.ts.map +1 -1
- package/dist/release.js +8 -2
- package/dist/release.js.map +1 -1
- package/dist/resident/handover.d.ts +19 -0
- package/dist/resident/handover.d.ts.map +1 -0
- package/dist/resident/handover.js +32 -0
- package/dist/resident/handover.js.map +1 -0
- package/dist/resident/last-exit.d.ts.map +1 -1
- package/dist/resident/last-exit.js +6 -23
- package/dist/resident/last-exit.js.map +1 -1
- package/dist/resident/resident.d.ts +4 -1
- package/dist/resident/resident.d.ts.map +1 -1
- package/dist/resident/resident.js +82 -20
- package/dist/resident/resident.js.map +1 -1
- package/dist/status.d.ts +4 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +9 -2
- package/dist/status.js.map +1 -1
- package/dist/sync/attach-commands.js +1 -1
- package/dist/sync/attach-commands.js.map +1 -1
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +4 -1
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/config.d.ts +2 -1
- package/dist/sync/config.d.ts.map +1 -1
- package/dist/sync/config.js +1 -1
- package/dist/sync/config.js.map +1 -1
- package/dist/sync/docker-ports.d.ts.map +1 -1
- package/dist/sync/docker-ports.js +2 -8
- package/dist/sync/docker-ports.js.map +1 -1
- package/dist/sync/environment.d.ts.map +1 -1
- package/dist/sync/environment.js +3 -10
- package/dist/sync/environment.js.map +1 -1
- package/dist/sync/forget-command.d.ts.map +1 -1
- package/dist/sync/forget-command.js +2 -6
- package/dist/sync/forget-command.js.map +1 -1
- package/dist/sync/gone.js +1 -1
- package/dist/sync/gone.js.map +1 -1
- package/dist/sync/mirror.d.ts +1 -1
- package/dist/sync/mirror.d.ts.map +1 -1
- package/dist/sync/mirror.js +3 -3
- package/dist/sync/mirror.js.map +1 -1
- package/dist/sync/mutagen.d.ts +1 -2
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +4 -6
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/project/project-delivery.d.ts +1 -1
- package/dist/sync/project/project-delivery.d.ts.map +1 -1
- package/dist/sync/project/project-delivery.js +1 -1
- package/dist/sync/project/project-delivery.js.map +1 -1
- package/dist/sync/project/project-files.d.ts +1 -1
- package/dist/sync/project/project-files.d.ts.map +1 -1
- package/dist/sync/project/project-local.d.ts.map +1 -1
- package/dist/sync/project/project-local.js +2 -8
- package/dist/sync/project/project-local.js.map +1 -1
- package/dist/sync/project/project-remote.d.ts.map +1 -1
- package/dist/sync/project/project-remote.js +2 -8
- package/dist/sync/project/project-remote.js.map +1 -1
- package/dist/sync/project/project-transfer.d.ts +1 -1
- package/dist/sync/project/project-transfer.d.ts.map +1 -1
- package/dist/sync/report.d.ts +1 -1
- package/dist/sync/report.d.ts.map +1 -1
- package/dist/sync/report.js +2 -2
- package/dist/sync/report.js.map +1 -1
- package/dist/sync/residue.d.ts +1 -1
- package/dist/sync/residue.d.ts.map +1 -1
- package/dist/sync/residue.js +1 -1
- package/dist/sync/residue.js.map +1 -1
- package/dist/sync/restore-points.d.ts.map +1 -1
- package/dist/sync/restore-points.js +2 -8
- package/dist/sync/restore-points.js.map +1 -1
- package/dist/sync/siblings.d.ts.map +1 -1
- package/dist/sync/siblings.js +4 -10
- package/dist/sync/siblings.js.map +1 -1
- package/dist/sync/ssh.d.ts.map +1 -1
- package/dist/sync/ssh.js +4 -3
- package/dist/sync/ssh.js.map +1 -1
- package/dist/sync/swap-pause.js +1 -1
- package/dist/sync/swap-pause.js.map +1 -1
- package/dist/upgrade.d.ts +2 -0
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +36 -4
- package/dist/upgrade.js.map +1 -1
- package/dist/upkeep/doctor.d.ts.map +1 -1
- package/dist/upkeep/doctor.js +4 -1
- package/dist/upkeep/doctor.js.map +1 -1
- package/dist/upkeep/login.d.ts +0 -1
- package/dist/upkeep/login.d.ts.map +1 -1
- package/dist/upkeep/login.js +4 -18
- package/dist/upkeep/login.js.map +1 -1
- package/dist/upkeep/reconcile.d.ts +1 -1
- package/dist/upkeep/reconcile.d.ts.map +1 -1
- package/dist/upkeep/reconcile.js +4 -15
- package/dist/upkeep/reconcile.js.map +1 -1
- package/dist/upkeep/retention.d.ts.map +1 -1
- package/dist/upkeep/retention.js +13 -17
- package/dist/upkeep/retention.js.map +1 -1
- package/dist/upkeep/trash.d.ts.map +1 -1
- package/dist/upkeep/trash.js +2 -1
- package/dist/upkeep/trash.js.map +1 -1
- package/dist/windows-registry.d.ts +8 -0
- package/dist/windows-registry.d.ts.map +1 -0
- package/dist/windows-registry.js +44 -0
- package/dist/windows-registry.js.map +1 -0
- package/package.json +9 -8
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { chmod, copyFile, link, readdir, rename, rm } from "node:fs/promises";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
4
|
+
import { pollUntil } from "@intentic/base/async";
|
|
5
|
+
import { repoRoot } from "@intentic/constants/node";
|
|
6
|
+
import { errorMessage } from "@intentic/base/errors";
|
|
7
|
+
import { renameOver } from "@intentic/base/fs";
|
|
8
|
+
import { runBounded } from "@intentic/base/process";
|
|
9
|
+
import { askKeyring, currentSid, isHardened, keyringPaths, KeyringUnavailable, realRunner } from "@intentic/keyring";
|
|
10
|
+
import { autostart, explain, livePid, spawnDetached, stopProcess } from "@intentic/local-agent";
|
|
11
|
+
import { DEV_VERSION } from "@intentic/sandbox-contract/state/versions";
|
|
12
|
+
import { KEYRING_AUTOSTART, KEYRING_SESSION_AUTOSTART } from "../autostart/autostart.js";
|
|
13
|
+
import { binDir } from "../config.js";
|
|
14
|
+
import { askpassPath, download, keyringAssetName, keyringPath, releaseAssetUrl, renameIfPresent } from "../release.js";
|
|
15
|
+
import { verifyReleaseFiles } from "../release/release-verify.js";
|
|
16
|
+
import { KeyringCliError } from "./flags.js";
|
|
17
|
+
const KEYRING_LAUNCHER = [keyringPath];
|
|
18
|
+
const STATE_TIMEOUT_MS = 1_500;
|
|
19
|
+
const START_TIMEOUT_MS = 20_000;
|
|
20
|
+
const START_POLL_MS = 300;
|
|
21
|
+
const STOP_TIMEOUT_MS = 5_000;
|
|
22
|
+
const ELEVATED_TIMEOUT_MS = 10 * 60_000;
|
|
23
|
+
export const keyringInstalled = () => existsSync(keyringPath);
|
|
24
|
+
export const keyringState = async (timeoutMs = STATE_TIMEOUT_MS) => {
|
|
25
|
+
try {
|
|
26
|
+
return await askKeyring({ address: keyringPaths().address, timeoutMs }, { op: "state" });
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error instanceof KeyringUnavailable) {
|
|
30
|
+
return error;
|
|
31
|
+
}
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const waitForKeyring = async () => {
|
|
36
|
+
let answer;
|
|
37
|
+
await pollUntil(async () => {
|
|
38
|
+
const state = await keyringState();
|
|
39
|
+
answer = state instanceof KeyringUnavailable ? undefined : state;
|
|
40
|
+
return answer !== undefined;
|
|
41
|
+
}, { intervalMs: START_POLL_MS, timeoutMs: START_TIMEOUT_MS });
|
|
42
|
+
return answer;
|
|
43
|
+
};
|
|
44
|
+
export const localKeyringBuild = (from = import.meta.url) => {
|
|
45
|
+
let root;
|
|
46
|
+
try {
|
|
47
|
+
root = repoRoot(from);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const candidate = join(root, "_devices", "keyring", "dist-bin", keyringAssetName());
|
|
53
|
+
return existsSync(candidate) ? candidate : undefined;
|
|
54
|
+
};
|
|
55
|
+
const stagingOf = (version) => `${keyringPath}.new-${version}`;
|
|
56
|
+
const sweepStaged = async (keep) => {
|
|
57
|
+
const prefix = `${basename(keyringPath)}.new-`;
|
|
58
|
+
const stale = (await readdir(binDir).catch(() => [])).filter((name) => name.startsWith(prefix) && join(binDir, name) !== keep);
|
|
59
|
+
await Promise.all(stale.map(async (name) => await rm(join(binDir, name), { force: true }).catch(() => undefined)));
|
|
60
|
+
};
|
|
61
|
+
export const stageKeyring = async (version, log) => {
|
|
62
|
+
const staged = stagingOf(version);
|
|
63
|
+
if (version === DEV_VERSION) {
|
|
64
|
+
const local = localKeyringBuild();
|
|
65
|
+
if (local === undefined) {
|
|
66
|
+
throw new KeyringCliError("failed", explain("There is no keyring to install.", "this intentic-machine was built from source (0.0.0), which has no release to download the keyring from, and _devices/keyring/dist-bin holds no build for this computer.", `build one with \`bash _tools/scripts/build/build-agent-binaries.sh _devices/keyring intentic-keyring <target>\` (the asset ${keyringAssetName()}), then run this again.`));
|
|
67
|
+
}
|
|
68
|
+
log(`Using the keyring built in this checkout (${local}): a from-source agent has no release to take it from.`);
|
|
69
|
+
await copyFile(local, staged);
|
|
70
|
+
await chmod(staged, 0o755);
|
|
71
|
+
return staged;
|
|
72
|
+
}
|
|
73
|
+
await sweepStaged(staged);
|
|
74
|
+
log(`Downloading intentic-keyring ${version}…`);
|
|
75
|
+
try {
|
|
76
|
+
await download(releaseAssetUrl(version, keyringAssetName()), staged, { resume: true });
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw new KeyringCliError("failed", `the keyring of v${version} did not download (${errorMessage(error)}). A release from before the keyring shipped has none: \`intentic-machine upgrade\` first.`, { cause: error });
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
await verifyReleaseFiles(version, [{ name: keyringAssetName(), path: staged }]);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
await rm(staged, { force: true }).catch(() => undefined);
|
|
86
|
+
throw new KeyringCliError("failed", `the downloaded keyring did not check out (${errorMessage(error)}), so it was deleted.`, { cause: error });
|
|
87
|
+
}
|
|
88
|
+
log("Checked against the release's signed SHA256SUMS.");
|
|
89
|
+
await chmod(staged, 0o755);
|
|
90
|
+
return staged;
|
|
91
|
+
};
|
|
92
|
+
export const linkAskpass = async () => {
|
|
93
|
+
await rm(askpassPath, { force: true }).catch(async () => await renameIfPresent(askpassPath, `${askpassPath}.old`));
|
|
94
|
+
try {
|
|
95
|
+
await link(keyringPath, askpassPath);
|
|
96
|
+
return "linked";
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
await copyFile(keyringPath, askpassPath);
|
|
100
|
+
await chmod(askpassPath, 0o755);
|
|
101
|
+
return "copied";
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
export const KEYRING_SERVICE = "IntenticKeyring";
|
|
105
|
+
export const hardenedHere = async () => {
|
|
106
|
+
if (process.platform !== "win32") {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
return isHardened(await currentSid(realRunner));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const psQuoted = (text) => `'${text.replaceAll("'", "''")}'`;
|
|
117
|
+
const runElevated = async (args) => {
|
|
118
|
+
const script = `$p = Start-Process -FilePath ${psQuoted(keyringPath)} -ArgumentList ${args.map(psQuoted).join(",")} -Verb RunAs -Wait -PassThru; exit $p.ExitCode`;
|
|
119
|
+
const result = await runBounded("powershell.exe", ["-NoProfile", "-Command", script], { timeoutMs: ELEVATED_TIMEOUT_MS });
|
|
120
|
+
if (result.spawnError !== undefined) {
|
|
121
|
+
throw result.spawnError;
|
|
122
|
+
}
|
|
123
|
+
if (result.exitCode !== 0) {
|
|
124
|
+
const said = result.stderr.text.trim();
|
|
125
|
+
throw new KeyringCliError(/canceled by the user/iu.test(said) ? "declined" : "failed", /canceled by the user/iu.test(said)
|
|
126
|
+
? "Windows asked for an administrator's yes, and it was not given: nothing was changed."
|
|
127
|
+
: `\`intentic-keyring ${args.join(" ")}\` did not finish (exit ${String(result.exitCode)})${said === "" ? "" : `: ${said}`}. Its log is ${keyringPaths().log}.`);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const entryFor = (hardened, log) => autostart(hardened ? KEYRING_SESSION_AUTOSTART : KEYRING_AUTOSTART, KEYRING_LAUNCHER, log);
|
|
131
|
+
export const keyringPid = async () => await livePid(keyringPaths().pid);
|
|
132
|
+
export const startKeyring = async (log) => {
|
|
133
|
+
const hardened = await hardenedHere();
|
|
134
|
+
const spec = hardened ? KEYRING_SESSION_AUTOSTART : KEYRING_AUTOSTART;
|
|
135
|
+
const entry = entryFor(hardened, log);
|
|
136
|
+
const kind = await entry.register();
|
|
137
|
+
const running = await keyringState();
|
|
138
|
+
if (!(running instanceof KeyringUnavailable)) {
|
|
139
|
+
return { autostart: kind, state: running };
|
|
140
|
+
}
|
|
141
|
+
if (await entry.start()) {
|
|
142
|
+
const came = await waitForKeyring();
|
|
143
|
+
if (came !== undefined) {
|
|
144
|
+
return { autostart: kind, state: came };
|
|
145
|
+
}
|
|
146
|
+
log(`Its ${kind} entry did not start the keyring within ${START_TIMEOUT_MS / 1000} s: starting it directly.`);
|
|
147
|
+
}
|
|
148
|
+
await spawnDetached(spec.logPath, KEYRING_LAUNCHER, spec.foregroundArgs);
|
|
149
|
+
const came = await waitForKeyring();
|
|
150
|
+
if (came === undefined) {
|
|
151
|
+
throw new KeyringCliError("no-keyring", `The keyring started but its pipe did not answer within ${START_TIMEOUT_MS / 1000} s. Its log is ${spec.logPath}.`);
|
|
152
|
+
}
|
|
153
|
+
return { autostart: kind, state: came };
|
|
154
|
+
};
|
|
155
|
+
export const stopKeyring = async () => {
|
|
156
|
+
const pid = await keyringPid();
|
|
157
|
+
if (pid !== undefined) {
|
|
158
|
+
await stopProcess(pid, STOP_TIMEOUT_MS);
|
|
159
|
+
}
|
|
160
|
+
return pid;
|
|
161
|
+
};
|
|
162
|
+
export const installKeyring = async (version, log) => {
|
|
163
|
+
if (keyringInstalled()) {
|
|
164
|
+
return { path: keyringPath, fresh: false, askpass: await linkAskpass() };
|
|
165
|
+
}
|
|
166
|
+
const staged = await stageKeyring(version, log);
|
|
167
|
+
await renameOver(staged, keyringPath);
|
|
168
|
+
return { path: keyringPath, fresh: true, askpass: await linkAskpass() };
|
|
169
|
+
};
|
|
170
|
+
const previousOf = (path) => `${path}.previous`;
|
|
171
|
+
export const upgradeKeyring = async (version, log) => {
|
|
172
|
+
if (!keyringInstalled()) {
|
|
173
|
+
throw new KeyringCliError("no-keyring", "No keyring is installed on this computer: `intentic-machine keyring setup` installs one.");
|
|
174
|
+
}
|
|
175
|
+
const before = await keyringState();
|
|
176
|
+
if (before instanceof KeyringUnavailable) {
|
|
177
|
+
throw new KeyringCliError("no-keyring", "The keyring is not running, and only a running keyring can ask you about an upgrade: `intentic-machine keyring setup` starts it.");
|
|
178
|
+
}
|
|
179
|
+
const from = before.ok ? before.state.version : "unknown";
|
|
180
|
+
if (from === version && version !== DEV_VERSION) {
|
|
181
|
+
return { ok: true, upgraded: false, from, to: version };
|
|
182
|
+
}
|
|
183
|
+
const staged = await stageKeyring(version, log);
|
|
184
|
+
log("Asking the keyring, which asks you, before anything is replaced…");
|
|
185
|
+
const consent = await askKeyring({ address: keyringPaths().address }, { op: "consent-upgrade", version });
|
|
186
|
+
if (!consent.ok) {
|
|
187
|
+
await rm(staged, { force: true }).catch(() => undefined);
|
|
188
|
+
return consent;
|
|
189
|
+
}
|
|
190
|
+
await stopKeyring();
|
|
191
|
+
await rm(previousOf(keyringPath), { force: true });
|
|
192
|
+
await renameIfPresent(keyringPath, previousOf(keyringPath));
|
|
193
|
+
await renameOver(staged, keyringPath);
|
|
194
|
+
await linkAskpass();
|
|
195
|
+
if (await hardenedHere()) {
|
|
196
|
+
log("Windows asks for an administrator's yes to put the new keyring in place for the hardened service…");
|
|
197
|
+
await runElevated(["service", "install"]);
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
const { state } = await startKeyring(log);
|
|
201
|
+
const to = state.ok ? state.state.version : version;
|
|
202
|
+
return { ok: true, upgraded: true, from, to };
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
log(`The new keyring did not answer (${errorMessage(error)}): putting the one before it back.`);
|
|
206
|
+
await stopKeyring();
|
|
207
|
+
await renameOver(previousOf(keyringPath), keyringPath);
|
|
208
|
+
await linkAskpass();
|
|
209
|
+
await startKeyring(log);
|
|
210
|
+
throw new KeyringCliError("failed", `The keyring ${version} did not start, so ${from} was put back and is running again.`, { cause: error });
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
export const hardenKeyring = async (log) => {
|
|
214
|
+
if (process.platform !== "win32") {
|
|
215
|
+
throw new KeyringCliError("unavailable", "Hardened mode is Windows-only: it moves the vault under a Windows service account the agent's own commands cannot read. Elsewhere the keyring runs as your user.");
|
|
216
|
+
}
|
|
217
|
+
if (!keyringInstalled()) {
|
|
218
|
+
throw new KeyringCliError("no-keyring", "No keyring is installed on this computer: `intentic-machine keyring setup` installs one first.");
|
|
219
|
+
}
|
|
220
|
+
await stopKeyring();
|
|
221
|
+
await entryFor(false, log).unregister();
|
|
222
|
+
log("Windows asks for an administrator's yes, once, to move the vault under the hardened keyring…");
|
|
223
|
+
await runElevated(["service", "install"]);
|
|
224
|
+
const entry = entryFor(true, log);
|
|
225
|
+
const kind = await entry.register();
|
|
226
|
+
if (!(await entry.start())) {
|
|
227
|
+
await spawnDetached(KEYRING_SESSION_AUTOSTART.logPath, KEYRING_LAUNCHER, KEYRING_SESSION_AUTOSTART.foregroundArgs);
|
|
228
|
+
}
|
|
229
|
+
if ((await waitForKeyring()) === undefined) {
|
|
230
|
+
throw new KeyringCliError("no-keyring", `The service was installed, but the keyring's pipe did not answer within ${START_TIMEOUT_MS / 1000} s. Its log is ${keyringPaths().log}.`);
|
|
231
|
+
}
|
|
232
|
+
return { service: KEYRING_SERVICE, autostart: kind };
|
|
233
|
+
};
|
|
234
|
+
export const uninstallKeyring = async (log) => {
|
|
235
|
+
const hardened = await hardenedHere();
|
|
236
|
+
if (hardened) {
|
|
237
|
+
log("Windows asks for an administrator's yes, once, to remove the IntenticKeyring service…");
|
|
238
|
+
await runElevated(["service", "uninstall"]);
|
|
239
|
+
}
|
|
240
|
+
await entryFor(hardened, log).unregister();
|
|
241
|
+
await stopKeyring();
|
|
242
|
+
const names = (await readdir(binDir).catch(() => [])).filter((name) => name.startsWith(basename(keyringPath)) || name.startsWith(basename(askpassPath)));
|
|
243
|
+
const outcomes = await Promise.all(names.map(async (name) => {
|
|
244
|
+
const path = join(binDir, name);
|
|
245
|
+
try {
|
|
246
|
+
await rm(path, { force: true });
|
|
247
|
+
return path;
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
log(`Could not remove ${path} (${errorMessage(error)}): it goes once nothing runs it.`);
|
|
251
|
+
await rename(path, `${path}.old`).catch(() => undefined);
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
}));
|
|
255
|
+
const removed = outcomes.filter((path) => path !== undefined);
|
|
256
|
+
return { removed, vault: keyringPaths().dir, hardened };
|
|
257
|
+
};
|
|
258
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/keyring/service.ts"],"names":[],"mappings":"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"}
|
package/dist/machine-id.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa,QAA8B,CAAC;AAGzD,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAsBpD,eAAO,MAAM,SAAS,SAAS,MAAM,CAAC,UAAU,SAAsB,MAAM,KAAmB,MAe9F,CAAC"}
|
package/dist/machine-id.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { mkdirSync, readFileSync
|
|
2
|
+
import { mkdirSync, readFileSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { undefinedIfMissing } from "@intentic/base/errors";
|
|
5
|
-
import {
|
|
5
|
+
import { writeFileAtomicSync } from "@intentic/base/fs";
|
|
6
|
+
import { MachineIdSchema } from "@intentic/sandbox-contract/schemas/hosts";
|
|
6
7
|
import { baseDir } from "./config.js";
|
|
7
8
|
export const machineIdPath = join(baseDir, "machine-id");
|
|
8
9
|
export const MACHINE_ID_ENV = "INTENTIC_MACHINE_ID";
|
|
@@ -17,9 +18,7 @@ const read = (path) => {
|
|
|
17
18
|
};
|
|
18
19
|
const write = (path, id) => {
|
|
19
20
|
mkdirSync(dirname(path), { recursive: true });
|
|
20
|
-
|
|
21
|
-
writeFileSync(part, `${id}\n`, { mode: 0o644 });
|
|
22
|
-
renameSync(part, path);
|
|
21
|
+
writeFileAtomicSync(path, `${id}\n`, 0o644);
|
|
23
22
|
};
|
|
24
23
|
export const machineId = (env = process.env, path = machineIdPath) => {
|
|
25
24
|
const handed = valid(env[MACHINE_ID_ENV]);
|
package/dist/machine-id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-id.js","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"machine-id.js","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOtC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAGzD,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAEpD,MAAM,KAAK,GAAG,CAAC,KAAyB,EAAsB,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAG/G,MAAM,IAAI,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC9C,IAAI,CAAC;QACD,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;AACL,CAAC,CAAC;AAGF,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAU,EAAQ,EAAE;IAC7C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAE,IAAI,GAAW,aAAa,EAAU,EAAE;IACpG,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,UAAU,EAAE,EAAE,CAAC;IACnC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type KeyObject } from "node:crypto";
|
|
2
|
+
export interface MinisignPublicKey {
|
|
3
|
+
readonly keyId: string;
|
|
4
|
+
readonly key: KeyObject;
|
|
5
|
+
}
|
|
6
|
+
export interface MinisignSignature {
|
|
7
|
+
readonly algorithm: "Ed" | "ED";
|
|
8
|
+
readonly keyId: string;
|
|
9
|
+
readonly signature: Buffer;
|
|
10
|
+
readonly trustedComment: string;
|
|
11
|
+
readonly globalSignature: Buffer;
|
|
12
|
+
}
|
|
13
|
+
export declare const parsePublicKey: (text: string) => MinisignPublicKey;
|
|
14
|
+
export declare const parseSignature: (text: string) => MinisignSignature;
|
|
15
|
+
export declare const verifyMinisign: (data: Uint8Array, signature: MinisignSignature, publicKey: MinisignPublicKey) => string;
|
|
16
|
+
export declare const verifySignedSums: (sums: Uint8Array, signatureText: string, publicKeyText: string, version: string) => void;
|
|
17
|
+
//# sourceMappingURL=release-signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-signature.d.ts","sourceRoot":"","sources":["../../src/release/release-signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAU,MAAM,aAAa,CAAC;AAYlF,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;CAC3B;AAGD,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CACpC;AAwBD,eAAO,MAAM,cAAc,SAAU,MAAM,KAAG,iBAQ7C,CAAC;AAGF,eAAO,MAAM,cAAc,SAAU,MAAM,KAAG,iBA0B7C,CAAC;AAMF,eAAO,MAAM,cAAc,SAAU,UAAU,aAAa,iBAAiB,aAAa,iBAAiB,KAAG,MAa7G,CAAC;AAiBF,eAAO,MAAM,gBAAgB,SAAU,UAAU,iBAAiB,MAAM,iBAAiB,MAAM,WAAW,MAAM,KAAG,IAQlH,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createHash, createPublicKey, verify } from "node:crypto";
|
|
2
|
+
const UNTRUSTED = "untrusted comment:";
|
|
3
|
+
const TRUSTED = "trusted comment: ";
|
|
4
|
+
const minisignLines = (text) => {
|
|
5
|
+
const trimmed = text.trim();
|
|
6
|
+
if (!trimmed.startsWith(UNTRUSTED) && /^[A-Za-z0-9+/=\s]+$/.test(trimmed)) {
|
|
7
|
+
const decoded = Buffer.from(trimmed, "base64").toString("utf8");
|
|
8
|
+
if (decoded.startsWith(UNTRUSTED)) {
|
|
9
|
+
return decoded.trim().split(/\r?\n/);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return trimmed.split(/\r?\n/);
|
|
13
|
+
};
|
|
14
|
+
const keyIdOf = (bytes) => Buffer.from([...bytes].toReversed())
|
|
15
|
+
.toString("hex")
|
|
16
|
+
.toUpperCase();
|
|
17
|
+
export const parsePublicKey = (text) => {
|
|
18
|
+
const keyLine = minisignLines(text).find((line) => line.trim() !== "" && !line.startsWith(UNTRUSTED)) ?? "";
|
|
19
|
+
const raw = Buffer.from(keyLine.trim(), "base64");
|
|
20
|
+
if (raw.length !== 42 || raw.toString("latin1", 0, 2) !== "Ed") {
|
|
21
|
+
throw new Error("not a minisign Ed25519 public key");
|
|
22
|
+
}
|
|
23
|
+
const key = createPublicKey({ key: { kty: "OKP", crv: "Ed25519", x: raw.subarray(10).toString("base64url") }, format: "jwk" });
|
|
24
|
+
return { keyId: keyIdOf(raw.subarray(2, 10)), key };
|
|
25
|
+
};
|
|
26
|
+
export const parseSignature = (text) => {
|
|
27
|
+
const [untrusted, signatureLine, trusted, globalLine] = minisignLines(text);
|
|
28
|
+
if (untrusted?.startsWith(UNTRUSTED) !== true ||
|
|
29
|
+
trusted?.startsWith(TRUSTED) !== true ||
|
|
30
|
+
signatureLine === undefined ||
|
|
31
|
+
globalLine === undefined) {
|
|
32
|
+
throw new Error("not a minisign signature: it needs an untrusted comment, a signature, a trusted comment and a global signature");
|
|
33
|
+
}
|
|
34
|
+
const raw = Buffer.from(signatureLine.trim(), "base64");
|
|
35
|
+
const algorithm = raw.toString("latin1", 0, 2);
|
|
36
|
+
if (raw.length !== 74 || (algorithm !== "Ed" && algorithm !== "ED")) {
|
|
37
|
+
throw new Error(`not a minisign Ed25519 signature (algorithm "${algorithm}", ${raw.length} bytes)`);
|
|
38
|
+
}
|
|
39
|
+
const globalSignature = Buffer.from(globalLine.trim(), "base64");
|
|
40
|
+
if (globalSignature.length !== 64) {
|
|
41
|
+
throw new Error(`the global signature is ${globalSignature.length} bytes, not 64`);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
algorithm,
|
|
45
|
+
keyId: keyIdOf(raw.subarray(2, 10)),
|
|
46
|
+
signature: raw.subarray(10),
|
|
47
|
+
trustedComment: trusted.slice(TRUSTED.length),
|
|
48
|
+
globalSignature,
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
export const verifyMinisign = (data, signature, publicKey) => {
|
|
52
|
+
if (signature.keyId !== publicKey.keyId) {
|
|
53
|
+
throw new Error(`it is signed by key ${signature.keyId}, not the release key ${publicKey.keyId}`);
|
|
54
|
+
}
|
|
55
|
+
const signed = signature.algorithm === "ED" ? createHash("blake2b512").update(data).digest() : data;
|
|
56
|
+
if (!verify(null, signed, publicKey.key, signature.signature)) {
|
|
57
|
+
throw new Error("the signature does not match the file");
|
|
58
|
+
}
|
|
59
|
+
const comment = Buffer.concat([signature.signature, Buffer.from(signature.trustedComment, "utf8")]);
|
|
60
|
+
if (!verify(null, comment, publicKey.key, signature.globalSignature)) {
|
|
61
|
+
throw new Error("the signature over the trusted comment does not match");
|
|
62
|
+
}
|
|
63
|
+
return signature.trustedComment;
|
|
64
|
+
};
|
|
65
|
+
const commentFields = (comment) => new Map(comment.split("\t").map((field) => {
|
|
66
|
+
const colon = field.indexOf(":");
|
|
67
|
+
return colon === -1 ? [field, ""] : [field.slice(0, colon), field.slice(colon + 1)];
|
|
68
|
+
}));
|
|
69
|
+
export const verifySignedSums = (sums, signatureText, publicKeyText, version) => {
|
|
70
|
+
const fields = commentFields(verifyMinisign(sums, parseSignature(signatureText), parsePublicKey(publicKeyText)));
|
|
71
|
+
if (fields.get("file") !== "SHA256SUMS") {
|
|
72
|
+
throw new Error(`the signature is for ${fields.get("file") ?? "a file it does not name"}, not SHA256SUMS`);
|
|
73
|
+
}
|
|
74
|
+
if (fields.get("version") !== version) {
|
|
75
|
+
throw new Error(`the signature is for release ${fields.get("version") ?? "(none named)"}, not ${version}`);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=release-signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-signature.js","sourceRoot":"","sources":["../../src/release/release-signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAkB,MAAM,EAAE,MAAM,aAAa,CAAC;AA0BlF,MAAM,SAAS,GAAG,oBAAoB,CAAC;AACvC,MAAM,OAAO,GAAG,mBAAmB,CAAC;AAIpC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAY,EAAE;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAU,EAAE,CAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;KAC/B,QAAQ,CAAC,KAAK,CAAC;KACf,WAAW,EAAE,CAAC;AAGvB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAqB,EAAE;IAC9D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5G,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/H,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;AACxD,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAqB,EAAE;IAC9D,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5E,IACI,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI;QACzC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI;QACrC,aAAa,KAAK,SAAS;QAC3B,UAAU,KAAK,SAAS,EAC1B,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,gHAAgH,CAAC,CAAC;IACtI,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,gDAAgD,SAAS,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,eAAe,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,eAAe,CAAC,MAAM,gBAAgB,CAAC,CAAC;IACvF,CAAC;IACD,OAAO;QACH,SAAS;QACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,eAAe;KAClB,CAAC;AACN,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAgB,EAAE,SAA4B,EAAE,SAA4B,EAAU,EAAE;IACnH,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,CAAC,KAAK,yBAAyB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACpG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,SAAS,CAAC,cAAc,CAAC;AACpC,CAAC,CAAC;AAGF,MAAM,aAAa,GAAG,CAAC,OAAe,EAAuB,EAAE,CAC3D,IAAI,GAAG,CACH,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC,CACL,CAAC;AAQN,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAgB,EAAE,aAAqB,EAAE,aAAqB,EAAE,OAAe,EAAQ,EAAE;IACtH,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACjH,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,yBAAyB,kBAAkB,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,cAAc,SAAS,OAAO,EAAE,CAAC,CAAC;IAC/G,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const RELEASE_PUBLIC_KEY = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEYzODRDRTZGODg4RkY5NkEKUldScStZK0liODZFODh5UWRTdmhLaCsyK09PS3dlV25XUUdQa0hiY1lUR2NGSGI3Smxaby9zRzYK";
|
|
2
|
+
export declare const SIGNED_SUMS_FROM = "1.338.0";
|
|
3
|
+
export declare const signatureRequired: (version: string) => boolean;
|
|
4
|
+
export declare const sumsEntry: (sumsText: string, name: string) => string | undefined;
|
|
5
|
+
export type FetchAsset = (url: string) => Promise<Uint8Array | undefined>;
|
|
6
|
+
export interface ReleaseFile {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly path: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const verifyReleaseFiles: (version: string, files: readonly ReleaseFile[], fetchOne?: FetchAsset, publicKey?: string) => Promise<"signed" | "unsigned">;
|
|
11
|
+
//# sourceMappingURL=release-verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-verify.d.ts","sourceRoot":"","sources":["../../src/release/release-verify.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,kBAAkB,6JAC+H,CAAC;AAQ/J,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAG1C,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,OAA8C,CAAC;AAGnG,eAAO,MAAM,SAAS,aAAc,MAAM,QAAQ,MAAM,KAAG,MAAM,GAAG,SAQnE,CAAC;AAWF,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;AAc1E,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAeD,eAAO,MAAM,kBAAkB,YAClB,MAAM,SACR,SAAS,WAAW,EAAE,aACnB,UAAU,cACT,MAAM,KAClB,OAAO,CAAC,QAAQ,GAAG,UAAU,CA4B/B,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { createReadStream } from "node:fs";
|
|
3
|
+
import { errorMessage } from "@intentic/base/errors";
|
|
4
|
+
import { isNewer } from "@intentic/sandbox-contract/state/versions";
|
|
5
|
+
import { releaseAssetUrl } from "../release.js";
|
|
6
|
+
import { verifySignedSums } from "./release-signature.js";
|
|
7
|
+
export const RELEASE_PUBLIC_KEY = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEYzODRDRTZGODg4RkY5NkEKUldScStZK0liODZFODh5UWRTdmhLaCsyK09PS3dlV25XUUdQa0hiY1lUR2NGSGI3Smxaby9zRzYK";
|
|
8
|
+
export const SIGNED_SUMS_FROM = "1.338.0";
|
|
9
|
+
export const signatureRequired = (version) => !isNewer(SIGNED_SUMS_FROM, version);
|
|
10
|
+
export const sumsEntry = (sumsText, name) => {
|
|
11
|
+
for (const line of sumsText.split(/\r?\n/)) {
|
|
12
|
+
const match = /^([0-9a-fA-F]{64}) [ *](?:\.\/)?(.+)$/.exec(line.trim());
|
|
13
|
+
if (match?.[2] === name) {
|
|
14
|
+
return match[1]?.toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
};
|
|
19
|
+
const fileSha256 = async (path) => {
|
|
20
|
+
const hash = createHash("sha256");
|
|
21
|
+
for await (const chunk of createReadStream(path)) {
|
|
22
|
+
hash.update(chunk);
|
|
23
|
+
}
|
|
24
|
+
return hash.digest("hex");
|
|
25
|
+
};
|
|
26
|
+
const fetchAsset = async (url) => {
|
|
27
|
+
const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(60_000) });
|
|
28
|
+
if (response.status === 404) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
throw new Error(`${url} answered ${response.status}`);
|
|
33
|
+
}
|
|
34
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
35
|
+
};
|
|
36
|
+
const read = async (fetchOne, version, name) => {
|
|
37
|
+
try {
|
|
38
|
+
return await fetchOne(releaseAssetUrl(version, name));
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw new Error(`could not read ${name} of v${version} (${errorMessage(error)})`, { cause: error });
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
export const verifyReleaseFiles = async (version, files, fetchOne = fetchAsset, publicKey = RELEASE_PUBLIC_KEY) => {
|
|
45
|
+
const sums = await read(fetchOne, version, "SHA256SUMS");
|
|
46
|
+
if (sums === undefined) {
|
|
47
|
+
throw new Error(`release v${version} publishes no SHA256SUMS to check the download against`);
|
|
48
|
+
}
|
|
49
|
+
const signature = await read(fetchOne, version, "SHA256SUMS.sig");
|
|
50
|
+
if (signature !== undefined) {
|
|
51
|
+
try {
|
|
52
|
+
verifySignedSums(sums, Buffer.from(signature).toString("utf8"), publicKey, version);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new Error(`the SHA256SUMS of v${version} is not signed by the release key: ${errorMessage(error)}`, { cause: error });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (signatureRequired(version)) {
|
|
59
|
+
throw new Error(`release v${version} carries no SHA256SUMS.sig, and every release from v${SIGNED_SUMS_FROM} on is signed`);
|
|
60
|
+
}
|
|
61
|
+
const text = Buffer.from(sums).toString("utf8");
|
|
62
|
+
for (const file of files) {
|
|
63
|
+
const expected = sumsEntry(text, file.name);
|
|
64
|
+
if (expected === undefined) {
|
|
65
|
+
throw new Error(`the SHA256SUMS of v${version} lists no ${file.name}`);
|
|
66
|
+
}
|
|
67
|
+
const actual = await fileSha256(file.path);
|
|
68
|
+
if (actual !== expected) {
|
|
69
|
+
throw new Error(`the downloaded ${file.name} is not the one v${version} published (SHA-256 ${actual}, its SHA256SUMS says ${expected})`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return signature === undefined ? "unsigned" : "signed";
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=release-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-verify.js","sourceRoot":"","sources":["../../src/release/release-verify.ts"],"names":[],"mappings":"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"}
|
package/dist/release.d.ts
CHANGED
|
@@ -3,8 +3,14 @@ export declare const osToken: () => "linux" | "darwin" | "windows";
|
|
|
3
3
|
export declare const archToken: () => "amd64" | "arm64";
|
|
4
4
|
export declare const agentPath: string;
|
|
5
5
|
export declare const launcherPath: string;
|
|
6
|
+
export declare const releaseAssetUrl: (version: string, name: string) => string;
|
|
7
|
+
export declare const agentAssetName: () => string;
|
|
8
|
+
export declare const launcherAssetName: () => string;
|
|
6
9
|
export declare const agentAssetUrl: (version: string) => string;
|
|
7
10
|
export declare const launcherAssetUrl: (version: string) => string;
|
|
11
|
+
export declare const keyringPath: string;
|
|
12
|
+
export declare const askpassPath: string;
|
|
13
|
+
export declare const keyringAssetName: () => string;
|
|
8
14
|
export declare const publishedVersion: () => Promise<string | undefined>;
|
|
9
15
|
export declare const versionOf: (binary: string) => string | undefined;
|
|
10
16
|
export interface DownloadOptions {
|
package/dist/release.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,GAAG,QAA6C,CAAC;AAE9D,eAAO,MAAM,OAAO,QAAO,OAAO,GAAG,QAAQ,GAAG,SAQ/C,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,OAAO,GAAG,OAQtC,CAAC;AAEF,eAAO,MAAM,SAAS,QAAyC,CAAC;AAChE,eAAO,MAAM,YAAY,QAAoC,CAAC;AAK9D,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,GAAG,QAA6C,CAAC;AAE9D,eAAO,MAAM,OAAO,QAAO,OAAO,GAAG,QAAQ,GAAG,SAQ/C,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,OAAO,GAAG,OAQtC,CAAC;AAEF,eAAO,MAAM,SAAS,QAAyC,CAAC;AAChE,eAAO,MAAM,YAAY,QAAoC,CAAC;AAK9D,eAAO,MAAM,eAAe,YAAa,MAAM,QAAQ,MAAM,KAAG,MAAoD,CAAC;AAErH,eAAO,MAAM,cAAc,QAAO,MAA8D,CAAC;AACjG,eAAO,MAAM,iBAAiB,QAAO,MAAsD,CAAC;AAC5F,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,MAAoD,CAAC;AACrG,eAAO,MAAM,gBAAgB,YAAa,MAAM,KAAG,MAAuD,CAAC;AAM3G,eAAO,MAAM,WAAW,QAAyC,CAAC;AAClE,eAAO,MAAM,WAAW,QAAyC,CAAC;AAClE,eAAO,MAAM,gBAAgB,QAAO,MAA8D,CAAC;AAGnG,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAOnE,CAAC;AAMF,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG,MAAM,GAAG,SAGnD,CAAC;AAGF,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AA4DD,eAAO,MAAM,QAAQ,QAAe,MAAM,QAAQ,MAAM,YAAW,eAAe,KAAQ,OAAO,CAAC,IAAI,CASrG,CAAC;AAGF,eAAO,MAAM,eAAe,SAAgB,MAAM,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAM5E,CAAC;AAQF,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,OAAyD,CAAC;AAGpG,eAAO,MAAM,QAAQ,QAAa,OAAO,CAAC,IAAI,CAM7C,CAAC"}
|
package/dist/release.js
CHANGED
|
@@ -27,8 +27,14 @@ export const archToken = () => {
|
|
|
27
27
|
export const agentPath = join(binDir, `intentic-machine${exe}`);
|
|
28
28
|
export const launcherPath = join(binDir, WINDOWS_LAUNCH_STUB);
|
|
29
29
|
const RELEASES = "https://github.com/intentic/intentic/releases";
|
|
30
|
-
export const
|
|
31
|
-
export const
|
|
30
|
+
export const releaseAssetUrl = (version, name) => `${RELEASES}/download/v${version}/${name}`;
|
|
31
|
+
export const agentAssetName = () => `intentic-machine-${osToken()}-${archToken()}${exe}`;
|
|
32
|
+
export const launcherAssetName = () => `intentic-launch-windows-${archToken()}.exe`;
|
|
33
|
+
export const agentAssetUrl = (version) => releaseAssetUrl(version, agentAssetName());
|
|
34
|
+
export const launcherAssetUrl = (version) => releaseAssetUrl(version, launcherAssetName());
|
|
35
|
+
export const keyringPath = join(binDir, `intentic-keyring${exe}`);
|
|
36
|
+
export const askpassPath = join(binDir, `intentic-askpass${exe}`);
|
|
37
|
+
export const keyringAssetName = () => `intentic-keyring-${osToken()}-${archToken()}${exe}`;
|
|
32
38
|
export const publishedVersion = async () => {
|
|
33
39
|
try {
|
|
34
40
|
const response = await fetch(`${RELEASES}/latest`, { method: "HEAD", redirect: "follow", signal: AbortSignal.timeout(20_000) });
|
package/dist/release.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.js","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAItD,MAAM,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG,GAAmC,EAAE;IACxD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,CAAC,QAAQ,0DAA0D,CAAC,CAAC;AACpI,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAsB,EAAE;IAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,0DAA0D,CAAC,CAAC;AACpH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,EAAE,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAE9D,MAAM,QAAQ,GAAG,+CAA+C,CAAC;AAGjE,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const handoverPath: string;
|
|
2
|
+
export declare const HANDOVER_FRESH_MS = 60000;
|
|
3
|
+
export declare const HANDOVER_WAIT_MS: number;
|
|
4
|
+
interface AskedOptions {
|
|
5
|
+
readonly path?: string;
|
|
6
|
+
readonly now?: () => number;
|
|
7
|
+
readonly alive?: (pid: number) => boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const handoverAsked: ({ path, now, alive }?: AskedOptions) => Promise<boolean>;
|
|
10
|
+
interface AskOptions {
|
|
11
|
+
readonly holderNow: () => Promise<number | undefined>;
|
|
12
|
+
readonly stop: (pid: number) => Promise<void>;
|
|
13
|
+
readonly path?: string;
|
|
14
|
+
readonly waitMs?: number;
|
|
15
|
+
readonly pollMs?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare const askHandover: (holder: number, { holderNow, stop, path, waitMs, pollMs }: AskOptions) => Promise<"left" | "stopped">;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=handover.d.ts.map
|