@intentic/machine 1.343.0 → 1.345.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 +134 -29
- package/dist/autostart/autostart.d.ts +0 -1
- package/dist/autostart/autostart.d.ts.map +1 -1
- package/dist/autostart/autostart.js +3 -9
- package/dist/autostart/autostart.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +4 -21
- package/dist/commands.js.map +1 -1
- package/dist/device/commands.d.ts +2 -1
- package/dist/device/commands.d.ts.map +1 -1
- package/dist/device/commands.js +4 -2
- package/dist/device/commands.js.map +1 -1
- package/dist/device/connection.d.ts.map +1 -1
- package/dist/device/connection.js +27 -9
- package/dist/device/connection.js.map +1 -1
- package/dist/device/grant.d.ts +259 -0
- package/dist/device/grant.d.ts.map +1 -1
- package/dist/device/mcp.d.ts.map +1 -1
- package/dist/device/mcp.js +25 -8
- package/dist/device/mcp.js.map +1 -1
- package/dist/device/router.d.ts +484 -225
- package/dist/device/router.d.ts.map +1 -1
- package/dist/device/router.js +18 -10
- package/dist/device/router.js.map +1 -1
- package/dist/device/sandbox-rounds/keeper.d.ts +4 -1
- package/dist/device/sandbox-rounds/keeper.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/keeper.js +12 -6
- package/dist/device/sandbox-rounds/keeper.js.map +1 -1
- package/dist/device/sandbox-rounds/sleep.d.ts +15 -2
- package/dist/device/sandbox-rounds/sleep.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/sleep.js +68 -13
- package/dist/device/sandbox-rounds/sleep.js.map +1 -1
- package/dist/device/tools/agent.d.ts +15 -0
- package/dist/device/tools/agent.d.ts.map +1 -1
- package/dist/device/tools/agent.js +75 -19
- package/dist/device/tools/agent.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 +17 -8
- package/dist/device/tools/android.js.map +1 -1
- package/dist/device/tools/browser.d.ts.map +1 -1
- package/dist/device/tools/browser.js +3 -5
- package/dist/device/tools/browser.js.map +1 -1
- package/dist/device/tools/ic-binary.d.ts +1 -1
- package/dist/device/tools/ic-binary.d.ts.map +1 -1
- package/dist/device/tools/ic-binary.js +6 -4
- package/dist/device/tools/ic-binary.js.map +1 -1
- package/dist/device/tools/programs/app-wait-tools.d.ts +12 -0
- package/dist/device/tools/programs/app-wait-tools.d.ts.map +1 -0
- package/dist/device/tools/programs/app-wait-tools.js +60 -0
- package/dist/device/tools/programs/app-wait-tools.js.map +1 -0
- package/dist/device/tools/programs/app-wait.d.ts +19 -0
- package/dist/device/tools/programs/app-wait.d.ts.map +1 -0
- package/dist/device/tools/programs/app-wait.js +89 -0
- package/dist/device/tools/programs/app-wait.js.map +1 -0
- package/dist/device/tools/programs/file-changes.d.ts +2 -0
- package/dist/device/tools/programs/file-changes.d.ts.map +1 -0
- package/dist/device/tools/programs/file-changes.js +19 -0
- package/dist/device/tools/programs/file-changes.js.map +1 -0
- package/dist/device/tools/programs/programs.d.ts +12 -0
- package/dist/device/tools/programs/programs.d.ts.map +1 -1
- package/dist/device/tools/programs/programs.js +13 -12
- package/dist/device/tools/programs/programs.js.map +1 -1
- package/dist/device/tools/programs/stop-all.d.ts +10 -0
- package/dist/device/tools/programs/stop-all.d.ts.map +1 -0
- package/dist/device/tools/programs/stop-all.js +52 -0
- package/dist/device/tools/programs/stop-all.js.map +1 -0
- package/dist/device/tools/sandboxes.d.ts +1 -0
- package/dist/device/tools/sandboxes.d.ts.map +1 -1
- package/dist/device/tools/sandboxes.js +4 -1
- package/dist/device/tools/sandboxes.js.map +1 -1
- package/dist/device/tools/shell.d.ts +1 -1
- package/dist/device/tools/shell.d.ts.map +1 -1
- package/dist/install.d.ts +6 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +7 -2
- package/dist/install.js.map +1 -1
- package/dist/keyring/app-commands.d.ts +15 -0
- package/dist/keyring/app-commands.d.ts.map +1 -0
- package/dist/keyring/app-commands.js +247 -0
- package/dist/keyring/app-commands.js.map +1 -0
- package/dist/keyring/commands.d.ts +1 -1
- package/dist/keyring/commands.d.ts.map +1 -1
- package/dist/keyring/commands.js +26 -32
- package/dist/keyring/commands.js.map +1 -1
- package/dist/keyring/git-helper.d.ts +8 -0
- package/dist/keyring/git-helper.d.ts.map +1 -0
- package/dist/keyring/git-helper.js +60 -0
- package/dist/keyring/git-helper.js.map +1 -0
- package/dist/keyring/keyring-status.d.ts +8 -1
- package/dist/keyring/keyring-status.d.ts.map +1 -1
- package/dist/keyring/keyring-status.js +39 -4
- package/dist/keyring/keyring-status.js.map +1 -1
- package/dist/keyring/native-host-install.d.ts +28 -0
- package/dist/keyring/native-host-install.d.ts.map +1 -0
- package/dist/keyring/native-host-install.js +99 -0
- package/dist/keyring/native-host-install.js.map +1 -0
- package/dist/keyring/relay.d.ts +5 -1
- package/dist/keyring/relay.d.ts.map +1 -1
- package/dist/keyring/relay.js +16 -0
- package/dist/keyring/relay.js.map +1 -1
- package/dist/keyring/sandbox-push.d.ts +4 -0
- package/dist/keyring/sandbox-push.d.ts.map +1 -0
- package/dist/keyring/sandbox-push.js +21 -0
- package/dist/keyring/sandbox-push.js.map +1 -0
- package/dist/keyring/service.d.ts +11 -5
- package/dist/keyring/service.d.ts.map +1 -1
- package/dist/keyring/service.js +34 -51
- package/dist/keyring/service.js.map +1 -1
- package/dist/resident/resident.d.ts +1 -0
- package/dist/resident/resident.d.ts.map +1 -1
- package/dist/resident/resident.js +9 -0
- package/dist/resident/resident.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +22 -1
- package/dist/status.js.map +1 -1
- package/dist/sync/attach-commands.d.ts.map +1 -1
- package/dist/sync/attach-commands.js +2 -1
- package/dist/sync/attach-commands.js.map +1 -1
- package/dist/sync/binary/mutagen-binary.d.ts +4 -0
- package/dist/sync/binary/mutagen-binary.d.ts.map +1 -0
- package/dist/sync/binary/mutagen-binary.js +65 -0
- package/dist/sync/binary/mutagen-binary.js.map +1 -0
- package/dist/sync/commands.d.ts +2 -1
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +29 -64
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/config.d.ts +19 -1
- package/dist/sync/config.d.ts.map +1 -1
- package/dist/sync/config.js +19 -4
- package/dist/sync/config.js.map +1 -1
- package/dist/sync/exec.d.ts +17 -0
- package/dist/sync/exec.d.ts.map +1 -1
- package/dist/sync/exec.js +56 -2
- package/dist/sync/exec.js.map +1 -1
- package/dist/sync/forget-command.js +1 -1
- package/dist/sync/forget-command.js.map +1 -1
- package/dist/sync/git-bridge.d.ts +35 -3
- package/dist/sync/git-bridge.d.ts.map +1 -1
- package/dist/sync/git-bridge.js +201 -16
- package/dist/sync/git-bridge.js.map +1 -1
- package/dist/sync/gone-watch.d.ts +1 -0
- package/dist/sync/gone-watch.d.ts.map +1 -1
- package/dist/sync/gone-watch.js +20 -7
- package/dist/sync/gone-watch.js.map +1 -1
- package/dist/sync/low-disk.d.ts +25 -0
- package/dist/sync/low-disk.d.ts.map +1 -0
- package/dist/sync/low-disk.js +91 -0
- package/dist/sync/low-disk.js.map +1 -0
- package/dist/sync/mirror.d.ts +2 -0
- package/dist/sync/mirror.d.ts.map +1 -1
- package/dist/sync/mirror.js +76 -27
- package/dist/sync/mirror.js.map +1 -1
- package/dist/sync/mutagen-env.d.ts +9 -0
- package/dist/sync/mutagen-env.d.ts.map +1 -0
- package/dist/sync/mutagen-env.js +25 -0
- package/dist/sync/mutagen-env.js.map +1 -0
- package/dist/sync/mutagen-move.d.ts +53 -0
- package/dist/sync/mutagen-move.d.ts.map +1 -0
- package/dist/sync/mutagen-move.js +207 -0
- package/dist/sync/mutagen-move.js.map +1 -0
- package/dist/sync/mutagen.d.ts +13 -10
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +60 -113
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/project/project-commands.d.ts.map +1 -1
- package/dist/sync/project/project-commands.js +2 -1
- package/dist/sync/project/project-commands.js.map +1 -1
- package/dist/sync/project/project-delivery.d.ts.map +1 -1
- package/dist/sync/project/project-delivery.js +2 -1
- package/dist/sync/project/project-delivery.js.map +1 -1
- package/dist/sync/project/project-remote.d.ts.map +1 -1
- package/dist/sync/project/project-remote.js +2 -1
- package/dist/sync/project/project-remote.js.map +1 -1
- package/dist/sync/report.d.ts.map +1 -1
- package/dist/sync/report.js +15 -4
- package/dist/sync/report.js.map +1 -1
- package/dist/sync/uninstall.d.ts +9 -0
- package/dist/sync/uninstall.d.ts.map +1 -0
- package/dist/sync/uninstall.js +76 -0
- package/dist/sync/uninstall.js.map +1 -0
- package/dist/uninstall/command.d.ts +3 -0
- package/dist/uninstall/command.d.ts.map +1 -0
- package/dist/uninstall/command.js +40 -0
- package/dist/uninstall/command.js.map +1 -0
- package/dist/uninstall/distros.d.ts +8 -0
- package/dist/uninstall/distros.d.ts.map +1 -0
- package/dist/uninstall/distros.js +103 -0
- package/dist/uninstall/distros.js.map +1 -0
- package/dist/uninstall/plan.d.ts +23 -0
- package/dist/uninstall/plan.d.ts.map +1 -0
- package/dist/uninstall/plan.js +71 -0
- package/dist/uninstall/plan.js.map +1 -0
- package/dist/uninstall/purge.d.ts +3 -0
- package/dist/uninstall/purge.d.ts.map +1 -0
- package/dist/uninstall/purge.js +79 -0
- package/dist/uninstall/purge.js.map +1 -0
- package/dist/uninstall/steps.d.ts +12 -0
- package/dist/uninstall/steps.d.ts.map +1 -0
- package/dist/uninstall/steps.js +200 -0
- package/dist/uninstall/steps.js.map +1 -0
- package/dist/uninstall/sweep.d.ts +12 -0
- package/dist/uninstall/sweep.d.ts.map +1 -0
- package/dist/uninstall/sweep.js +90 -0
- package/dist/uninstall/sweep.js.map +1 -0
- package/dist/uninstall/tally.d.ts +14 -0
- package/dist/uninstall/tally.d.ts.map +1 -0
- package/dist/uninstall/tally.js +25 -0
- package/dist/uninstall/tally.js.map +1 -0
- package/dist/upkeep/login.d.ts +0 -9
- package/dist/upkeep/login.d.ts.map +1 -1
- package/dist/upkeep/login.js +12 -59
- package/dist/upkeep/login.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { isInside } from "../upkeep/trash.js";
|
|
2
|
+
export const purgeChoice = (flags) => ({
|
|
3
|
+
purge: flags.purge === true || flags.deleteData === true,
|
|
4
|
+
deleteData: flags.deleteData === true,
|
|
5
|
+
});
|
|
6
|
+
const SANDBOX_TRASH = /^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z$/u;
|
|
7
|
+
const machineDataName = (name) => name === "restore" || name.startsWith("audit.jsonl");
|
|
8
|
+
export const sandboxTrashName = (name) => SANDBOX_TRASH.test(name);
|
|
9
|
+
const keyringDataName = (name) => name === "vault.json" || name === "keys.json" || name.startsWith("audit.jsonl");
|
|
10
|
+
const TRASH = "trash";
|
|
11
|
+
export const machineSweep = (names, trashNames, deleteData) => {
|
|
12
|
+
if (deleteData) {
|
|
13
|
+
return { remove: [...names], keep: [] };
|
|
14
|
+
}
|
|
15
|
+
const remove = [];
|
|
16
|
+
const keep = [];
|
|
17
|
+
for (const name of names) {
|
|
18
|
+
if (machineDataName(name)) {
|
|
19
|
+
keep.push(name);
|
|
20
|
+
}
|
|
21
|
+
else if (name === TRASH && trashNames.some(sandboxTrashName)) {
|
|
22
|
+
keep.push(...trashNames.filter(sandboxTrashName).map((entry) => `${TRASH}/${entry}`));
|
|
23
|
+
remove.push(...trashNames.filter((entry) => !sandboxTrashName(entry)).map((entry) => `${TRASH}/${entry}`));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
remove.push(name);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return { remove, keep };
|
|
30
|
+
};
|
|
31
|
+
export const keyringSweep = (names, deleteData) => deleteData ? { remove: [...names], keep: [] } : { remove: names.filter((name) => !keyringDataName(name)), keep: names.filter(keyringDataName) };
|
|
32
|
+
export const holdingBack = (sweep, held) => ({
|
|
33
|
+
remove: sweep.remove.filter((name) => !held.includes(name)),
|
|
34
|
+
keep: [...sweep.keep, ...sweep.remove.filter((name) => held.includes(name))],
|
|
35
|
+
});
|
|
36
|
+
export const lingerAction = (markerFound, lingering) => {
|
|
37
|
+
if (lingering === undefined) {
|
|
38
|
+
return "unknown";
|
|
39
|
+
}
|
|
40
|
+
if (!lingering) {
|
|
41
|
+
return "off";
|
|
42
|
+
}
|
|
43
|
+
return markerFound ? "disable" : "theirs";
|
|
44
|
+
};
|
|
45
|
+
const DISTRO_NO_AGENT_EXIT = 64;
|
|
46
|
+
const DISTRO_UNKNOWN_FLAG_EXIT = 252;
|
|
47
|
+
export const distroOutcome = (code) => {
|
|
48
|
+
if (code === 0) {
|
|
49
|
+
return "purged";
|
|
50
|
+
}
|
|
51
|
+
if (code === DISTRO_NO_AGENT_EXIT) {
|
|
52
|
+
return "no-agent";
|
|
53
|
+
}
|
|
54
|
+
return code === DISTRO_UNKNOWN_FLAG_EXIT ? "older" : "failed";
|
|
55
|
+
};
|
|
56
|
+
export const linkIsOurs = (target, agentPath, binDir) => target !== undefined && (target === agentPath || isInside(target, binDir));
|
|
57
|
+
const psQuoted = (text) => `'${text.replaceAll("'", "''")}'`;
|
|
58
|
+
export const windowsCleanupScript = (pid, paths, emptyDirs) => [
|
|
59
|
+
"$ErrorActionPreference = 'SilentlyContinue'",
|
|
60
|
+
`Wait-Process -Id ${pid} -Timeout 120`,
|
|
61
|
+
`$paths = @(${paths.map(psQuoted).join(", ")})`,
|
|
62
|
+
"for ($i = 0; $i -lt 15; $i++) {",
|
|
63
|
+
" foreach ($p in $paths) { if (Test-Path -LiteralPath $p) { Remove-Item -LiteralPath $p -Recurse -Force } }",
|
|
64
|
+
" if (-not ($paths | Where-Object { Test-Path -LiteralPath $_ })) { break }",
|
|
65
|
+
" Start-Sleep -Seconds 2",
|
|
66
|
+
"}",
|
|
67
|
+
`foreach ($d in @(${emptyDirs.map(psQuoted).join(", ")})) {`,
|
|
68
|
+
" if ((Test-Path -LiteralPath $d) -and -not (Get-ChildItem -LiteralPath $d -Force)) { Remove-Item -LiteralPath $d -Force }",
|
|
69
|
+
"}",
|
|
70
|
+
].join("\n");
|
|
71
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/uninstall/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purge.d.ts","sourceRoot":"","sources":["../../src/uninstall/purge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAuEhD,eAAO,MAAM,UAAU,OAAc,EAAE,cAAc,OAAO,KAAG,OAAO,CAAC,IAAI,CA+B1E,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { errorMessage } from "@intentic/base/errors";
|
|
2
|
+
import { plural } from "@intentic/base/format";
|
|
3
|
+
import { deviceUninstall } from "../device/commands.js";
|
|
4
|
+
import { WINDOWS_SIDE } from "../environments/wsl.js";
|
|
5
|
+
import { syncUninstall } from "../sync/commands.js";
|
|
6
|
+
import { purgeDistros } from "./distros.js";
|
|
7
|
+
import { setAgentAside, sweepAgentFiles } from "./sweep.js";
|
|
8
|
+
import { sandboxTrashName } from "./plan.js";
|
|
9
|
+
import { removeFromPath, removeKeyring, removeLegacy, residentGone, restoreLinger, retireStartBeforeSignIn, stopApps, stopOwnMutagen } from "./steps.js";
|
|
10
|
+
import { stopOf, tally } from "./tally.js";
|
|
11
|
+
const teardown = async (say, deleteData) => {
|
|
12
|
+
try {
|
|
13
|
+
say.note(await syncUninstall(say, undefined, { forGood: true }));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
say.warn(`File sync was not torn down cleanly (${errorMessage(error)}); its pairings go with the agent's files.`);
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
say.note(await deviceUninstall(say, undefined, { forGood: true, recordStays: !deleteData }));
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
say.warn(`The sandbox links were not removed cleanly (${errorMessage(error)}); they go with the agent's files.`);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const DATA_WORDS = [
|
|
26
|
+
[(name) => name === "vault.json", "your saved passwords (the keyring vault)", "keyring"],
|
|
27
|
+
[(name) => name === "restore", "the restore points of your synced folders", "machine"],
|
|
28
|
+
[(name) => name.startsWith("audit.jsonl"), "the record of what this agent did on this device", "machine"],
|
|
29
|
+
[(name) => name.startsWith("trash/") && sandboxTrashName(name.slice("trash/".length)), "files a sandbox moved to this device's trash", "machine"],
|
|
30
|
+
];
|
|
31
|
+
const dataWords = (machine, keyring) => DATA_WORDS.filter(([matches, , where]) => (where === "machine" ? machine : keyring).some(matches)).map(([, words]) => words);
|
|
32
|
+
const sayFiles = (say, swept, deleteData) => {
|
|
33
|
+
if (swept.folders.length > 0) {
|
|
34
|
+
say.note(`Removed the agent's files from ${swept.folders.join(" and ")}.`);
|
|
35
|
+
}
|
|
36
|
+
const words = dataWords(swept.machineData, swept.keyringData);
|
|
37
|
+
if (words.length > 0) {
|
|
38
|
+
say.note(deleteData
|
|
39
|
+
? `Deleted your data too, as asked: ${words.join("; ")}.`
|
|
40
|
+
: `Kept your data, which only an uninstall that deletes data removes: ${words.join("; ")}.${swept.keyringData.includes("vault.json") ? " Set the keyring up again and the same passphrase opens the vault." : ""}`);
|
|
41
|
+
}
|
|
42
|
+
if (swept.afterExit.length > 0) {
|
|
43
|
+
say.note(`The last ${plural(swept.afterExit.length, "file")} still in use go once this program exits.`);
|
|
44
|
+
}
|
|
45
|
+
if (swept.stuck.length > 0) {
|
|
46
|
+
say.fail(`${plural(swept.stuck.length, "path")} of the agent's could not be removed: ${swept.stuck.join(", ")}.`, process.platform === "win32" ? `Remove-Item -Recurse -Force ${swept.stuck.join(", ")}` : `rm -rf ${swept.stuck.join(" ")}`);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
export const purgeAgent = async (ui, deleteData) => {
|
|
50
|
+
const say = tally(ui);
|
|
51
|
+
if (WINDOWS_SIDE) {
|
|
52
|
+
await purgeDistros(deleteData, say);
|
|
53
|
+
}
|
|
54
|
+
await setAgentAside().catch((error) => say.note(`The agent's binary could not be set aside first (${errorMessage(error)}); it goes with the files.`));
|
|
55
|
+
await stopApps(say);
|
|
56
|
+
await teardown(say, deleteData);
|
|
57
|
+
if (process.platform === "win32") {
|
|
58
|
+
await retireStartBeforeSignIn(say);
|
|
59
|
+
}
|
|
60
|
+
await residentGone(say);
|
|
61
|
+
await stopOwnMutagen(say);
|
|
62
|
+
const { holdBin } = await removeKeyring(say);
|
|
63
|
+
await removeLegacy(say);
|
|
64
|
+
if (!holdBin) {
|
|
65
|
+
await removeFromPath(say);
|
|
66
|
+
}
|
|
67
|
+
restoreLinger(say);
|
|
68
|
+
const swept = await sweepAgentFiles(deleteData, holdBin, say);
|
|
69
|
+
sayFiles(say, swept, deleteData);
|
|
70
|
+
const failures = say.failures();
|
|
71
|
+
if (failures.length > 0) {
|
|
72
|
+
throw new Error(stopOf("The agent was not removed from this device entirely.", failures));
|
|
73
|
+
}
|
|
74
|
+
const warnings = say.warnings();
|
|
75
|
+
ui.done(warnings === 0
|
|
76
|
+
? "Removed the agent from this device. Nothing of it runs here any more."
|
|
77
|
+
: `Removed the agent from this device; ${plural(warnings, "step")} above ${warnings === 1 ? "needs" : "need"} finishing by hand.`);
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=purge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purge.js","sourceRoot":"","sources":["../../src/uninstall/purge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Tally } from "./tally.js";
|
|
2
|
+
export declare const stopApps: (say: Tally) => Promise<void>;
|
|
3
|
+
export declare const retireStartBeforeSignIn: (say: Tally) => Promise<void>;
|
|
4
|
+
export declare const residentGone: (say: Tally) => Promise<void>;
|
|
5
|
+
export declare const stopOwnMutagen: (say: Tally) => Promise<void>;
|
|
6
|
+
export declare const removeKeyring: (say: Tally) => Promise<{
|
|
7
|
+
readonly holdBin: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const removeLegacy: (say: Tally) => Promise<void>;
|
|
10
|
+
export declare const removeFromPath: (say: Tally) => Promise<void>;
|
|
11
|
+
export declare const restoreLinger: (say: Tally) => void;
|
|
12
|
+
//# sourceMappingURL=steps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/uninstall/steps.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWxC,eAAO,MAAM,QAAQ,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAYvD,CAAC;AAGF,eAAO,MAAM,uBAAuB,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAgBtE,CAAC;AAGF,eAAO,MAAM,YAAY,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAM3D,CAAC;AAGF,eAAO,MAAM,cAAc,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAS7D,CAAC;AAGF,eAAO,MAAM,aAAa,QAAe,KAAK,KAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAqCrF,CAAC;AAKF,eAAO,MAAM,YAAY,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAmC3D,CAAC;AA+BF,eAAO,MAAM,cAAc,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAqB7D,CAAC;AAGF,eAAO,MAAM,aAAa,QAAS,KAAK,KAAG,IAmB1C,CAAC"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { rm } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { errorMessage } from "@intentic/base/errors";
|
|
5
|
+
import { plural } from "@intentic/base/format";
|
|
6
|
+
import { keyringPaths } from "@intentic/keyring";
|
|
7
|
+
import { autostart, beforeSignIn, beforeSignInTaskName, clearWindowsRunValue, disableLinger, homeDir, lingerMarkerPath, lingerOn, } from "@intentic/local-agent";
|
|
8
|
+
import { KEYRING_AUTOSTART, MACHINE_AUTOSTART } from "../autostart/autostart.js";
|
|
9
|
+
import { binDir, baseDir } from "../config.js";
|
|
10
|
+
import { stopAllApps } from "../device/tools/programs/stop-all.js";
|
|
11
|
+
import { readWindowsPath, removeFromWindowsPathValue, writeWindowsPath } from "../install.js";
|
|
12
|
+
import { uninstallAskpass } from "../keyring/askpass.js";
|
|
13
|
+
import { uninstallGitHelper } from "../keyring/git-helper.js";
|
|
14
|
+
import { uninstallNativeHost } from "../keyring/native-host-install.js";
|
|
15
|
+
import { keyringInstalled, keyringPid, serviceHere, uninstallKeyring } from "../keyring/service.js";
|
|
16
|
+
import { agentPath } from "../release.js";
|
|
17
|
+
import { machineLauncher, readResident, retireResident } from "../resident/supervision.js";
|
|
18
|
+
import { runProcess } from "../sync/exec.js";
|
|
19
|
+
import { MUTAGEN_CALL_TIMEOUT_MS, MUTAGEN_RUN_VALUE } from "../sync/mutagen.js";
|
|
20
|
+
import { ownMutagenPath } from "../sync/binary/mutagen-binary.js";
|
|
21
|
+
import { removeManagedSshConfig } from "../sync/ssh.js";
|
|
22
|
+
import { legacyAutostart, linkWatchPaths, retiredPaths } from "../upkeep/retired.js";
|
|
23
|
+
import { exists, isInside, linkTarget, processesFrom } from "../upkeep/trash.js";
|
|
24
|
+
import { lingerAction, linkIsOurs } from "./plan.js";
|
|
25
|
+
const WINDOWS = process.platform === "win32";
|
|
26
|
+
const killCommand = (pid) => (WINDOWS ? `taskkill /PID ${pid} /T /F` : `kill ${pid}`);
|
|
27
|
+
export const stopApps = async (say) => {
|
|
28
|
+
try {
|
|
29
|
+
const { stopped, left } = await stopAllApps();
|
|
30
|
+
if (stopped.length > 0) {
|
|
31
|
+
say.note(`Stopped ${plural(stopped.length, "program")} a sandbox had started on this device: ${stopped.join(", ")}.`);
|
|
32
|
+
}
|
|
33
|
+
for (const { run, why } of left) {
|
|
34
|
+
say.warn(`${run.name} may still be running: ${why}.`, killCommand(run.pid));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
say.warn(`The programs sandboxes started on this device could not be listed (${errorMessage(error)}), so none was stopped.`);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
export const retireStartBeforeSignIn = async (say) => {
|
|
42
|
+
const entry = beforeSignIn(MACHINE_AUTOSTART, machineLauncher());
|
|
43
|
+
if (entry === undefined || entry.state() === "off") {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
say.note("Windows also starts this agent before sign-in; removing that asks Windows for permission on this device.");
|
|
47
|
+
try {
|
|
48
|
+
await entry.disable();
|
|
49
|
+
say.note("Removed the start before sign-in.");
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
say.warn(`Windows still has the task that starts this agent before sign-in (${errorMessage(error)}).`, `schtasks /delete /tn ${beforeSignInTaskName(MACHINE_AUTOSTART)} /f, in a terminal run as administrator`);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
export const residentGone = async (say) => {
|
|
56
|
+
await retireResident(say.note);
|
|
57
|
+
const still = await readResident();
|
|
58
|
+
if (still !== undefined) {
|
|
59
|
+
say.fail(`the agent is still running (pid ${still.pid}) after being asked to stop.`, killCommand(still.pid));
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
export const stopOwnMutagen = async (say) => {
|
|
63
|
+
if (WINDOWS) {
|
|
64
|
+
clearWindowsRunValue(MUTAGEN_RUN_VALUE);
|
|
65
|
+
}
|
|
66
|
+
await removeManagedSshConfig().catch((error) => say.warn(`The ssh-config include could not be removed (${errorMessage(error)}).`, "remove the Include of intentic's file from ~/.ssh/config"));
|
|
67
|
+
if (existsSync(ownMutagenPath())) {
|
|
68
|
+
await runProcess(ownMutagenPath(), ["daemon", "stop"], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS });
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
export const removeKeyring = async (say) => {
|
|
72
|
+
try {
|
|
73
|
+
await uninstallAskpass();
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
say.warn(`ssh, sudo and git may still ask intentic-askpass for passwords (${errorMessage(error)}).`, WINDOWS ? "unset SSH_ASKPASS, SSH_ASKPASS_REQUIRE, SUDO_ASKPASS and GIT_ASKPASS in your user environment" : "rm ~/.config/environment.d/intentic-askpass.conf");
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
await uninstallGitHelper();
|
|
80
|
+
await uninstallNativeHost();
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
say.warn(`git or a browser may still try Passwords' helper (${errorMessage(error)}).`, "git config --global --unset-all credential.helper intentic, and remove dev.intentic.keyring from the browsers' NativeMessagingHosts");
|
|
84
|
+
}
|
|
85
|
+
const service = await serviceHere();
|
|
86
|
+
const installed = keyringInstalled();
|
|
87
|
+
if (!service && !installed && !existsSync(keyringPaths().dir)) {
|
|
88
|
+
return { holdBin: false };
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const { service: was } = await uninstallKeyring(say.note);
|
|
92
|
+
if (was || installed) {
|
|
93
|
+
say.note(was ? "Removed Passwords, its protected service and its login entry." : "Removed Passwords and its login entry.");
|
|
94
|
+
}
|
|
95
|
+
return { holdBin: false };
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (service) {
|
|
99
|
+
say.warn(`Passwords' protected service stays (${errorMessage(error)}), so this agent's programs stay to finish it.`, "intentic-machine uninstall --purge");
|
|
100
|
+
return { holdBin: true };
|
|
101
|
+
}
|
|
102
|
+
const pid = await keyringPid();
|
|
103
|
+
say.warn(`The keyring was not removed entirely (${errorMessage(error)}).`, pid === undefined ? "intentic-machine uninstall --purge" : killCommand(pid));
|
|
104
|
+
return { holdBin: false };
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const quiet = () => undefined;
|
|
108
|
+
export const removeLegacy = async (say) => {
|
|
109
|
+
const removed = [];
|
|
110
|
+
for (const spec of legacyAutostart(baseDir)) {
|
|
111
|
+
const entry = autostart(spec, machineLauncher(), quiet);
|
|
112
|
+
if (await entry.present()) {
|
|
113
|
+
await entry.unregister();
|
|
114
|
+
removed.push(`the ${spec.id} login entry`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const home = homeDir();
|
|
118
|
+
const { dirs, links } = retiredPaths(home, baseDir);
|
|
119
|
+
for (const link of links) {
|
|
120
|
+
const target = await linkTarget(link);
|
|
121
|
+
if (target !== undefined && dirs.some((dir) => isInside(target, dir))) {
|
|
122
|
+
await rm(link, { force: true });
|
|
123
|
+
removed.push(link);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
for (const dir of dirs.filter((each) => existsSync(each))) {
|
|
127
|
+
const running = (await processesFrom(dir)) ?? [];
|
|
128
|
+
if (running.length > 0) {
|
|
129
|
+
say.warn(`A program from ${dir} is still running (pid ${running.join(", ")}), an agent from before this one.`, running.map(killCommand).join("; "));
|
|
130
|
+
}
|
|
131
|
+
await rm(dir, { recursive: true, force: true }).then(() => removed.push(dir), (error) => say.warn(`${dir} could not be removed (${errorMessage(error)}).`, WINDOWS ? `Remove-Item -Recurse -Force ${dir}` : `rm -rf ${dir}`));
|
|
132
|
+
}
|
|
133
|
+
removed.push(...(await removeLinkWatch(home)));
|
|
134
|
+
if (removed.length > 0) {
|
|
135
|
+
say.note(`Removed what the agents before this one left: ${removed.join(", ")}.`);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const userSystemctl = async (...args) => void (await runProcess("systemctl", ["--user", ...args], { timeoutMs: 30_000 }));
|
|
139
|
+
const removeLinkWatch = async (home) => {
|
|
140
|
+
if (process.platform !== "linux") {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
const present = [];
|
|
144
|
+
for (const path of linkWatchPaths(home)) {
|
|
145
|
+
if (await exists(path)) {
|
|
146
|
+
present.push(path);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (present.length === 0) {
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
await userSystemctl("disable", "--now", "intentic-link-watch.timer");
|
|
153
|
+
await userSystemctl("stop", "intentic-link-watch.service");
|
|
154
|
+
for (const path of present) {
|
|
155
|
+
await rm(path, { force: true });
|
|
156
|
+
}
|
|
157
|
+
await userSystemctl("daemon-reload");
|
|
158
|
+
return ["intentic-link-watch"];
|
|
159
|
+
};
|
|
160
|
+
export const removeFromPath = async (say) => {
|
|
161
|
+
if (WINDOWS) {
|
|
162
|
+
try {
|
|
163
|
+
const { kind, stored } = await readWindowsPath();
|
|
164
|
+
const next = removeFromWindowsPathValue(stored, binDir);
|
|
165
|
+
if (next !== undefined) {
|
|
166
|
+
await writeWindowsPath(kind, next);
|
|
167
|
+
say.note(`Took ${binDir} off your PATH.`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
say.warn(`${binDir} could not be taken off your PATH (${errorMessage(error)}).`, `remove ${binDir} from your user PATH in Windows' environment variables`);
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const link = join(homeDir(), ".local", "bin", "intentic-machine");
|
|
176
|
+
if (linkIsOurs(await linkTarget(link), agentPath, binDir)) {
|
|
177
|
+
await rm(link, { force: true }).then(() => say.note(`Removed the intentic-machine link from ${join(homeDir(), ".local", "bin")}.`), (error) => say.warn(`${link} could not be removed (${errorMessage(error)}).`, `rm ${link}`));
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
export const restoreLinger = (say) => {
|
|
181
|
+
if (process.platform !== "linux") {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const marked = [lingerMarkerPath(MACHINE_AUTOSTART), lingerMarkerPath(KEYRING_AUTOSTART)].some((marker) => existsSync(marker));
|
|
185
|
+
const action = lingerAction(marked, lingerOn());
|
|
186
|
+
if (action === "theirs") {
|
|
187
|
+
say.note("Lingering stays on for your user: it was on before this agent asked for it.");
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (action !== "disable") {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const refused = disableLinger();
|
|
194
|
+
if (refused === undefined) {
|
|
195
|
+
say.note("Turned lingering off for your user: this agent had turned it on.");
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
say.warn(`Lingering stays on for your user (${refused}), which this agent had turned on.`, "loginctl disable-linger");
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=steps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/uninstall/steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Tally } from "./tally.js";
|
|
2
|
+
export declare const asidePath: string;
|
|
3
|
+
export declare const setAgentAside: () => Promise<void>;
|
|
4
|
+
export interface SweptFiles {
|
|
5
|
+
readonly machineData: readonly string[];
|
|
6
|
+
readonly keyringData: readonly string[];
|
|
7
|
+
readonly folders: readonly string[];
|
|
8
|
+
readonly stuck: readonly string[];
|
|
9
|
+
readonly afterExit: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export declare const sweepAgentFiles: (deleteData: boolean, holdBin: boolean, say: Tally) => Promise<SweptFiles>;
|
|
12
|
+
//# sourceMappingURL=sweep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sweep.d.ts","sourceRoot":"","sources":["../../src/uninstall/sweep.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAUxC,eAAO,MAAM,SAAS,QAA8B,CAAC;AASrD,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,IAAI,CAIlD,CAAC;AAEF,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAExC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAElC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AA6DD,eAAO,MAAM,eAAe,eAAsB,OAAO,WAAW,OAAO,OAAO,KAAK,KAAG,OAAO,CAAC,UAAU,CA4B3G,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { readdir, rename, rm, rmdir } from "node:fs/promises";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
6
|
+
import { errorMessage, undefinedIfMissing } from "@intentic/base/errors";
|
|
7
|
+
import { keyringPaths } from "@intentic/keyring";
|
|
8
|
+
import { baseDir } from "../config.js";
|
|
9
|
+
import { runningAsInstalledAgent } from "../installed.js";
|
|
10
|
+
import { agentPath } from "../release.js";
|
|
11
|
+
import { holdingBack, keyringSweep, machineSweep, windowsCleanupScript } from "./plan.js";
|
|
12
|
+
export const asidePath = `${agentPath}.uninstalling`;
|
|
13
|
+
export const setAgentAside = async () => {
|
|
14
|
+
if (process.platform !== "win32" && existsSync(agentPath)) {
|
|
15
|
+
await rename(agentPath, asidePath);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const namesIn = async (dir) => (await readdir(dir).catch(undefinedIfMissing)) ?? [];
|
|
19
|
+
const removeNames = async (dir, sweep) => {
|
|
20
|
+
const failed = [];
|
|
21
|
+
for (const name of sweep.remove) {
|
|
22
|
+
const path = join(dir, name);
|
|
23
|
+
try {
|
|
24
|
+
await rm(path, { recursive: true, force: true, maxRetries: 3 });
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
failed.push(path);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return failed;
|
|
31
|
+
};
|
|
32
|
+
const removeIfEmpty = async (dir) => {
|
|
33
|
+
await rmdir(dir).catch(() => undefined);
|
|
34
|
+
};
|
|
35
|
+
const moveSelfAside = async () => {
|
|
36
|
+
if (process.platform !== "win32" || !runningAsInstalledAgent()) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const aside = join(tmpdir(), `intentic-machine-uninstalled-${process.pid}.exe`);
|
|
40
|
+
try {
|
|
41
|
+
await rename(agentPath, aside);
|
|
42
|
+
return aside;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const scheduleAfterExit = async (paths, emptyDirs) => {
|
|
49
|
+
const encoded = Buffer.from(windowsCleanupScript(process.pid, paths, emptyDirs), "utf16le").toString("base64");
|
|
50
|
+
const child = spawn("powershell.exe", ["-NoProfile", "-NonInteractive", "-WindowStyle", "Hidden", "-EncodedCommand", encoded], {
|
|
51
|
+
detached: true,
|
|
52
|
+
stdio: "ignore",
|
|
53
|
+
windowsHide: true,
|
|
54
|
+
});
|
|
55
|
+
const started = await new Promise((resolve) => {
|
|
56
|
+
child.once("spawn", () => resolve(undefined));
|
|
57
|
+
child.once("error", (error) => resolve(errorMessage(error)));
|
|
58
|
+
});
|
|
59
|
+
child.unref();
|
|
60
|
+
return started;
|
|
61
|
+
};
|
|
62
|
+
export const sweepAgentFiles = async (deleteData, holdBin, say) => {
|
|
63
|
+
const movedSelf = holdBin ? undefined : await moveSelfAside();
|
|
64
|
+
const keyringDir = keyringPaths().dir;
|
|
65
|
+
const [machineNames, trashNames, keyringNames] = [await namesIn(baseDir), await namesIn(join(baseDir, "trash")), await namesIn(keyringDir)];
|
|
66
|
+
const machinePlan = machineSweep(machineNames, trashNames, deleteData);
|
|
67
|
+
const machine = holdBin ? holdingBack(machinePlan, ["bin"]) : machinePlan;
|
|
68
|
+
const keyring = keyringSweep(keyringNames, deleteData);
|
|
69
|
+
const data = {
|
|
70
|
+
machineData: machineSweep(machineNames, trashNames, false).keep,
|
|
71
|
+
keyringData: keyringSweep(keyringNames, false).keep,
|
|
72
|
+
folders: [...(machineNames.length > 0 ? [baseDir] : []), ...(keyringNames.length > 0 ? [keyringDir] : [])],
|
|
73
|
+
};
|
|
74
|
+
const failed = [...(await removeNames(baseDir, machine)), ...(await removeNames(keyringDir, keyring))];
|
|
75
|
+
const home = dirname(baseDir);
|
|
76
|
+
for (const dir of [join(baseDir, "trash"), baseDir, keyringDir, home]) {
|
|
77
|
+
await removeIfEmpty(dir);
|
|
78
|
+
}
|
|
79
|
+
const afterExit = [...failed, ...(movedSelf === undefined ? [] : [movedSelf])];
|
|
80
|
+
if (process.platform !== "win32" || afterExit.length === 0) {
|
|
81
|
+
return { ...data, stuck: failed, afterExit: [] };
|
|
82
|
+
}
|
|
83
|
+
const refused = await scheduleAfterExit(afterExit, [join(baseDir, "trash"), baseDir, keyringDir, home]);
|
|
84
|
+
if (refused !== undefined) {
|
|
85
|
+
say.note(`The cleanup that runs once this program exits could not be started (${refused}).`);
|
|
86
|
+
return { ...data, stuck: failed, afterExit: [] };
|
|
87
|
+
}
|
|
88
|
+
return { ...data, stuck: [], afterExit };
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=sweep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../src/uninstall/sweep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Narration } from "../cli-ui.js";
|
|
2
|
+
export interface Failure {
|
|
3
|
+
readonly problem: string;
|
|
4
|
+
readonly fix: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Tally extends Narration {
|
|
7
|
+
readonly warn: (sentence: string, fix?: string) => void;
|
|
8
|
+
readonly fail: (problem: string, fix: string) => void;
|
|
9
|
+
readonly warnings: () => number;
|
|
10
|
+
readonly failures: () => readonly Failure[];
|
|
11
|
+
}
|
|
12
|
+
export declare const tally: (ui: Narration) => Tally;
|
|
13
|
+
export declare const stopOf: (headline: string, failures: readonly Failure[]) => string;
|
|
14
|
+
//# sourceMappingURL=tally.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tally.d.ts","sourceRoot":"","sources":["../../src/uninstall/tally.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,KAAM,SAAQ,SAAS;IACpC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,SAAS,OAAO,EAAE,CAAC;CAC/C;AAED,eAAO,MAAM,KAAK,OAAQ,SAAS,KAAG,KAerC,CAAC;AAGF,eAAO,MAAM,MAAM,aAAc,MAAM,YAAY,SAAS,OAAO,EAAE,KAAG,MAOxD,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { explain } from "@intentic/local-agent";
|
|
2
|
+
export const tally = (ui) => {
|
|
3
|
+
let warnings = 0;
|
|
4
|
+
const failures = [];
|
|
5
|
+
return {
|
|
6
|
+
note: (text) => ui.note(text),
|
|
7
|
+
warn: (sentence, fix) => {
|
|
8
|
+
warnings += 1;
|
|
9
|
+
ui.warn(fix === undefined ? sentence : explain(sentence, undefined, fix));
|
|
10
|
+
},
|
|
11
|
+
fail: (problem, fix) => {
|
|
12
|
+
failures.push({ problem, fix });
|
|
13
|
+
},
|
|
14
|
+
warnings: () => warnings,
|
|
15
|
+
failures: () => failures,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export const stopOf = (headline, failures) => [
|
|
19
|
+
headline,
|
|
20
|
+
...failures.flatMap((failure, at) => {
|
|
21
|
+
const number = failures.length > 1 ? `${at + 1}. ` : "";
|
|
22
|
+
return [` problem: ${number}${failure.problem}`, ` fix: ${failure.fix}`];
|
|
23
|
+
}),
|
|
24
|
+
].join("\n");
|
|
25
|
+
//# sourceMappingURL=tally.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tally.js","sourceRoot":"","sources":["../../src/uninstall/tally.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAoBhD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAa,EAAS,EAAE;IAC1C,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,OAAO;QACH,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YACpB,QAAQ,IAAI,CAAC,CAAC;YACd,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;QACxB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;KAC3B,CAAC;AACN,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,QAA4B,EAAU,EAAE,CAC7E;IACI,QAAQ;IACR,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,eAAe,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,eAAe,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC;CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/upkeep/login.d.ts
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { type EntryInspection } from "@intentic/local-agent";
|
|
2
2
|
import type { Finding, UpkeepEntry } from "./entry.js";
|
|
3
3
|
export declare const loginEntryFinding: (inspection: EntryInspection, repair: () => Promise<void>) => Finding | undefined;
|
|
4
|
-
export interface MutagenRunReading {
|
|
5
|
-
readonly pairings: number | Error;
|
|
6
|
-
readonly value: string | undefined;
|
|
7
|
-
readonly own: string;
|
|
8
|
-
readonly ownInUse: boolean;
|
|
9
|
-
}
|
|
10
|
-
export declare const mutagenRunDecision: (reading: MutagenRunReading) => "retire" | "repair" | {
|
|
11
|
-
readonly why: string;
|
|
12
|
-
} | undefined;
|
|
13
4
|
export declare const LOGIN_ENTRIES: readonly UpkeepEntry[];
|
|
14
5
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/upkeep/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/upkeep/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM9F,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2BvD,eAAO,MAAM,iBAAiB,eAAgB,eAAe,UAAU,MAAM,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,GAAG,SAQtG,CAAC;AAoDF,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAmC,CAAC"}
|