@mnemonik/credentials 0.1.75 → 0.1.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contracts.d.ts +4 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js.map +1 -1
- package/dist/index.d.ts +28 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +409 -89
- package/dist/index.js.map +1 -1
- package/dist/storage.d.ts +14 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +54 -9
- package/dist/storage.js.map +1 -1
- package/package.json +2 -2
package/dist/contracts.d.ts
CHANGED
|
@@ -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;
|
package/dist/contracts.d.ts.map
CHANGED
|
@@ -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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"}
|
package/dist/contracts.js.map
CHANGED
|
@@ -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;
|
|
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
|
-
/**
|
|
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>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
231
|
-
|
|
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
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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),
|
|
314
|
-
|
|
315
|
-
|
|
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
|
|
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
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
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
|
-
|
|
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
|
|
438
|
-
|
|
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
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
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
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
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
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
await
|
|
486
|
-
|
|
487
|
-
|
|
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
|
-
/**
|
|
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(
|
|
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
|
-
|
|
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 (the credential store design: "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;
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
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(
|
|
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 (the credential store design: "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.
|
|
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
|
-
|
|
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.
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAc,MAAM,SAAS,CAAC;
|
|
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.
|
|
3
|
+
"version": "0.1.77",
|
|
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.
|
|
32
|
+
"@mnemonik/local-setup": "0.1.77"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@typescript/native": "npm:typescript@7.0.2",
|