@nathapp/nax-ai 0.91.2 → 0.91.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.
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* part is not taking a lock but releasing one whose owner died, and getting
|
|
14
14
|
* staleness wrong turns a crash into a permanent lockout.
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
16
|
+
import { randomUUID } from "node:crypto";
|
|
17
|
+
import { chmod, link, mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
18
18
|
import { dirname, join } from "node:path";
|
|
19
19
|
import lockfile from "proper-lockfile";
|
|
20
20
|
/** Owner-only, on both the file and the directory holding it. */
|
|
@@ -29,15 +29,6 @@ const STALE_MS = 10_000;
|
|
|
29
29
|
/** How long to wait for a lock another process is legitimately holding. */
|
|
30
30
|
const DEFAULT_LOCK_TIMEOUT_MS = 5_000;
|
|
31
31
|
const EMPTY = { version: 1, credentials: {} };
|
|
32
|
-
async function exists(path) {
|
|
33
|
-
try {
|
|
34
|
-
await access(path, constants.F_OK);
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
32
|
/**
|
|
42
33
|
* Parsing deliberately does not fall back to an empty store. A file that
|
|
43
34
|
* cannot be read is far more likely to be a bug, a partial restore or the
|
|
@@ -75,18 +66,30 @@ async function readShape(path) {
|
|
|
75
66
|
* and a crash mid-write leaves the previous credentials intact. That is what
|
|
76
67
|
* lets read() skip the lock entirely.
|
|
77
68
|
*/
|
|
78
|
-
async function writeShape(path, shape) {
|
|
79
|
-
const temp = join(dirname(path), `.${process.pid}-${
|
|
69
|
+
async function writeShape(path, shape, createOnly = false) {
|
|
70
|
+
const temp = join(dirname(path), `.${process.pid}-${randomUUID()}.tmp`);
|
|
80
71
|
try {
|
|
81
|
-
await writeFile(temp, `${JSON.stringify(shape, null, 2)}\n`, { encoding: "utf8", mode: FILE_MODE });
|
|
72
|
+
await writeFile(temp, `${JSON.stringify(shape, null, 2)}\n`, { encoding: "utf8", mode: FILE_MODE, flag: "wx" });
|
|
82
73
|
// writeFile's mode applies only when it creates the file, and rename
|
|
83
74
|
// preserves the source's mode, so set it explicitly.
|
|
84
75
|
await chmod(temp, FILE_MODE);
|
|
85
|
-
|
|
76
|
+
if (createOnly) {
|
|
77
|
+
// Publish complete JSON without replacing a concurrent initializer or
|
|
78
|
+
// writer. Opening the destination with wx would expose partial JSON.
|
|
79
|
+
try {
|
|
80
|
+
await link(temp, path);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error.code !== "EEXIST")
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
await rename(temp, path);
|
|
89
|
+
}
|
|
86
90
|
}
|
|
87
|
-
|
|
91
|
+
finally {
|
|
88
92
|
await unlink(temp).catch(() => { });
|
|
89
|
-
throw error;
|
|
90
93
|
}
|
|
91
94
|
}
|
|
92
95
|
export function createFileCredentialStore(options) {
|
|
@@ -95,8 +98,7 @@ export function createFileCredentialStore(options) {
|
|
|
95
98
|
/** proper-lockfile locks an existing path, so the file must be there first. */
|
|
96
99
|
async function ensureFile() {
|
|
97
100
|
await mkdir(dirname(path), { recursive: true, mode: DIR_MODE });
|
|
98
|
-
|
|
99
|
-
await writeShape(path, EMPTY);
|
|
101
|
+
await writeShape(path, EMPTY, true);
|
|
100
102
|
}
|
|
101
103
|
async function withLock(fn) {
|
|
102
104
|
await ensureFile();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../src/credentials/file-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../src/credentials/file-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED