@intentic/machine 1.337.0 → 1.338.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.
Files changed (294) hide show
  1. package/README.md +92 -1
  2. package/dist/agent-trial.d.ts.map +1 -1
  3. package/dist/agent-trial.js +5 -15
  4. package/dist/agent-trial.js.map +1 -1
  5. package/dist/autostart/autostart.d.ts +2 -0
  6. package/dist/autostart/autostart.d.ts.map +1 -1
  7. package/dist/autostart/autostart.js +20 -0
  8. package/dist/autostart/autostart.js.map +1 -1
  9. package/dist/autostart/before-sign-in.d.ts +12 -0
  10. package/dist/autostart/before-sign-in.d.ts.map +1 -0
  11. package/dist/autostart/before-sign-in.js +103 -0
  12. package/dist/autostart/before-sign-in.js.map +1 -0
  13. package/dist/commands.d.ts.map +1 -1
  14. package/dist/commands.js +10 -1
  15. package/dist/commands.js.map +1 -1
  16. package/dist/daemon-base.d.ts.map +1 -1
  17. package/dist/daemon-base.js +2 -1
  18. package/dist/daemon-base.js.map +1 -1
  19. package/dist/device/commands.js +1 -1
  20. package/dist/device/commands.js.map +1 -1
  21. package/dist/device/config.d.ts +1 -1
  22. package/dist/device/config.d.ts.map +1 -1
  23. package/dist/device/config.js +3 -7
  24. package/dist/device/config.js.map +1 -1
  25. package/dist/device/connection.d.ts.map +1 -1
  26. package/dist/device/connection.js +1 -1
  27. package/dist/device/connection.js.map +1 -1
  28. package/dist/device/grant.d.ts +226 -1
  29. package/dist/device/grant.d.ts.map +1 -1
  30. package/dist/device/grant.js +2 -1
  31. package/dist/device/grant.js.map +1 -1
  32. package/dist/device/loopback-catch.d.ts +1 -1
  33. package/dist/device/loopback-catch.d.ts.map +1 -1
  34. package/dist/device/loopback-catch.js +1 -1
  35. package/dist/device/loopback-catch.js.map +1 -1
  36. package/dist/device/mcp.d.ts.map +1 -1
  37. package/dist/device/mcp.js +21 -13
  38. package/dist/device/mcp.js.map +1 -1
  39. package/dist/device/policy.d.ts +1 -1
  40. package/dist/device/policy.d.ts.map +1 -1
  41. package/dist/device/router.d.ts +227 -1
  42. package/dist/device/router.d.ts.map +1 -1
  43. package/dist/device/router.js +11 -0
  44. package/dist/device/router.js.map +1 -1
  45. package/dist/device/sandbox-rounds/auto-backup.d.ts +1 -1
  46. package/dist/device/sandbox-rounds/auto-backup.d.ts.map +1 -1
  47. package/dist/device/sandbox-rounds/auto-backup.js +3 -18
  48. package/dist/device/sandbox-rounds/auto-backup.js.map +1 -1
  49. package/dist/device/sandbox-rounds/auto-prepare.d.ts +1 -1
  50. package/dist/device/sandbox-rounds/auto-prepare.d.ts.map +1 -1
  51. package/dist/device/sandbox-rounds/ic-swaps.d.ts +1 -1
  52. package/dist/device/sandbox-rounds/ic-swaps.d.ts.map +1 -1
  53. package/dist/device/sandbox-rounds/ic-swaps.js +3 -8
  54. package/dist/device/sandbox-rounds/ic-swaps.js.map +1 -1
  55. package/dist/device/sandbox-rounds/keeper.d.ts +1 -1
  56. package/dist/device/sandbox-rounds/keeper.d.ts.map +1 -1
  57. package/dist/device/sandbox-rounds/keeper.js +2 -9
  58. package/dist/device/sandbox-rounds/keeper.js.map +1 -1
  59. package/dist/device/sandbox-rounds/probation-watch.d.ts.map +1 -1
  60. package/dist/device/sandbox-rounds/probation-watch.js +2 -9
  61. package/dist/device/sandbox-rounds/probation-watch.js.map +1 -1
  62. package/dist/device/sandbox-rounds/sleep.d.ts.map +1 -1
  63. package/dist/device/sandbox-rounds/sleep.js +3 -7
  64. package/dist/device/sandbox-rounds/sleep.js.map +1 -1
  65. package/dist/device/sandbox-rounds/swaps-fallback.d.ts +1 -1
  66. package/dist/device/sandbox-rounds/swaps-fallback.d.ts.map +1 -1
  67. package/dist/device/sandbox-rounds/swaps-fallback.js +3 -2
  68. package/dist/device/sandbox-rounds/swaps-fallback.js.map +1 -1
  69. package/dist/device/session.d.ts +5 -0
  70. package/dist/device/session.d.ts.map +1 -0
  71. package/dist/device/session.js +13 -0
  72. package/dist/device/session.js.map +1 -0
  73. package/dist/device/tools/agent.d.ts +1 -1
  74. package/dist/device/tools/agent.d.ts.map +1 -1
  75. package/dist/device/tools/agent.js +2 -2
  76. package/dist/device/tools/agent.js.map +1 -1
  77. package/dist/device/tools/android-parse.js +1 -1
  78. package/dist/device/tools/android-parse.js.map +1 -1
  79. package/dist/device/tools/android.d.ts +1 -1
  80. package/dist/device/tools/android.d.ts.map +1 -1
  81. package/dist/device/tools/android.js +1 -1
  82. package/dist/device/tools/android.js.map +1 -1
  83. package/dist/device/tools/apps.d.ts +1 -1
  84. package/dist/device/tools/apps.d.ts.map +1 -1
  85. package/dist/device/tools/browser.d.ts +1 -1
  86. package/dist/device/tools/browser.d.ts.map +1 -1
  87. package/dist/device/tools/command-ledger.d.ts.map +1 -1
  88. package/dist/device/tools/command-ledger.js +3 -11
  89. package/dist/device/tools/command-ledger.js.map +1 -1
  90. package/dist/device/tools/describe.d.ts +2 -1
  91. package/dist/device/tools/describe.d.ts.map +1 -1
  92. package/dist/device/tools/describe.js +13 -3
  93. package/dist/device/tools/describe.js.map +1 -1
  94. package/dist/device/tools/device.d.ts +1 -1
  95. package/dist/device/tools/device.d.ts.map +1 -1
  96. package/dist/device/tools/device.js +1 -1
  97. package/dist/device/tools/device.js.map +1 -1
  98. package/dist/device/tools/elements.d.ts +1 -1
  99. package/dist/device/tools/elements.d.ts.map +1 -1
  100. package/dist/device/tools/files.d.ts +1 -1
  101. package/dist/device/tools/files.d.ts.map +1 -1
  102. package/dist/device/tools/ic-binary.d.ts +3 -1
  103. package/dist/device/tools/ic-binary.d.ts.map +1 -1
  104. package/dist/device/tools/ic-binary.js +14 -7
  105. package/dist/device/tools/ic-binary.js.map +1 -1
  106. package/dist/device/tools/logs/logs.d.ts +1 -1
  107. package/dist/device/tools/logs/logs.d.ts.map +1 -1
  108. package/dist/device/tools/logs/logs.js +5 -11
  109. package/dist/device/tools/logs/logs.js.map +1 -1
  110. package/dist/device/tools/os/os.d.ts +2 -1
  111. package/dist/device/tools/os/os.d.ts.map +1 -1
  112. package/dist/device/tools/os/os.js +4 -8
  113. package/dist/device/tools/os/os.js.map +1 -1
  114. package/dist/device/tools/programs/artifacts.d.ts +2 -1
  115. package/dist/device/tools/programs/artifacts.d.ts.map +1 -1
  116. package/dist/device/tools/programs/artifacts.js.map +1 -1
  117. package/dist/device/tools/programs/device-tunnel.d.ts +2 -1
  118. package/dist/device/tools/programs/device-tunnel.d.ts.map +1 -1
  119. package/dist/device/tools/programs/device-tunnel.js.map +1 -1
  120. package/dist/device/tools/programs/programs.d.ts +1 -1
  121. package/dist/device/tools/programs/programs.d.ts.map +1 -1
  122. package/dist/device/tools/programs/programs.js +7 -11
  123. package/dist/device/tools/programs/programs.js.map +1 -1
  124. package/dist/device/tools/sandboxes.d.ts +2 -1
  125. package/dist/device/tools/sandboxes.d.ts.map +1 -1
  126. package/dist/device/tools/sandboxes.js +1 -1
  127. package/dist/device/tools/sandboxes.js.map +1 -1
  128. package/dist/device/tools/shell.d.ts +5 -1
  129. package/dist/device/tools/shell.d.ts.map +1 -1
  130. package/dist/device/tools/shell.js +10 -3
  131. package/dist/device/tools/shell.js.map +1 -1
  132. package/dist/engine-env.d.ts.map +1 -1
  133. package/dist/engine-env.js +2 -7
  134. package/dist/engine-env.js.map +1 -1
  135. package/dist/environments/auto-upgrade.d.ts +1 -1
  136. package/dist/environments/auto-upgrade.d.ts.map +1 -1
  137. package/dist/environments/auto-upgrade.js +1 -1
  138. package/dist/environments/auto-upgrade.js.map +1 -1
  139. package/dist/environments/crossing.js +1 -1
  140. package/dist/environments/crossing.js.map +1 -1
  141. package/dist/environments/machine-upgrade.js +1 -1
  142. package/dist/environments/machine-upgrade.js.map +1 -1
  143. package/dist/environments/machine.js +1 -1
  144. package/dist/environments/machine.js.map +1 -1
  145. package/dist/environments/wsl.js +4 -5
  146. package/dist/environments/wsl.js.map +1 -1
  147. package/dist/install.d.ts.map +1 -1
  148. package/dist/install.js +4 -2
  149. package/dist/install.js.map +1 -1
  150. package/dist/keyring/answer.d.ts +18 -0
  151. package/dist/keyring/answer.d.ts.map +1 -0
  152. package/dist/keyring/answer.js +46 -0
  153. package/dist/keyring/answer.js.map +1 -0
  154. package/dist/keyring/askpass.d.ts +31 -0
  155. package/dist/keyring/askpass.d.ts.map +1 -0
  156. package/dist/keyring/askpass.js +119 -0
  157. package/dist/keyring/askpass.js.map +1 -0
  158. package/dist/keyring/commands.d.ts +24 -0
  159. package/dist/keyring/commands.d.ts.map +1 -0
  160. package/dist/keyring/commands.js +384 -0
  161. package/dist/keyring/commands.js.map +1 -0
  162. package/dist/keyring/feature.d.ts +10 -0
  163. package/dist/keyring/feature.d.ts.map +1 -0
  164. package/dist/keyring/feature.js +36 -0
  165. package/dist/keyring/feature.js.map +1 -0
  166. package/dist/keyring/flags.d.ts +63 -0
  167. package/dist/keyring/flags.d.ts.map +1 -0
  168. package/dist/keyring/flags.js +177 -0
  169. package/dist/keyring/flags.js.map +1 -0
  170. package/dist/keyring/keyring-status.d.ts +32 -0
  171. package/dist/keyring/keyring-status.d.ts.map +1 -0
  172. package/dist/keyring/keyring-status.js +41 -0
  173. package/dist/keyring/keyring-status.js.map +1 -0
  174. package/dist/keyring/relay.d.ts +22 -0
  175. package/dist/keyring/relay.d.ts.map +1 -0
  176. package/dist/keyring/relay.js +104 -0
  177. package/dist/keyring/relay.js.map +1 -0
  178. package/dist/keyring/secret-input.d.ts +14 -0
  179. package/dist/keyring/secret-input.d.ts.map +1 -0
  180. package/dist/keyring/secret-input.js +78 -0
  181. package/dist/keyring/secret-input.js.map +1 -0
  182. package/dist/keyring/service.d.ts +44 -0
  183. package/dist/keyring/service.d.ts.map +1 -0
  184. package/dist/keyring/service.js +258 -0
  185. package/dist/keyring/service.js.map +1 -0
  186. package/dist/machine-id.d.ts.map +1 -1
  187. package/dist/machine-id.js +4 -5
  188. package/dist/machine-id.js.map +1 -1
  189. package/dist/release/release-signature.d.ts +17 -0
  190. package/dist/release/release-signature.d.ts.map +1 -0
  191. package/dist/release/release-signature.js +78 -0
  192. package/dist/release/release-signature.js.map +1 -0
  193. package/dist/release/release-verify.d.ts +11 -0
  194. package/dist/release/release-verify.d.ts.map +1 -0
  195. package/dist/release/release-verify.js +74 -0
  196. package/dist/release/release-verify.js.map +1 -0
  197. package/dist/release.d.ts +6 -0
  198. package/dist/release.d.ts.map +1 -1
  199. package/dist/release.js +8 -2
  200. package/dist/release.js.map +1 -1
  201. package/dist/resident/handover.d.ts +19 -0
  202. package/dist/resident/handover.d.ts.map +1 -0
  203. package/dist/resident/handover.js +32 -0
  204. package/dist/resident/handover.js.map +1 -0
  205. package/dist/resident/last-exit.d.ts.map +1 -1
  206. package/dist/resident/last-exit.js +6 -23
  207. package/dist/resident/last-exit.js.map +1 -1
  208. package/dist/resident/resident.d.ts +4 -1
  209. package/dist/resident/resident.d.ts.map +1 -1
  210. package/dist/resident/resident.js +82 -20
  211. package/dist/resident/resident.js.map +1 -1
  212. package/dist/status.d.ts +4 -1
  213. package/dist/status.d.ts.map +1 -1
  214. package/dist/status.js +9 -2
  215. package/dist/status.js.map +1 -1
  216. package/dist/sync/attach-commands.js +1 -1
  217. package/dist/sync/attach-commands.js.map +1 -1
  218. package/dist/sync/commands.d.ts.map +1 -1
  219. package/dist/sync/commands.js +4 -1
  220. package/dist/sync/commands.js.map +1 -1
  221. package/dist/sync/config.d.ts +2 -1
  222. package/dist/sync/config.d.ts.map +1 -1
  223. package/dist/sync/config.js +1 -1
  224. package/dist/sync/config.js.map +1 -1
  225. package/dist/sync/docker-ports.d.ts.map +1 -1
  226. package/dist/sync/docker-ports.js +2 -8
  227. package/dist/sync/docker-ports.js.map +1 -1
  228. package/dist/sync/environment.d.ts.map +1 -1
  229. package/dist/sync/environment.js +3 -10
  230. package/dist/sync/environment.js.map +1 -1
  231. package/dist/sync/forget-command.d.ts.map +1 -1
  232. package/dist/sync/forget-command.js +2 -6
  233. package/dist/sync/forget-command.js.map +1 -1
  234. package/dist/sync/gone.js +1 -1
  235. package/dist/sync/gone.js.map +1 -1
  236. package/dist/sync/mirror.d.ts +1 -1
  237. package/dist/sync/mirror.d.ts.map +1 -1
  238. package/dist/sync/mirror.js +3 -3
  239. package/dist/sync/mirror.js.map +1 -1
  240. package/dist/sync/mutagen.d.ts +1 -2
  241. package/dist/sync/mutagen.d.ts.map +1 -1
  242. package/dist/sync/mutagen.js +4 -6
  243. package/dist/sync/mutagen.js.map +1 -1
  244. package/dist/sync/project/project-delivery.d.ts +1 -1
  245. package/dist/sync/project/project-delivery.d.ts.map +1 -1
  246. package/dist/sync/project/project-delivery.js +1 -1
  247. package/dist/sync/project/project-delivery.js.map +1 -1
  248. package/dist/sync/project/project-files.d.ts +1 -1
  249. package/dist/sync/project/project-files.d.ts.map +1 -1
  250. package/dist/sync/project/project-local.d.ts.map +1 -1
  251. package/dist/sync/project/project-local.js +2 -8
  252. package/dist/sync/project/project-local.js.map +1 -1
  253. package/dist/sync/project/project-remote.d.ts.map +1 -1
  254. package/dist/sync/project/project-remote.js +2 -8
  255. package/dist/sync/project/project-remote.js.map +1 -1
  256. package/dist/sync/project/project-transfer.d.ts +1 -1
  257. package/dist/sync/project/project-transfer.d.ts.map +1 -1
  258. package/dist/sync/report.d.ts +1 -1
  259. package/dist/sync/report.d.ts.map +1 -1
  260. package/dist/sync/report.js +2 -2
  261. package/dist/sync/report.js.map +1 -1
  262. package/dist/sync/residue.d.ts +1 -1
  263. package/dist/sync/residue.d.ts.map +1 -1
  264. package/dist/sync/residue.js +1 -1
  265. package/dist/sync/residue.js.map +1 -1
  266. package/dist/sync/restore-points.d.ts.map +1 -1
  267. package/dist/sync/restore-points.js +2 -8
  268. package/dist/sync/restore-points.js.map +1 -1
  269. package/dist/sync/siblings.d.ts.map +1 -1
  270. package/dist/sync/siblings.js +4 -10
  271. package/dist/sync/siblings.js.map +1 -1
  272. package/dist/sync/ssh.d.ts.map +1 -1
  273. package/dist/sync/ssh.js +4 -3
  274. package/dist/sync/ssh.js.map +1 -1
  275. package/dist/sync/swap-pause.js +1 -1
  276. package/dist/sync/swap-pause.js.map +1 -1
  277. package/dist/upgrade.d.ts +2 -0
  278. package/dist/upgrade.d.ts.map +1 -1
  279. package/dist/upgrade.js +36 -4
  280. package/dist/upgrade.js.map +1 -1
  281. package/dist/upkeep/doctor.d.ts.map +1 -1
  282. package/dist/upkeep/doctor.js +4 -1
  283. package/dist/upkeep/doctor.js.map +1 -1
  284. package/dist/upkeep/reconcile.d.ts +1 -1
  285. package/dist/upkeep/reconcile.d.ts.map +1 -1
  286. package/dist/upkeep/reconcile.js +4 -15
  287. package/dist/upkeep/reconcile.js.map +1 -1
  288. package/dist/upkeep/retention.d.ts.map +1 -1
  289. package/dist/upkeep/retention.js +13 -17
  290. package/dist/upkeep/retention.js.map +1 -1
  291. package/dist/upkeep/trash.d.ts.map +1 -1
  292. package/dist/upkeep/trash.js +2 -1
  293. package/dist/upkeep/trash.js.map +1 -1
  294. package/package.json +9 -8
