@huaweidevtools/aishell-dsh-credentials-store 0.0.15 → 0.0.16

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 (75) hide show
  1. package/lib/accounts.d.ts +31 -20
  2. package/lib/accounts.d.ts.map +1 -1
  3. package/lib/accounts.js +57 -24
  4. package/lib/accounts.js.map +1 -1
  5. package/lib/{index-JlyJE1E8.d.ts → index-Cdsu1kDC.d.ts} +87 -12
  6. package/lib/index-Cdsu1kDC.d.ts.map +1 -0
  7. package/lib/index.d.ts +3 -3
  8. package/lib/index.js +165 -29
  9. package/lib/index.js.map +1 -1
  10. package/lib/{paths-DtFRzop6.js → paths-C0wxA5LO.js} +3 -3
  11. package/lib/paths-C0wxA5LO.js.map +1 -0
  12. package/lib/paths.d.ts +10 -9
  13. package/lib/paths.d.ts.map +1 -1
  14. package/lib/paths.js +1 -1
  15. package/lib/{scope-CFetnbG3.d.ts → scope-C7w2eTvE.d.ts} +12 -12
  16. package/lib/{scope-CFetnbG3.d.ts.map → scope-C7w2eTvE.d.ts.map} +1 -1
  17. package/lib/{scope-QmrHZaZt.js → scope-DJcK27Uc.js} +12 -12
  18. package/lib/scope-DJcK27Uc.js.map +1 -0
  19. package/lib/scope.d.ts +1 -1
  20. package/lib/scope.js +1 -1
  21. package/lib/signer-Bx88x7dI.d.ts +72 -0
  22. package/lib/signer-Bx88x7dI.d.ts.map +1 -0
  23. package/lib/{signer-BPR0UAF0.js → signer-CVOjpi6y.js} +39 -3
  24. package/lib/signer-CVOjpi6y.js.map +1 -0
  25. package/lib/signer.d.ts +2 -2
  26. package/lib/signer.js +2 -2
  27. package/lib/types/accounts.d.ts +61 -39
  28. package/lib/types/accounts.d.ts.map +1 -1
  29. package/lib/types/accounts.js +108 -52
  30. package/lib/types/accounts.js.map +1 -1
  31. package/lib/types/backends/fingerprint.d.ts +78 -0
  32. package/lib/types/backends/fingerprint.d.ts.map +1 -1
  33. package/lib/types/backends/fingerprint.js +155 -8
  34. package/lib/types/backends/fingerprint.js.map +1 -1
  35. package/lib/types/backends/keyring.d.ts +7 -7
  36. package/lib/types/backends/keyring.d.ts.map +1 -1
  37. package/lib/types/backends/keyring.js +15 -9
  38. package/lib/types/backends/keyring.js.map +1 -1
  39. package/lib/types/backends/memory.d.ts +4 -17
  40. package/lib/types/backends/memory.d.ts.map +1 -1
  41. package/lib/types/backends/memory.js +21 -32
  42. package/lib/types/backends/memory.js.map +1 -1
  43. package/lib/types/failover.d.ts +16 -18
  44. package/lib/types/failover.d.ts.map +1 -1
  45. package/lib/types/failover.js +19 -21
  46. package/lib/types/failover.js.map +1 -1
  47. package/lib/types/index.d.ts +4 -4
  48. package/lib/types/index.d.ts.map +1 -1
  49. package/lib/types/index.js +4 -4
  50. package/lib/types/index.js.map +1 -1
  51. package/lib/types/paths.d.ts +10 -9
  52. package/lib/types/paths.d.ts.map +1 -1
  53. package/lib/types/paths.js +10 -9
  54. package/lib/types/paths.js.map +1 -1
  55. package/lib/types/scope.d.ts +11 -11
  56. package/lib/types/scope.js +11 -11
  57. package/lib/types/signer.d.ts +32 -0
  58. package/lib/types/signer.d.ts.map +1 -1
  59. package/lib/types/signer.js +40 -5
  60. package/lib/types/signer.js.map +1 -1
  61. package/lib/types/verify.d.ts +7 -11
  62. package/lib/types/verify.d.ts.map +1 -1
  63. package/lib/types/verify.js +27 -11
  64. package/lib/types/verify.js.map +1 -1
  65. package/lib/verify.d.ts +1 -1
  66. package/lib/verify.d.ts.map +1 -1
  67. package/lib/verify.js +11 -1
  68. package/lib/verify.js.map +1 -1
  69. package/package.json +1 -1
  70. package/lib/index-JlyJE1E8.d.ts.map +0 -1
  71. package/lib/paths-DtFRzop6.js.map +0 -1
  72. package/lib/scope-QmrHZaZt.js.map +0 -1
  73. package/lib/signer-BPR0UAF0.js.map +0 -1
  74. package/lib/signer-Et0DIH6o.d.ts +0 -40
  75. package/lib/signer-Et0DIH6o.d.ts.map +0 -1
@@ -9,12 +9,12 @@
9
9
  *
