@neottia/repository-store 0.3.0 → 0.3.3

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/README.md CHANGED
@@ -19,9 +19,10 @@ The package owns byte-safe paths, SHA-256 revisions, one cross-process authority
19
19
  - Windows Server 2022 or 2025 on x64 with a fixed local NTFS volume that reports stable file-identity and hard-link capabilities.
20
20
  - FreeBSD 14.x on x64 with Node.js and a local writable UFS2 volume. Bun and FreeBSD arm64 are not certified.
21
21
  - Same-volume regular-file hard links.
22
- - A C++17 compiler, Python, Make, and the platform development headers required to build the Node-API addon during installation.
23
22
 
24
- The addon is built from architecture-neutral source. Linux uses `renameat2(..., RENAME_NOREPLACE)` and `fsync`. macOS uses `renamex_np(..., RENAME_EXCL)` and `F_FULLFSYNC`. Windows uses `SetFileInformationByHandle(..., FileRenameInfoEx)` without replacement and the Node/Bun `fsyncSync` descriptor barrier; NTFS journals same-volume namespace mutations because Windows does not expose an unprivileged directory-descriptor flush through Node.js. FreeBSD uses exclusive regular-file hard-link publication and `fsync`; because FreeBSD 14 has no no-replace directory rename, the backend uses a complete regular-file authority lease and never applies its move primitive to directories. Repository authority acquisition checks the addon and filesystem capabilities before it creates claim or lease artifacts. FreeBSD UFS1, ZFS, network filesystems, FreeBSD arm64, Bun on FreeBSD, Windows arm64, ReFS, FAT, remote or removable Windows volumes, missing or unloadable addon builds, unavailable native operations, uncertified filesystems, and shared or network filesystems return `UNSUPPORTED_RUNTIME`. Leased canonical and cache operations, including read-only operations, are unavailable in those environments.
23
+ Installation downloads the exact native prebuild for the package version, platform, and architecture from the matching GitHub Release. The installer verifies its Sigstore signature against Neottia's `CI` workflow identity and source commit, then verifies its byte size and SHA-256 digest before writing it. Repository Store checks the installed digest again before loading the addon. A missing asset, network failure, or intentionally omitted optional Sigstore verifier falls back to a local source build. Set `NEOTTIA_REPOSITORY_STORE_FORCE_SOURCE_BUILD=1` to request that path explicitly; it requires a C++17 compiler, Python, Make, and the platform development headers. A local build is not publisher-signed, but Repository Store records and checks its digest before loading it. An invalid signature, malformed bundle, or digest mismatch fails installation and never falls back.
24
+
25
+ The stable C Node-API addon is built from architecture-neutral source. Linux uses `renameat2(..., RENAME_NOREPLACE)` and `fsync`. macOS uses `renamex_np(..., RENAME_EXCL)` and `F_FULLFSYNC`. Windows uses `SetFileInformationByHandle(..., FileRenameInfoEx)` without replacement and the Node/Bun `fsyncSync` descriptor barrier; NTFS journals same-volume namespace mutations because Windows does not expose an unprivileged directory-descriptor flush through Node.js. FreeBSD uses exclusive regular-file hard-link publication and `fsync`; because FreeBSD 14 has no no-replace directory rename, the backend uses a complete regular-file authority lease and never applies its move primitive to directories. Repository authority acquisition checks the addon and filesystem capabilities before it creates claim or lease artifacts. FreeBSD UFS1, ZFS, network filesystems, FreeBSD arm64, Bun on FreeBSD, Windows arm64, ReFS, FAT, remote or removable Windows volumes, missing or unloadable addon builds, unavailable native operations, uncertified filesystems, and shared or network filesystems return `UNSUPPORTED_RUNTIME`. Leased canonical and cache operations, including read-only operations, are unavailable in those environments.
25
26
 
26
27
  ## Canonical files
27
28
 
@@ -13,9 +13,11 @@ export declare function captureDirectories(directory: string): DirectoryIdentity
13
13
  export declare function revalidateDirectories(identities: readonly DirectoryIdentity[]): void;
