@intentic/keyring 1.344.0 → 1.346.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 (231) hide show
  1. package/README.md +141 -45
  2. package/dist/address.d.ts +0 -1
  3. package/dist/address.d.ts.map +1 -1
  4. package/dist/address.js +1 -1
  5. package/dist/address.js.map +1 -1
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js +49 -48
  8. package/dist/app.js.map +1 -1
  9. package/dist/askpass/answer.d.ts +12 -0
  10. package/dist/askpass/answer.d.ts.map +1 -0
  11. package/dist/askpass/answer.js +204 -0
  12. package/dist/askpass/answer.js.map +1 -0
  13. package/dist/askpass/askpass.d.ts +6 -0
  14. package/dist/askpass/askpass.d.ts.map +1 -1
  15. package/dist/askpass/askpass.js +28 -0
  16. package/dist/askpass/askpass.js.map +1 -1
  17. package/dist/audit.d.ts +5 -2
  18. package/dist/audit.d.ts.map +1 -1
  19. package/dist/audit.js +15 -2
  20. package/dist/audit.js.map +1 -1
  21. package/dist/consent/consent-posix.d.ts +7 -3
  22. package/dist/consent/consent-posix.d.ts.map +1 -1
  23. package/dist/consent/consent-posix.js +82 -12
  24. package/dist/consent/consent-posix.js.map +1 -1
  25. package/dist/consent/consent-windows.d.ts +3 -1
  26. package/dist/consent/consent-windows.d.ts.map +1 -1
  27. package/dist/consent/consent-windows.js +174 -62
  28. package/dist/consent/consent-windows.js.map +1 -1
  29. package/dist/consent/consent.d.ts +41 -2
  30. package/dist/consent/consent.d.ts.map +1 -1
  31. package/dist/consent/consent.js +7 -5
  32. package/dist/consent/consent.js.map +1 -1
  33. package/dist/core.d.ts +3 -30
  34. package/dist/core.d.ts.map +1 -1
  35. package/dist/core.js +189 -62
  36. package/dist/core.js.map +1 -1
  37. package/dist/git-credential/git-credential.d.ts +18 -0
  38. package/dist/git-credential/git-credential.d.ts.map +1 -0
  39. package/dist/git-credential/git-credential.js +68 -0
  40. package/dist/git-credential/git-credential.js.map +1 -0
  41. package/dist/index.d.ts +5 -2
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +5 -2
  44. package/dist/index.js.map +1 -1
  45. package/dist/native-host/framing.d.ts +10 -0
  46. package/dist/native-host/framing.d.ts.map +1 -0
  47. package/dist/native-host/framing.js +33 -0
  48. package/dist/native-host/framing.js.map +1 -0
  49. package/dist/native-host/native-host.d.ts +11 -0
  50. package/dist/native-host/native-host.d.ts.map +1 -0
  51. package/dist/native-host/native-host.js +130 -0
  52. package/dist/native-host/native-host.js.map +1 -0
  53. package/dist/passwords/access.d.ts +73 -0
  54. package/dist/passwords/access.d.ts.map +1 -0
  55. package/dist/passwords/access.js +3 -0
  56. package/dist/passwords/access.js.map +1 -0
  57. package/dist/passwords/app-ops.d.ts +18 -0
  58. package/dist/passwords/app-ops.d.ts.map +1 -0
  59. package/dist/passwords/app-ops.js +261 -0
  60. package/dist/passwords/app-ops.js.map +1 -0
  61. package/dist/passwords/capture.d.ts +35 -0
  62. package/dist/passwords/capture.d.ts.map +1 -0
  63. package/dist/passwords/capture.js +306 -0
  64. package/dist/passwords/capture.js.map +1 -0
  65. package/dist/passwords/entries.d.ts +20 -0
  66. package/dist/passwords/entries.d.ts.map +1 -0
  67. package/dist/passwords/entries.js +57 -0
  68. package/dist/passwords/entries.js.map +1 -0
  69. package/dist/passwords/fills.d.ts +10 -0
  70. package/dist/passwords/fills.d.ts.map +1 -0
  71. package/dist/passwords/fills.js +87 -0
  72. package/dist/passwords/fills.js.map +1 -0
  73. package/dist/passwords/needs.d.ts +11 -0
  74. package/dist/passwords/needs.d.ts.map +1 -0
  75. package/dist/passwords/needs.js +232 -0
  76. package/dist/passwords/needs.js.map +1 -0
  77. package/dist/passwords/phone.d.ts +19 -0
  78. package/dist/passwords/phone.d.ts.map +1 -0
  79. package/dist/passwords/phone.js +125 -0
  80. package/dist/passwords/phone.js.map +1 -0
  81. package/dist/protocol.d.ts +1169 -0
  82. package/dist/protocol.d.ts.map +1 -1
  83. package/dist/protocol.js +86 -1
  84. package/dist/protocol.js.map +1 -1
  85. package/dist/service/channel.d.ts +10 -3
  86. package/dist/service/channel.d.ts.map +1 -1
  87. package/dist/service/channel.js +31 -13
  88. package/dist/service/channel.js.map +1 -1
  89. package/dist/service/door.d.ts +45 -4
  90. package/dist/service/door.d.ts.map +1 -1
  91. package/dist/service/door.js +31 -2
  92. package/dist/service/door.js.map +1 -1
  93. package/dist/service/helper.d.ts +18 -1
  94. package/dist/service/helper.d.ts.map +1 -1
  95. package/dist/service/helper.js +68 -28
  96. package/dist/service/helper.js.map +1 -1
  97. package/dist/service/linux/install-linux.d.ts +12 -0
  98. package/dist/service/linux/install-linux.d.ts.map +1 -0
  99. package/dist/service/linux/install-linux.js +133 -0
  100. package/dist/service/linux/install-linux.js.map +1 -0
  101. package/dist/service/linux/paths-linux.d.ts +21 -0
  102. package/dist/service/linux/paths-linux.d.ts.map +1 -0
  103. package/dist/service/linux/paths-linux.js +31 -0
  104. package/dist/service/linux/paths-linux.js.map +1 -0
  105. package/dist/service/linux/polkit-linux.d.ts +29 -0
  106. package/dist/service/linux/polkit-linux.d.ts.map +1 -0
  107. package/dist/service/linux/polkit-linux.js +89 -0
  108. package/dist/service/linux/polkit-linux.js.map +1 -0
  109. package/dist/service/linux/service-run-linux.d.ts +4 -0
  110. package/dist/service/linux/service-run-linux.d.ts.map +1 -0
  111. package/dist/service/linux/service-run-linux.js +52 -0
  112. package/dist/service/linux/service-run-linux.js.map +1 -0
  113. package/dist/service/linux/session-linux.d.ts +4 -0
  114. package/dist/service/linux/session-linux.d.ts.map +1 -0
  115. package/dist/service/linux/session-linux.js +13 -0
  116. package/dist/service/linux/session-linux.js.map +1 -0
  117. package/dist/service/linux/unit-linux.d.ts +16 -0
  118. package/dist/service/linux/unit-linux.d.ts.map +1 -0
  119. package/dist/service/linux/unit-linux.js +67 -0
  120. package/dist/service/linux/unit-linux.js.map +1 -0
  121. package/dist/service/platform.d.ts +7 -0
  122. package/dist/service/platform.d.ts.map +1 -0
  123. package/dist/service/platform.js +62 -0
  124. package/dist/service/platform.js.map +1 -0
  125. package/dist/service/recovery.d.ts +3 -0
  126. package/dist/service/recovery.d.ts.map +1 -0
  127. package/dist/service/recovery.js +22 -0
  128. package/dist/service/recovery.js.map +1 -0
  129. package/dist/service/remote.d.ts +4 -1
  130. package/dist/service/remote.d.ts.map +1 -1
  131. package/dist/service/remote.js +41 -6
  132. package/dist/service/remote.js.map +1 -1
  133. package/dist/service/service-key.d.ts +9 -0
  134. package/dist/service/service-key.d.ts.map +1 -0
  135. package/dist/service/service-key.js +55 -0
  136. package/dist/service/service-key.js.map +1 -0
  137. package/dist/service/service-run.d.ts +20 -2
  138. package/dist/service/service-run.d.ts.map +1 -1
  139. package/dist/service/service-run.js +52 -46
  140. package/dist/service/service-run.js.map +1 -1
  141. package/dist/service/user.d.ts +8 -0
  142. package/dist/service/user.d.ts.map +1 -0
  143. package/dist/service/user.js +39 -0
  144. package/dist/service/user.js.map +1 -0
  145. package/dist/service/{acl.d.ts → windows/acl-windows.d.ts} +3 -3
  146. package/dist/service/windows/acl-windows.d.ts.map +1 -0
  147. package/dist/service/{acl.js → windows/acl-windows.js} +3 -3
  148. package/dist/service/windows/acl-windows.js.map +1 -0
  149. package/dist/service/{install.d.ts → windows/install-windows.d.ts} +4 -2
  150. package/dist/service/windows/install-windows.d.ts.map +1 -0
  151. package/dist/service/{install.js → windows/install-windows.js} +13 -12
  152. package/dist/service/windows/install-windows.js.map +1 -0
  153. package/dist/service/windows/leftovers-windows.d.ts +8 -0
  154. package/dist/service/windows/leftovers-windows.d.ts.map +1 -0
  155. package/dist/service/windows/leftovers-windows.js +44 -0
  156. package/dist/service/windows/leftovers-windows.js.map +1 -0
  157. package/dist/service/{paths.d.ts → windows/paths-windows.d.ts} +4 -5
  158. package/dist/service/windows/paths-windows.d.ts.map +1 -0
  159. package/dist/service/{paths.js → windows/paths-windows.js} +5 -5
  160. package/dist/service/windows/paths-windows.js.map +1 -0
  161. package/dist/service/windows/service-run-windows.d.ts +4 -0
  162. package/dist/service/windows/service-run-windows.d.ts.map +1 -0
  163. package/dist/service/windows/service-run-windows.js +46 -0
  164. package/dist/service/windows/service-run-windows.js.map +1 -0
  165. package/dist/service/windows/session-windows.d.ts +4 -0
  166. package/dist/service/windows/session-windows.d.ts.map +1 -0
  167. package/dist/service/windows/session-windows.js +13 -0
  168. package/dist/service/windows/session-windows.js.map +1 -0
  169. package/dist/service/windows/sid-windows.d.ts +3 -0
  170. package/dist/service/windows/sid-windows.d.ts.map +1 -0
  171. package/dist/service/{sid.js → windows/sid-windows.js} +2 -2
  172. package/dist/service/windows/sid-windows.js.map +1 -0
  173. package/dist/service/{task.d.ts → windows/task-windows.d.ts} +4 -3
  174. package/dist/service/windows/task-windows.d.ts.map +1 -0
  175. package/dist/service/{task.js → windows/task-windows.js} +19 -2
  176. package/dist/service/windows/task-windows.js.map +1 -0
  177. package/dist/service/wire.d.ts +32 -0
  178. package/dist/service/wire.d.ts.map +1 -1
  179. package/dist/service/wire.js +15 -0
  180. package/dist/service/wire.js.map +1 -1
  181. package/dist/typing/clipboard.d.ts +13 -0
  182. package/dist/typing/clipboard.d.ts.map +1 -0
  183. package/dist/typing/clipboard.js +56 -0
  184. package/dist/typing/clipboard.js.map +1 -0
  185. package/dist/typing/index.d.ts.map +1 -1
  186. package/dist/typing/index.js +2 -1
  187. package/dist/typing/index.js.map +1 -1
  188. package/dist/typing/typist.d.ts +3 -1
  189. package/dist/typing/typist.d.ts.map +1 -1
  190. package/dist/typing/typist.js +2 -1
  191. package/dist/typing/typist.js.map +1 -1
  192. package/dist/vault.d.ts +785 -0
  193. package/dist/vault.d.ts.map +1 -1
  194. package/dist/vault.js +24 -2
  195. package/dist/vault.js.map +1 -1
  196. package/dist/watch/apps.d.ts +10 -0
  197. package/dist/watch/apps.d.ts.map +1 -0
  198. package/dist/watch/apps.js +95 -0
  199. package/dist/watch/apps.js.map +1 -0
  200. package/dist/watch/chip.d.ts +52 -0
  201. package/dist/watch/chip.d.ts.map +1 -0
  202. package/dist/watch/chip.js +76 -0
  203. package/dist/watch/chip.js.map +1 -0
  204. package/dist/watch/lines-child.d.ts +9 -0
  205. package/dist/watch/lines-child.d.ts.map +1 -0
  206. package/dist/watch/lines-child.js +34 -0
  207. package/dist/watch/lines-child.js.map +1 -0
  208. package/dist/watch/watch-linux.d.ts +6 -0
  209. package/dist/watch/watch-linux.d.ts.map +1 -0
  210. package/dist/watch/watch-linux.js +52 -0
  211. package/dist/watch/watch-linux.js.map +1 -0
  212. package/dist/watch/watch-windows.d.ts +6 -0
  213. package/dist/watch/watch-windows.d.ts.map +1 -0
  214. package/dist/watch/watch-windows.js +110 -0
  215. package/dist/watch/watch-windows.js.map +1 -0
  216. package/package.json +5 -5
  217. package/dist/serve.d.ts +0 -17
  218. package/dist/serve.d.ts.map +0 -1
  219. package/dist/serve.js +0 -65
  220. package/dist/serve.js.map +0 -1
  221. package/dist/service/acl.d.ts.map +0 -1
  222. package/dist/service/acl.js.map +0 -1
  223. package/dist/service/install.d.ts.map +0 -1
  224. package/dist/service/install.js.map +0 -1
  225. package/dist/service/paths.d.ts.map +0 -1
  226. package/dist/service/paths.js.map +0 -1
  227. package/dist/service/sid.d.ts +0 -3
  228. package/dist/service/sid.d.ts.map +0 -1
  229. package/dist/service/sid.js.map +0 -1
  230. package/dist/service/task.d.ts.map +0 -1
  231. package/dist/service/task.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ import { writeFileAtomic } from "@intentic/base/fs";