10
10
  * On Linux the binding picks a store itself: Secret Service (gnome-keyring,
11
11
  * KWallet, KeePassXC) first, then — silently — the kernel keyutils keyring.
12
- * That fallback is wrong for credentials, and the binding's README says so:
13
- * the kernel keyring is "completely in-memory and will not persist across
12
+ * The kernel keyring is the wrong target for credentials, and the binding's own
13
+ * README says so: it is "completely in-memory and will not persist across
14
14
  * reboots". A machine with no Secret Service (a container, CI, a systemd unit
15
- * with no session bus) would therefore accept credentials, report them stored,
16
- * and lose them at the next reboot — with `credentialsStored: true` left in
17
- * the profile pointing at nothing.
15
+ * with no session bus) would accept credentials, report them stored, and lose
16
+ * them at the next reboot — with `credentialsStored: true` left in the profile
17
+ * pointing at nothing.
18
18
  *
19
19
  * Pinning `{ linux: { store: 'secret-service' } }` makes an unavailable
20
20
  * service throw from the constructor probe instead, so
@@ -52,8 +52,8 @@ export declare function __setKeyringModule(mock: KeyringModule | undefined): voi
52
52
  * Construction probes the keyring once — if the native module cannot be loaded
53
53
  * (no prebuilt binding for this platform), or the Linux Secret Service is
54
54
  * unavailable, it throws and {@link createCredentialsStore} falls back to the
55
- * next backend. Without the pin the absent-service case does not throw; see
56
- * the module note.
55
+ * next backend. The pin is what makes the second case throw; see the module
56
+ * note.
57
57
  */