14
14
  export declare function readRegularFile(path: string, maxBytes: number, options?: {
15
15
  readonly allowedLinkCounts?: readonly number[];
16
+ readonly unlinkedAsIdentityChange?: boolean;
16
17
  }): Uint8Array;
17
18
  export declare function readRegularFileWithIdentity(path: string, maxBytes: number, options?: {
18
19
  readonly allowedLinkCounts?: readonly number[];
20
+ readonly unlinkedAsIdentityChange?: boolean;
19
21
  }): {
20
22
  readonly bytes: Uint8Array;
21
23
  readonly identity: Stats;
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/internal/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,QAAQ,EACb,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAOjB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACtB;AAUD,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,CAG/C;AAGD,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAGnD;AAGD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAGD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAM/D;AAsCD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA0B3D;AAGD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASzE;AAQD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI,CAWpF;AAGD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAC/D,UAAU,CAEZ;AAGD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAC/D;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAA;CAAE,CA+E1D;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEjE;AAUD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAWzE;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAclD;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAqBhD"}
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/internal/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,QAAQ,EACb,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAOjB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACtB;AAUD,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,CAG/C;AAGD,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAGnD;AAGD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAGD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAM/D;AAsCD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA0B3D;AAGD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASzE;AAQD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI,CAWpF;AAGD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACxC,GACL,UAAU,CAEZ;AAGD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACxC,GACL;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAA;CAAE,CAgF1D;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEjE;AA2BD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAWzE;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAclD;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAqBhD"}
@@ -130,13 +130,14 @@ export function readRegularFile(path, maxBytes, options = {}) {
130
130
  export function readRegularFileWithIdentity(path, maxBytes, options = {}) {
131
131
  const parents = captureDirectories(dirname(path));
132
132
  const allowedLinkCounts = options.allowedLinkCounts ?? [1];
133
+ const unlinkedAsIdentityChange = options.unlinkedAsIdentityChange ?? false;
133
134
  let descriptor;
134
135
  try {
135
136
  const pathBeforeOpen = lstatSync(path);
136
137
  assertRegularWithLinks(pathBeforeOpen, path, allowedLinkCounts);
137
138
  descriptor = openSync(path, fsConstants.O_RDONLY | noFollowFlag());
138
139
  const before = fstatSync(descriptor);
139
- assertRegularWithLinks(before, path, allowedLinkCounts);
140
+ assertOpenedRegularWithLinks(before, path, allowedLinkCounts, unlinkedAsIdentityChange);
140
141
  if (before.size > maxBytes)
141
142
  throw new ResourceLimitError(`Managed file exceeds configured byte limit: ${path}`);
142
143
  const pathBefore = lstatSync(path);
@@ -155,7 +156,7 @@ export function readRegularFileWithIdentity(path, maxBytes, options = {}) {
155
156
  if (offset > maxBytes)
156
157
  throw new ResourceLimitError(`Managed file exceeds configured byte limit: ${path}`);
157
158
  let after = fstatSync(descriptor);
158
- assertRegularWithLinks(after, path, allowedLinkCounts);
159
+ assertOpenedRegularWithLinks(after, path, allowedLinkCounts, unlinkedAsIdentityChange);
159
160
  let bytes = buffer.subarray(0, offset);
160
161
  const stableExceptCtime = sameIdentity(before, after) &&
161
162
  before.size === after.size &&
@@ -172,7 +173,7 @@ export function readRegularFileWithIdentity(path, maxBytes, options = {}) {
172
173
  confirmationOffset += count;
173
174
  }
174
175
  const confirmed = fstatSync(descriptor);
175
- assertRegularWithLinks(confirmed, path, allowedLinkCounts);
176
+ assertOpenedRegularWithLinks(confirmed, path, allowedLinkCounts, unlinkedAsIdentityChange);
176
177
  if (!sameIdentity(after, confirmed) ||
177
178
  after.size !== confirmed.size ||
178
179
  after.mtimeMs !== confirmed.mtimeMs ||
@@ -214,6 +215,14 @@ function assertRegularWithLinks(stat, path, allowedLinkCounts) {
214
215
  if (!allowedLinkCounts.includes(stat.nlink))
215
216
  throw unsafe(`Managed file has an unsafe hard-link count: ${path}`, 'UNSAFE_HARD_LINK');
216
217
  }
218
+ function assertOpenedRegularWithLinks(stat, path, allowedLinkCounts, unlinkedAsIdentityChange) {
219
+ if (stat.isSymbolicLink() || !stat.isFile())
220
+ throw unsafe(`Managed path is not a regular file: ${path}`, 'UNSAFE_LINK');
221
+ if (stat.nlink === 0 && unlinkedAsIdentityChange)
222
+ throw unsafe(`Managed file was unlinked during access: ${path}`, 'IDENTITY_CHANGED');
223
+ if (!allowedLinkCounts.includes(stat.nlink))
224
+ throw unsafe(`Managed file has an unsafe hard-link count: ${path}`, 'UNSAFE_HARD_LINK');
225
+ }
217
226
  export function syncFileDescriptor(descriptor, path) {
218
227
  try {
219
228
  emitFilesystemFault('file-fsync', path);
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/internal/filesystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/internal/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function verifyNativeAddonIntegrity(packageRoot: string): string;
2
+ //# sourceMappingURL=native-integrity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-integrity.d.ts","sourceRoot":"","sources":["../../src/internal/native-integrity.ts"],"names":[],"mappings":"AAgBA,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAiBtE"}
@@ -0,0 +1,49 @@
1
+ import { createHash, timingSafeEqual } from 'node:crypto';
2
+ import { lstatSync, readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ const MAX_RECEIPT_BYTES = 16 * 1024;
5
+ const MAX_NATIVE_ADDON_BYTES = 32 * 1024 * 1024;
6
+ export function verifyNativeAddonIntegrity(packageRoot) {
7
+ const binaryPath = join(packageRoot, 'build', 'Release', 'repository_store_native.node');
8
+ const receiptPath = join(packageRoot, 'build', 'Release', 'repository_store_native.integrity.json');
9
+ const binaryStat = lstatSync(binaryPath);
10
+ const receiptStat = lstatSync(receiptPath);
11
+ if (!binaryStat.isFile() || binaryStat.isSymbolicLink() || !receiptStat.isFile() || receiptStat.isSymbolicLink())
12
+ throw new Error('Native addon integrity files must be regular files.');
13
+ if (binaryStat.size <= 0 || binaryStat.size > MAX_NATIVE_ADDON_BYTES || receiptStat.size > MAX_RECEIPT_BYTES)
14
+ throw new Error('Native addon integrity files exceed their size limits.');
15
+ const receipt = parseReceipt(readFileSync(receiptPath, 'utf8'));
16
+ if (receipt.size !== binaryStat.size)
17
+ throw new Error('Native addon size does not match its integrity receipt.');
18
+ const actual = createHash('sha256').update(readFileSync(binaryPath)).digest();
19
+ const expected = Buffer.from(receipt.sha256, 'hex');
20
+ if (actual.byteLength !== expected.byteLength || !timingSafeEqual(actual, expected))
21
+ throw new Error('Native addon SHA-256 does not match its integrity receipt.');
22
+ return binaryPath;
23
+ }
24
+ function parseReceipt(source) {
25
+ let value;
26
+ try {
27
+ value = JSON.parse(source);
28
+ }
29
+ catch (error) {
30
+ throw new Error('Native addon integrity receipt is malformed.', { cause: error });
31
+ }
32
+ if (typeof value !== 'object' ||
33
+ value === null ||
34
+ !('schemaVersion' in value) ||
35
+ value.schemaVersion !== 1 ||
36
+ !('algorithm' in value) ||
37
+ value.algorithm !== 'sha256' ||
38
+ !('sha256' in value) ||
39
+ typeof value.sha256 !== 'string' ||
40
+ !/^[0-9a-f]{64}$/.test(value.sha256) ||
41
+ !('size' in value) ||
42
+ !Number.isSafeInteger(value.size) ||
43
+ Number(value.size) <= 0 ||
44
+ !('origin' in value) ||
45
+ (value.origin !== 'verified-prebuilt' && value.origin !== 'source-build'))
46
+ throw new Error('Native addon integrity receipt is invalid.');
47
+ return value;
48
+ }
49
+ //# sourceMappingURL=native-integrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-integrity.js","sourceRoot":"","sources":["../../src/internal/native-integrity.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"platform-backend.d.ts","sourceRoot":"","sources":["../../src/internal/platform-backend.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5D;AAGD,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1C;AAGD,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAGD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,WAAW,GAAG,MAAM,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;CACxC;AAqDD,wBAAgB,gCAAgC,IAAI,yBAAyB,CA6B5E;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAQrH;AAGD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAO/F;AAGD,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAEhH;AAGD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAEtG"}
1
+ {"version":3,"file":"platform-backend.d.ts","sourceRoot":"","sources":["../../src/internal/platform-backend.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5D;AAGD,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1C;AAGD,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAGD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,WAAW,GAAG,MAAM,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;CACxC;AAqDD,wBAAgB,gCAAgC,IAAI,yBAAyB,CA6B5E;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAQrH;AAGD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAO/F;AAGD,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAEhH;AAGD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAEtG"}
@@ -2,6 +2,7 @@ import { fsyncSync } from 'node:fs';
2
2
  import { createRequire } from 'node:module';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { UnsupportedRuntimeError } from '../errors.js';
5
+ import { verifyNativeAddonIntegrity } from './native-integrity.js';
5
6
  const backendDefinitions = {
6
7
  linux: {
7
8
  id: 'linux-node-api',
@@ -100,7 +101,7 @@ function selectBackendDefinition(platform, architecture) {
100
101
  function loadNativeModule() {
101
102
  const require = createRequire(import.meta.url);
102
103
  const packageRoot = fileURLToPath(new URL('../../', import.meta.url));
103
- const candidate = require(`${packageRoot}build/Release/repository_store_native.node`);
104
+ const candidate = require(verifyNativeAddonIntegrity(packageRoot));
104
105
  if (typeof candidate.platform !== 'string' ||
105
106
  typeof candidate.renameNoReplace !== 'function' ||
106
107
  typeof candidate.supportsLocalPath !== 'function' ||
@@ -1 +1 @@
1
- {"version":3,"file":"platform-backend.js","sourceRoot":"","sources":["../../src/internal/platform-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform-backend.js","sourceRoot":"","sources":["../../src/internal/platform-backend.ts"],"names":[],"mappings":"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"}
package/dist/lease.d.ts CHANGED
@@ -13,6 +13,8 @@ export declare function withRepositoryLease<T>(root: ManagedRoot, operation: (le
13
13
  export declare function assertLiveLease(root: ManagedRoot, lease: RepositoryLease): void;
14
14
  export declare function trackLeaseOperation<T>(lease: RepositoryLease, operation: Promise<T>): Promise<T>;
15
15
  export declare function checkControl(control: OperationControl): void;
16
+ export declare function assertPreliminaryFileLeaseIdentity(identity: Stats): void;
17
+ export declare function assertPreliminaryClaimIdentity(identity: Stats): void;
16
18
  export declare function interruptedClaimPeer(path: string, observed?: Stats, allowReleasePeer?: boolean): {
17
19
  readonly token: string;
18
20
  } | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../src/lease.ts"],"names":[],"mappings":"AAEA,OAAO,EAWL,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAmBjB,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAE9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA0BD,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,EACjD,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,CAAC,CAAC,CAyIZ;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAkB/E;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUhG;AAGD,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAI5D;AA4fD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,KAAK,EAChB,gBAAgB,UAAQ,GACvB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA4BxC;AA4HD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;CAChC;AAGD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,aAAa,CAAC,EAAE,kBAAkB,GACjC,IAAI,CA6CN;AAgSD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../src/lease.ts"],"names":[],"mappings":"AAEA,OAAO,EAWL,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAmBjB,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAE9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA4BD,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,EACjD,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,CAAC,CAAC,CAyIZ;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAkB/E;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUhG;AAGD,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAI5D;AA8SD,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI,CAOxE;AAGD,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI,CAOpE;AAgND,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,KAAK,EAChB,gBAAgB,UAAQ,GACvB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAgCxC;AA4HD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;CAChC;AAGD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,aAAa,CAAC,EAAE,kBAAkB,GACjC,IAAI,CA6CN;AAgTD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/lease.js CHANGED
@@ -14,6 +14,8 @@ const DEFAULT_STALE_MS = 60_000;
14
14
  const DEFAULT_POLL_MS = 20;
15
15
  const DEFAULT_WAIT_MS = 10_000;
16
16
  const MAX_LEASE_METADATA_BYTES = 4 * 1024;
17
+ const WINDOWS_RELEASE_RETRY_ATTEMPTS = 25;
18
+ const WINDOWS_RELEASE_RETRY_DELAY_MS = 10;
17
19
  export async function withRepositoryLease(root, operation, options = {}) {
18
20
  const rootState = getRootState(root);
19
21
  if (rootState === undefined)
@@ -107,7 +109,7 @@ export async function withRepositoryLease(root, operation, options = {}) {
107
109
  syncDirectory(controlRoot);
108
110
  if (!removeOwnedClaim(claimPath, token)) {
109
111
  claimOwnershipUncertain = true;
110
- releaseOwnedLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity, lockKind);
112
+ await releaseOwnedLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity, lockKind);
111
113
  throw new LeaseContentionError('Repository initialization claim ownership changed.', 'LEASE_OWNER_UNKNOWN');
112
114
  }
113
115
  emitLeaseFault('lease-claim-removed');
@@ -152,7 +154,7 @@ export async function withRepositoryLease(root, operation, options = {}) {
152
154
  leaseState.active = false;
153
155
  }
154
156
  if (acquired && lockIdentity !== undefined && ownerIdentity !== undefined)
155
- releaseOwnedLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity, lockKind);
157
+ await releaseOwnedLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity, lockKind);
156
158
  turn.release();
157
159
  }
158
160
  }
@@ -290,8 +292,7 @@ function tryReclaimFileLease(lockPath, controlRoot, hostId, staleMs) {
290
292
  const controlDirectories = captureDirectories(controlRoot);
291
293
  try {
292
294
  const preliminary = lstatSync(lockPath);
293
- if (preliminary.isSymbolicLink() || !preliminary.isFile() || (preliminary.nlink !== 1 && preliminary.nlink !== 2))
294
- throw new PathSafetyError('Unsafe repository file lease.', 'UNSAFE_HARD_LINK');
295
+ assertPreliminaryFileLeaseIdentity(preliminary);
295
296
  const verifiedOwner = readOwner(lockPath, true, true);
296
297
  if (!sameIdentity(preliminary, verifiedOwner.identity))
297
298
  throw new LeaseContentionError('File lease identity changed before owner verification.', 'LEASE_OWNER_UNKNOWN');
@@ -429,10 +430,7 @@ function tryReclaimClaim(claimPath, lockPath, controlRoot, hostId, staleMs) {
429
430
  const controlDirectories = captureDirectories(controlRoot);
430
431
  try {
431
432
  const preliminary = lstatSync(claimPath);
432
- if (preliminary.isSymbolicLink())
433
- throw new PathSafetyError('Unsafe repository claim symbolic link.', 'UNSAFE_LINK');
434
- if (!preliminary.isFile() || (preliminary.nlink !== 1 && preliminary.nlink !== 2))
435
- throw new PathSafetyError('Unsafe repository claim artifact.', 'UNSAFE_HARD_LINK');
433
+ assertPreliminaryClaimIdentity(preliminary);
436
434
  const verifiedOwner = readOwner(claimPath, true);
437
435
  if (!sameIdentity(preliminary, verifiedOwner.identity))
438
436
  throw new LeaseContentionError('Claim identity changed before owner verification.', 'LEASE_OWNER_UNKNOWN');
@@ -478,6 +476,24 @@ function tryReclaimClaim(claimPath, lockPath, controlRoot, hostId, staleMs) {
478
476
  return false;
479
477
  }
480
478
  }
479
+ export function assertPreliminaryFileLeaseIdentity(identity) {
480
+ if (identity.isSymbolicLink() || !identity.isFile())
481
+ throw new PathSafetyError('Unsafe repository file lease.', 'UNSAFE_HARD_LINK');
482
+ if (identity.nlink === 0)
483
+ throw new PathSafetyError('Repository file lease was released before owner verification.', 'IDENTITY_CHANGED');
484
+ if (identity.nlink !== 1 && identity.nlink !== 2)
485
+ throw new PathSafetyError('Unsafe repository file lease.', 'UNSAFE_HARD_LINK');
486
+ }
487
+ export function assertPreliminaryClaimIdentity(identity) {
488
+ if (identity.isSymbolicLink())
489
+ throw new PathSafetyError('Unsafe repository claim symbolic link.', 'UNSAFE_LINK');
490
+ if (!identity.isFile())
491
+ throw new PathSafetyError('Unsafe repository claim artifact.', 'UNSAFE_HARD_LINK');
492
+ if (identity.nlink === 0)
493
+ throw new PathSafetyError('Repository claim was released before owner verification.', 'IDENTITY_CHANGED');
494
+ if (identity.nlink !== 1 && identity.nlink !== 2)
495
+ throw new PathSafetyError('Unsafe repository claim artifact.', 'UNSAFE_HARD_LINK');
496
+ }
481
497
  function cleanupInterruptedInitialization(lockPath, controlRoot, owner, staleMs) {
482
498
  let lockStat;
483
499
  try {
@@ -627,6 +643,7 @@ function readOwner(path, allowInterruptedClaimLink = false, allowInterruptedRele
627
643
  try {
628
644
  file = readRegularFileWithIdentity(path, MAX_LEASE_METADATA_BYTES, {
629
645
  allowedLinkCounts: allowInterruptedClaimLink ? [1, 2] : [1],
646
+ unlinkedAsIdentityChange: true,
630
647
  });
631
648
  }
632
649
  catch (error) {
@@ -648,7 +665,9 @@ function readOwner(path, allowInterruptedClaimLink = false, allowInterruptedRele
648
665
  throw new PathSafetyError('Interrupted claim identity changed during owner verification.', 'IDENTITY_CHANGED');
649
666
  if (stabilized.nlink !== 1)
650
667
  throw error;
651
- file = readRegularFileWithIdentity(path, MAX_LEASE_METADATA_BYTES);
668
+ file = readRegularFileWithIdentity(path, MAX_LEASE_METADATA_BYTES, {
669
+ unlinkedAsIdentityChange: true,
670
+ });
652
671
  }
653
672
  const owner = JSON.parse(new TextDecoder().decode(file.bytes));
654
673
  if (owner.version !== 1 ||
@@ -672,7 +691,11 @@ function readOwner(path, allowInterruptedClaimLink = false, allowInterruptedRele
672
691
  }
673
692
  export function interruptedClaimPeer(path, observed, allowReleasePeer = false) {
674
693
  const stat = observed ?? lstatSync(path);
675
- if (stat.isSymbolicLink() || !stat.isFile() || (stat.nlink !== 1 && stat.nlink !== 2))
694
+ if (stat.isSymbolicLink() || !stat.isFile())
695
+ throw new PathSafetyError('Unsafe interrupted repository claim.', 'UNSAFE_HARD_LINK');
696
+ if (stat.nlink === 0)
697
+ throw new PathSafetyError('Interrupted claim was released before peer verification.', 'IDENTITY_CHANGED');
698
+ if (stat.nlink !== 1 && stat.nlink !== 2)
676
699
  throw new PathSafetyError('Unsafe interrupted repository claim.', 'UNSAFE_HARD_LINK');
677
700
  if (stat.nlink === 1)
678
701
  return undefined;
@@ -721,9 +744,9 @@ function matchingInterruptedClaimPeers(path, identity, allowReleasePeer) {
721
744
  }
722
745
  });
723
746
  }
724
- function releaseOwnedLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity, lockKind) {
747
+ async function releaseOwnedLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity, lockKind) {
725
748
  if (lockKind === 'file') {
726
- releaseOwnedFileLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity);
749
+ await releaseOwnedFileLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity);
727
750
  return;
728
751
  }
729
752
  const releasePath = `${lockPath}.release-${token}`;
@@ -743,7 +766,7 @@ function releaseOwnedLease(lockPath, controlRoot, token, lockIdentity, ownerIden
743
766
  !sameLeaseIdentity(ownerIdentity, currentOwner.identity) ||
744
767
  currentOwner.metadata.token !== token)
745
768
  return;
746
- if (!quarantineNoReplace(lockPath, releasePath))
769
+ if (!(await quarantineOwnedRelease(lockPath, releasePath)))
747
770
  return;
748
771
  restorationSafe = true;
749
772
  const movedLock = lstatSync(releasePath);
@@ -773,7 +796,7 @@ function releaseOwnedLease(lockPath, controlRoot, token, lockIdentity, ownerIden
773
796
  restoreQuarantinedLease(releasePath, lockPath, releaseExpectation);
774
797
  }
775
798
  }
776
- function releaseOwnedFileLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity) {
799
+ async function releaseOwnedFileLease(lockPath, controlRoot, token, lockIdentity, ownerIdentity) {
777
800
  const releasePath = `${lockPath}.release-${token}`;
778
801
  const expected = { kind: 'file', identity: lockIdentity, token };
779
802
  let restorationSafe = false;
@@ -783,7 +806,7 @@ function releaseOwnedFileLease(lockPath, controlRoot, token, lockIdentity, owner
783
806
  !sameIdentity(current.identity, lockIdentity) ||
784
807
  !sameIdentity(current.identity, ownerIdentity))
785
808
  return;
786
- if (!quarantineNoReplace(lockPath, releasePath))
809
+ if (!(await quarantineOwnedRelease(lockPath, releasePath)))
787
810
  return;
788
811
  restorationSafe = true;
789
812
  const moved = readOwner(releasePath);
@@ -1094,6 +1117,20 @@ function acquisitionTimeout(hasExplicitDeadline) {
1094
1117
  ? new LeaseContentionError('Repository operation deadline was exceeded.', 'DEADLINE_EXCEEDED')
1095
1118
  : new LeaseContentionError('Repository authority lease is busy.', 'LEASE_BUSY');
1096
1119
  }
1120
+ async function quarantineOwnedRelease(source, destination) {
1121
+ const backend = requireRepositoryPlatformBackend();
1122
+ for (let attempt = 1;; attempt += 1) {
1123
+ try {
1124
+ return quarantineNoReplace(source, destination);
1125
+ }
1126
+ catch (error) {
1127
+ const retryableWindowsSharingFailure = backend.platform === 'win32' && (hasCode(error, 'EBUSY') || hasCode(error, 'EACCES'));
1128
+ if (!retryableWindowsSharingFailure || attempt >= WINDOWS_RELEASE_RETRY_ATTEMPTS)
1129
+ throw error;
1130
+ await interruptibleDelay(WINDOWS_RELEASE_RETRY_DELAY_MS);
1131
+ }
1132
+ }
1133
+ }
1097
1134
  function quarantineNoReplace(source, destination) {
1098
1135
  emitFilesystemFault('before-lease-artifact-quarantine', source);
1099
1136
  try {