2
+ import { passphraseConsent, serialConsent } from "../../consent/consent.js";
3
+ import { succeeded } from "../../run.js";
4
+ import { linuxServicePaths } from "./paths-linux.js";
5
+ import { askPolkit, polkitConsent, subjectOf } from "./polkit-linux.js";
6
+ import { remoteChoicePrompt, remotePassphrasePrompt, remoteValuePrompt } from "../remote.js";
7
+ import { ServiceKey } from "../service-key.js";
8
+ import { doorAclArgs } from "./unit-linux.js";
9
+ export const linuxServiceRun = (uid, runner) => {
10
+ const paths = linuxServicePaths(uid);
11
+ const serviceKey = new ServiceKey(paths.serviceKey, paths.vaultDir);
12
+ let helper;
13
+ return {
14
+ vaultDir: paths.vaultDir,
15
+ place: { kind: "unix", path: paths.socket },
16
+ consent: (link) => {
17
+ const recovery = { ...passphraseConsent(remotePassphrasePrompt(link)), askValue: remoteValuePrompt(link), choose: remoteChoicePrompt(link) };
18
+ return serialConsent(polkitConsent({ runner, helper: () => (link.ready ? helper : undefined), serviceKey, recovery }));
19
+ },
20
+ helloCredential: () => Promise.resolve("intentic-keyring"),
21
+ challenge: () => Promise.resolve({ method: "polkit" }),
22
+ proven: async (challenge, proof) => {
23
+ if (challenge.method !== "polkit" || proof.method !== "polkit") {
24
+ return false;
25
+ }
26
+ const subject = await subjectOf(proof.pid, uid);
27
+ if (subject === undefined) {
28
+ return false;
29
+ }
30
+ const said = await askPolkit(runner, subject, { title: "Connect Passwords", message: "Passwords on this computer asks you to confirm it is you, once for this sign-in." });
31
+ if (said !== "yes") {
32
+ return false;
33
+ }
34
+ helper = subject;
35
+ return true;
36
+ },
37
+ beforeWrite: async (file) => await serviceKey.merged(file),
38
+ afterSetup: async (vaultKey) => {
39
+ await serviceKey.adopt(vaultKey);
40
+ },
41
+ publish: async (door, log) => {
42
+ await writeFileAtomic(paths.door, `${JSON.stringify(door)}\n`, 0o600);
43
+ for (const args of doorAclArgs(paths)) {
44
+ const set = await runner({ command: "setfacl", args, timeoutMs: 10_000 });
45
+ if (!succeeded(set)) {
46
+ log(`setfacl ${args.join(" ")} failed (${set.missing ? "setfacl is not installed" : `exit ${String(set.exitCode)}`}): the session helper cannot reach the door`);
47
+ }
48
+ }
49
+ },
50
+ };
51
+ };
52
+ //# sourceMappingURL=service-run-linux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-run-linux.js","sourceRoot":"","sources":["../../../src/service/linux/service-run-linux.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Runner } from "../../run.js";
2
+ import type { SessionPlatform } from "../helper.js";
3
+ export declare const linuxSession: (runner: Runner) => Promise<SessionPlatform>;
4
+ //# sourceMappingURL=session-linux.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-linux.d.ts","sourceRoot":"","sources":["../../../src/service/linux/session-linux.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAOpD,eAAO,MAAM,YAAY,WAAkB,MAAM,KAAG,OAAO,CAAC,eAAe,CAO1E,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { linuxChoicePrompt, linuxPassphrasePrompt, linuxValuePrompt } from "../../consent/consent-posix.js";
2
+ import { platformTypist } from "../../typing/index.js";
3
+ import { linuxServicePaths } from "./paths-linux.js";
4
+ import { serviceUserId } from "../user.js";
5
+ export const linuxSession = async (runner) => {
6
+ const paths = linuxServicePaths(await serviceUserId(runner, "linux"));
7
+ return {
8
+ doorFile: paths.door,
9
+ noService: `Passwords' service is not running: \`systemctl status ${paths.unitName}\` says why.`,
10
+ hands: { hello: undefined, passphrase: linuxPassphrasePrompt(runner), value: linuxValuePrompt(runner), choose: linuxChoicePrompt(runner), typist: platformTypist(runner) },
11
+ };
12
+ };
13
+ //# sourceMappingURL=session-linux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-linux.js","sourceRoot":"","sources":["../../../src/service/linux/session-linux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE5G,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAA4B,EAAE;IAC3E,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,OAAO;QACH,QAAQ,EAAE,KAAK,CAAC,IAAI;QACpB,SAAS,EAAE,yDAAyD,KAAK,CAAC,QAAQ,cAAc;QAChG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE;KAC7K,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type LinuxServicePaths } from "./paths-linux.js";
2
+ export declare const unitText: (paths: Pick<LinuxServicePaths, "exe">) => string;
3
+ export declare const policyText: () => string;
4
+ export declare const addServiceUserArgs: () => readonly string[];
5
+ export declare const enableArgs: (paths: Pick<LinuxServicePaths, "unitName">) => readonly string[];
6
+ export declare const restartArgs: (paths: Pick<LinuxServicePaths, "unitName">) => readonly string[];
7
+ export declare const disableArgs: (paths: Pick<LinuxServicePaths, "unitName">) => readonly string[];
8
+ export declare const stopArgs: (paths: Pick<LinuxServicePaths, "unitName">) => readonly string[];
9
+ export declare const doorAclArgs: (paths: Pick<LinuxServicePaths, "uid" | "runDir" | "socket" | "door">) => readonly (readonly string[])[];
10
+ export declare const passwdEntry: (line: string) => {
11
+ readonly uid: number;
12
+ readonly gid: number;
13
+ readonly home: string;
14
+ } | undefined;
15
+ export declare const othersInstalledLinux: (rootNames: readonly string[], uid: string) => boolean;
16
+ //# sourceMappingURL=unit-linux.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-linux.d.ts","sourceRoot":"","sources":["../../../src/service/linux/unit-linux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAA+B,MAAM,kBAAkB,CAAC;AAQvF,eAAO,MAAM,QAAQ,UAAW,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAG,MA+BhE,CAAC;AAMF,eAAO,MAAM,UAAU,QAAO,MAkB7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,SAAS,MAAM,EAAkI,CAAC;AAExL,eAAO,MAAM,UAAU,UAAW,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAG,SAAS,MAAM,EAAyC,CAAC;AACjI,eAAO,MAAM,WAAW,UAAW,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAG,SAAS,MAAM,EAAiC,CAAC;AAC1H,eAAO,MAAM,WAAW,UAAW,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAG,SAAS,MAAM,EAA0C,CAAC;AACnI,eAAO,MAAM,QAAQ,UAAW,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAG,SAAS,MAAM,EAA8B,CAAC;AAIpH,eAAO,MAAM,WAAW,UAAW,IAAI,CAAC,iBAAiB,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAG,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAI9H,CAAC;AAGF,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAIlH,CAAC;AAGF,eAAO,MAAM,oBAAoB,cAAe,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,OAA+F,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { POLKIT_ACTION, SERVICE_USER } from "./paths-linux.js";
2
+ export const unitText = (paths) => `[Unit]
3
+ Description=Passwords for user %i (Intentic)
4
+ Documentation=https://github.com/intentic/intentic/tree/main/_devices/keyring
5
+ After=polkit.service
6
+
7
+ [Service]
8
+ Type=simple
9
+ User=${SERVICE_USER}
10
+ Group=${SERVICE_USER}
11
+ ExecStart=${paths.exe} service run --user %i
12
+ Restart=always
13
+ RestartSec=5
14
+ StateDirectory=intentic-keyring/%i
15
+ StateDirectoryMode=0700
16
+ RuntimeDirectory=intentic-keyring/%i
17
+ RuntimeDirectoryMode=0700
18
+ UMask=0077
19
+ NoNewPrivileges=yes
20
+ ProtectSystem=strict
21
+ ProtectHome=yes
22
+ PrivateTmp=yes
23
+ PrivateDevices=yes
24
+ ProtectKernelTunables=yes
25
+ ProtectKernelModules=yes
26
+ ProtectControlGroups=yes
27
+ RestrictSUIDSGID=yes
28
+ LockPersonality=yes
29
+
30
+ [Install]
31
+ WantedBy=multi-user.target
32
+ `;
33
+ export const policyText = () => `<?xml version="1.0" encoding="UTF-8"?>
34
+ <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
35
+ "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
36
+ <policyconfig>
37
+ <vendor>Intentic</vendor>
38
+ <vendor_url>https://intentic.dev</vendor_url>
39
+ <action id="${POLKIT_ACTION}">
40
+ <description>Confirm a request to Passwords</description>
41
+ <message>Passwords asks: $(title). $(message)</message>
42
+ <defaults>
43
+ <allow_any>no</allow_any>
44
+ <allow_inactive>no</allow_inactive>
45
+ <allow_active>auth_self</allow_active>
46
+ </defaults>
47
+ <annotate key="org.freedesktop.policykit.owner">unix-user:${SERVICE_USER}</annotate>
48
+ </action>
49
+ </policyconfig>
50
+ `;
51
+ export const addServiceUserArgs = () => ["--system", "--user-group", "--no-create-home", "--home-dir", "/nonexistent", "--shell", "/usr/sbin/nologin", SERVICE_USER];
52
+ export const enableArgs = (paths) => ["enable", "--now", paths.unitName];
53
+ export const restartArgs = (paths) => ["restart", paths.unitName];
54
+ export const disableArgs = (paths) => ["disable", "--now", paths.unitName];
55
+ export const stopArgs = (paths) => ["stop", paths.unitName];
56
+ export const doorAclArgs = (paths) => [
57
+ ["-m", `u:${paths.uid}:--x`, paths.runDir],
58
+ ["-m", `u:${paths.uid}:rw-`, paths.socket],
59
+ ["-m", `u:${paths.uid}:r--`, paths.door],
60
+ ];
61
+ export const passwdEntry = (line) => {
62
+ const fields = line.trim().split(":");
63
+ const [uid, gid, home] = [Number(fields[2]), Number(fields[3]), fields[5]];
64
+ return fields.length >= 7 && Number.isInteger(uid) && Number.isInteger(gid) && home !== undefined && home.startsWith("/") ? { uid, gid, home } : undefined;
65
+ };
66
+ export const othersInstalledLinux = (rootNames, uid) => rootNames.some((name) => name.endsWith(".installed") && name !== `${uid}.installed`);
67
+ //# sourceMappingURL=unit-linux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-linux.js","sourceRoot":"","sources":["../../../src/service/linux/unit-linux.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQvF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAqC,EAAU,EAAE,CACtE;;;;;;;OAOG,YAAY;QACX,YAAY;YACR,KAAK,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBpB,CAAC;AAMF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAW,EAAE,CACnC;;;;;;gBAMY,aAAa;;;;;;;;gEAQmC,YAAY;;;CAG3E,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAsB,EAAE,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;AAExL,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAA0C,EAAqB,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACjI,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAA0C,EAAqB,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC1H,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAA0C,EAAqB,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACnI,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAA0C,EAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAIpH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAoE,EAAkC,EAAE,CAAC;IACjI,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAC1C,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAC1C,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;CAC3C,CAAC;AAGF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAqF,EAAE;IAC3H,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/J,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAA4B,EAAE,GAAW,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,KAAK,GAAG,GAAG,YAAY,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type Runner } from "../run.js";
2
+ export declare const installHere: (runner?: Runner, platform?: NodeJS.Platform) => Promise<object>;
3
+ export declare const uninstallHere: (runner?: Runner, platform?: NodeJS.Platform) => Promise<object>;
4
+ export declare const userIdFits: (user: string, platform?: NodeJS.Platform) => boolean;
5
+ export declare const runServiceHere: (user: string, runner?: Runner, platform?: NodeJS.Platform) => Promise<never>;
6
+ export declare const runSessionHere: (runner?: Runner, platform?: NodeJS.Platform) => Promise<void>;
7
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/service/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAwBpD,eAAO,MAAM,WAAW,YAAkB,MAAM,aAAyB,MAAM,CAAC,QAAQ,KAAsB,OAAO,CAAC,MAAM,CAS3H,CAAC;AAEF,eAAO,MAAM,aAAa,YAAkB,MAAM,aAAyB,MAAM,CAAC,QAAQ,KAAsB,OAAO,CAAC,MAAM,CAS7H,CAAC;AAGF,eAAO,MAAM,UAAU,SAAU,MAAM,aAAY,MAAM,CAAC,QAAQ,KAAsB,OAAyE,CAAC;AAElK,eAAO,MAAM,cAAc,SAAgB,MAAM,WAAU,MAAM,aAAyB,MAAM,CAAC,QAAQ,KAAsB,OAAO,CAAC,KAAK,CAS3I,CAAC;AAEF,eAAO,MAAM,cAAc,YAAkB,MAAM,aAAyB,MAAM,CAAC,QAAQ,KAAsB,OAAO,CAAC,IAAI,CAW5H,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { realRunner } from "../run.js";
2
+ import { runSession } from "./helper.js";
3
+ import { installLinuxService, uninstallLinuxService } from "./linux/install-linux.js";
4
+ import { installService, uninstallService } from "./windows/install-windows.js";
5
+ import { UID_RE } from "./linux/paths-linux.js";
6
+ import { SID_RE } from "./windows/paths-windows.js";
7
+ import { runService } from "./service-run.js";
8
+ import { linuxServiceRun } from "./linux/service-run-linux.js";
9
+ import { windowsServiceRun } from "./windows/service-run-windows.js";
10
+ import { linuxSession } from "./linux/session-linux.js";
11
+ import { NOT_ON_MAC } from "./user.js";
12
+ import { windowsSession } from "./windows/session-windows.js";
13
+ class ServiceUnsupported extends Error {
14
+ constructor(platform) {
15
+ super(platform === "darwin" ? NOT_ON_MAC : `Passwords' protected service is not built for ${platform}.`);
16
+ this.name = "ServiceUnsupported";
17
+ }
18
+ }
19
+ export const installHere = async (runner = realRunner, platform = process.platform) => {
20
+ switch (platform) {
21
+ case "win32":
22
+ return await installService(runner);
23
+ case "linux":
24
+ return await installLinuxService(runner);
25
+ default:
26
+ throw new ServiceUnsupported(platform);
27
+ }
28
+ };
29
+ export const uninstallHere = async (runner = realRunner, platform = process.platform) => {
30
+ switch (platform) {
31
+ case "win32":
32
+ return await uninstallService(runner);
33
+ case "linux":
34
+ return await uninstallLinuxService(runner);
35
+ default:
36
+ throw new ServiceUnsupported(platform);
37
+ }
38
+ };
39
+ export const userIdFits = (user, platform = process.platform) => (platform === "win32" ? SID_RE.test(user) : UID_RE.test(user));
40
+ export const runServiceHere = async (user, runner = realRunner, platform = process.platform) => {
41
+ switch (platform) {
42
+ case "win32":
43
+ return await runService(windowsServiceRun(user, runner), runner);
44
+ case "linux":
45
+ return await runService(linuxServiceRun(user, runner), runner);
46
+ default:
47
+ throw new ServiceUnsupported(platform);
48
+ }
49
+ };
50
+ export const runSessionHere = async (runner = realRunner, platform = process.platform) => {
51
+ switch (platform) {
52
+ case "win32":
53
+ await runSession(windowsSession, runner);
54
+ return;
55
+ case "linux":
56
+ await runSession(linuxSession, runner);
57
+ return;
58
+ default:
59
+ throw new ServiceUnsupported(platform);
60
+ }
61
+ };
62
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/service/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const newRecoveryKey: (random?: (size: number) => Buffer) => string;
2
+ export declare const asRecoveryKey: (typed: string) => string;
3
+ //# sourceMappingURL=recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/service/recovery.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,cAAc,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,KAAiB,MAI/E,CAAC;AAOF,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAU7C,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { randomBytes } from "node:crypto";
2
+ const CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
3
+ const GROUPS = 6;
4
+ const GROUP_LENGTH = 5;
5
+ const LENGTH = GROUPS * GROUP_LENGTH;
6
+ const grouped = (characters) => Array.from({ length: GROUPS }, (_unused, index) => characters.slice(index * GROUP_LENGTH, (index + 1) * GROUP_LENGTH)).join("-");
7
+ export const newRecoveryKey = (random = randomBytes) => {
8
+ const bytes = random(LENGTH);
9
+ return grouped(Array.from(bytes, (byte) => CROCKFORD[byte & 31] ?? "0").join(""));
10
+ };
11
+ export const asRecoveryKey = (typed) => {
12
+ const bare = typed
13
+ .toUpperCase()
14
+ .replace(/[\s-]/gu, "")
15
+ .replace(/[IL]/gu, "1")
16
+ .replace(/O/gu, "0");
17
+ if (bare.length !== LENGTH || [...bare].some((character) => !CROCKFORD.includes(character))) {
18
+ return typed;
19
+ }
20
+ return grouped(bare);
21
+ };
22
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/service/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO1C,MAAM,SAAS,GAAG,kCAAkC,CAAC;AACrD,MAAM,MAAM,GAAG,CAAC,CAAC;AACjB,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAErC,MAAM,OAAO,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,YAAY,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAGjL,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,GAA6B,WAAW,EAAU,EAAE;IAErF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IACnD,MAAM,IAAI,GAAG,KAAK;SACb,WAAW,EAAE;SACb,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC1F,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import type { HelloDriver, PassphrasePrompt } from "../consent/consent.js";
2
+ import type { ChoicePrompt, HelloDriver, PassphrasePrompt, ValuePrompt } from "../consent/consent.js";
3
3
  import type { Typist } from "../typing/typist.js";