@@ -0,0 +1,384 @@
1
+ import { plural } from "@intentic/base/format";
2
+ import { askKeyring, keyringPaths, KeyringUnavailable, sealForKeyring } from "@intentic/keyring";
3
+ import { civilDayIn, localZone } from "@intentic/sandbox-contract/time/zone";
4
+ import { buildChoiceParser, buildRouteMap, numberParser } from "@stricli/core";
5
+ import { buildCommand } from "../cli-ui.js";
6
+ import { readLinks } from "../device/config.js";
7
+ import { MACHINE_VERSION } from "../version.js";
8
+ import { keyringAnswer } from "./answer.js";
9
+ import { askpassStatus, installAskpass, uninstallAskpass } from "./askpass.js";
10
+ import { addPlan, backendConfig, editPatch, editTakesValue, entryName, KeyringCliError, shareTarget, unshareTarget, } from "./flags.js";
11
+ import { readConfirmed, readStdin } from "./secret-input.js";
12
+ import { clock, keyringLine, keyringStatusLine, readAskpassAnswer, readKeyringStatus } from "./keyring-status.js";
13
+ import { hardenKeyring, installKeyring, keyringState, startKeyring, uninstallKeyring, upgradeKeyring } from "./service.js";
14
+ const pipe = () => ({ address: keyringPaths().address });
15
+ const json = { kind: "boolean", brief: "Print one JSON line, `ok` first (what the desktop app reads)", default: false };
16
+ const NAME = { brief: "The entry's name, as `{{secret:NAME}}` spells it", parse: String, placeholder: "NAME" };
17
+ const prompted = async (ui, read) => {
18
+ ui.suspend();
19
+ try {
20
+ return await read();
21
+ }
22
+ finally {
23
+ ui.resume();
24
+ }
25
+ };
26
+ const inboxKey = async () => {
27
+ const state = await askKeyring(pipe(), { op: "state" });
28
+ if (!state.ok) {
29
+ throw new KeyringCliError(state.code, state.refusal);
30
+ }
31
+ if (!state.setUp || state.state.keys === undefined) {
32
+ throw new KeyringCliError("no-keyring", "The keyring is not set up yet: set it up first with `intentic-machine keyring setup`.");
33
+ }
34
+ return state.state.keys.inbox;
35
+ };
36
+ const sealedValue = async (ui, name, from, what) => {
37
+ const key = await inboxKey();
38
+ const value = from === "stdin" ? await readStdin() : await prompted(ui, async () => await readConfirmed(what));
39
+ return sealForKeyring(key, name, value);
40
+ };
41
+ const PASSPHRASE_MIN = 10;
42
+ const choosePassphrase = async (ui, fromStdin) => {
43
+ if (!fromStdin) {
44
+ ui.note(`Choose the keyring's passphrase: ${PASSPHRASE_MIN} characters or more. It opens the vault where Windows Hello cannot, and nothing can recover it.`);
45
+ }
46
+ const passphrase = fromStdin ? await readStdin() : await prompted(ui, async () => await readConfirmed("Passphrase"));
47
+ if (passphrase.length < PASSPHRASE_MIN) {
48
+ throw new KeyringCliError("usage", `The passphrase is shorter than ${PASSPHRASE_MIN} characters: choose a longer one.`);
49
+ }
50
+ return passphrase;
51
+ };
52
+ const setup = buildCommand({
53
+ docs: { brief: "Install the keyring beside this agent, start it at login, and set up its vault" },
54
+ parameters: {
55
+ flags: {
56
+ passphraseStdin: { kind: "boolean", brief: "Read the passphrase once from stdin instead of twice from the terminal", default: false },
57
+ hello: { kind: "boolean", brief: "Also unlock with Windows Hello where this computer has it (--no-hello: the passphrase alone)", default: true },
58
+ json,
59
+ },
60
+ },
61
+ async func(flags) {
62
+ await keyringAnswer(this, flags.json, { doing: "Setting up the keyring", failed: "The keyring was not set up." }, async (ui) => {
63
+ const installed = await installKeyring(MACHINE_VERSION, ui.note);
64
+ const started = await startKeyring(ui.note);
65
+ if (!started.state.ok) {
66
+ return started.state;
67
+ }
68
+ const base = { ok: true, path: installed.path, autostart: started.autostart, setUp: true };
69
+ if (started.state.setUp) {
70
+ return { ...base, alreadySetUp: true, askpass: await readAskpassAnswer(), state: started.state.state };
71
+ }
72
+ const passphrase = await choosePassphrase(ui, flags.passphraseStdin);
73
+ const done = await askKeyring(pipe(), { op: "setup", passphrase, hello: flags.hello && process.platform === "win32" });
74
+ if (!done.ok) {
75
+ return done;
76
+ }
77
+ const after = await keyringState();
78
+ const state = after instanceof KeyringUnavailable || !after.ok ? undefined : after.state;
79
+ const answer = { ...base, alreadySetUp: false, askpass: await readAskpassAnswer() };
80
+ return state === undefined ? answer : { ...answer, state };
81
+ }, (result, ui) => {
82
+ ui.done(result.alreadySetUp ? `The keyring was set up already, and is running from ${result.path}.` : `Set up the keyring at ${result.path}; it starts at every sign-in.`);
83
+ ui.later([
84
+ ["keep a password in it", "intentic-machine keyring add NAME"],
85
+ ...(result.askpass.installed ? [] : [["let ssh, sudo and git ask it", "intentic-machine keyring askpass install"]]),
86
+ ]);
87
+ });
88
+ },
89
+ });
90
+ const status = buildCommand({
91
+ docs: { brief: "Whether the keyring is installed, running, set up and unlocked, and whether ssh, sudo and git ask it" },
92
+ parameters: { flags: { json } },
93
+ async func(flags) {
94
+ await keyringAnswer(this, flags.json, { failed: "The keyring's status could not be read." }, readKeyringStatus, (result, ui) => {
95
+ ui.report("intentic · keyring");
96
+ ui.items([keyringLine(keyringStatusLine(result)), { tone: result.askpass.installed ? "ok" : "skip", name: "askpass", meta: result.askpass.installed ? "ssh, sudo -A and git ask the keyring" : "not set for ssh, sudo and git" }]);
97
+ ui.fields([
98
+ ["vault", keyringPaths().dir],
99
+ ["log", keyringPaths().log],
100
+ ...(result.askpass.path === undefined ? [] : [["askpass", result.askpass.path]]),
101
+ ...(result.state === undefined ? [] : [["pending", plural(result.state.pendingInbox, "value")]]),
102
+ ]);
103
+ });
104
+ },
105
+ });
106
+ const unlock = buildCommand({
107
+ docs: { brief: "Unlock the vault for a while: `while-here` entries answer their sandboxes unasked until then" },
108
+ parameters: { flags: { minutes: { kind: "parsed", parse: numberParser, optional: true, brief: "For how long, 1 to 720 (default 60)" }, json } },
109
+ async func(flags) {
110
+ await keyringAnswer(this, flags.json, { doing: "Unlocking the keyring (it asks you)", failed: "The keyring was not unlocked." }, async () => await askKeyring(pipe(), { op: "unlock", minutes: flags.minutes ?? 60 }), (result, ui) => ui.done(`Unlocked the keyring until ${clock(result.unlockedUntil)}.`));
111
+ },
112
+ });
113
+ const lock = buildCommand({
114
+ docs: { brief: "Lock the vault now: every entry asks again before it answers" },
115
+ parameters: { flags: { json } },
116
+ async func(flags) {
117
+ await keyringAnswer(this, flags.json, { doing: "Locking the keyring", failed: "The keyring was not locked." }, async () => await askKeyring(pipe(), { op: "lock" }), (_result, ui) => ui.done("Locked the keyring."));
118
+ },
119
+ });
120
+ export const REMEMBERED_WARNING = "a remembered answer can be collected by any program of yours while it lasts, the agent's commands included";
121
+ const shareWords = (entry) => entry.shares.length === 0 ? "shared with no sandbox" : entry.shares.map((share) => `${URL.parse(share.sandbox)?.host ?? share.sandbox} (${share.mode})`).join(", ");
122
+ export const entryItem = (entry) => ({
123
+ tone: entry.askpassRememberMinutes > 0 ? "warn" : "ok",
124
+ name: entry.name,
125
+ meta: [
126
+ entry.kind,
127
+ entry.source === "keyring" ? undefined : `from ${entry.source}`,
128
+ shareWords(entry),
129
+ entry.askpassRememberMinutes > 0 ? `askpass answer remembered ${entry.askpassRememberMinutes} min: ${REMEMBERED_WARNING}` : undefined,
130
+ ]
131
+ .filter((part) => part !== undefined)
132
+ .join(" · "),
133
+ });
134
+ const list = buildCommand({
135
+ docs: { brief: "List the keyring's entries: names, rules and shares, never values" },
136
+ parameters: { flags: { json } },
137
+ async func(flags) {
138
+ await keyringAnswer(this, flags.json, { failed: "The keyring's entries could not be listed." }, async () => await askKeyring(pipe(), { op: "list" }), (result, ui) => {
139
+ ui.report("intentic · keyring entries", result.backends.length === 0 ? undefined : `reads from ${result.backends.join(", ")}`);
140
+ if (result.entries.length === 0) {
141
+ ui.quiet("The keyring holds no entries yet.");
142
+ ui.later([["keep a password in it", "intentic-machine keyring add NAME"]]);
143
+ return;
144
+ }
145
+ ui.items(result.entries.map(entryItem));
146
+ });
147
+ },
148
+ });
149
+ const ruleFlags = {
150
+ kind: { kind: "enum", values: ["password", "text"], optional: true, brief: "A password (typed only into a password field) or text (default password)" },
151
+ program: { kind: "parsed", parse: String, variadic: true, optional: true, brief: "A program it may be typed into without asking, by file name or path (repeatable)" },
152
+ package: { kind: "parsed", parse: String, variadic: true, optional: true, brief: "An Android app it may be typed into, by package name (repeatable)" },
153
+ host: { kind: "parsed", parse: String, variadic: true, optional: true, brief: "A site it may go to, exact or *.domain (repeatable)" },
154
+ username: { kind: "parsed", parse: String, optional: true, brief: "The user name that goes with it, for an askpass `Username for` prompt" },
155
+ askpass: { kind: "parsed", parse: String, variadic: true, optional: true, brief: "An askpass prompt it answers: ssh:user@host, ssh-key:/path, sudo, git:https://host, prompt:<text> (repeatable)" },
156
+ rememberMinutes: { kind: "parsed", parse: numberParser, optional: true, brief: "Minutes an askpass answer is remembered without asking again (default 0: ask every time)" },
157
+ };
158
+ const add = buildCommand({
159
+ docs: { brief: "Keep a new entry: a value typed now (or piped with --stdin), or one read from a password manager at each use" },
160
+ parameters: {
161
+ positional: { kind: "tuple", parameters: [NAME] },
162
+ flags: {
163
+ stdin: { kind: "boolean", brief: "Read the value from stdin (one trailing newline is dropped)", default: false },
164
+ ...ruleFlags,
165
+ anyField: { kind: "boolean", brief: "May be typed into a field the program does not mark as a password field", default: false },
166
+ backend: { kind: "enum", values: ["1password", "bitwarden", "keepassxc"], optional: true, brief: "Read the value from this password manager at each use, instead of keeping it" },
167
+ ref: { kind: "parsed", parse: String, optional: true, brief: "With --backend: op://Vault/Item/field, a Bitwarden item, or a KeePassXC Group/Entry" },
168
+ field: { kind: "parsed", parse: String, optional: true, brief: "With --backend bitwarden: password, username, totp or notes" },
169
+ attribute: { kind: "parsed", parse: String, optional: true, brief: "With --backend keepassxc: the attribute to read (default Password)" },
170
+ replace: { kind: "boolean", brief: "Replace an entry of the same name", default: false },
171
+ json,
172
+ },
173
+ },
174
+ async func(flags, name) {
175
+ await keyringAnswer(this, flags.json, { doing: `Adding ${name} to the keyring (it asks you)`, failed: `${name} was not added.` }, async (ui) => {
176
+ const plan = addPlan(name, flags);
177
+ const sealed = plan.needsValue ? await sealedValue(ui, plan.name, flags.stdin ? "stdin" : "terminal", `The value of ${plan.name}`) : undefined;
178
+ const answer = await askKeyring(pipe(), { op: "add", name: plan.name, sealed, backend: plan.backend, rules: plan.rules, replace: plan.replace });
179
+ return answer.ok ? { ok: true, name: plan.name } : answer;
180
+ }, (result, ui) => {
181
+ ui.done(`Added ${result.name} to the keyring.`);
182
+ ui.later([["share it with a sandbox", `intentic-machine keyring share ${result.name} --sandbox URL --mode each-use`]]);
183
+ });
184
+ },
185
+ });
186
+ const edit = buildCommand({
187
+ docs: { brief: "Change an entry's rules (a list flag replaces the whole list; --program \"\" empties it), or its value: alone, it asks for a new one" },
188
+ parameters: {
189
+ positional: { kind: "tuple", parameters: [NAME] },
190
+ flags: {
191
+ stdin: { kind: "boolean", brief: "Read a new value from stdin (one trailing newline is dropped)", default: false },
192
+ ...ruleFlags,
193
+ anyField: { kind: "enum", values: ["on", "off"], optional: true, brief: "Whether it may be typed into a field not marked as a password field" },
194
+ json,
195
+ },
196
+ },
197
+ async func(flags, name) {
198
+ await keyringAnswer(this, flags.json, { doing: `Changing ${name} (the keyring asks you)`, failed: `${name} was not changed.` }, async (ui) => {
199
+ const entry = entryName(name);
200
+ const patch = editPatch(flags);
201
+ const takes = editTakesValue(flags, patch);
202
+ const sealed = takes === "none" ? undefined : await sealedValue(ui, entry, takes, `The new value of ${entry}`);
203
+ const answer = await askKeyring(pipe(), { op: "edit", name: entry, patch, sealed });
204
+ return answer.ok ? { ok: true, name: entry, valueChanged: sealed !== undefined } : answer;
205
+ }, (result, ui) => ui.done(result.valueChanged ? `Changed the value of ${result.name}.` : `Changed the rules of ${result.name}.`));
206
+ },
207
+ });
208
+ const remove = buildCommand({
209
+ docs: { brief: "Remove an entry, and with it every share of it" },
210
+ parameters: { positional: { kind: "tuple", parameters: [NAME] }, flags: { json } },
211
+ async func(flags, name) {
212
+ await keyringAnswer(this, flags.json, { doing: `Removing ${name} (the keyring asks you)`, failed: `${name} was not removed.` }, async () => {
213
+ const entry = entryName(name);
214
+ const answer = await askKeyring(pipe(), { op: "remove", name: entry });
215
+ return answer.ok ? { ok: true, name: entry } : answer;
216
+ }, (result, ui) => ui.done(`Removed ${result.name} from the keyring.`));
217
+ },
218
+ });
219
+ const sandboxFlag = { kind: "parsed", parse: String, optional: true, brief: "The sandbox: its address, or its link's id (`intentic-machine status` lists them)" };
220
+ const share = buildCommand({
221
+ docs: { brief: "Share an entry with a sandbox linked to this computer: each-use, while-here or copy" },
222
+ parameters: {
223
+ positional: { kind: "tuple", parameters: [NAME] },
224
+ flags: {
225
+ sandbox: sandboxFlag,
226
+ mode: {
227
+ kind: "enum",
228
+ values: ["each-use", "while-here", "copy"],
229
+ brief: "each-use asks you every time; while-here answers while unlocked; copy keeps a copy in the sandbox",
230
+ },
231
+ json,
232
+ },
233
+ },
234
+ async func(flags, name) {
235
+ await keyringAnswer(this, flags.json, { doing: `Sharing ${name} (the keyring asks you)`, failed: `${name} was not shared.` }, async () => {
236
+ const entry = entryName(name);
237
+ const link = shareTarget(await readLinks(), flags.sandbox);
238
+ const answer = await askKeyring(pipe(), { op: "share", name: entry, sandbox: link.sandboxUrl, machine: link.id, mode: flags.mode });
239
+ return answer.ok ? { ok: true, name: entry, sandbox: link.sandboxUrl, machine: link.id, mode: flags.mode, fingerprint: answer.fingerprint } : answer;
240
+ }, (result, ui) => {
241
+ ui.note(`The sandbox's signing key is ${result.fingerprint}, as the prompt showed it.`);
242
+ ui.done(`Shared ${result.name} with ${result.sandbox} (${result.mode}).`);
243
+ });
244
+ },
245
+ });
246
+ const unshare = buildCommand({
247
+ docs: { brief: "Stop sharing an entry with a sandbox" },
248
+ parameters: { positional: { kind: "tuple", parameters: [NAME] }, flags: { sandbox: sandboxFlag, json } },
249
+ async func(flags, name) {
250
+ await keyringAnswer(this, flags.json, { doing: `Unsharing ${name}`, failed: `${name} is still shared.` }, async () => {
251
+ const entry = entryName(name);
252
+ const sandbox = unshareTarget(await readLinks(), flags.sandbox);
253
+ const answer = await askKeyring(pipe(), { op: "unshare", name: entry, sandbox });
254
+ return answer.ok ? { ok: true, name: entry, sandbox } : answer;
255
+ }, (result, ui) => ui.done(`${result.name} is no longer shared with ${result.sandbox}.`));
256
+ },
257
+ });
258
+ const BACKENDS = ["1password", "bitwarden", "keepassxc"];
259
+ const backend = buildCommand({
260
+ docs: { brief: "Tell the keyring how to reach a password manager its entries read from" },
261
+ parameters: {
262
+ positional: { kind: "tuple", parameters: [{ brief: "1password, bitwarden or keepassxc", parse: buildChoiceParser(BACKENDS), placeholder: "1password|bitwarden|keepassxc" }] },
263
+ flags: {
264
+ cli: { kind: "parsed", parse: String, optional: true, brief: "The manager's command (default op, bw or keepassxc-cli)" },
265
+ account: { kind: "parsed", parse: String, optional: true, brief: "1password: the account to read from" },
266
+ tokenEntry: { kind: "parsed", parse: String, optional: true, brief: "1password: the entry holding a service-account token, for reads without the app's prompt" },
267
+ passwordEntry: { kind: "parsed", parse: String, optional: true, brief: "bitwarden, keepassxc: the entry holding the master or database password" },
268
+ database: { kind: "parsed", parse: String, optional: true, brief: "keepassxc: the database file" },
269
+ keyFile: { kind: "parsed", parse: String, optional: true, brief: "keepassxc: the database's key file" },
270
+ json,
271
+ },
272
+ },
273
+ async func(flags, name) {
274
+ await keyringAnswer(this, flags.json, { doing: `Setting up ${name} for the keyring (it asks you)`, failed: `${name} was not set up.` }, async () => {
275
+ const answer = await askKeyring(pipe(), { op: "backend", config: backendConfig(name, flags) });
276
+ return answer.ok ? { ok: true, backend: name } : answer;
277
+ }, (result, ui) => ui.done(`The keyring reads entries from ${result.backend} from now on.`));
278
+ },
279
+ });
280
+ const askpassDrawn = (result, ui, installed) => {
281
+ if (result.profile !== undefined && installed) {
282
+ ui.note(`Written to ${result.file ?? ""}, which your next sign-in reads. A terminal's shell reads its profile instead: add these lines to it.`);
283
+ for (const line of result.profile) {
284
+ ui.note(line);
285
+ }
286
+ ui.note("sudo asks askpass only as `sudo -A`.");
287
+ }
288
+ if (result.profile !== undefined && !installed) {
289
+ ui.note("Remove these lines from your shell profile, where you added them:");
290
+ for (const line of result.profile) {
291
+ ui.note(line);
292
+ }
293
+ }
294
+ ui.done(installed ? "ssh, sudo -A and git ask the keyring for passwords from now on." : "ssh, sudo and git no longer ask the keyring.");
295
+ };
296
+ const askpassInstall = buildCommand({
297
+ docs: { brief: "Point ssh, sudo -A and git at intentic-askpass for your user" },
298
+ parameters: { flags: { json } },
299
+ async func(flags) {
300
+ await keyringAnswer(this, flags.json, { doing: "Pointing ssh, sudo and git at the keyring", failed: "askpass was not set up." }, async () => ({ ok: true, ...(await installAskpass()) }), (result, ui) => askpassDrawn(result, ui, true));
301
+ },
302
+ });
303
+ const askpassUninstall = buildCommand({
304
+ docs: { brief: "Stop ssh, sudo and git asking intentic-askpass" },
305
+ parameters: { flags: { json } },
306
+ async func(flags) {
307
+ await keyringAnswer(this, flags.json, { doing: "Taking ssh, sudo and git off the keyring", failed: "askpass is still set." }, async () => ({ ok: true, ...(await uninstallAskpass()) }), (result, ui) => askpassDrawn(result, ui, false));
308
+ },
309
+ });
310
+ const askpassStatusCommand = buildCommand({
311
+ docs: { brief: "Whether ssh, sudo and git ask intentic-askpass for your user" },
312
+ parameters: { flags: { json } },
313
+ async func(flags) {
314
+ await keyringAnswer(this, flags.json, { failed: "askpass's status could not be read." }, async () => ({ ok: true, ...(await askpassStatus()) }), (result, ui) => {
315
+ ui.report("intentic · askpass");
316
+ ui.items([{ tone: result.installed ? "ok" : "skip", name: "askpass", meta: result.installed ? "ssh, sudo -A and git ask the keyring" : "not set" }]);
317
+ ui.fields(Object.entries(result.variables).map(([variable, value]) => [variable, value ?? ""]));
318
+ });
319
+ },
320
+ });
321
+ const syncStatus = buildCommand({
322
+ docs: { brief: "The keyring's sync key and the keyrings on your other computers it keeps in step with" },
323
+ parameters: { flags: { json } },
324
+ async func(flags) {
325
+ await keyringAnswer(this, flags.json, { failed: "The keyring's sync could not be read." }, async () => await askKeyring(pipe(), { op: "sync-state" }), (result, ui) => {
326
+ ui.report("intentic · keyring sync", `revision ${result.sync.revision}`);
327
+ ui.fields([["sync key", result.sync.key]]);
328
+ if (result.sync.peers.length === 0) {
329
+ ui.quiet("Paired with no other computer's keyring.");
330
+ return;
331
+ }
332
+ ui.items(result.sync.peers.map((peer) => ({ tone: "ok", name: peer.device, meta: `paired ${civilDayIn(peer.pairedAt, localZone())}` })));
333
+ });
334
+ },
335
+ });
336
+ const upgrade = buildCommand({
337
+ docs: { brief: "Move the keyring to this agent's release, once the running keyring has asked you" },
338
+ parameters: { flags: { json } },
339
+ async func(flags) {
340
+ await keyringAnswer(this, flags.json, { doing: `Updating the keyring to ${MACHINE_VERSION}`, failed: "The keyring was not updated." }, async (ui) => await upgradeKeyring(MACHINE_VERSION, ui.note), (result, ui) => ui.done(result.upgraded ? `Updated the keyring from ${result.from} to ${result.to}.` : `The keyring is already on ${result.to}. Nothing to do.`));
341
+ },
342
+ });
343
+ const harden = buildCommand({
344
+ docs: { brief: "Windows: move the vault under a service of its own, out of reach of your user's processes (one UAC prompt)" },
345
+ parameters: { flags: { json } },
346
+ async func(flags) {
347
+ await keyringAnswer(this, flags.json, { doing: "Hardening the keyring", failed: "The keyring was not hardened." }, async (ui) => ({ ok: true, ...(await hardenKeyring(ui.note)) }), (result, ui) => ui.done(`The vault is held by the ${result.service} service now; its helper starts at every sign-in.`));
348
+ },
349
+ });
350
+ const uninstall = buildCommand({
351
+ docs: { brief: "Remove the keyring from this computer, keeping its vault" },
352
+ parameters: { flags: { json } },
353
+ async func(flags) {
354
+ await keyringAnswer(this, flags.json, { doing: "Removing the keyring", failed: "The keyring was not removed." }, async (ui) => {
355
+ await uninstallAskpass();
356
+ return { ok: true, ...(await uninstallKeyring(ui.note)) };
357
+ }, (result, ui) => {
358
+ ui.note(`The vault stays in ${result.vault}${result.hardened ? " (hardened: under %ProgramData%\\Intentic\\Keyring)" : ""}: set the keyring up again and the same passphrase opens it.`);
359
+ ui.done("Removed the keyring from this computer.");
360
+ });
361
+ },
362
+ });
363
+ export const keyringCommands = {
364
+ setup,
365
+ status,
366
+ unlock,
367
+ lock,
368
+ list,
369
+ add,
370
+ edit,
371
+ remove,
372
+ share,
373
+ unshare,
374
+ backend,
375
+ askpass: buildRouteMap({
376
+ routes: { install: askpassInstall, uninstall: askpassUninstall, status: askpassStatusCommand },
377
+ docs: { brief: "Let ssh, sudo and git ask the keyring for passwords" },
378
+ }),
379
+ sync: buildRouteMap({ routes: { status: syncStatus }, docs: { brief: "The keyring's sync with your other computers" } }),
380
+ upgrade,
381
+ harden,
382
+ uninstall,
383
+ };
384
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/keyring/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const KEYRING_PROBE_TIMEOUT_MS = 1500;
2
+ export declare const KEYRING_PROBE_TTL_MS = 30000;
3
+ export interface KeyringProbeDeps {
4
+ readonly installed: () => boolean;
5
+ readonly answers: () => Promise<boolean>;
6
+ readonly now: () => number;
7
+ }
8
+ export declare const keyringProbe: (deps?: KeyringProbeDeps, ttlMs?: number) => (() => Promise<boolean>);
9
+ export declare const keyringAdvertised: () => Promise<boolean>;
10
+ //# sourceMappingURL=feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../src/keyring/feature.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAE9C,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;IAElC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;CAC9B;AAcD,eAAO,MAAM,YAAY,UAAU,gBAAgB,UAAoB,MAAM,KAA0B,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAuB7H,CAAC;AAGF,eAAO,MAAM,iBAAiB,QA1BgF,OAAO,CAAC,OAAO,CA0B9E,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { existsSync } from "node:fs";
2
+ import { askKeyring, keyringPaths } from "@intentic/keyring";
3
+ import { keyringPath } from "../release.js";
4
+ export const KEYRING_PROBE_TIMEOUT_MS = 1_500;
5
+ export const KEYRING_PROBE_TTL_MS = 30_000;
6
+ const realDeps = {
7
+ installed: () => existsSync(keyringPath),
8
+ answers: async () => await askKeyring({ address: keyringPaths().address, timeoutMs: KEYRING_PROBE_TIMEOUT_MS }, { op: "state" }).then(() => true, () => false),
9
+ now: Date.now,
10
+ };
11
+ export const keyringProbe = (deps = realDeps, ttlMs = KEYRING_PROBE_TTL_MS) => {
12
+ let known;
13
+ let asking;
14
+ const ask = async () => {
15
+ if (!deps.installed()) {
16
+ return false;
17
+ }
18
+ return await deps.answers();
19
+ };
20
+ return async () => {
21
+ if (known !== undefined && deps.now() - known.at < ttlMs) {
22
+ return known.answer;
23
+ }
24
+ asking ??= ask()
25
+ .then((answer) => {
26
+ known = { at: deps.now(), answer };
27
+ return answer;
28
+ })
29
+ .finally(() => {
30
+ asking = undefined;
31
+ });
32
+ return await asking;
33
+ };
34
+ };
35
+ export const keyringAdvertised = keyringProbe();
36
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../src/keyring/feature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQ5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAS3C,MAAM,QAAQ,GAAqB;IAC/B,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;IACxC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAC5G,GAAG,EAAE,CAAC,IAAI,EAEV,GAAG,EAAE,CAAC,KAAK,CACd;IACL,GAAG,EAAE,IAAI,CAAC,GAAG;CAChB,CAAC;AAGF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,GAAqB,QAAQ,EAAE,KAAK,GAAW,oBAAoB,EAA4B,EAAE;IAC9H,IAAI,KAAoE,CAAC;IACzE,IAAI,MAAoC,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,IAAsB,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC;IACF,OAAO,KAAK,IAAI,EAAE;QACd,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC;QACD,MAAM,KAAK,GAAG,EAAE;aACX,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACb,KAAK,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACV,MAAM,GAAG,SAAS,CAAC;QACvB,CAAC,CAAC,CAAC;QACP,OAAO,MAAM,MAAM,CAAC;IACxB,CAAC,CAAC;AACN,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,EAAE,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { type BackendConfig, type BackendRef, type EntryPatch, type EntryRules } from "@intentic/keyring";
2
+ import { type KeyringRefusalCode, type KeyringShareMode } from "@intentic/sandbox-contract/schemas/keyring";
3
+ export type KeyringCliCode = KeyringRefusalCode | "usage" | "failed";
4
+ export declare class KeyringCliError extends Error {
5
+ readonly code: KeyringCliCode;
6
+ constructor(code: KeyringCliCode, message: string, options?: ErrorOptions);
7
+ }
8
+ export interface RuleFlags {
9
+ readonly kind?: "password" | "text";
10
+ readonly program?: readonly string[];
11
+ readonly package?: readonly string[];
12
+ readonly host?: readonly string[];
13
+ readonly username?: string;
14
+ readonly askpass?: readonly string[];
15
+ readonly rememberMinutes?: number;
16
+ }
17
+ export type BackendName = "1password" | "bitwarden" | "keepassxc";
18
+ export interface AddFlags extends RuleFlags {
19
+ readonly stdin: boolean;
20
+ readonly anyField: boolean;
21
+ readonly backend?: BackendName;
22
+ readonly ref?: string;
23
+ readonly field?: string;
24
+ readonly attribute?: string;
25
+ readonly replace: boolean;
26
+ readonly json: boolean;
27
+ }
28
+ export interface EditFlags extends RuleFlags {
29
+ readonly stdin: boolean;
30
+ readonly anyField?: "on" | "off";
31
+ readonly json: boolean;
32
+ }
33
+ export declare const entryName: (name: string) => string;
34
+ export declare const listOf: (given: readonly string[] | undefined) => string[] | undefined;
35
+ export interface AddPlan {
36
+ readonly name: string;
37
+ readonly rules: EntryRules;
38
+ readonly backend?: BackendRef;
39
+ readonly replace: boolean;
40
+ readonly needsValue: boolean;
41
+ }
42
+ export declare const addPlan: (name: string, flags: AddFlags) => AddPlan;
43
+ export declare const editPatch: (flags: EditFlags) => EntryPatch;
44
+ export declare const editTakesValue: (flags: EditFlags, patch: EntryPatch) => "stdin" | "terminal" | "none";
45
+ export declare const shareMode: (mode: string) => KeyringShareMode;
46
+ export interface LinkedSandbox {
47
+ readonly sandboxUrl: string;
48
+ readonly id: string;
49
+ }
50
+ export declare const linkNamed: (links: readonly LinkedSandbox[], named: string) => LinkedSandbox | undefined;
51
+ export declare const shareTarget: (links: readonly LinkedSandbox[], named: string | undefined) => LinkedSandbox;
52
+ export declare const unshareTarget: (links: readonly LinkedSandbox[], named: string | undefined) => string;
53
+ export interface BackendFlags {
54
+ readonly cli?: string;
55
+ readonly account?: string;
56
+ readonly tokenEntry?: string;
57
+ readonly passwordEntry?: string;
58
+ readonly database?: string;
59
+ readonly keyFile?: string;
60
+ readonly json: boolean;
61
+ }
62
+ export declare const backendConfig: (backend: BackendName, flags: BackendFlags) => BackendConfig;
63
+ //# sourceMappingURL=flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/keyring/flags.ts"],"names":[],"mappings":"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"}