58
58
  export declare class KeyringBackend implements CredentialsStore {
59
59
  private readonly serviceName;
@@ -1 +1 @@
1
- {"version":3,"file":"keyring.d.ts","sourceRoot":"","sources":["../../../src/backends/keyring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAO3E,KAAK,YAAY,GAAG;IAClB,WAAW,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,cAAc,EAAE,MAAM,IAAI,CAAA;CAC3B,CAAA;AACD,iFAAiF;AACjF,KAAK,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,CAAA;AAChF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,YAAY,CAAA;CAC7F,CAAA;AAGD,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAExE;AAOD;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,YAAW,gBAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;gBAElC,OAAO,GAAE,sBAA2B;IAWhD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IASxC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY7B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAO9B"}
1
+ {"version":3,"file":"keyring.d.ts","sourceRoot":"","sources":["../../../src/backends/keyring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAO3E,KAAK,YAAY,GAAG;IAClB,WAAW,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,cAAc,EAAE,MAAM,IAAI,CAAA;CAC3B,CAAA;AACD,iFAAiF;AACjF,KAAK,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,CAAA;AAChF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,YAAY,CAAA;CAC7F,CAAA;AAGD,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAExE;AAOD;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,YAAW,gBAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;gBAElC,OAAO,GAAE,sBAA2B;IAWhD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IASxC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAkB7B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAO9B"}
@@ -9,12 +9,12 @@
9
9
  *
10
10
  * On Linux the binding picks a store itself: Secret Service (gnome-keyring,
11
11
  * KWallet, KeePassXC) first, then — silently — the kernel keyutils keyring.
12
- * That fallback is wrong for credentials, and the binding's README says so:
13
- * the kernel keyring is "completely in-memory and will not persist across
12
+ * The kernel keyring is the wrong target for credentials, and the binding's own
13
+ * README says so: it is "completely in-memory and will not persist across
14
14
  * reboots". A machine with no Secret Service (a container, CI, a systemd unit
15
- * with no session bus) would therefore accept credentials, report them stored,
16
- * and lose them at the next reboot — with `credentialsStored: true` left in
17
- * the profile pointing at nothing.
15
+ * with no session bus) would accept credentials, report them stored, and lose
16
+ * them at the next reboot — with `credentialsStored: true` left in the profile
17
+ * pointing at nothing.
18
18
  *
19
19
  * Pinning `{ linux: { store: 'secret-service' } }` makes an unavailable
20
20
  * service throw from the constructor probe instead, so
@@ -52,8 +52,8 @@ function loadKeyring() {
52
52
  * Construction probes the keyring once — if the native module cannot be loaded
53
53
  * (no prebuilt binding for this platform), or the Linux Secret Service is
54
54
  * unavailable, it throws and {@link createCredentialsStore} falls back to the
55
- * next backend. Without the pin the absent-service case does not throw; see
56
- * the module note.
55
+ * next backend. The pin is what makes the second case throw; see the module
56
+ * note.
57
57
  */
58
58
  export class KeyringBackend {
59
59
  serviceName;
@@ -88,8 +88,14 @@ export class KeyringBackend {
88
88
  new this.Entry(this.serviceName, account, this.options).deletePassword();
89
89
  }
90
90
  catch (error) {
91
- // deletePassword on an absent entry may throw on some backends;
92
- // treat that as a no-op rather than an error.
91
+ // Deleting an absent entry is not an error, but the native binding has no
92
+ // stable code for it — only wording. This filter is deliberately narrow:
93
+ // it matches the *absent-entry* spellings and not "no result found",
94
+ // which a **locked** Secret Service collection reports for entries that
95
+ // really exist. Widening it to cover that would turn a failed clear into
96
+ // a silent no-op, and the credential would keep reading back after the
97
+ // person asked for it to be gone. `FailoverStore.delete` is what handles
98
+ // the locked case — it needs this error to escape from here to see it.
93
99
  if (!String(error).includes('not found') && !String(error).includes('no entry')) {
94
100
  throw error;
95
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"keyring.js","sourceRoot":"","sources":["../../../src/backends/keyring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C,gFAAgF;AAChF,4EAA4E;AAC5E,6EAA6E;AAC7E,mEAAmE;AACnE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAW9C,IAAI,aAAwC,CAAA;AAE5C,kGAAkG;AAClG,MAAM,UAAU,kBAAkB,CAAC,IAA+B;IAChE,aAAa,GAAG,IAAI,CAAA;AACtB,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,aAAa,KAAK,SAAS;QAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAkB,CAAA;IAC7F,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,cAAc;IACR,WAAW,CAAQ;IACnB,OAAO,CAAqB;IAC5B,KAAK,CAAwB;IAE9C,YAAY,UAAkC,EAAE;QAC9C,IAAI,CAAC,WAAW,GAAG,eAAe,CAAA;QAClC,4EAA4E;QAC5E,0EAA0E;QAC1E,yDAAyD;QACzD,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAA;QACrD,IAAI,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC,KAAK,CAAA;QAChC,yEAAyE;QACzE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3E,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;YACnF,OAAO,KAAK,IAAI,SAAS,CAAA;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,KAAa;QAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAC7E,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAA;QAC1E,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,gEAAgE;YAChE,8CAA8C;YAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChF,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,IAAI,CAAC;YACH,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAA;QACvF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"keyring.js","sourceRoot":"","sources":["../../../src/backends/keyring.ts"],"names":[],"mappings":"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"}
@@ -6,23 +6,10 @@
6
6
  * `Map` and are lost when the process exits — durable enough for a single
7
7
  * DSH session, not for persistence.
8
8
  *
9
- * Callers never select this directly; {@link createCredentialsStore} falls
10
- * back to it when {@link KeyringBackend} cannot initialize.
11
- *
12
- * ## Why the shared instance is not this class's business
13
- *
14
- * Each plugin that stores credentials calls `createCredentialsStore()` for
15
- * itself — four of them — and every call constructs a fresh backend. That is
16
- * harmless for the keyring and the encrypted file, which are process-external
17
- * and therefore shared by construction, but a private `Map` is not: without
18
- * the sharing below, the plugin that saved a credential and the plugin that
19
- * read it would be looking at different maps, and the second would report
20
- * "not authenticated" on a machine where the person had just authenticated.
21
- *
22
- * The sharing lives in {@link sharedMemoryBackend} rather than in this class
23
- * so that `new MemoryBackend()` keeps producing an independent store. Tests
24
- * rely on that — a spec constructing one expects it to start empty, and a
25
- * singleton class would leak state between spec files.
9
+ * Two exports, and the difference between them is who shares what:
10
+ * {@link MemoryBackend} is an independent store, and
11
+ * {@link sharedMemoryBackend} is the one instance every caller in the process
12
+ * resolves to. Its docstring carries the reasoning.
26
13
  */
27
14
  import type { CredentialsStore, CredentialsStoreConfig } from '../index.ts';
28
15
  /** Process-scoped {@link CredentialsStore}; entries vanish on exit. */
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/backends/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAE3E,uEAAuE;AACvE,qBAAa,aAAc,YAAW,gBAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,OAAO,GAAE,sBAA2B;IAKhD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIxC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI7B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAG9B;AA8BD,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,sBAA2B,GAAG,aAAa,CAGtF;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/backends/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAE3E,uEAAuE;AACvE,qBAAa,aAAc,YAAW,gBAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,OAAO,GAAE,sBAA2B;IAKhD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIxC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI7B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAG9B;AAgCD,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,sBAA2B,GAAG,aAAa,CAGtF;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
@@ -6,23 +6,10 @@
6
6
  * `Map` and are lost when the process exits — durable enough for a single
7
7
  * DSH session, not for persistence.
8
8
  *
9
- * Callers never select this directly; {@link createCredentialsStore} falls
10
- * back to it when {@link KeyringBackend} cannot initialize.
11
- *
12
- * ## Why the shared instance is not this class's business
13
- *
14
- * Each plugin that stores credentials calls `createCredentialsStore()` for
15
- * itself — four of them — and every call constructs a fresh backend. That is
16
- * harmless for the keyring and the encrypted file, which are process-external
17
- * and therefore shared by construction, but a private `Map` is not: without
18
- * the sharing below, the plugin that saved a credential and the plugin that
19
- * read it would be looking at different maps, and the second would report
20
- * "not authenticated" on a machine where the person had just authenticated.
21
- *
22
- * The sharing lives in {@link sharedMemoryBackend} rather than in this class
23
- * so that `new MemoryBackend()` keeps producing an independent store. Tests
24
- * rely on that — a spec constructing one expects it to start empty, and a
25
- * singleton class would leak state between spec files.
9
+ * Two exports, and the difference between them is who shares what:
10
+ * {@link MemoryBackend} is an independent store, and
11
+ * {@link sharedMemoryBackend} is the one instance every caller in the process
12
+ * resolves to. Its docstring carries the reasoning.
26
13
  */
27
14
  /** Process-scoped {@link CredentialsStore}; entries vanish on exit. */
28
15
  export class MemoryBackend {
@@ -47,26 +34,28 @@ export class MemoryBackend {
47
34
  }
48
35
  }
49
36
  /**
50
- * The one memory backend the factory hands to every caller in this process.
37
+ * The one memory backend every caller in this process resolves to.
51
38
  *
52
- * ## Why a module-level instance and not a class singleton
39
+ * ## Why the factory shares an instance
53
40
  *
54
- * `createCredentialsStore()` is called once per plugin — four of them — and
55
- * the memory backend is the only one of the three that is not shared by
56
- * construction. The keyring is a daemon and the encrypted file is a path, so
57
- * two callers reaching either are reading the same bytes; two `Map`s are not.
58
- * Without this, a machine with no keyring would have one plugin storing a
59
- * credential and another unable to see it.
41
+ * Every plugin that stores credentials calls `createCredentialsStore()` for
42
+ * itself — four of them — and each call resolves a backend. The keyring is a
43
+ * daemon and the encrypted file is a path, so two callers reaching either read
44
+ * the same bytes by construction. A `Map` is not: with a fresh one per call,
45
+ * the plugin that saved a credential and the plugin that reads it would be
46
+ * looking at different maps, and the second would report "not authenticated"
47
+ * on a machine where the person had just authenticated.
60
48
  *
61
- * Held here rather than on the class so `new MemoryBackend()` stays
62
- * independent, which the specs depend on.
49
+ * The sharing lives here rather than in {@link MemoryBackend} so that
50
+ * `new MemoryBackend()` still produces an independent store, which is what the
51
+ * specs rely on: a spec that constructs one expects it to start empty, and a
52
+ * singleton class would leak state between spec files.
63
53
  *
64
- * ## Why the lazily-created shape
54
+ * ## Why it is created on first use
65
55
  *
66
- * The instance is created on first use rather than at module load, so
67
- * importing this module has no effect a test has to account for — the specs
68
- * that swap the keyring module in and out must not leave a populated store
69
- * behind.
56
+ * Creating it at module load would make importing this module mutate state a
57
+ * test then has to account for. Lazy creation keeps the import inert, so a spec
58
+ * that swaps the keyring module in and out leaves no store behind.
70
59
  *
71
60
  * @param config - forwarded on first construction only; later callers reuse
72
61
  * the instance, since the memory backend keeps nothing config decides.
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/backends/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,uEAAuE;AACvE,MAAM,OAAO,aAAa;IACP,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEpD,YAAY,UAAkC,EAAE;QAC9C,wEAAwE;QACxE,sDAAsD;IACxD,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,KAAa;QAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAC7E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,IAAI,MAAiC,CAAA;AAErC,MAAM,UAAU,mBAAmB,CAAC,SAAiC,EAAE;IACrE,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,GAAG,SAAS,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/backends/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,uEAAuE;AACvE,MAAM,OAAO,aAAa;IACP,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEpD,YAAY,UAAkC,EAAE;QAC9C,wEAAwE;QACxE,sDAAsD;IACxD,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,KAAa;QAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAC7E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,IAAI,MAAiC,CAAA;AAErC,MAAM,UAAU,mBAAmB,CAAC,SAAiC,EAAE;IACrE,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,GAAG,SAAS,CAAA;AACpB,CAAC"}
@@ -1,12 +1,11 @@
1
1
  /**
2
- * Write-failover wrapper — covers the failure class the construction-time
3
- * probe chain cannot see.
2
+ * Write-failover wrapper — covers the failure class a construction-time probe
3
+ * cannot see.
4
4
  *
5
5
  * {@link createCredentialsStore} picks a backend by probing at construction
6
6
  * time, but the highest-priority backend (the OS keyring) can pass that probe
7
- * and still reject every real write: a locked GNOME keyring collection reads
8
- * as `null` (the probe's getPassword does not throw) while setPassword fails.
9
- * Measured on an isolated D-Bus session:
7
+ * and still reject every real write: a locked GNOME keyring collection reads as
8
+ * `null` and its `setPassword` fails. Measured on an isolated D-Bus session:
10
9
  *
11
10
  * - locked collection, no default alias — read 5 ms → null; write 5 ms →
12
11
  * "Couldn't access platform storage: Secret Service: no result found"
@@ -17,10 +16,9 @@
17
16
  * So the write path needs its own fallback chain, and it must be sticky: a
18
17
  * locked keyring fails every write, so retrying it per call would surface the
19
18
  * same error (or the same prompt) once per account a save writes. Deletes trip
20
- * the same failover: a locked collection rejects them with the same error, and
21
- * the save route (delete old set → write new set) deletes first — without
22
- * this, a locked keyring would fail the save before the write failover ever
23
- * engages.
19
+ * the same failover — a locked collection rejects them with the same error, and
20
+ * the save route deletes the old set before writing the new one, so without
21
+ * this a locked keyring would fail the save before the write failover engaged.
24
22
  *
25
23
  * ## Which copy wins
26
24
  *
@@ -46,11 +44,11 @@
46
44
  * A successful primary write or delete clears both the fallback value and the
47
45
  * tombstone, handing authority back to the keyring.
48
46
  *
49
- * Recording deletion this way — rather than marking accounts "stale" on every
50
- * failover write — keeps the value and its shadow in one place. A mark set by a
51
- * write would have to be cleared in lockstep with the value, and a mark left
52
- * behind after its value was gone would make a perfect keyring credential read
53
- * as *absent* rather than merely stale.
47
+ * The alternative — marking accounts "stale" on every failover write — would
48
+ * spread one fact across two records: the mark would have to be cleared in
49
+ * lockstep with the value, and a mark left behind after its value was gone
50
+ * would make a perfect keyring credential read as *absent* rather than merely
51
+ * stale. Keeping the shadow in one place avoids that state entirely.
54
52
  *
55
53
  * ## Why the record is persisted, not held in memory
56
54
  *
@@ -67,8 +65,8 @@
67
65
  * tombstone). On a machine whose keyring has never failed the fallback has
68
66
  * written nothing, so its file does not exist and both lookups are
69
67
  * sub-millisecond `existsSync` misses (measured 0.02-0.4 ms). Where a fallback
70
- * file does exist, each lookup decrypts it — the read-through this replaced
71
- * already paid one decrypt per miss.
68
+ * file does exist, each lookup decrypts it — one decrypt per miss, which is what
69
+ * a read-through cache would cost anyway.
72
70
  *
73
71
  * The fallback is built on the first read rather than the first failed write,
74
72
  * which a machine with a working keyring pays once per store: ~97 ms, almost
@@ -95,9 +93,9 @@ export interface FailoverStoreOptions {
95
93
  *
96
94
  * Stickiness is per instance, not per process: each plugin that consumes
97
95
  * credentials builds its own store, so one instance failing over does not stop
98
- * another from trying the primary. That is intended — the flag only exists to
96
+ * another from trying the primary. That is intentional — the flag exists to
99
97
  * avoid re-hitting a primary already known to be unwritable from *this* store,
100
- * and a second instance's attempt is one probe rather than a policy decision.
98
+ * so a second instance's attempt is one probe rather than a policy decision.
101
99
  * Correctness across instances comes from the persisted record, not the flag.
102
100
  *
103
101
  * Constructed by {@link createCredentialsStore} around a KeyringBackend whose
@@ -1 +1 @@
1
- {"version":3,"file":"failover.d.ts","sourceRoot":"","sources":["../../src/failover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAmBlD,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,gBAAgB,CAAA;CAChD;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAc,YAAW,gBAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAA8B;IAC9C,uEAAuE;IACvE,OAAO,CAAC,UAAU,CAAQ;gBAEd,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,oBAAoB;IAKpE,qEAAqE;IACrE,OAAO,KAAK,aAAa,GAGxB;IAED;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAQtB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUxC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAM7B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAyCzC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA8B7B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;CAGvB"}
1
+ {"version":3,"file":"failover.d.ts","sourceRoot":"","sources":["../../src/failover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAmBlD,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,gBAAgB,CAAA;CAChD;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAc,YAAW,gBAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAA8B;IAC9C,uEAAuE;IACvE,OAAO,CAAC,UAAU,CAAQ;gBAEd,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,oBAAoB;IAKpE,qEAAqE;IACrE,OAAO,KAAK,aAAa,GAGxB;IAED;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAQtB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUxC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAM7B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAyCzC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA8B7B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;CAGvB"}
@@ -1,12 +1,11 @@
1
1
  /**
2
- * Write-failover wrapper — covers the failure class the construction-time
3
- * probe chain cannot see.
2
+ * Write-failover wrapper — covers the failure class a construction-time probe
3
+ * cannot see.
4
4
  *
5
5
  * {@link createCredentialsStore} picks a backend by probing at construction
6
6
  * time, but the highest-priority backend (the OS keyring) can pass that probe
7
- * and still reject every real write: a locked GNOME keyring collection reads
8
- * as `null` (the probe's getPassword does not throw) while setPassword fails.
9
- * Measured on an isolated D-Bus session:
7
+ * and still reject every real write: a locked GNOME keyring collection reads as
8
+ * `null` and its `setPassword` fails. Measured on an isolated D-Bus session:
10
9
  *
11
10
  * - locked collection, no default alias — read 5 ms → null; write 5 ms →
12
11
  * "Couldn't access platform storage: Secret Service: no result found"
@@ -17,10 +16,9 @@
17
16
  * So the write path needs its own fallback chain, and it must be sticky: a
18
17
  * locked keyring fails every write, so retrying it per call would surface the
19
18
  * same error (or the same prompt) once per account a save writes. Deletes trip
20
- * the same failover: a locked collection rejects them with the same error, and
21
- * the save route (delete old set → write new set) deletes first — without
22
- * this, a locked keyring would fail the save before the write failover ever
23
- * engages.
19
+ * the same failover — a locked collection rejects them with the same error, and
20
+ * the save route deletes the old set before writing the new one, so without
21
+ * this a locked keyring would fail the save before the write failover engaged.
24
22
  *
25
23
  * ## Which copy wins
26
24
  *
@@ -46,11 +44,11 @@
46
44
  * A successful primary write or delete clears both the fallback value and the
47
45
  * tombstone, handing authority back to the keyring.
48
46
  *
49
- * Recording deletion this way — rather than marking accounts "stale" on every
50
- * failover write — keeps the value and its shadow in one place. A mark set by a
51
- * write would have to be cleared in lockstep with the value, and a mark left
52
- * behind after its value was gone would make a perfect keyring credential read
53
- * as *absent* rather than merely stale.
47
+ * The alternative — marking accounts "stale" on every failover write — would
48
+ * spread one fact across two records: the mark would have to be cleared in
49
+ * lockstep with the value, and a mark left behind after its value was gone
50
+ * would make a perfect keyring credential read as *absent* rather than merely
51
+ * stale. Keeping the shadow in one place avoids that state entirely.
54
52
  *
55
53
  * ## Why the record is persisted, not held in memory
56
54
  *
@@ -67,8 +65,8 @@
67
65
  * tombstone). On a machine whose keyring has never failed the fallback has
68
66
  * written nothing, so its file does not exist and both lookups are
69
67
  * sub-millisecond `existsSync` misses (measured 0.02-0.4 ms). Where a fallback
70
- * file does exist, each lookup decrypts it — the read-through this replaced
71
- * already paid one decrypt per miss.
68
+ * file does exist, each lookup decrypts it — one decrypt per miss, which is what
69
+ * a read-through cache would cost anyway.
72
70
  *
73
71
  * The fallback is built on the first read rather than the first failed write,
74
72
  * which a machine with a working keyring pays once per store: ~97 ms, almost
@@ -98,9 +96,9 @@ const TOMBSTONE_VALUE = '1';
98
96
  *
99
97
  * Stickiness is per instance, not per process: each plugin that consumes
100
98
  * credentials builds its own store, so one instance failing over does not stop
101
- * another from trying the primary. That is intended — the flag only exists to
99
+ * another from trying the primary. That is intentional — the flag exists to
102
100
  * avoid re-hitting a primary already known to be unwritable from *this* store,
103
- * and a second instance's attempt is one probe rather than a policy decision.
101
+ * so a second instance's attempt is one probe rather than a policy decision.
104
102
  * Correctness across instances comes from the persisted record, not the flag.
105
103
  *
106
104
  * Constructed by {@link createCredentialsStore} around a KeyringBackend whose
@@ -185,9 +183,9 @@ export class FailoverStore {
185
183
  return;
186
184
  }
187
185
  // The keyring took the write, so it is authoritative for this account
188
- // again: drop whatever an earlier failed-over session left in the fallback
189
- // — a value, which would otherwise be read in preference to this write, or
190
- // a tombstone, which would hide it. Best-effort: failing this cleanup must
186
+ // again: drop whatever a failed-over session left in the fallback — a
187
+ // value, which would otherwise be read in preference to this write, or a
188
+ // tombstone, which would hide it. Best-effort: failing this cleanup must
191
189
  // not fail a save that already succeeded.
192
190
  try {
193
191
  this.fallbackStore.delete(account);
@@ -1 +1 @@
1
- {"version":3,"file":"failover.js","sourceRoot":"","sources":["../../src/failover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"failover.js","sourceRoot":"","sources":["../../src/failover.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,9 @@
5
5
  * call {@link createCredentialsStore} and get a {@link CredentialsStore} —
6
6
  * they never learn which backend is serving. The factory probes backends in
7
7
  * priority order (OS keyring first, process memory last) and returns the
8
- * first that answers. New backends (fingerprint + encrypted file, etc.) slot
9
- * into the chain without touching callers. A keyring that answers the probe
10
- * but later rejects writes fails over to the next backend on first failure.
8
+ * first that answers, so a backend can be added to the chain without any
9
+ * caller changing. A keyring that answers the probe but later rejects writes
10
+ * fails over to the next backend on first failure.
11
11
  *
12
12
  * This is a tool library, not a DSH plugin — no `dsh.client`, no
13
13
  * `cordis.patch.yml`, no `apply`. DSH's own `ctx.credentials` is untouched;
@@ -64,7 +64,7 @@ export interface CredentialsStore {
64
64
  export declare function createCredentialsStore(config?: CredentialsStoreConfig): CredentialsStore;
65
65
  export { CREDENTIAL_SCOPE, CREDENTIALS_FILE_NAME, DEFAULT_SCOPE, KEYRING_SERVICE } from './scope.ts';
66
66
  export { KeyringBackend, __setKeyringModule } from './backends/keyring.ts';
67
- export { FingerprintBackend } from './backends/fingerprint.ts';
67
+ export { FingerprintBackend, UnreadableCredentialsFile } from './backends/fingerprint.ts';
68
68
  export { MemoryBackend, __resetSharedMemoryBackend, sharedMemoryBackend } from './backends/memory.ts';
69
69
  export { FailoverStore } from './failover.ts';
70
70
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACxC,8EAA8E;IAC9E,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,0EAA0E;IAC1E,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,4FAA4F;IAC5F,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CAC9B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,sBAA2B,GAAG,gBAAgB,CAe5F;AAiBD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACxC,8EAA8E;IAC9E,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,0EAA0E;IAC1E,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,4FAA4F;IAC5F,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CAC9B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,sBAA2B,GAAG,gBAAgB,CAe5F;AAiBD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACzF,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA"}
@@ -5,9 +5,9 @@
5
5
  * call {@link createCredentialsStore} and get a {@link CredentialsStore} —
6
6
  * they never learn which backend is serving. The factory probes backends in
7
7
  * priority order (OS keyring first, process memory last) and returns the
8
- * first that answers. New backends (fingerprint + encrypted file, etc.) slot
9
- * into the chain without touching callers. A keyring that answers the probe
10
- * but later rejects writes fails over to the next backend on first failure.
8
+ * first that answers, so a backend can be added to the chain without any
9
+ * caller changing. A keyring that answers the probe but later rejects writes
10
+ * fails over to the next backend on first failure.
11
11
  *
12
12
  * This is a tool library, not a DSH plugin — no `dsh.client`, no
13
13
  * `cordis.patch.yml`, no `apply`. DSH's own `ctx.credentials` is untouched;
@@ -72,7 +72,7 @@ function createFallbackStore(config) {
72
72
  }
73
73
  export { CREDENTIAL_SCOPE, CREDENTIALS_FILE_NAME, DEFAULT_SCOPE, KEYRING_SERVICE } from "./scope.js";
74
74
  export { KeyringBackend, __setKeyringModule } from "./backends/keyring.js";
75
- export { FingerprintBackend } from "./backends/fingerprint.js";
75
+ export { FingerprintBackend, UnreadableCredentialsFile } from "./backends/fingerprint.js";
76
76
  export { MemoryBackend, __resetSharedMemoryBackend, sharedMemoryBackend } from "./backends/memory.js";
77
77
  export { FailoverStore } from "./failover.js";
78
78
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AA+B7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiC,EAAE;IACxE,MAAM,OAAO,GAAiC,CAAC,GAAG,EAAE;QAClD,IAAI,CAAC;YACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;YAC7D,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,yEAAyE;QACzE,uEAAuE;QACvE,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC1F,CAAC;IACD,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AACpC,CAAC;AAED,qEAAqE;AACrE,SAAS,mBAAmB,CAAC,MAA8B;IACzD,IAAI,CAAC;QACH,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;IACD,2EAA2E;IAC3E,6EAA6E;IAC7E,2EAA2E;IAC3E,4DAA4D;IAC5D,0BAA0B;IAC1B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AACpC,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AA+B7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiC,EAAE;IACxE,MAAM,OAAO,GAAiC,CAAC,GAAG,EAAE;QAClD,IAAI,CAAC;YACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;YAC7D,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,yEAAyE;QACzE,uEAAuE;QACvE,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC1F,CAAC;IACD,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AACpC,CAAC;AAED,qEAAqE;AACrE,SAAS,mBAAmB,CAAC,MAA8B;IACzD,IAAI,CAAC;QACH,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;IACD,2EAA2E;IAC3E,6EAA6E;IAC7E,2EAA2E;IAC3E,4DAA4D;IAC5D,0BAA0B;IAC1B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AACpC,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACzF,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA"}
@@ -1,17 +1,18 @@
1
1
  /**
2
2
  * Where per-host state lives. One definition, shared.
3
3
  *
4
- * ## Why this lives in the store package
4
+ * ## Why one definition
5
5
  *
6
6
  * `DSH_HOME` is the host's data directory, and two things in this repo derive
7
7
  * from it: the encrypted credentials file here, and the terraform cache in
8
- * `aishell-deploy`. Defining it twice would let the two drift — the same
9
- * failure shape the credential-scope constant was created to end.
8
+ * `aishell-deploy`. Two resolutions of the same variable can disagree — a
9
+ * trailing-slash difference, a different fallback — and the result is state
10
+ * written to one directory and looked for in another. One definition makes that
11
+ * impossible.
10
12
  *
11
- * The direction is forced by the dependency graph: `aishell-deploy` already
12
- * depends on this package, so a definition here is reachable from there, while
13
- * the reverse would be a cycle. This module is the lower of the two, so it is
14
- * where the definition belongs.
13
+ * It sits in the lower of the two packages because the dependency graph runs
14
+ * that way: `aishell-deploy` already depends on this one, so a definition here
15
+ * is reachable from there, while the reverse would be a cycle.
15
16
  *
16
17
  * @module @huaweidevtools/aishell-dsh-credentials-store/paths
17
18
  */
@@ -19,8 +20,8 @@
19
20
  * The fallback data directory when the host sets no `DSH_HOME`.
20
21
  *
21
22
  * `~/.aishell` — the same directory the desktop app uses, so a library or
22
- * headless run shares one location with a real install rather than inventing a
23
- * second home directory.
23
+ * headless run lands where a real install keeps its state rather than creating
24
+ * a second home directory.
24
25
  */
25
26
  export declare const FALLBACK_HOME_NAME = ".aishell";
26
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,aAAa,CAAA;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAIhC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,aAAa,CAAA;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAIhC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
@@ -1,17 +1,18 @@
1
1
  /**
2
2
  * Where per-host state lives. One definition, shared.
3
3
  *
4
- * ## Why this lives in the store package
4
+ * ## Why one definition
5
5
  *
6
6
  * `DSH_HOME` is the host's data directory, and two things in this repo derive
7
7
  * from it: the encrypted credentials file here, and the terraform cache in
8
- * `aishell-deploy`. Defining it twice would let the two drift — the same
9
- * failure shape the credential-scope constant was created to end.
8
+ * `aishell-deploy`. Two resolutions of the same variable can disagree — a
9
+ * trailing-slash difference, a different fallback — and the result is state
10
+ * written to one directory and looked for in another. One definition makes that
11
+ * impossible.
10
12
  *
11
- * The direction is forced by the dependency graph: `aishell-deploy` already
12
- * depends on this package, so a definition here is reachable from there, while
13
- * the reverse would be a cycle. This module is the lower of the two, so it is
14
- * where the definition belongs.
13
+ * It sits in the lower of the two packages because the dependency graph runs
14
+ * that way: `aishell-deploy` already depends on this one, so a definition here
15
+ * is reachable from there, while the reverse would be a cycle.
15
16
  *
16
17
  * @module @huaweidevtools/aishell-dsh-credentials-store/paths
17
18
  */
@@ -21,8 +22,8 @@ import { join } from 'node:path';
21
22
  * The fallback data directory when the host sets no `DSH_HOME`.
22
23
  *
23
24
  * `~/.aishell` — the same directory the desktop app uses, so a library or
24
- * headless run shares one location with a real install rather than inventing a
25
- * second home directory.
25
+ * headless run lands where a real install keeps its state rather than creating
26
+ * a second home directory.
26
27
  */
27
28
  export const FALLBACK_HOME_NAME = '.aishell';
28
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAA;AAE5C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;IACvC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,UAAU,CAAA;IAC3E,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAA;AAC5C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;AACvC,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAA;AAE5C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;IACvC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,UAAU,CAAA;IAC3E,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAA;AAC5C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;AACvC,CAAC"}
@@ -17,25 +17,25 @@
17
17
  * | keyring service name | `aishell-dsh-plugins` |
18
18
  * | encrypted file name | `plugins.credentials.enc` |
19
19
  *
20
- * ## Why it is not a plugin config option
20
+ * ## Why it is a build-time constant
21
21
  *
22
- * It was one, briefly: `keyringService` sat on four plugins' `Config`. Only one
23
- * of the four writes and all four read, so a deployment that set it on a reader
24
- * but not the writer stored credentials in one namespace and looked for them in
25
- * another — the form said "saved" while every tool said "not authenticated".
26
- * A knob whose only observable effect is that failure is not worth having.
22
+ * The value has to be the same on both sides of a credential: the writer that
23
+ * stores it and the reader that looks it up. A runtime setting can be applied
24
+ * to one plugin and not another, and the result is a form that says "saved"
25
+ * beside tools that say "not authenticated" — a failure whose only symptom is
26
+ * the one thing the setting exists to control.
27
27
  *
28
28
  * A constant cannot be set on one side only. Two deployments that must not see
29
29
  * each other's credentials (a staging profile beside a production one) differ
30
30
  * by *building* differently, which is the honest place for a persistence
31
31
  * boundary.
32
32
  *
33
- * ## Why there is no migration
33
+ * ## Why the default namespace carries no migration path
34
34
  *
35
- * The default changed from `aishell-dsh` to `aishell-dsh-plugins` before the
36
- * first release, so no install ever wrote the old namespace. Nothing reads it,
37
- * and adding a migration path would mean keeping the old name alive forever for
38
- * a state that never existed.
35
+ * `plugins` is the first and only scope, so a build that sets nothing lands on
36
+ * it and a build that sets something has deliberately moved to a namespace of
37
+ * its own. There are no two names to reconcile, so there is no migration path
38
+ * to write — and none is needed until a release renames this default.
39
39
  *
40
40
  * @module @huaweidevtools/aishell-dsh-credentials-store/scope
41
41
  */