4
4
  import type { HelperCall } from "./door.js";
5
5
  import type { LineSocket } from "./lines.js";
@@ -15,7 +15,10 @@ export interface HelloPin {
15
15
  readonly publicKey: string;
16
16
  }
17
17
  export declare const remoteHello: (link: HelperLink, pin: () => Promise<HelloPin | undefined>) => HelloDriver;
18
+ export declare const RECOVERY_HINT = "Type your recovery key: the one Passwords showed once when it was set up on this computer.";
18
19
  export declare const remotePassphrasePrompt: (link: HelperLink) => PassphrasePrompt;
20
+ export declare const remoteValuePrompt: (link: HelperLink) => ValuePrompt;
21
+ export declare const remoteChoicePrompt: (link: HelperLink) => ChoicePrompt;
19
22
  export declare const remoteTypist: (link: HelperLink) => Typist;
20
23
  export {};
21
24
  //# sourceMappingURL=remote.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/service/remote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAe,gBAAgB,EAAgB,MAAM,uBAAuB,CAAC;AACtG,OAAO,KAAK,EAAoB,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAW7C,KAAK,QAAQ,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;AAEhF,qBAAa,UAAU;;IAMnB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAG/B;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAGK,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAoB1G;CACJ;AAID,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAGD,eAAO,MAAM,WAAW,SAAU,UAAU,OAAO,MAAM,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAG,WA4BxF,CAAC;AAGF,eAAO,MAAM,sBAAsB,SACxB,UAAU,KAAG,gBAInB,CAAC;AAEN,eAAO,MAAM,YAAY,SAAU,UAAU,KAAG,MAU9C,CAAC"}
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/service/remote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAgB,YAAY,EAAE,WAAW,EAAe,gBAAgB,EAA6B,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC5J,OAAO,KAAK,EAAoB,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAc7C,KAAK,QAAQ,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;AAEhF,qBAAa,UAAU;;IAMnB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAG/B;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAGK,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAoB1G;CACJ;AAID,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAKD,eAAO,MAAM,WAAW,SAAU,UAAU,OAAO,MAAM,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAG,WA6CxF,CAAC;AAGF,eAAO,MAAM,aAAa,+FAA+F,CAAC;AAI1H,eAAO,MAAM,sBAAsB,SACxB,UAAU,KAAG,gBAOnB,CAAC;AAIN,eAAO,MAAM,iBAAiB,SACnB,UAAU,KAAG,WAQnB,CAAC;AAIN,eAAO,MAAM,kBAAkB,SACpB,UAAU,KAAG,YAInB,CAAC;AAEN,eAAO,MAAM,YAAY,SAAU,UAAU,KAAG,MAU9C,CAAC"}
@@ -2,8 +2,10 @@ import { randomBytes } from "node:crypto";
2
2
  import { serialLock } from "@intentic/base/async";
