@cortexkit/antigravity-auth-core 3.0.3 → 3.0.4
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/agy-request-metadata.d.ts.map +1 -1
- package/dist/agy-request-metadata.js +9 -0
- package/dist/agy-request-metadata.js.map +1 -1
- package/dist/common-auth-embedded/claustrum/enrollment.d.ts +3 -2
- package/dist/common-auth-embedded/claustrum/enrollment.js +84 -42
- package/dist/common-auth-embedded/claustrum/roster.js +2 -2
- package/dist/common-auth-embedded/fs/atomic-write.d.ts +5 -0
- package/dist/common-auth-embedded/fs/atomic-write.js +21 -0
- package/dist/common-auth-embedded/fs/index.d.ts +2 -0
- package/dist/common-auth-embedded/fs/index.js +1 -0
- package/dist/common-auth-embedded/fs/private-files.d.ts +66 -0
- package/dist/common-auth-embedded/fs/private-files.js +302 -0
- package/dist/common-auth-embedded/fs/refresh-file-lock.d.ts +1 -1
- package/dist/common-auth-embedded/fs/refresh-file-lock.js +254 -37
- package/dist/common-auth-embedded/fs/with-lock.d.ts +3 -0
- package/dist/common-auth-embedded/fs/with-lock.js +4 -0
- package/dist/common-auth-embedded/logger/engine.d.ts +6 -8
- package/dist/common-auth-embedded/logger/engine.js +126 -11
- package/dist/common-auth-embedded/pi-slot/slot.d.ts +2 -0
- package/dist/common-auth-embedded/pi-slot/slot.js +34 -6
- package/dist/common-auth-embedded/source-output.json +83 -67
- package/dist/common-auth-embedded/store/mutate.js +2 -2
- package/dist/common-auth-embedded/store/pool.d.ts +1 -0
- package/dist/common-auth-embedded/store/pool.js +3 -0
- package/dist/common-auth-embedded/store/refresh-lock.d.ts +4 -0
- package/dist/common-auth-embedded/store/refresh-lock.js +5 -0
- package/dist/fingerprint.d.ts +2 -2
- package/dist/fingerprint.js +2 -2
- package/dist/model-registry.d.ts +4 -1
- package/dist/model-registry.d.ts.map +1 -1
- package/dist/model-registry.js +61 -104
- package/dist/model-registry.js.map +1 -1
- package/dist/quota-manager.d.ts.map +1 -1
- package/dist/quota-manager.js +3 -1
- package/dist/quota-manager.js.map +1 -1
- package/dist/transform/agy-generation.d.ts.map +1 -1
- package/dist/transform/agy-generation.js +11 -2
- package/dist/transform/agy-generation.js.map +1 -1
- package/dist/transform/model-resolver.d.ts.map +1 -1
- package/dist/transform/model-resolver.js +18 -4
- package/dist/transform/model-resolver.js.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agy-request-metadata.d.ts","sourceRoot":"","sources":["../src/agy-request-metadata.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAQD,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,wBAAwB,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,GAAG,OAAO,CAAA;IAC7B,wBAAwB,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1C,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAA;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,gBAAgB,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,KAAK,CAAA;CAC7C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,wBAAwB,CAM1B;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;gBAGhC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,6BAAkC;IAQ7C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,wBAAwB;IAmBlD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAW1C,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,KAAK;CA0Bd;
|
|
1
|
+
{"version":3,"file":"agy-request-metadata.d.ts","sourceRoot":"","sources":["../src/agy-request-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -108,6 +108,15 @@ export class AgyRequestSessionStore {
|
|
|
108
108
|
}
|
|
109
109
|
// Historical metadata remains readable; host admission refuses these retired routes.
|
|
110
110
|
const HISTORICAL_AGY_MODEL_ENUMS = {
|
|
111
|
+
'gemini-3.1-pro-low': 'MODEL_PLACEHOLDER_M36',
|
|
112
|
+
'gemini-3.1-pro-high': 'MODEL_PLACEHOLDER_M37',
|
|
113
|
+
'gemini-pro-agent': 'MODEL_PLACEHOLDER_M16',
|
|
114
|
+
'gemini-3.6-flash-low': 'MODEL_PLACEHOLDER_M73',
|
|
115
|
+
'gemini-3.6-flash-medium': 'MODEL_PLACEHOLDER_M72',
|
|
116
|
+
'gemini-3.6-flash-high': 'MODEL_PLACEHOLDER_M71',
|
|
117
|
+
'gemini-3.7-flash-low': 'MODEL_PLACEHOLDER_M300',
|
|
118
|
+
'gemini-3.7-flash-medium': 'MODEL_PLACEHOLDER_M299',
|
|
119
|
+
'gemini-3.7-flash-high': 'MODEL_PLACEHOLDER_M298',
|
|
111
120
|
'claude-sonnet-4-6': 'MODEL_PLACEHOLDER_M35',
|
|
112
121
|
'claude-opus-4-6-thinking': 'MODEL_PLACEHOLDER_M26',
|
|
113
122
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agy-request-metadata.js","sourceRoot":"","sources":["../src/agy-request-metadata.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agy-request-metadata.js","sourceRoot":"","sources":["../src/agy-request-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,8 +97,9 @@ export interface EnrollmentAncestorOptions {
|
|
|
97
97
|
groupPath?: string;
|
|
98
98
|
}
|
|
99
99
|
/**
|
|
100
|
-
* Protect setup writes from directory replacement.
|
|
101
|
-
* only when local
|
|
100
|
+
* Protect setup writes from directory replacement. On POSIX, group write access
|
|
101
|
+
* is safe only when local records prove the effective user's group is private;
|
|
102
|
+
* sticky ancestors are accepted. Windows uses the shared safe-parent policy.
|
|
102
103
|
*/
|
|
103
104
|
export declare function refuseWritableAncestor(parent: string, options?: EnrollmentAncestorOptions): Promise<void>;
|
|
104
105
|
export declare function readClaustrumEnrollmentStatus(paths: ClaustrumEnrollmentPaths, proposedName: string): Promise<ClaustrumEnrollmentStatus>;
|
|
@@ -4,6 +4,7 @@ import { chmod, mkdir, open, readFile, realpath, rename, stat, unlink, } from 'n
|
|
|
4
4
|
import { basename, dirname, extname, isAbsolute, join, resolve, } from 'node:path';
|
|
5
5
|
import { ClaustrumCredentialError, ClaustrumClient as ClaustrumWireClient, writeEnrollmentTokenFile, } from '@cortexkit/claustrum-client';
|
|
6
6
|
import { acquireRefreshFileLock } from '../fs/index.js';
|
|
7
|
+
import { ensurePrivateDirectory as ensureWindowsDirectory, PrivateFileError, readPrivateText, verifySafeDirectory, windowsPrivateFiles, writePrivateAtomic, } from '../fs/private-files.js';
|
|
7
8
|
import { ClaustrumConsumerError } from './errors.js';
|
|
8
9
|
const ENROLLMENT_SCHEMA = 1;
|
|
9
10
|
const ENROLLMENT_FILE_MAX_BYTES = 16 * 1024;
|
|
@@ -198,6 +199,21 @@ function parseSecretJson(text) {
|
|
|
198
199
|
}
|
|
199
200
|
}
|
|
200
201
|
async function readBoundedJson(path) {
|
|
202
|
+
if (windowsPrivateFiles) {
|
|
203
|
+
try {
|
|
204
|
+
await ensureWindowsDirectory(dirname(path));
|
|
205
|
+
const text = await readPrivateText(path, true);
|
|
206
|
+
if (Buffer.byteLength(text) > ENROLLMENT_FILE_MAX_BYTES) {
|
|
207
|
+
throw new ClaustrumConsumerError('unsafe-file', 'Claustrum enrollment file is too large');
|
|
208
|
+
}
|
|
209
|
+
return parseSecretJson(text);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
if (error.code === 'ENOENT')
|
|
213
|
+
return undefined;
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
201
217
|
let descriptor;
|
|
202
218
|
try {
|
|
203
219
|
// O_NOFOLLOW: a symlink planted at the path must not redirect a secret read.
|
|
@@ -267,52 +283,76 @@ async function isPrivateGroup(uid, gid, options) {
|
|
|
267
283
|
return false;
|
|
268
284
|
}
|
|
269
285
|
}
|
|
286
|
+
function ancestorPolicyOptions(options) {
|
|
287
|
+
if (!options.passwdPath && !options.groupPath)
|
|
288
|
+
return undefined;
|
|
289
|
+
return {
|
|
290
|
+
fs: {
|
|
291
|
+
readFile: (path) => readFile(path === '/etc/passwd'
|
|
292
|
+
? (options.passwdPath ?? path)
|
|
293
|
+
: path === '/etc/group'
|
|
294
|
+
? (options.groupPath ?? path)
|
|
295
|
+
: path),
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
}
|
|
270
299
|
/**
|
|
271
|
-
* Protect setup writes from directory replacement.
|
|
272
|
-
* only when local
|
|
300
|
+
* Protect setup writes from directory replacement. On POSIX, group write access
|
|
301
|
+
* is safe only when local records prove the effective user's group is private;
|
|
302
|
+
* sticky ancestors are accepted. Windows uses the shared safe-parent policy.
|
|
273
303
|
*/
|
|
274
304
|
export async function refuseWritableAncestor(parent, options = {}) {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
catch {
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
// Load lazily, once per traversal: account changes take effect on the next write.
|
|
287
|
-
let privateGroup;
|
|
288
|
-
for (;;) {
|
|
289
|
-
const metadata = await stat(component).catch(() => undefined);
|
|
290
|
-
if (metadata &&
|
|
291
|
-
(metadata.mode & 0o022) !== 0 &&
|
|
292
|
-
(metadata.mode & 0o1000) === 0) {
|
|
293
|
-
if (privateGroup === undefined) {
|
|
294
|
-
privateGroup =
|
|
295
|
-
gid !== undefined && (await isPrivateGroup(uid, gid, options));
|
|
296
|
-
}
|
|
297
|
-
if ((metadata.mode & 0o002) !== 0 ||
|
|
298
|
-
metadata.uid !== uid ||
|
|
299
|
-
metadata.gid !== gid ||
|
|
300
|
-
!privateGroup) {
|
|
301
|
-
throw new ClaustrumConsumerError('unsafe-file', `Claustrum enrollment path has a writable ancestor: ${component}. Another user could replace it. Run: chmod g-w,o-w ${component}`);
|
|
302
|
-
}
|
|
305
|
+
if (!windowsPrivateFiles) {
|
|
306
|
+
const uid = process.geteuid?.();
|
|
307
|
+
if (uid === undefined)
|
|
308
|
+
return;
|
|
309
|
+
const gid = process.getegid?.();
|
|
310
|
+
let component;
|
|
311
|
+
try {
|
|
312
|
+
component = await realpath(parent);
|
|
303
313
|
}
|
|
304
|
-
|
|
305
|
-
if (next === component)
|
|
314
|
+
catch {
|
|
306
315
|
return;
|
|
307
|
-
|
|
316
|
+
}
|
|
317
|
+
// Load lazily, once per traversal: account changes take effect on the next write.
|
|
318
|
+
let privateGroup;
|
|
319
|
+
for (;;) {
|
|
320
|
+
const metadata = await stat(component).catch(() => undefined);
|
|
321
|
+
if (metadata &&
|
|
322
|
+
(metadata.mode & 0o022) !== 0 &&
|
|
323
|
+
(metadata.mode & 0o1000) === 0) {
|
|
324
|
+
if (privateGroup === undefined) {
|
|
325
|
+
privateGroup =
|
|
326
|
+
gid !== undefined && (await isPrivateGroup(uid, gid, options));
|
|
327
|
+
}
|
|
328
|
+
if ((metadata.mode & 0o002) !== 0 ||
|
|
329
|
+
metadata.uid !== uid ||
|
|
330
|
+
metadata.gid !== gid ||
|
|
331
|
+
!privateGroup) {
|
|
332
|
+
throw new ClaustrumConsumerError('unsafe-file', `Claustrum enrollment path has a writable ancestor: ${component}. Another user could replace it. Run: chmod g-w,o-w ${component}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const next = dirname(component);
|
|
336
|
+
if (next === component)
|
|
337
|
+
return;
|
|
338
|
+
component = next;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
try {
|
|
342
|
+
await verifySafeDirectory(parent, ancestorPolicyOptions(options));
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
if (!(error instanceof PrivateFileError))
|
|
346
|
+
throw error;
|
|
347
|
+
throw new ClaustrumConsumerError('unsafe-file', `Claustrum enrollment parent refused: ${error.path} (${error.reason ?? error.code}). Use a folder that other users cannot write or replace.`);
|
|
308
348
|
}
|
|
309
349
|
}
|
|
310
|
-
/**
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
350
|
+
/** POSIX tightens the enrollment directory to 0700; Windows verifies safe ancestry without modifying existing parents. */
|
|
351
|
+
async function ensurePrivateDirectory(directory, options = {}) {
|
|
352
|
+
if (windowsPrivateFiles) {
|
|
353
|
+
await ensureWindowsDirectory(directory, false, ancestorPolicyOptions(options));
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
316
356
|
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
317
357
|
const metadata = await stat(directory);
|
|
318
358
|
const uid = process.geteuid?.();
|
|
@@ -324,12 +364,14 @@ async function ensurePrivateDirectory(directory) {
|
|
|
324
364
|
}
|
|
325
365
|
async function writeStateAtomic(path, state, ancestorOptions = {}) {
|
|
326
366
|
const parent = dirname(path);
|
|
327
|
-
await ensurePrivateDirectory(parent);
|
|
367
|
+
await ensurePrivateDirectory(parent, ancestorOptions);
|
|
328
368
|
await refuseWritableAncestor(parent, ancestorOptions);
|
|
329
369
|
const bytes = `${JSON.stringify(state)}\n`;
|
|
330
370
|
if (Buffer.byteLength(bytes) > ENROLLMENT_FILE_MAX_BYTES) {
|
|
331
371
|
throw new ClaustrumConsumerError('invalid-state', 'Claustrum enrollment state is too large');
|
|
332
372
|
}
|
|
373
|
+
if (windowsPrivateFiles)
|
|
374
|
+
return writePrivateAtomic(path, bytes);
|
|
333
375
|
const temporary = join(parent, `.${basename(path)}.${process.pid}.${randomUUID()}.tmp`);
|
|
334
376
|
let descriptor;
|
|
335
377
|
let created = false;
|
|
@@ -496,7 +538,7 @@ export class ClaustrumEnrollmentManager {
|
|
|
496
538
|
return statusFromState(blocked);
|
|
497
539
|
}
|
|
498
540
|
async reconcile() {
|
|
499
|
-
await ensurePrivateDirectory(dirname(this.#paths.statePath));
|
|
541
|
+
await ensurePrivateDirectory(dirname(this.#paths.statePath), this.#ancestorOptions);
|
|
500
542
|
const lock = await acquireRefreshFileLock({
|
|
501
543
|
name: 'ceremony',
|
|
502
544
|
path: this.#paths.statePath,
|
|
@@ -616,7 +658,7 @@ export class ClaustrumEnrollmentManager {
|
|
|
616
658
|
}
|
|
617
659
|
// The vault returns the token exactly once: it reaches disk before the
|
|
618
660
|
// pending metadata (and its secret) is replaced.
|
|
619
|
-
await ensurePrivateDirectory(dirname(this.#paths.tokenPath));
|
|
661
|
+
await ensurePrivateDirectory(dirname(this.#paths.tokenPath), this.#ancestorOptions);
|
|
620
662
|
await refuseWritableAncestor(dirname(this.#paths.tokenPath), this.#ancestorOptions);
|
|
621
663
|
await this.#writeTokenFile(this.#paths.tokenPath, {
|
|
622
664
|
token: outcome.token,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
-
import { readFile } from 'node:fs/promises';
|
|
3
2
|
import { acquireRefreshFileLock, withLock, writeJsonAtomic, } from '../fs/index.js';
|
|
3
|
+
import { readPrivateText, windowsPrivateFiles } from '../fs/private-files.js';
|
|
4
4
|
import { isQuotaMap, mergeQuotaObservation, } from '../quota/index.js';
|
|
5
5
|
import { ClaustrumConsumerError } from './errors.js';
|
|
6
6
|
import { acceptAccount, declineAccount, isDeclined, } from './interlock.js';
|
|
@@ -289,7 +289,7 @@ function decodeRoster(value) {
|
|
|
289
289
|
export async function readVaultRoster(path) {
|
|
290
290
|
let text;
|
|
291
291
|
try {
|
|
292
|
-
text = await
|
|
292
|
+
text = await readPrivateText(path, windowsPrivateFiles);
|
|
293
293
|
}
|
|
294
294
|
catch (error) {
|
|
295
295
|
if (error.code === 'ENOENT')
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type PrivateWriteOutcome } from './private-files.js';
|
|
1
2
|
export interface AtomicWriteOptions {
|
|
2
3
|
serialize?: (value: unknown) => string;
|
|
3
4
|
beforeRename?: () => Promise<void>;
|
|
@@ -5,6 +6,10 @@ export interface AtomicWriteOptions {
|
|
|
5
6
|
stageName?: () => string;
|
|
6
7
|
/** Sync the staged file and, after rename, its parent directory. Opt-in. */
|
|
7
8
|
durable?: boolean;
|
|
9
|
+
/** Windows opt-in: flush file bytes, without promising directory metadata durability. */
|
|
10
|
+
durability?: 'file-only-on-windows';
|
|
11
|
+
/** Reports Windows rename success, file/directory durability, retry counts and error codes, never file bytes. */
|
|
12
|
+
onOutcome?: (outcome: PrivateWriteOutcome) => void;
|
|
8
13
|
}
|
|
9
14
|
/** Internal classification of fsync failures, including a failure after rename. */
|
|
10
15
|
export declare class AtomicSyncError extends Error {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { mkdir, open, rename, rm } from 'node:fs/promises';
|
|
3
3
|
import { dirname } from 'node:path';
|
|
4
|
+
import { PrivateFileError, verifyPrivate, windowsPrivateFiles, writePrivateAtomic, } from './private-files.js';
|
|
4
5
|
/** Internal classification of fsync failures, including a failure after rename. */
|
|
5
6
|
export class AtomicSyncError extends Error {
|
|
6
7
|
constructor(cause) {
|
|
@@ -16,6 +17,18 @@ export async function writeJsonAtomic(path, value, options = {}) {
|
|
|
16
17
|
* and removed ids here, because a later directory sync cannot undo the rename.
|
|
17
18
|
*/
|
|
18
19
|
export async function writeJsonAtomicTracked(path, value, options, onRenamed) {
|
|
20
|
+
if (windowsPrivateFiles) {
|
|
21
|
+
return writePrivateAtomic(path, options.serialize
|
|
22
|
+
? options.serialize(value)
|
|
23
|
+
: `${JSON.stringify(value, null, 2)}\n`, {
|
|
24
|
+
beforeRename: options.beforeRename,
|
|
25
|
+
stagePath: `${path}.${(options.stageName ?? randomUUID)()}.tmp`,
|
|
26
|
+
onRenamed,
|
|
27
|
+
durable: options.durable,
|
|
28
|
+
durability: options.durability,
|
|
29
|
+
onOutcome: options.onOutcome,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
19
32
|
await mkdir(dirname(path), { recursive: true });
|
|
20
33
|
const tempPath = `${path}.${(options.stageName ?? randomUUID)()}.tmp`;
|
|
21
34
|
let handle;
|
|
@@ -63,6 +76,14 @@ export async function writeJsonAtomicTracked(path, value, options, onRenamed) {
|
|
|
63
76
|
}
|
|
64
77
|
/** Make an already renamed file and its directory durable without rewriting bytes. */
|
|
65
78
|
export async function syncJsonFile(path) {
|
|
79
|
+
if (windowsPrivateFiles) {
|
|
80
|
+
await verifyPrivate(path, 'file');
|
|
81
|
+
const error = new PrivateFileError(path, 'directory-sync-unsupported', {
|
|
82
|
+
code: 'ENOTSUP',
|
|
83
|
+
});
|
|
84
|
+
error.published = true;
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
66
87
|
const file = await open(path, 'r');
|
|
67
88
|
try {
|
|
68
89
|
await file.sync();
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export type { AtomicWriteOptions } from './atomic-write.js';
|
|
2
2
|
export { writeJsonAtomic } from './atomic-write.js';
|
|
3
3
|
export { WRITER_LOCK_CONSTANTS } from './lock-constants.js';
|
|
4
|
+
export type { PrivateWriteOutcome } from './private-files.js';
|
|
5
|
+
export { PrivateFileError } from './private-files.js';
|
|
4
6
|
export type { LockLoss, RefreshFileLock } from './refresh-file-lock.js';
|
|
5
7
|
export { acquireRefreshFileLock, isLostMarkerRaceError, } from './refresh-file-lock.js';
|
|
6
8
|
export type { LockOptions, LockOwnershipDetails } from './with-lock.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { writeJsonAtomic } from './atomic-write.js';
|
|
2
2
|
export { WRITER_LOCK_CONSTANTS } from './lock-constants.js';
|
|
3
|
+
export { PrivateFileError } from './private-files.js';
|
|
3
4
|
// The try-once lock underneath withLock, for callers that hold a lock across
|
|
4
5
|
// several steps or poll instead of waiting (for example a refresh lease).
|
|
5
6
|
export { acquireRefreshFileLock, isLostMarkerRaceError, } from './refresh-file-lock.js';
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { rename } from 'node:fs/promises';
|
|
2
|
+
import type { PosixOwnerOnlyPathAsyncOptions } from '@cortexkit/private-files';
|
|
3
|
+
export declare const windowsPrivateFiles: boolean;
|
|
4
|
+
type Backend = typeof import('@cortexkit/private-files');
|
|
5
|
+
type Kind = 'file' | 'directory';
|
|
6
|
+
/** Tests inject a backend here; production always imports the private-files package. */
|
|
7
|
+
export declare function setPrivateFilesBackendForTest(api?: Backend): void;
|
|
8
|
+
export declare class PrivateFileError extends Error {
|
|
9
|
+
readonly path: string;
|
|
10
|
+
readonly stage: string;
|
|
11
|
+
readonly code: string;
|
|
12
|
+
readonly win32Code?: number;
|
|
13
|
+
readonly reason?: string;
|
|
14
|
+
published: boolean;
|
|
15
|
+
durabilityConfirmed: boolean;
|
|
16
|
+
fileDurable: boolean;
|
|
17
|
+
attempts: number;
|
|
18
|
+
elapsedMs: number;
|
|
19
|
+
orphanPath?: string;
|
|
20
|
+
constructor(path: string, stage: string, cause: unknown);
|
|
21
|
+
}
|
|
22
|
+
export declare function privateOperation<T>(path: string, stage: string, operation: () => Promise<T>): Promise<T>;
|
|
23
|
+
/** Tests only: policy options used by safe-parent checks that pass none. */
|
|
24
|
+
export declare function setSafeParentOptionsForTest(options?: PosixOwnerOnlyPathAsyncOptions): void;
|
|
25
|
+
/** Existing containing directories use the shared entry-integrity policy, not secret-file permissions. */
|
|
26
|
+
export declare function verifySafeDirectory(path: string, options?: PosixOwnerOnlyPathAsyncOptions): Promise<void>;
|
|
27
|
+
/** Repair only the specific owned secret file supplied by a caller, never an existing directory tree. */
|
|
28
|
+
export declare function verifyPrivate(path: string, kind: Kind, migrate?: boolean): Promise<void>;
|
|
29
|
+
/** Create missing components privately; inspect existing ancestors without modifying them. */
|
|
30
|
+
export declare function ensurePrivateDirectory(path: string, _migrate?: boolean, options?: PosixOwnerOnlyPathAsyncOptions): Promise<void>;
|
|
31
|
+
export declare function readPrivateText(path: string, migrate?: boolean): Promise<string>;
|
|
32
|
+
export declare function readPrivateBuffer(path: string, migrate?: boolean): Promise<Buffer>;
|
|
33
|
+
export declare function createPrivateBytes(path: string, bytes: string): Promise<void>;
|
|
34
|
+
export declare function createPrivateDirectoryExclusive(path: string): Promise<void>;
|
|
35
|
+
export interface ReplaceOptions {
|
|
36
|
+
beforeRename?: () => Promise<void>;
|
|
37
|
+
/** Absolute monotonic deadline, for an expiring lease. */
|
|
38
|
+
deadline?: number;
|
|
39
|
+
now?: () => number;
|
|
40
|
+
sleep?: (ms: number) => Promise<void>;
|
|
41
|
+
rename?: typeof rename;
|
|
42
|
+
}
|
|
43
|
+
/** Retry Windows rename sharing/access errors within a budget; they never prove lease contention. */
|
|
44
|
+
export declare function replaceWindowsFile(from: string, to: string, options?: ReplaceOptions): Promise<{
|
|
45
|
+
attempts: number;
|
|
46
|
+
elapsedMs: number;
|
|
47
|
+
}>;
|
|
48
|
+
export interface PrivateWriteOutcome {
|
|
49
|
+
path: string;
|
|
50
|
+
stage: string;
|
|
51
|
+
published: boolean;
|
|
52
|
+
fileDurable: boolean;
|
|
53
|
+
durabilityConfirmed: boolean;
|
|
54
|
+
attempts: number;
|
|
55
|
+
elapsedMs: number;
|
|
56
|
+
code?: string;
|
|
57
|
+
win32Code?: number;
|
|
58
|
+
}
|
|
59
|
+
export declare function writePrivateAtomic(path: string, bytes: string, options?: ReplaceOptions & {
|
|
60
|
+
stagePath?: string;
|
|
61
|
+
onRenamed?: () => void;
|
|
62
|
+
durable?: boolean;
|
|
63
|
+
durability?: 'file-only-on-windows';
|
|
64
|
+
onOutcome?: (outcome: PrivateWriteOutcome) => void;
|
|
65
|
+
}): Promise<void>;
|
|
66
|
+
export {};
|