@mnemonik/credentials 0.1.75 → 0.1.76

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.
@@ -70,6 +70,10 @@ export interface CredentialTransport {
70
70
  export interface CliCredentialTransport {
71
71
  rotateCli(credential: CliOAuthCredential): Promise<TransportResponse<CliTokenResponse>>;
72
72
  }
73
+ export interface CliRevocationTransport {
74
+ /** Revokes the grant behind `credential` at its issuer; any 200 counts as revoked. */
75
+ revokeCli(credential: CliOAuthCredential): Promise<TransportResponse<object>>;
76
+ }
73
77
  export type ActionRequired = {
74
78
  status: 'ACTION_REQUIRED';
75
79
  reason: string;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IAE9B,KAAK;IADxB,MAAM,GAAG,gCAAgC,CAAC;IACnD,YAA4B,KAAyB;QACnD,KAAK,CACH,oDAAoD,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,yBAAyB,iDAAiD,CAC7K,CAAC;qBAHwB,KAAK;QAI/B,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IAClD,CAAC;CACF;AACD,uEAAuE;AACvE,MAAM,UAAU,mCAAmC,CACjD,KAAc;IAEd,OAAO,CACL,CAAC,CAAC,KAAK;QACP,OAAO,KAAK,KAAK,QAAQ;QACzB,QAAQ,IAAI,KAAK;QACjB,KAAK,CAAC,MAAM,KAAK,gCAAgC;QACjD,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,mCAAmC;QAClD,OAAO,IAAI,KAAK;QAChB,CAAC,UAAU,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxF,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAClC,CAAC;AACJ,CAAC;AA2FD,MAAM,OAAO,oBAAoB;IAGF,SAAS;IAF7B,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,YAA6B,SAAS,GAAG,IAAI;yBAAhB,SAAS;IAAU,CAAC;IAEjD,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,MAAc;QACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IAE9B,KAAK;IADxB,MAAM,GAAG,gCAAgC,CAAC;IACnD,YAA4B,KAAyB;QACnD,KAAK,CACH,oDAAoD,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,yBAAyB,iDAAiD,CAC7K,CAAC;qBAHwB,KAAK;QAI/B,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IAClD,CAAC;CACF;AACD,uEAAuE;AACvE,MAAM,UAAU,mCAAmC,CACjD,KAAc;IAEd,OAAO,CACL,CAAC,CAAC,KAAK;QACP,OAAO,KAAK,KAAK,QAAQ;QACzB,QAAQ,IAAI,KAAK;QACjB,KAAK,CAAC,MAAM,KAAK,gCAAgC;QACjD,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,mCAAmC;QAClD,OAAO,IAAI,KAAK;QAChB,CAAC,UAAU,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxF,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAClC,CAAC;AACJ,CAAC;AAgGD,MAAM,OAAO,oBAAoB;IAGF,SAAS;IAF7B,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,YAA6B,SAAS,GAAG,IAAI;yBAAhB,SAAS;IAAU,CAAC;IAEjD,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,MAAc;QACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { windowsCurrentUserAcl } from '@mnemonik/local-setup';
2
- import { type ActionRequired, type CliOAuthCredential, type CliOAuthMetadata, type CliOAuthTokens, type CliCredentialTransport, type ComponentCredentialResponse, type ComponentKind, type CredentialTransport, type FamilyCredential, type RetryLater, type RotationResult, type SecretStore, SimulatedSecretStore, type WorkResponse } from './contracts.js';
2
+ import { type ActionRequired, type CliOAuthCredential, type CliOAuthMetadata, type CliOAuthTokens, type CliCredentialTransport, type CliRevocationTransport, type ComponentCredentialResponse, type ComponentKind, type CredentialTransport, type FamilyCredential, type RetryLater, type RotationResult, type SecretStore, SimulatedSecretStore, type WorkResponse } from './contracts.js';
3
3
  import { CredentialError, credentialPaths, stateDirectory, type SecureFileOptions } from './storage.js';
4
4
  export * from './contracts.js';
5
5
  import { osSecretStore } from './osSecretStore.js';
@@ -14,13 +14,18 @@ export interface CredentialAdapterOptions extends SecureFileOptions {
14
14
  lockWaitMs?: number;
15
15
  }
16
16
  export declare function createCredentialAdapter(options?: CredentialAdapterOptions): {
17
- putCliOAuth: (metadata: CliOAuthMetadata, tokens: CliOAuthTokens | string) => Promise<{
17
+ putCliOAuth: (metadata: CliOAuthMetadata, tokens: CliOAuthTokens | string) => ReturnType<(metadata: CliOAuthMetadata, tokens: CliOAuthTokens | string) => Promise<{
18
18
  store: string;
19
- }>;
19
+ }>>;
20
20
  readCliOAuth: () => Promise<CliOAuthCredential | null>;
21
21
  rotateCli: (transport: CliCredentialTransport) => Promise<ActionRequired | RetryLater | CliOAuthCredential>;
22
22
  withCliCredential: <T>(transport: CliCredentialTransport, work: (accessToken: string) => Promise<WorkResponse<T>>) => Promise<WorkResponse<T> | ActionRequired | RetryLater>;
23
23
  removeCliOAuth: () => Promise<void>;
24
+ revokeCli: (transport: CliRevocationTransport) => Promise<ActionRequired | RetryLater | {
25
+ status: 'revoked';
26
+ familyId: string;
27
+ }>;
28
+ waitForCliLease: () => Promise<void>;
24
29
  putFamily: (componentKind: ComponentKind, response: ComponentCredentialResponse) => Promise<FamilyCredential>;
25
30
  readFamily: (familyId: string) => Promise<FamilyCredential | null>;
26
31
  rotateFamily: (familyId: string, transport: CredentialTransport) => Promise<RotationResult>;
@@ -43,13 +48,18 @@ export declare function createCredentialAdapter(options?: CredentialAdapterOptio
43
48
  };
44
49
  /** Shared CLI/hook backend selection; component records keep their recorded backend. */
45
50
  export declare function createLocalCredentialAdapter(options?: CredentialAdapterOptions): {
46
- putCliOAuth: (metadata: CliOAuthMetadata, tokens: CliOAuthTokens | string) => Promise<{
51
+ putCliOAuth: (metadata: CliOAuthMetadata, tokens: CliOAuthTokens | string) => ReturnType<(metadata: CliOAuthMetadata, tokens: CliOAuthTokens | string) => Promise<{
47
52
  store: string;
48
- }>;
53
+ }>>;
49
54
  readCliOAuth: () => Promise<CliOAuthCredential | null>;
50
55
  rotateCli: (transport: CliCredentialTransport) => Promise<ActionRequired | RetryLater | CliOAuthCredential>;
51
56
  withCliCredential: <T>(transport: CliCredentialTransport, work: (accessToken: string) => Promise<WorkResponse<T>>) => Promise<WorkResponse<T> | ActionRequired | RetryLater>;
52
57
  removeCliOAuth: () => Promise<void>;
58
+ revokeCli: (transport: CliRevocationTransport) => Promise<ActionRequired | RetryLater | {
59
+ status: 'revoked';
60
+ familyId: string;
61
+ }>;
62
+ waitForCliLease: () => Promise<void>;
53
63
  putFamily: (componentKind: ComponentKind, response: ComponentCredentialResponse) => Promise<FamilyCredential>;
54
64
  readFamily: (familyId: string) => Promise<FamilyCredential | null>;
55
65
  rotateFamily: (familyId: string, transport: CredentialTransport) => Promise<RotationResult>;
@@ -80,7 +90,19 @@ type HookFamily = {
80
90
  export type HookCredential = string | HookFamily;
81
91
  /** Family handles contain no tokens. Legacy keys are considered only without a family. */
82
92
  export declare function resolveHookCredential(legacyKey: string | null, server: string, env?: NodeJS.ProcessEnv, argv?: string[]): HookCredential | null;
83
- /** Preserve each caller's wire body and budget; share rotation and failure state with bound context. */
93
+ /** Header on a synthetic answer that no server sent: the credential was not usable. */
94
+ export declare const HOOK_CREDENTIAL_HEADER = "x-mnemonik-credential";
95
+ /**
96
+ * Preserve each caller's wire body and budget; share rotation and failure state with bound context.
97
+ *
98
+ * When no request could be sent, the answer is synthetic and says whether that is lasting, so a
99
+ * caller that retries (edit reports) can tell the two apart without knowing about credentials:
100
+ * - lasting (no credential, revoked or expired grant, family gone, refused rotation):
101
+ * 403 `{"ok":false}`, as before;
102
+ * - transient (rotation answered 429/5xx, its response lost, the successor not persisted, the
103
+ * lease or store unavailable): 503 `{"ok":false,"retryable":true,"reason":"credential_unavailable"}`.
104
+ * Both carry `x-mnemonik-credential: unavailable`.
105
+ */
84
106
  export declare function fetchWithHookCredential(credential: HookCredential | null, url: string, init: NonNullable<Parameters<typeof fetch>[1]> & {
85
107
  headers?: Record<string, string>;
86
108
  }): Promise<Response>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAY,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE3B,KAAK,2BAA2B,EAChC,KAAK,aAAa,EAElB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,oBAAoB,EAGpB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,eAAe,EAEf,eAAe,EACf,cAAc,EACd,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAEtB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,GACtB,CAAC;AAgBF,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsCD,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B;4BAwHvC,gBAAgB,UAAU,cAAc,GAAG,MAAM;;;wBAcvD,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;2BA6PpD,sBAAsB,KAChC,OAAO,CAAC,cAAc,GAAG,UAAU,GAAG,kBAAkB,CAAC;wBAa3B,CAAC,aACrB,sBAAsB,QAC3B,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KACtD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,UAAU,CAAC;0BAgBxB,OAAO,CAAC,IAAI,CAAC;+BAtNN,aAAa,YAAY,2BAA2B;2BAMxD,MAAM,KAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;6BA0H7C,MAAM,aAAa,mBAAmB,KAAG,OAAO,CAAC,cAAc,CAAC;qBA6FlE,CAAC,YACnB,MAAM,aACL,mBAAmB,QACxB,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KACtD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,UAAU,CAAC;6BAwBnB,MAAM,aAAa,mBAAmB;gBASzD,SAAS;;;;gBAwDhB,WAAW;;;;;;+BAjCiB,CAAC,SAAS,MAAM;;;;EAuDzD;AAED,wFAAwF;AACxF,wBAAgB,4BAA4B,CAAC,OAAO,GAAE,wBAA6B;4BAza5C,gBAAgB,UAAU,cAAc,GAAG,MAAM;;;wBAcvD,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;2BA6PpD,sBAAsB,KAChC,OAAO,CAAC,cAAc,GAAG,UAAU,GAAG,kBAAkB,CAAC;wBAa3B,CAAC,aACrB,sBAAsB,QAC3B,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KACtD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,UAAU,CAAC;0BAgBxB,OAAO,CAAC,IAAI,CAAC;+BAtNN,aAAa,YAAY,2BAA2B;2BAMxD,MAAM,KAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;6BA0H7C,MAAM,aAAa,mBAAmB,KAAG,OAAO,CAAC,cAAc,CAAC;qBA6FlE,CAAC,YACnB,MAAM,aACL,mBAAmB,QACxB,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KACtD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,UAAU,CAAC;6BAwBnB,MAAM,aAAa,mBAAmB;gBASzD,SAAS;;;;gBAwDhB,WAAW;;;;;;+BAjCiB,CAAC,SAAS,MAAM;;;;EA+DzD;AAED,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;AAGjD,0FAA0F;AAC1F,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,WAAwB,GAC3B,cAAc,GAAG,IAAI,CAgBvB;AAED,wGAAwG;AACxG,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,cAAc,GAAG,IAAI,EACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACpF,OAAO,CAAC,QAAQ,CAAC,CAiDnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
- import { createHmac, randomBytes } from 'node:crypto';
2
- import { join } from 'node:path';
1
+ import { createHash, createHmac, randomBytes } from 'node:crypto';
2
+ import { realpath } from 'node:fs/promises';
3
+ import { basename, dirname, join } from 'node:path';
3
4
  import { windowsCurrentUserAcl, withLock } from '@mnemonik/local-setup';
4
5
  import { SimulatedSecretStore, CredentialSessionUnavailableError, } from './contracts.js';
5
6
  import { CredentialError, SecureFiles, credentialPaths, stateDirectory, } from './storage.js';
@@ -29,6 +30,8 @@ const action = (familyId, reason) => ({
29
30
  reason,
30
31
  familyId,
31
32
  });
33
+ /** readSecret's answer for a record whose secret is gone (not an unavailable OS store). */
34
+ const isSecretMissing = (error) => error instanceof Error && error.message === 'credential_secret_missing';
32
35
  const retryLater = (familyId, reason) => ({
33
36
  status: 'RETRY_LATER',
34
37
  reason,
@@ -38,12 +41,20 @@ const isFailure = (result) => 'status' in result &&
38
41
  (result.status === 'ACTION_REQUIRED' ||
39
42
  result.status === 'RETRY_LATER');
40
43
  const diagnosedStores = new WeakSet();
44
+ /**
45
+ * A family's record or secret, named by the SHA-256 of its family id (credentialPaths), or an
46
+ * atomic-write temporary of either (atomicWrite).
47
+ */
48
+ const familyFileName = /^([0-9a-f]{64})\.json(?:\.[0-9a-f-]{36}\.tmp)?$/;
49
+ /** atomicWrite's temporary for `base`: `<base>.<uuid>.tmp`. */
50
+ const temporaryOf = (base, name) => name.startsWith(`${base}.`) && /^\.[0-9a-f-]{36}\.tmp$/.test(name.slice(base.length));
41
51
  export function createCredentialAdapter(options = {}) {
42
52
  const files = new SecureFiles({ ...options, stateDir: options.stateDir ?? stateDirectory() });
43
53
  const paths = credentialPaths(files.stateDir);
44
54
  const now = options.now ?? Date.now;
45
55
  const sleep = options.sleep ?? wait;
46
56
  const retryLimit = options.retryLimit ?? 2;
57
+ const lockWaitMs = options.lockWaitMs ?? 60_000;
47
58
  const store = options.secretStore;
48
59
  const rotations = new Map();
49
60
  let osAvailable;
@@ -64,7 +75,17 @@ export function createCredentialAdapter(options = {}) {
64
75
  return ok;
65
76
  })
66
77
  : Promise.resolve(false));
67
- const reference = (name) => `mnemonik.credentials.v1:${name}`;
78
+ /**
79
+ * A new OS-store entry's name carries its state directory: the entry lives outside it, and
80
+ * without the directory two state directories' CLI credentials would share one entry. The
81
+ * directory is canonicalized by the native realpath (case and short names on Windows, and
82
+ * a link above the state root; SecureFiles refuses links inside it) and hashed to 32 hex
83
+ * characters, keeping names short and within [\w.:-]. Records keep the reference they were written with.
84
+ */
85
+ const reference = async (name) => {
86
+ const directory = createHash('sha256').update(await realpath(files.stateDir));
87
+ return `mnemonik.credentials.v1:${name}:${directory.digest('hex').slice(0, 32)}`;
88
+ };
68
89
  const relativeSecret = (path) => path.slice(files.stateDir.length + 1);
69
90
  const fileBackend = {
70
91
  store: 'file',
@@ -97,7 +118,7 @@ export function createCredentialAdapter(options = {}) {
97
118
  if (existing?.store === 'os')
98
119
  return existing;
99
120
  return name === 'cli-oauth' && (await osBackend.isAvailable())
100
- ? { store: 'os', secretRef: reference(name) }
121
+ ? { store: 'os', secretRef: await reference(name) }
101
122
  : { store: 'file', secretFile: relativeSecret(file) };
102
123
  }
103
124
  const useFile = (location, file) => {
@@ -154,7 +175,27 @@ export function createCredentialAdapter(options = {}) {
154
175
  const bytes = await files.read(path);
155
176
  return bytes ? parse(bytes, kind) : null;
156
177
  }
178
+ /**
179
+ * Every sign-in takes the CLI rotation lease, so a rotation of a previous grant cannot
180
+ * persist over it, and forget can tell a crash's leftovers from a write in progress. The
181
+ * private directories exist before the lease would create them without their ACLs.
182
+ */
157
183
  async function putCliOAuth(metadata, tokens) {
184
+ await files.ensureParent(paths.cliRecord);
185
+ return leased(paths.cliRecord, () => writeCliOAuth(metadata, tokens), () => putCliOAuth(metadata, tokens));
186
+ }
187
+ /**
188
+ * Waits until no other holder has the CLI rotation lease (a sign-out or rotation in
189
+ * progress), then returns without keeping it. Sign-in calls this before a device grant is
190
+ * issued: every holder's hold is bounded, so the later putCliOAuth then gets the lease within
191
+ * lockWaitMs, and a lease that cannot be had fails the sign-in before any grant exists
192
+ * instead of after the person approved one (which would leave it live and unstored).
193
+ */
194
+ async function waitForCliLease() {
195
+ await files.ensureParent(paths.cliRecord);
196
+ await leased(paths.cliRecord, async () => undefined, () => undefined);
197
+ }
198
+ async function writeCliOAuth(metadata, tokens) {
158
199
  const current = await readRecord(paths.cliRecord, 'cli-oauth');
159
200
  const location = await locator('cli-oauth', paths.cliSecret, current ?? undefined);
160
201
  const secret = typeof tokens === 'string'
@@ -225,10 +266,18 @@ export function createCredentialAdapter(options = {}) {
225
266
  ...secret,
226
267
  };
227
268
  }
269
+ /**
270
+ * Provisioning holds the family lease from the secret write to the record write, so forget
271
+ * never mistakes a secret whose record is still being written for a crash's orphan.
272
+ */
228
273
  async function putFamily(componentKind, response) {
229
274
  const familyPaths = credentialPaths(files.stateDir, response.id);
230
- const current = await readRecord(familyPaths.record, 'component');
231
- return persistFamily(componentKind, response, current ?? undefined);
275
+ // The private directories exist before the lease would create them without their ACLs.
276
+ await files.ensureParent(familyPaths.record);
277
+ return leased(familyPaths.record, async () => {
278
+ const current = await readRecord(familyPaths.record, 'component');
279
+ return persistFamily(componentKind, response, current ?? undefined);
280
+ }, () => putFamily(componentKind, response));
232
281
  }
233
282
  async function readFamily(familyId) {
234
283
  const familyPaths = credentialPaths(files.stateDir, familyId);
@@ -248,50 +297,93 @@ export function createCredentialAdapter(options = {}) {
248
297
  void _file;
249
298
  return { ...publicMetadata, ...secret };
250
299
  }
251
- async function requestRotation(familyId, request) {
252
- const started = now();
253
- let lostResponseRetried = false;
254
- let retryableAttempt = 0;
300
+ /**
301
+ * One rotation request, with its retry rules. A lost response is retried once, inside the
302
+ * caller's lease and with the same predecessor, because the issuer may already have rotated
303
+ * (rotation_response_lost otherwise). A 429/5xx is an answer — nothing rotated — so its
304
+ * back-off is not slept here: it is returned as `{ backoffMs }` for rotateStored to wait out
305
+ * with the lease released. `state` carries the attempt counters across those lease entries.
306
+ */
307
+ async function requestRotation(familyId, request, state) {
255
308
  while (true) {
256
309
  let response;
257
310
  try {
258
311
  response = await request();
259
312
  }
260
313
  catch {
261
- if (lostResponseRetried)
314
+ if (state.lostResponseRetried)
262
315
  return action(familyId, 'rotation_response_lost');
263
- lostResponseRetried = true;
316
+ state.lostResponseRetried = true;
264
317
  await sleep(250);
265
- if (now() > started + 60_000)
318
+ if (now() > state.started + 60_000)
266
319
  return action(familyId, 'rotation_response_lost');
267
320
  continue;
268
321
  }
269
322
  if (response.status === 400 && response.body.error === 'invalid_grant')
270
323
  return action(familyId, 'invalid_grant');
271
324
  if (response.status === 429 || response.status >= 500) {
272
- if (lostResponseRetried)
325
+ if (state.lostResponseRetried)
273
326
  return action(familyId, 'rotation_response_lost');
274
- if (retryableAttempt >= retryLimit)
327
+ if (state.retryableAttempt >= retryLimit)
275
328
  return retryLater(familyId, response.status === 429 ? 'rate_limited' : 'server_error');
276
- const delay = response.retryAfterMs ?? 250 * 2 ** retryableAttempt;
277
- retryableAttempt += 1;
278
- await sleep(delay);
279
- continue;
329
+ const delay = response.retryAfterMs ?? 250 * 2 ** state.retryableAttempt;
330
+ state.retryableAttempt += 1;
331
+ return { backoffMs: delay };
280
332
  }
281
333
  return response;
282
334
  }
283
335
  }
336
+ /**
337
+ * withLock on a record's lease. forget removes emptied credential directories, so a waiter
338
+ * can find its lease directory's parent gone; the record went with it, and `vanished`
339
+ * answers as a reread that found nothing would.
340
+ */
341
+ async function leased(recordPath, work, vanished) {
342
+ let entered = false;
343
+ try {
344
+ return await withLock(recordPath, lockWaitMs, () => {
345
+ entered = true;
346
+ return work();
347
+ });
348
+ }
349
+ catch (error) {
350
+ if (entered || error.code !== 'ENOENT')
351
+ throw error;
352
+ return vanished();
353
+ }
354
+ }
284
355
  async function rotateStored(lockPath, missingId, read, request, decode, persist) {
285
356
  const predecessor = await read();
286
357
  if (!predecessor)
287
358
  return action(missingId, 'family_missing');
288
- return withLock(lockPath, options.lockWaitMs ?? 60_000, async () => {
359
+ const attempts = {
360
+ started: now(),
361
+ lostResponseRetried: false,
362
+ retryableAttempt: 0,
363
+ };
364
+ // A 429/5xx back-off (possibly a long Retry-After) is waited out with the lease released,
365
+ // so a sign-in, sign-out or forget is not blocked behind it; the lease is then retaken and
366
+ // the credential reread, so a change made meanwhile is returned rather than rotated over.
367
+ for (;;) {
368
+ const outcome = await rotateStoredOnce(lockPath, predecessor, read, request, decode, persist, attempts);
369
+ if (!('backoffMs' in outcome))
370
+ return outcome;
371
+ await sleep(outcome.backoffMs);
372
+ }
373
+ }
374
+ async function rotateStoredOnce(lockPath, predecessor, read, request, decode, persist, attempts) {
375
+ return leased(lockPath, async () => {
289
376
  const current = await read();
290
377
  if (!current)
291
378
  return action(predecessor.familyId, 'family_missing');
379
+ // Detects another holder's refresh only where the issuer rotates refresh tokens (component
380
+ // families); CLI grants keep theirs (rotateRefreshToken: false), so concurrent CLI
381
+ // processes may each refresh once, which only mints an extra access token.
292
382
  if (current.refreshToken !== predecessor.refreshToken)
293
383
  return current;
294
- const response = await requestRotation(current.familyId, () => request(current));
384
+ const response = await requestRotation(current.familyId, () => request(current), attempts);
385
+ if ('backoffMs' in response)
386
+ return response;
295
387
  if ('status' in response &&
296
388
  (response.status === 'ACTION_REQUIRED' || response.status === 'RETRY_LATER'))
297
389
  return response;
@@ -306,23 +398,13 @@ export function createCredentialAdapter(options = {}) {
306
398
  catch {
307
399
  return action(current.familyId, 'persistence_failed');
308
400
  }
309
- });
401
+ }, () => action(predecessor.familyId, 'family_missing'));
310
402
  }
311
403
  function rotateLocked(familyId, transport) {
312
404
  const familyPaths = credentialPaths(files.stateDir, familyId);
313
- return rotateStored(familyPaths.record, familyId, () => readFamily(familyId), (current) => transport.rotateFamily(familyId, current.refreshToken), (body) => ('access_token' in body ? body : null), (current, body) => persistFamily(current.componentKind, body, {
314
- schemaVersion: 1,
315
- kind: 'component',
316
- familyId: current.familyId,
317
- componentKind: current.componentKind,
318
- scopes: current.scopes,
319
- accessExpiresAt: current.accessExpiresAt,
320
- refreshExpiresAt: current.refreshExpiresAt,
321
- lastRotationTime: current.lastRotationTime,
322
- ...(current.store === 'os'
323
- ? { store: 'os', secretRef: reference(`component:${familyId}`) }
324
- : { store: 'file', secretFile: relativeSecret(familyPaths.secret) }),
325
- }));
405
+ return rotateStored(familyPaths.record, familyId, () => readFamily(familyId), (current) => transport.rotateFamily(familyId, current.refreshToken), (body) => ('access_token' in body ? body : null),
406
+ // The stored record's own locator: a reference rebuilt from the name could differ.
407
+ async (current, body) => persistFamily(current.componentKind, body, (await readRecord(familyPaths.record, 'component')) ?? undefined));
326
408
  }
327
409
  function rotateFamily(familyId, transport) {
328
410
  const active = rotations.get(familyId);
@@ -349,7 +431,7 @@ export function createCredentialAdapter(options = {}) {
349
431
  ? body
350
432
  : null, async (current, body) => {
351
433
  const rotatedAt = now();
352
- await putCliOAuth({
434
+ await writeCliOAuth({
353
435
  issuer: current.issuer,
354
436
  clientId: current.clientId,
355
437
  familyId: current.familyId,
@@ -400,11 +482,43 @@ export function createCredentialAdapter(options = {}) {
400
482
  return second.status === 401 ? action(rotated.familyId, 'protected_unauthorized') : second;
401
483
  }
402
484
  async function removeCliOAuth() {
403
- const record = await readRecord(paths.cliRecord, 'cli-oauth');
404
- if (!record)
405
- return;
406
- await deleteSecret(record, paths.cliSecret);
407
- await files.remove(paths.cliRecord);
485
+ await removeLeased(paths.cliRecord, 'cli-oauth', paths.cliSecret);
486
+ }
487
+ /**
488
+ * Sign-out, with revokeFamily's guarantees: the CLI rotation lease is held from the reread
489
+ * through the issuer's revocation to local removal, so the issuer is shown the current
490
+ * refresh token and a rotation waiting behind it finds nothing to persist. 429/5xx keep the
491
+ * credential for a retry.
492
+ */
493
+ async function revokeCli(transport) {
494
+ if (!(await readRecord(paths.cliRecord, 'cli-oauth')))
495
+ return action('cli', 'family_missing');
496
+ return leased(paths.cliRecord, async () => {
497
+ let current;
498
+ try {
499
+ current = await readCliOAuth();
500
+ }
501
+ catch (error) {
502
+ if (!isSecretMissing(error))
503
+ throw error;
504
+ // The record outlived its secret (a crash in the removal order used before
505
+ // removeStored deleted records first). Nothing here can revoke the grant, and the
506
+ // record would block every sign-in and sign-out: remove it and say so.
507
+ await removeStored(paths.cliRecord, 'cli-oauth', paths.cliSecret);
508
+ return action('cli', 'credential_secret_missing');
509
+ }
510
+ if (!current)
511
+ return action('cli', 'family_missing');
512
+ const response = await transport.revokeCli(current);
513
+ if (response.status === 429)
514
+ return retryLater(current.familyId, 'rate_limited');
515
+ if (response.status >= 500)
516
+ return retryLater(current.familyId, 'server_error');
517
+ if (response.status !== 200)
518
+ return action(current.familyId, 'error' in response.body ? response.body.error : 'revoke_refused');
519
+ await removeStored(paths.cliRecord, 'cli-oauth', paths.cliSecret);
520
+ return { status: 'revoked', familyId: current.familyId };
521
+ }, () => action('cli', 'family_missing'));
408
522
  }
409
523
  async function withCredential(familyId, transport, work) {
410
524
  let current = await readFamily(familyId);
@@ -425,43 +539,135 @@ export function createCredentialAdapter(options = {}) {
425
539
  const second = await work(rotated.accessToken);
426
540
  return second.status === 401 ? action(familyId, 'protected_unauthorized') : second;
427
541
  }
542
+ /**
543
+ * Removes a record and its secret; the caller already holds the record's lease. The record
544
+ * goes first: a crash between the two deletes then leaves only a record-less secret, which
545
+ * every reader treats as absent, sign-in overwrites, revokeFamily can still revoke with, and
546
+ * forget erases. Deleting the secret first left a record without its secret, on which every
547
+ * read — and so every sign-in, sign-out and rollback — failed.
548
+ */
549
+ async function removeStored(recordPath, kind, secretPath) {
550
+ const record = await readRecord(recordPath, kind);
551
+ if (!record)
552
+ return null;
553
+ await files.remove(recordPath);
554
+ await deleteSecret(record, secretPath);
555
+ return record;
556
+ }
557
+ /** removeStored under the lease the record's writers hold; no lease for an absent record. */
558
+ async function removeLeased(recordPath, kind, secretPath) {
559
+ if (!(await readRecord(recordPath, kind)))
560
+ return null;
561
+ return leased(recordPath, () => removeStored(recordPath, kind, secretPath), () => null);
562
+ }
563
+ async function orphanRefreshToken(secretPath) {
564
+ const bytes = await files.read(secretPath);
565
+ if (!bytes)
566
+ return null;
567
+ const secret = JSON.parse(bytes.toString());
568
+ if (typeof secret.refreshToken !== 'string')
569
+ throw new Error('credential_record_invalid');
570
+ return secret.refreshToken;
571
+ }
428
572
  async function removeFamily(familyId) {
429
573
  const familyPaths = credentialPaths(files.stateDir, familyId);
430
- const record = await readRecord(familyPaths.record, 'component');
431
- if (!record)
432
- return;
433
- await deleteSecret(record, familyPaths.secret);
434
- await files.remove(familyPaths.record);
574
+ await removeStored(familyPaths.record, 'component', familyPaths.secret);
435
575
  }
576
+ /**
577
+ * The server accepts only the family's current refresh token, so revocation holds the
578
+ * rotation lease from the reread through remote revocation and local removal: a rotation
579
+ * either persists its successor first (and that successor is revoked) or rereads after the
580
+ * removal and finds no family.
581
+ */
436
582
  async function revokeFamily(familyId, transport) {
437
- const current = await readFamily(familyId);
438
- if (!current)
583
+ const familyPaths = credentialPaths(files.stateDir, familyId);
584
+ // No lease directory is created for a family this machine does not hold.
585
+ if (!(await readRecord(familyPaths.record, 'component')) &&
586
+ !(await files.read(familyPaths.secret)))
439
587
  return action(familyId, 'family_missing');
440
- const response = await transport.revokeFamily(familyId, current.refreshToken);
441
- if (response.status === 429)
442
- return retryLater(familyId, 'rate_limited');
443
- if (response.status >= 500)
444
- return retryLater(familyId, 'server_error');
445
- if (response.status !== 200)
446
- return action(familyId, 'error' in response.body ? response.body.error : 'revoke_refused');
447
- await removeFamily(familyId);
448
- return { status: 'revoked', familyId };
588
+ await files.ensureParent(familyPaths.record);
589
+ return leased(familyPaths.record, async () => {
590
+ let current;
591
+ try {
592
+ current = await readFamily(familyId);
593
+ }
594
+ catch (error) {
595
+ if (!isSecretMissing(error))
596
+ throw error;
597
+ // A record without its secret (see removeStored): no token can revoke the grant
598
+ // from here. Remove the record so it stops failing every call, and say so.
599
+ await removeFamily(familyId);
600
+ return action(familyId, 'credential_secret_missing');
601
+ }
602
+ // Every family writer holds this lease, so a secret without its record is a crash's
603
+ // orphan: its grant is live server-side, and it holds the token that can revoke it.
604
+ const refreshToken = current?.refreshToken ?? (await orphanRefreshToken(familyPaths.secret));
605
+ if (!refreshToken)
606
+ return action(familyId, 'family_missing');
607
+ const response = await transport.revokeFamily(familyId, refreshToken);
608
+ if (response.status === 429)
609
+ return retryLater(familyId, 'rate_limited');
610
+ if (response.status >= 500)
611
+ return retryLater(familyId, 'server_error');
612
+ const refusal = response.status === 200
613
+ ? null
614
+ : 'error' in response.body
615
+ ? response.body.error
616
+ : 'revoke_refused';
617
+ // Any refusal keeps the credential, an orphan's included. The issuer answers 200 to
618
+ // any refresh token of an already revoked grant (a removal that crashed after the
619
+ // issuer revoked, see removeStored), so invalid_grant means the token names no
620
+ // revoked grant: it is unknown there (another server, a purged payload) or a live
621
+ // grant's expired token. That grant may still be live and this secret is the only
622
+ // local trace of it, so it stays for the person to resolve.
623
+ if (refusal)
624
+ return action(familyId, refusal);
625
+ if (current)
626
+ await removeFamily(familyId);
627
+ else
628
+ await files.remove(familyPaths.secret);
629
+ return { status: 'revoked', familyId };
630
+ }, () => action(familyId, 'family_missing'));
449
631
  }
632
+ /** The stored root key, or null when its record or secret is not (or no longer) on disk. */
633
+ async function storedRootKey() {
634
+ const record = await readRecord(paths.rootRecord, 'root-binding');
635
+ if (!record)
636
+ return null;
637
+ const key = await readSecret(record, paths.rootSecret).catch((error) => {
638
+ if (isSecretMissing(error))
639
+ return null;
640
+ throw error;
641
+ });
642
+ if (key && key.length !== 32)
643
+ throw new Error('root_binding_key_invalid');
644
+ return key;
645
+ }
646
+ /**
647
+ * The root-binding key. Hooks call this on every run, so an existing key is read without the
648
+ * lease or ensureParent (which on Windows runs icacls for each directory): the binding is
649
+ * written once, secret then record, under the lease, so a record whose secret reads back is
650
+ * a complete key. Only a key that must be created takes the slow path — the private
651
+ * directories first, then the lease (never the reverse, or the lease would create them
652
+ * without their ACLs), a reread, and the write. A record whose secret is gone is replaced.
653
+ */
450
654
  async function rootKey() {
451
- return withLock(paths.rootRecord, options.lockWaitMs ?? 60_000, async () => {
452
- const record = await readRecord(paths.rootRecord, 'root-binding');
453
- if (record) {
454
- const key = await readSecret(record, paths.rootSecret);
455
- if (!key || key.length !== 32)
456
- throw new Error('root_binding_key_invalid');
457
- return key;
458
- }
655
+ const existing = await storedRootKey();
656
+ if (existing)
657
+ return existing;
658
+ await files.ensureParent(paths.rootRecord);
659
+ return leased(paths.rootRecord, async () => {
660
+ const stored = await storedRootKey();
661
+ if (stored)
662
+ return stored;
459
663
  const location = await locator('root-binding', paths.rootSecret);
460
664
  const key = randomBytes(32);
461
665
  await writeSecret(location, paths.rootSecret, key);
462
666
  await files.write(paths.rootRecord, json({ schemaVersion: 1, kind: 'root-binding', ...location }), 'record');
463
667
  return key;
464
- });
668
+ },
669
+ // forget erased the binding and its directory while this call waited: create afresh.
670
+ rootKey);
465
671
  }
466
672
  async function hmacRootBinding(version, input) {
467
673
  if (version !== 1)
@@ -469,26 +675,83 @@ export function createCredentialAdapter(options = {}) {
469
675
  const key = await rootKey();
470
676
  return { version, hmac: createHmac('sha256', key).update(input).digest('base64url') };
471
677
  }
678
+ /**
679
+ * Erases an entry's record, secret and atomic-write temporaries; the caller holds its lease.
680
+ * Every writer of a family, the CLI credential and the root binding holds that entry's
681
+ * lease, so a secret without a record, or a temporary, here is a crash's leftover.
682
+ */
683
+ async function eraseEntry(recordPath, kind, secretPath) {
684
+ const record = await removeStored(recordPath, kind, secretPath);
685
+ if (!record)
686
+ await files.remove(secretPath);
687
+ for (const path of [recordPath, secretPath])
688
+ for (const entry of await files.list(dirname(path)))
689
+ if (temporaryOf(basename(path), entry))
690
+ await files.remove(join(dirname(path), entry));
691
+ return record;
692
+ }
693
+ /**
694
+ * Removes this directory's namespaced OS entry for the CLI credential (the only kind the
695
+ * OS store holds) when no record owns it: every CLI writer holds the CLI lease and writes the
696
+ * entry before the record, so an unowned entry found under the lease is a crash's leftover.
697
+ * Un-namespaced legacy entries cannot be attributed to this directory and are never probed.
698
+ */
699
+ async function forgetCliOsOrphan() {
700
+ if (!store)
701
+ return;
702
+ const recordPath = paths.cliRecord;
703
+ const ref = await reference('cli-oauth').catch(() => null);
704
+ if (!ref || !(await available()))
705
+ return;
706
+ if (!(await osBackend.read(ref, '').catch(() => null)))
707
+ return;
708
+ await files.ensureParent(recordPath);
709
+ await leased(recordPath, async () => {
710
+ const record = await readRecord(recordPath, 'cli-oauth');
711
+ if (record?.store === 'os' && record.secretRef === ref)
712
+ return;
713
+ await osBackend.delete(ref, '');
714
+ }, () => undefined);
715
+ }
716
+ /** eraseEntry under the entry's lease, taken only when anything of the entry is on disk. */
717
+ async function forgetEntry(recordPath, kind, secretPath) {
718
+ let present = false;
719
+ for (const path of [recordPath, secretPath])
720
+ for (const entry of await files.list(dirname(path)))
721
+ present ||= entry === basename(path) || temporaryOf(basename(path), entry);
722
+ if (!present)
723
+ return null;
724
+ await files.ensureParent(recordPath);
725
+ return leased(recordPath, () => eraseEntry(recordPath, kind, secretPath), () => null);
726
+ }
727
+ /**
728
+ * Erases this machine's credentials entry by entry, each under the lease its writers hold:
729
+ * a family's rotation/revocation lease, the CLI rotation lease, the root-binding lease. The
730
+ * boundary is per entry, not a store-wide snapshot. A rotation in flight either persists
731
+ * first and its successor is erased, or rereads after the erase and persists nothing; a
732
+ * family being provisioned is erased whole once its record is written. A family first
733
+ * provisioned after forget listed the store, or a root binding first requested after its
734
+ * erase, is new state outside this forget.
735
+ */
472
736
  async function forget() {
473
- const cli = await readRecord(paths.cliRecord, 'cli-oauth');
474
737
  const componentFamilyIds = [];
475
- for (const name of await files.list(paths.familyRecords)) {
476
- const recordPath = join(paths.familyRecords, name);
477
- const record = await readRecord(recordPath, 'component');
478
- if (!record)
479
- continue;
480
- componentFamilyIds.push(record.familyId);
481
- await removeFamily(record.familyId);
482
- }
483
- if (cli) {
484
- await deleteSecret(cli, paths.cliSecret);
485
- await files.remove(paths.cliRecord);
486
- }
487
- const root = await readRecord(paths.rootRecord, 'root-binding');
488
- if (root) {
489
- await deleteSecret(root, paths.rootSecret);
490
- await files.remove(paths.rootRecord);
738
+ // Families are named by their records, their secrets (a crash can leave a secret whose
739
+ // record was never written) and atomic-write temporaries; lease directories are skipped.
740
+ const digests = new Set();
741
+ for (const directory of [paths.familyRecords, paths.familySecrets])
742
+ for (const name of await files.list(directory)) {
743
+ const digest = familyFileName.exec(name)?.[1];
744
+ if (digest)
745
+ digests.add(digest);
746
+ }
747
+ for (const digest of [...digests].sort()) {
748
+ const record = await forgetEntry(join(paths.familyRecords, `${digest}.json`), 'component', join(paths.familySecrets, `${digest}.json`));
749
+ if (record)
750
+ componentFamilyIds.push(record.familyId);
491
751
  }
752
+ const cli = await forgetEntry(paths.cliRecord, 'cli-oauth', paths.cliSecret);
753
+ await forgetCliOsOrphan();
754
+ await forgetEntry(paths.rootRecord, 'root-binding', paths.rootSecret);
492
755
  await files.removeEmptyDirectories([
493
756
  paths.familySecrets,
494
757
  paths.familyRecords,
@@ -510,6 +773,8 @@ export function createCredentialAdapter(options = {}) {
510
773
  rotateCli,
511
774
  withCliCredential,
512
775
  removeCliOAuth,
776
+ revokeCli,
777
+ waitForCliLease,
513
778
  putFamily,
514
779
  readFamily,
515
780
  rotateFamily,
@@ -546,7 +811,47 @@ export function resolveHookCredential(legacyKey, server, env = process.env, argv
546
811
  }
547
812
  return family;
548
813
  }
549
- /** Preserve each caller's wire body and budget; share rotation and failure state with bound context. */
814
+ /**
815
+ * Rotation outcomes that say nothing lasting about the family: the issuer was busy (429/5xx),
816
+ * its answer was lost, or the successor could not be written here. A later call can succeed.
817
+ */
818
+ const TRANSIENT_ACTION_REASONS = new Set(['rotation_response_lost', 'persistence_failed']);
819
+ /**
820
+ * `work()`, settled early when `signal` aborts. withCredential's lease wait, the lost-response
821
+ * sleep and the OS store call take no signal; without this a hook request's timeout covered only
822
+ * the network part of a credentialed call, and a held lease added up to its whole wait on top.
823
+ * The abandoned work finishes (or not) in the background; hook processes exit after answering.
824
+ */
825
+ function untilAborted(signal, work) {
826
+ if (!signal)
827
+ return work();
828
+ if (signal.aborted)
829
+ return Promise.reject(signal.reason);
830
+ return new Promise((resolvePromise, reject) => {
831
+ const onAbort = () => reject(signal.reason);
832
+ signal.addEventListener('abort', onAbort, { once: true });
833
+ work().then((value) => {
834
+ signal.removeEventListener('abort', onAbort);
835
+ resolvePromise(value);
836
+ }, (error) => {
837
+ signal.removeEventListener('abort', onAbort);
838
+ reject(error);
839
+ });
840
+ });
841
+ }
842
+ /** Header on a synthetic answer that no server sent: the credential was not usable. */
843
+ export const HOOK_CREDENTIAL_HEADER = 'x-mnemonik-credential';
844
+ /**
845
+ * Preserve each caller's wire body and budget; share rotation and failure state with bound context.
846
+ *
847
+ * When no request could be sent, the answer is synthetic and says whether that is lasting, so a
848
+ * caller that retries (edit reports) can tell the two apart without knowing about credentials:
849
+ * - lasting (no credential, revoked or expired grant, family gone, refused rotation):
850
+ * 403 `{"ok":false}`, as before;
851
+ * - transient (rotation answered 429/5xx, its response lost, the successor not persisted, the
852
+ * lease or store unavailable): 503 `{"ok":false,"retryable":true,"reason":"credential_unavailable"}`.
853
+ * Both carry `x-mnemonik-credential: unavailable`.
854
+ */
550
855
  export async function fetchWithHookCredential(credential, url, init) {
551
856
  const send = (token) => fetch(url, {
552
857
  ...init,
@@ -554,11 +859,17 @@ export async function fetchWithHookCredential(credential, url, init) {
554
859
  });
555
860
  if (typeof credential === 'string')
556
861
  return send(credential);
557
- const unavailable = () => new Response('{"ok":false}', { status: 403 });
862
+ const unavailable = (transient = false) => new Response(transient
863
+ ? '{"ok":false,"retryable":true,"reason":"credential_unavailable"}'
864
+ : '{"ok":false}', {
865
+ status: transient ? 503 : 403,
866
+ headers: { 'content-type': 'application/json', [HOOK_CREDENTIAL_HEADER]: 'unavailable' },
867
+ });
558
868
  if (!credential || credential.unavailable)
559
869
  return unavailable();
870
+ let transient = false;
560
871
  try {
561
- const result = await credential.credentials.withCredential(credential.familyId, {
872
+ const result = await untilAborted(init.signal, () => credential.credentials.withCredential(credential.familyId, {
562
873
  rotateFamily: async (id, token) => {
563
874
  const response = await fetch(`${credential.server}/api/v1/component-credentials/${encodeURIComponent(id)}/rotate`, {
564
875
  method: 'POST',
@@ -579,18 +890,27 @@ export async function fetchWithHookCredential(credential, url, init) {
579
890
  }, async (token) => {
580
891
  const response = await send(token);
581
892
  return { status: response.status, body: response };
582
- });
893
+ }));
583
894
  if (typeof result.status === 'number' && 'body' in result)
584
895
  return result.body;
585
896
  credential.unavailable ||= result.reason === 'invalid_grant';
897
+ transient =
898
+ result.status === 'RETRY_LATER' ||
899
+ (result.status === 'ACTION_REQUIRED' && TRANSIENT_ACTION_REASONS.has(result.reason));
586
900
  }
587
901
  catch (error) {
902
+ // The caller's own timeout or cancellation: answer as fetch would.
903
+ if (init.signal?.aborted)
904
+ throw error;
588
905
  // Only explicit revocation/expiry disables the family; a rejected route is call-local.
589
- credential.unavailable ||= error?.code === 'invalid_grant';
906
+ const invalidGrant = error?.code === 'invalid_grant';
907
+ credential.unavailable ||= invalidGrant;
908
+ // A lease wait, OS store or file error: nothing is known to be wrong with the grant.
909
+ transient = !invalidGrant;
590
910
  }
591
911
  if (!credential.diagnosed)
592
912
  process.stderr.write('mnemonik-hook: credentials unavailable - fail-open.\n');
593
913
  credential.diagnosed = true;
594
- return unavailable();
914
+ return unavailable(transient);
595
915
  }
596
916
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts CHANGED
@@ -4,7 +4,7 @@ export { stateDirectory };
4
4
  export type CredentialFailureReason = 'symlink_rejected' | 'wrong_owner' | 'weak_permissions' | 'not_regular_file' | 'path_outside_state' | 'acl_identity_unavailable';
5
5
  export declare class CredentialError extends Error {
6
6
  readonly reason: CredentialFailureReason;
7
- constructor(reason: CredentialFailureReason);
7
+ constructor(reason: CredentialFailureReason, message?: string);
8
8
  }
9
9
  type Lstat = (path: string) => Promise<Stats>;
10
10
  export interface SecureFileOptions {
@@ -31,8 +31,21 @@ export declare function credentialPaths(stateDir?: string, familyId?: string): {
31
31
  record: string;
32
32
  secret: string;
33
33
  };
34
+ /**
35
+ * Symlink policy (AC-48, P2-02: "reject symlinks, wrong ownership, weak permissions"): the
36
+ * directories ABOVE the configured state root are canonicalized once, at construction, and
37
+ * trusted — the user's home or the OS temp directory may legitimately be reached through a
38
+ * link (/home -> /data/home, macOS /var -> /private/var), and refusing those made every
39
+ * credential operation fail. The root itself is not resolved: it and every component inside
40
+ * it are lstat()ed on each use and a symbolic link there is refused (symlink_rejected; for
41
+ * the root, with a message saying what to do), as are wrong owners and modes; the final open
42
+ * adds O_NOFOLLOW. A root that is a link when configured, or is planted as one later, is
43
+ * refused alike.
44
+ */
34
45
  export declare class SecureFiles {
35
46
  readonly stateDir: string;
47
+ /** The root as configured; paths spelled through it are rebased onto `stateDir`. */
48
+ private readonly configuredStateDir;
36
49
  private readonly platform;
37
50
  private readonly lstat;
38
51
  private readonly uid;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAEL,cAAc,EAGd,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,aAAa,GACb,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,0BAA0B,CAAC;AAE/B,qBAAa,eAAgB,SAAQ,KAAK;aACZ,MAAM,EAAE,uBAAuB;IAA3D,YAA4B,MAAM,EAAE,uBAAuB,EAG1D;CACF;AAED,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAID,wBAAgB,eAAe,CAAC,QAAQ,SAAmB,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;EAgB7E;AAKD,qBAAa,WAAW;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAgB;IAExC,YAAY,OAAO,GAAE,iBAAsB,EAS1C;IAED,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,UAAU;YAaJ,OAAO;YA+BP,oBAAoB;YAUpB,aAAa;IAkBrB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9C;IAEK,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgB/C;IAEK,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrE;IAEK,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxC;IAEK,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAS1C;IAEK,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3D;CACF"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAEL,cAAc,EAGd,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,aAAa,GACb,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,0BAA0B,CAAC;AAE/B,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,MAAM,EAAE,uBAAuB;IADjD,YACkB,MAAM,EAAE,uBAAuB,EAC/C,OAAO,GAAE,MAAe,EAIzB;CACF;AAOD,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAID,wBAAgB,eAAe,CAAC,QAAQ,SAAmB,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;EAgB7E;AAwBD;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAgB;IAExC,YAAY,OAAO,GAAE,iBAAsB,EAe1C;IAED,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,UAAU;YAaJ,OAAO;YAkCP,oBAAoB;YAUpB,aAAa;IAkBrB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9C;IAEK,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgB/C;IAEK,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrE;IAEK,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxC;IAEK,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAS1C;IAEK,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3D;CACF"}
package/dist/storage.js CHANGED
@@ -1,17 +1,20 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { lstat as nodeLstat, mkdir, open, readdir, rmdir, unlink } from 'node:fs/promises';
3
- import { constants } from 'node:fs';
3
+ import { constants, realpathSync } from 'node:fs';
4
4
  import { basename, dirname, isAbsolute, join, parse, relative, resolve, sep } from 'node:path';
5
5
  import { atomicWrite, stateDirectory, verifyWindowsCurrentUserOnly, windowsCurrentUserAcl, } from '@mnemonik/local-setup';
6
6
  export { stateDirectory };
7
7
  export class CredentialError extends Error {
8
8
  reason;
9
- constructor(reason) {
10
- super(reason);
9
+ constructor(reason, message = reason) {
10
+ super(message);
11
11
  this.reason = reason;
12
12
  this.name = 'CredentialError';
13
13
  }
14
14
  }
15
+ /** What the person does about a linked state root (the reason stays symlink_rejected). */
16
+ const STATE_ROOT_LINK_MESSAGE = 'The Mnemonik state directory is a symbolic link. Replace it with a real directory, ' +
17
+ 'or set MNEMONIK_STATE_DIR to one.';
15
18
  const digest = (value) => createHash('sha256').update(value).digest('hex');
16
19
  export function credentialPaths(stateDir = stateDirectory(), familyId) {
17
20
  const root = join(stateDir, 'credentials');
@@ -31,8 +34,41 @@ export function credentialPaths(stateDir = stateDirectory(), familyId) {
31
34
  };
32
35
  }
33
36
  const codeIs = (error, code) => error.code === code;
37
+ /**
38
+ * The canonical spelling of a (possibly not yet created) directory: realpath of its longest
39
+ * existing prefix, with the missing tail appended as given.
40
+ */
41
+ function canonicalDirectory(path) {
42
+ const missing = [];
43
+ let current = resolve(path);
44
+ for (;;) {
45
+ try {
46
+ return join(realpathSync.native(current), ...missing.reverse());
47
+ }
48
+ catch (error) {
49
+ const parent = dirname(current);
50
+ if (!codeIs(error, 'ENOENT') || parent === current)
51
+ return resolve(path);
52
+ missing.push(basename(current));
53
+ current = parent;
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Symlink policy (AC-48, P2-02: "reject symlinks, wrong ownership, weak permissions"): the
59
+ * directories ABOVE the configured state root are canonicalized once, at construction, and
60
+ * trusted — the user's home or the OS temp directory may legitimately be reached through a
61
+ * link (/home -> /data/home, macOS /var -> /private/var), and refusing those made every
62
+ * credential operation fail. The root itself is not resolved: it and every component inside
63
+ * it are lstat()ed on each use and a symbolic link there is refused (symlink_rejected; for
64
+ * the root, with a message saying what to do), as are wrong owners and modes; the final open
65
+ * adds O_NOFOLLOW. A root that is a link when configured, or is planted as one later, is
66
+ * refused alike.
67
+ */
34
68
  export class SecureFiles {
35
69
  stateDir;
70
+ /** The root as configured; paths spelled through it are rebased onto `stateDir`. */
71
+ configuredStateDir;
36
72
  platform;
37
73
  lstat;
38
74
  uid;
@@ -41,7 +77,10 @@ export class SecureFiles {
41
77
  username;
42
78
  aclRun;
43
79
  constructor(options = {}) {
44
- this.stateDir = resolve(options.stateDir ?? stateDirectory());
80
+ this.configuredStateDir = resolve(options.stateDir ?? stateDirectory());
81
+ // Only the ancestors are resolved: following the root would trust wherever a link
82
+ // there points.
83
+ this.stateDir = join(canonicalDirectory(dirname(this.configuredStateDir)), basename(this.configuredStateDir));
45
84
  this.platform = options.platform ?? process.platform;
46
85
  this.lstat = options.lstat ?? nodeLstat;
47
86
  this.uid = options.uid ?? process.getuid?.();
@@ -51,7 +90,13 @@ export class SecureFiles {
51
90
  this.aclRun = options.aclRun;
52
91
  }
53
92
  assertInsideState(path) {
54
- const absolute = resolve(path);
93
+ let absolute = resolve(path);
94
+ const fromConfigured = relative(this.configuredStateDir, absolute);
95
+ if (this.configuredStateDir !== this.stateDir &&
96
+ fromConfigured !== '..' &&
97
+ !fromConfigured.startsWith(`..${sep}`) &&
98
+ !isAbsolute(fromConfigured))
99
+ absolute = join(this.stateDir, fromConfigured);
55
100
  const fromState = relative(this.stateDir, absolute);
56
101
  if (fromState === '..' || fromState.startsWith(`..${sep}`) || isAbsolute(fromState))
57
102
  throw new CredentialError('path_outside_state');
@@ -72,6 +117,9 @@ export class SecureFiles {
72
117
  async inspect(path, expectFile, allowMissing) {
73
118
  const absolute = this.assertInsideState(path);
74
119
  for (const component of this.components(absolute)) {
120
+ // Above the canonical root is trusted (see the class comment).
121
+ if (component !== this.stateDir && !component.startsWith(`${this.stateDir}${sep}`))
122
+ continue;
75
123
  let value;
76
124
  try {
77
125
  value = await this.lstat(component);
@@ -82,10 +130,7 @@ export class SecureFiles {
82
130
  throw error;
83
131
  }
84
132
  if (value.isSymbolicLink())
85
- throw new CredentialError('symlink_rejected');
86
- const protectedComponent = component === this.stateDir || component.startsWith(`${this.stateDir}${sep}`);
87
- if (!protectedComponent)
88
- continue;
133
+ throw new CredentialError('symlink_rejected', component === this.stateDir ? STATE_ROOT_LINK_MESSAGE : undefined);
89
134
  const final = component === absolute;
90
135
  if (this.platform === 'win32') {
91
136
  // Windows has no uid or mode bits to read; the DACL is the permission.
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnemonik/credentials",
3
- "version": "0.1.75",
3
+ "version": "0.1.76",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/JayDeeCo-Limited/mnemonik.git",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "license": "SEE LICENSE IN LICENSE",
31
31
  "dependencies": {
32
- "@mnemonik/local-setup": "0.1.75"
32
+ "@mnemonik/local-setup": "0.1.76"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@typescript/native": "npm:typescript@7.0.2",