3
3
  import { z } from "zod";
4
4
  import { helloSigned } from "./hello-verify.js";
5
- import { InspectedSchema, SignedSchema, TypedPassphraseSchema, TypedSchema } from "./wire.js";
5
+ import { asRecoveryKey } from "./recovery.js";
6
+ import { AvailableSchema, ChosenSchema, EnrolledSchema, InspectedSchema, SignedSchema, TypedPassphraseSchema, TypedSchema, TypedValueSchema } from "./wire.js";
6
7
  const PROMPT_DEADLINE_MS = 130_000;
8
+ const AVAILABLE_DEADLINE_MS = 20_000;
7
9
  const TYPING_DEADLINE_MS = 70_000;
8
10
  export class HelperLink {
9
11
  #helper;
@@ -37,7 +39,7 @@ export class HelperLink {
37
39
  });
38
40
  }
39
41
  }
40
- const NO_SESSION = "nobody is signed in to Windows to ask: the keyring's session helper starts at sign-in";
42
+ const NO_SESSION = "nobody is signed in to ask: Passwords' session helper starts at sign-in";
41
43
  export const remoteHello = (link, pin) => {
42
44
  const sign = async (credential, challenge, title, message) => {
43
45
  const reply = await link.call({ call: "sign", credential, challenge, title, message }, SignedSchema, PROMPT_DEADLINE_MS);
@@ -47,8 +49,25 @@ export const remoteHello = (link, pin) => {
47
49
  return reply.ok ? { ok: true, value: Buffer.from(reply.signature, "base64") } : { ok: false, cancelled: reply.cancelled, reason: reply.reason };
48
50
  };
49
51
  return {
50
- available: async () => link.ready && (await pin()) !== undefined,
51
- enrol: () => Promise.resolve({ ok: false, cancelled: false, reason: "a hardened keyring keeps the Windows Hello key it was set up with" }),
52
+ available: async () => {
53
+ if (!link.ready) {
54
+ return false;
55
+ }
56
+ if ((await pin()) !== undefined) {
57
+ return true;
58
+ }
59
+ return (await link.call({ call: "hello-available" }, AvailableSchema, AVAILABLE_DEADLINE_MS))?.available === true;
60
+ },
61
+ enrol: async (credential, challenge, notice) => {
62
+ if ((await pin()) !== undefined) {
63
+ return { ok: false, cancelled: false, reason: "Passwords keeps the Windows Hello key it was set up with" };
64
+ }
65
+ const reply = await link.call({ call: "enrol", credential, challenge, title: notice.title, message: notice.message }, EnrolledSchema, PROMPT_DEADLINE_MS);
66
+ if (reply === undefined) {
67
+ return { ok: false, cancelled: false, reason: link.ready ? "the session helper did not answer" : NO_SESSION };
68
+ }
69
+ return reply.ok ? { ok: true, value: { signature: Buffer.from(reply.signature, "base64"), publicKey: reply.publicKey } } : reply;
70
+ },
52
71
  sign: async (credential, challenge, notice) => await sign(credential, challenge, notice.title, notice.message),
53
72
  verify: async (notice) => {
54
73
  const pinned = await pin();
@@ -66,14 +85,30 @@ export const remoteHello = (link, pin) => {
66
85
  },
67
86
  };
68
87
  };
88
+ export const RECOVERY_HINT = "Type your recovery key: the one Passwords showed once when it was set up on this computer.";
69
89
  export const remotePassphrasePrompt = (link) => async (notice) => {
70
- const reply = await link.call({ call: "passphrase", title: notice.title, message: notice.message }, TypedPassphraseSchema, PROMPT_DEADLINE_MS);
90
+ const reply = await link.call({ call: "passphrase", title: notice.title, message: `${notice.message}\n\n${RECOVERY_HINT}` }, TypedPassphraseSchema, PROMPT_DEADLINE_MS);
91
+ if (reply === undefined) {
92
+ return { kind: "unavailable", reason: link.ready ? "the session helper did not answer" : NO_SESSION };
93
+ }
94
+ return reply.kind === "answered" ? { kind: "answered", passphrase: asRecoveryKey(reply.passphrase) } : reply;
95
+ };
96
+ export const remoteValuePrompt = (link) => async (notice) => {
97
+ const call = { call: "value", title: notice.title, message: notice.message, remember: notice.remember };
98
+ if (notice.username !== undefined) {
99
+ call.username = notice.username.value === undefined ? {} : { value: notice.username.value };
100
+ }
101
+ const reply = await link.call(call, TypedValueSchema, PROMPT_DEADLINE_MS);
102
+ return reply ?? { kind: "unavailable", reason: link.ready ? "the session helper did not answer" : NO_SESSION };
103
+ };
104
+ export const remoteChoicePrompt = (link) => async (notice) => {
105
+ const reply = await link.call({ call: "choice", title: notice.title, message: notice.message, choices: notice.choices.map(({ id, label }) => ({ id, label })) }, ChosenSchema, PROMPT_DEADLINE_MS);
71
106
  return reply ?? { kind: "unavailable", reason: link.ready ? "the session helper did not answer" : NO_SESSION };
72
107
  };
73
108
  export const remoteTypist = (link) => ({
74
109
  inspect: async (place) => {
75
110
  const reply = await link.call({ call: "inspect", place }, InspectedSchema, TYPING_DEADLINE_MS);
76
- return reply ?? { ok: false, reason: link.ready ? "the session helper did not answer" : "no one is signed in to Windows to type in" };
111
+ return reply ?? { ok: false, reason: link.ready ? "the session helper did not answer" : "no one is signed in to type in" };
77
112
  },
78
113
  type: async (place, seen, value) => {
79
114
  const reply = await link.call({ call: "type", place, seen, value }, TypedSchema, TYPING_DEADLINE_MS);
@@ -1 +1 @@
1
- {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/service/remote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/service/remote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type VaultFile } from "../vault.js";
2
+ export declare class ServiceKey {
3
+ #private;
4
+ constructor(path: string, dir: string);
5
+ open(): Promise<Buffer | undefined>;
6
+ adopt(vaultKey: Buffer): Promise<boolean>;
7
+ merged(vault: VaultFile): Promise<VaultFile>;
8
+ }
9
+ //# sourceMappingURL=service-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-key.d.ts","sourceRoot":"","sources":["../../src/service/service-key.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,KAAK,SAAS,EAA6C,MAAM,aAAa,CAAC;AAiB1G,qBAAa,UAAU;;IAKnB,YAAY,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAGpC;IAuBK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGxC;IAGK,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9C;IAGK,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAGjD;CACJ"}
@@ -0,0 +1,55 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { readFile } from "node:fs/promises";
3
+ import { isMissing } from "@intentic/base/errors";
4
+ import { writeSecretFile } from "@intentic/local-agent";
5
+ import { z } from "zod";
6
+ import { unwrapPassphrase, WrapSchema, wrapWithPassphrase } from "../vault.js";
7
+ const SERVICE_COST = { N: 2 ** 10, r: 8, p: 1 };
8
+ const ServiceKeyFileSchema = z.object({ secret: z.string().regex(/^[A-Za-z0-9_-]{43}$/u), wrap: WrapSchema.optional() }).strict();
9
+ const sameWrap = (a, b) => a.method === "passphrase" && b.method === "passphrase" && a.salt === b.salt;
10
+ export class ServiceKey {
11
+ #path;
12
+ #dir;
13
+ #file;
14
+ constructor(path, dir) {
15
+ this.#path = path;
16
+ this.#dir = dir;
17
+ }
18
+ async #load() {
19
+ if (this.#file !== undefined) {
20
+ return this.#file;
21
+ }
22
+ try {
23
+ this.#file = ServiceKeyFileSchema.parse(JSON.parse(await readFile(this.#path, "utf8")));
24
+ }
25
+ catch (error) {
26
+ if (!isMissing(error)) {
27
+ throw error;
28
+ }
29
+ this.#file = { secret: randomBytes(32).toString("base64url") };
30
+ await this.#save(this.#file);
31
+ }
32
+ return this.#file;
33
+ }
34
+ async #save(file) {
35
+ await writeSecretFile(this.#path, this.#dir, `${JSON.stringify(file)}\n`);
36
+ }
37
+ async open() {
38
+ const file = await this.#load();
39
+ return file.wrap === undefined ? undefined : await unwrapPassphrase([file.wrap], file.secret);
40
+ }
41
+ async adopt(vaultKey) {
42
+ const file = await this.#load();
43
+ if (file.wrap !== undefined) {
44
+ return false;
45
+ }
46
+ this.#file = { ...file, wrap: await wrapWithPassphrase(vaultKey, file.secret, SERVICE_COST) };
47
+ await this.#save(this.#file);
48
+ return true;
49
+ }
50
+ async merged(vault) {
51
+ const wrap = (await this.#load()).wrap;
52
+ return wrap === undefined || vault.wraps.some((each) => sameWrap(each, wrap)) ? vault : { ...vault, wraps: [...vault.wraps, wrap] };
53
+ }
54
+ }
55
+ //# sourceMappingURL=service-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-key.js","sourceRoot":"","sources":["../../src/service/service-key.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,21 @@
1
- import { type Runner } from "../run.js";
2
- export declare const runService: (sid: string, runner?: Runner) => Promise<void>;
1
+ import { type KeyringPaths } from "../address.js";
2
+ import type { Consent } from "../consent/consent.js";
3
+ import type { Runner } from "../run.js";
4
+ import { type VaultFile } from "../vault.js";
5
+ import { type DoorPlace } from "./channel.js";
6
+ import type { Challenge, DoorFile, Proof } from "./door.js";
7
+ import { HelperLink } from "./remote.js";
8
+ export interface ServiceRun {
9
+ readonly vaultDir: string;
10
+ readonly place: DoorPlace;
11
+ readonly consent: (link: HelperLink, files: KeyringPaths) => Consent;
12
+ readonly helloCredential: (files: KeyringPaths) => Promise<string>;
13
+ readonly challenge: (files: KeyringPaths) => Promise<Challenge>;
14
+ readonly proven: (challenge: Challenge, proof: Proof, files: KeyringPaths) => Promise<boolean>;
15
+ readonly beforeWrite?: (file: VaultFile) => Promise<VaultFile>;
16
+ readonly afterSetup?: (vaultKey: Buffer) => Promise<void>;
17
+ readonly publish: (door: DoorFile, log: (message: string) => void) => Promise<void>;
18
+ }
19
+ export declare const provenBy: (run: Pick<ServiceRun, "proven">, files: KeyringPaths, challenge: Challenge, proof: Proof) => Promise<boolean>;
20
+ export declare const runService: (run: ServiceRun, runner: Runner) => Promise<never>;
3
21
  //# sourceMappingURL=service-run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-run.d.ts","sourceRoot":"","sources":["../../src/service/service-run.ts"],"names":[],"mappings":"AAWA,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAYpD,eAAO,MAAM,UAAU,QAAe,MAAM,WAAU,MAAM,KAAgB,OAAO,CAAC,IAAI,CAyDvF,CAAC"}
1
+ {"version":3,"file":"service-run.d.ts","sourceRoot":"","sources":["../../src/service/service-run.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,eAAe,CAAC;AAGhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAmC,KAAK,SAAS,EAAkB,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AAOvD,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IACrE,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnE,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhE,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/F,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAE/D,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvF;AAUD,eAAO,MAAM,QAAQ,QAAe,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,YAAY,aAAa,SAAS,SAAS,KAAK,KAAG,OAAO,CAAC,OAAO,CAaxI,CAAC;AAsBF,eAAO,MAAM,UAAU,QAAe,UAAU,UAAU,MAAM,KAAG,OAAO,CAAC,KAAK,CAqC/E,CAAC"}