@drawcall/market 0.1.56 → 0.1.57

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.
@@ -0,0 +1,8 @@
1
+ export declare const PROJECT_INSTALL_LOCK_PATH = ".drawcall/market-install.lock";
2
+ export interface ProjectInstallLockOptions {
3
+ timeoutMs?: number;
4
+ retryDelayMs?: number;
5
+ staleMs?: number;
6
+ }
7
+ export declare function withProjectInstallLock<T>(projectRoot: string, task: () => Promise<T>, options?: ProjectInstallLockOptions): Promise<T>;
8
+ //# sourceMappingURL=install-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-lock.d.ts","sourceRoot":"","sources":["../src/install-lock.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,yBAAyB,kCAAkC,CAAA;AAqBxE,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,CAAC,CAAC,CASZ"}
@@ -0,0 +1,209 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import * as fs from 'node:fs/promises';
3
+ import { hostname } from 'node:os';
4
+ import * as path from 'node:path';
5
+ export const PROJECT_INSTALL_LOCK_PATH = '.drawcall/market-install.lock';
6
+ const OWNER_FILE = 'owner.json';
7
+ const DEFAULT_TIMEOUT_MS = 30_000;
8
+ const DEFAULT_RETRY_DELAY_MS = 50;
9
+ const DEFAULT_STALE_MS = 5 * 60_000;
10
+ export async function withProjectInstallLock(projectRoot, task, options = {}) {
11
+ const lockPath = path.join(projectRoot, PROJECT_INSTALL_LOCK_PATH);
12
+ const owner = await acquireLock(lockPath, options);
13
+ try {
14
+ return await task();
15
+ }
16
+ finally {
17
+ await releaseLock(lockPath, owner);
18
+ }
19
+ }
20
+ async function acquireLock(lockPath, options) {
21
+ const timeoutMs = validDuration(options.timeoutMs, DEFAULT_TIMEOUT_MS, 'timeoutMs');
22
+ const retryDelayMs = validDuration(options.retryDelayMs, DEFAULT_RETRY_DELAY_MS, 'retryDelayMs');
23
+ const staleMs = validDuration(options.staleMs, DEFAULT_STALE_MS, 'staleMs');
24
+ const startedAtMs = Date.now();
25
+ const owner = createOwner();
26
+ await fs.mkdir(path.dirname(lockPath), { recursive: true });
27
+ while (true) {
28
+ if (await tryCreateLock(lockPath, owner))
29
+ return owner;
30
+ const snapshot = await readLockSnapshot(lockPath);
31
+ if (!snapshot)
32
+ continue;
33
+ if (isStale(snapshot, staleMs) && (await quarantineStaleLock(lockPath, snapshot))) {
34
+ continue;
35
+ }
36
+ const elapsedMs = Date.now() - startedAtMs;
37
+ if (elapsedMs >= timeoutMs) {
38
+ throw new Error(lockTimeoutMessage(lockPath, timeoutMs, snapshot.owner));
39
+ }
40
+ await delay(Math.min(retryDelayMs, timeoutMs - elapsedMs));
41
+ }
42
+ }
43
+ async function tryCreateLock(lockPath, owner) {
44
+ // Directory creation is the cross-process compare-and-set: exactly one installer can succeed.
45
+ try {
46
+ await fs.mkdir(lockPath);
47
+ }
48
+ catch (error) {
49
+ if (hasCode(error, 'EEXIST'))
50
+ return false;
51
+ throw error;
52
+ }
53
+ try {
54
+ await fs.writeFile(path.join(lockPath, OWNER_FILE), JSON.stringify(owner, null, 2) + '\n', {
55
+ flag: 'wx',
56
+ });
57
+ }
58
+ catch (error) {
59
+ await fs.rm(lockPath, { recursive: true, force: true });
60
+ throw error;
61
+ }
62
+ return true;
63
+ }
64
+ async function releaseLock(lockPath, owner) {
65
+ const snapshot = await readLockSnapshot(lockPath);
66
+ if (snapshot?.owner?.token !== owner.token) {
67
+ throw new Error(`Lost ownership of Market install lock at ${lockPath}; refusing to release it.`);
68
+ }
69
+ const releasedPath = `${lockPath}.released-${owner.token}`;
70
+ // Cleanup happens at an owner-specific path, so a successor can acquire the canonical path
71
+ // without being vulnerable to this process deleting its lock.
72
+ await fs.rename(lockPath, releasedPath);
73
+ const released = await readLockSnapshot(releasedPath);
74
+ if (released?.owner?.token !== owner.token) {
75
+ await restoreLock(releasedPath, lockPath);
76
+ throw new Error(`Market install lock at ${lockPath} changed while it was being released.`);
77
+ }
78
+ await fs.rm(releasedPath, { recursive: true, force: true });
79
+ }
80
+ async function quarantineStaleLock(lockPath, expected) {
81
+ const stalePath = `${lockPath}.stale-${randomUUID()}`;
82
+ try {
83
+ await fs.rename(lockPath, stalePath);
84
+ }
85
+ catch (error) {
86
+ if (hasCode(error, 'ENOENT'))
87
+ return true;
88
+ throw error;
89
+ }
90
+ const quarantined = await readLockSnapshot(stalePath);
91
+ if (!quarantined)
92
+ return true;
93
+ // Another process may have replaced the stale lock after our read. Inode identity keeps this
94
+ // recovery attempt from deleting that replacement.
95
+ if (quarantined.device !== expected.device ||
96
+ quarantined.inode !== expected.inode ||
97
+ quarantined.modifiedAtMs !== expected.modifiedAtMs ||
98
+ quarantined.owner?.token !== expected.owner?.token) {
99
+ await restoreLock(stalePath, lockPath);
100
+ return false;
101
+ }
102
+ await fs.rm(stalePath, { recursive: true, force: true });
103
+ return true;
104
+ }
105
+ async function restoreLock(from, to) {
106
+ try {
107
+ await fs.rename(from, to);
108
+ }
109
+ catch (error) {
110
+ throw new Error(`Could not restore Market install lock at ${to}.`, { cause: error });
111
+ }
112
+ }
113
+ async function readLockSnapshot(lockPath) {
114
+ let stats;
115
+ try {
116
+ stats = await fs.stat(lockPath);
117
+ }
118
+ catch (error) {
119
+ if (hasCode(error, 'ENOENT'))
120
+ return null;
121
+ throw error;
122
+ }
123
+ return {
124
+ owner: await readOwner(lockPath),
125
+ device: stats.dev,
126
+ inode: stats.ino,
127
+ modifiedAtMs: stats.mtimeMs,
128
+ };
129
+ }
130
+ async function readOwner(lockPath) {
131
+ let value;
132
+ try {
133
+ value = JSON.parse(await fs.readFile(path.join(lockPath, OWNER_FILE), 'utf-8'));
134
+ }
135
+ catch (error) {
136
+ if (hasCode(error, 'ENOENT') || error instanceof SyntaxError)
137
+ return null;
138
+ throw error;
139
+ }
140
+ if (!isRecord(value))
141
+ return null;
142
+ if (typeof value.token !== 'string')
143
+ return null;
144
+ if (typeof value.pid !== 'number' || !Number.isSafeInteger(value.pid) || value.pid <= 0)
145
+ return null;
146
+ if (typeof value.hostname !== 'string')
147
+ return null;
148
+ if (typeof value.createdAtMs !== 'number' || Number.isNaN(new Date(value.createdAtMs).getTime()))
149
+ return null;
150
+ return {
151
+ token: value.token,
152
+ pid: value.pid,
153
+ hostname: value.hostname,
154
+ createdAtMs: value.createdAtMs,
155
+ };
156
+ }
157
+ function isStale(snapshot, staleMs) {
158
+ if (snapshot.owner?.hostname === hostname()) {
159
+ const running = isProcessRunning(snapshot.owner.pid);
160
+ if (running !== null)
161
+ return !running;
162
+ }
163
+ return Date.now() - snapshot.modifiedAtMs >= staleMs;
164
+ }
165
+ function isProcessRunning(pid) {
166
+ try {
167
+ process.kill(pid, 0);
168
+ return true;
169
+ }
170
+ catch (error) {
171
+ if (hasCode(error, 'ESRCH'))
172
+ return false;
173
+ if (hasCode(error, 'EPERM'))
174
+ return true;
175
+ return null;
176
+ }
177
+ }
178
+ function createOwner() {
179
+ return {
180
+ token: randomUUID(),
181
+ pid: process.pid,
182
+ hostname: hostname(),
183
+ createdAtMs: Date.now(),
184
+ };
185
+ }
186
+ function lockTimeoutMessage(lockPath, timeoutMs, owner) {
187
+ const ownerDescription = owner
188
+ ? ` Owner PID ${owner.pid} on ${owner.hostname} acquired it at ${new Date(owner.createdAtMs).toISOString()}.`
189
+ : '';
190
+ return `Timed out after ${timeoutMs}ms waiting for Market install lock at ${lockPath}.${ownerDescription}`;
191
+ }
192
+ function validDuration(value, fallback, name) {
193
+ if (value === undefined)
194
+ return fallback;
195
+ if (!Number.isFinite(value) || value < 0) {
196
+ throw new TypeError(`${name} must be a non-negative finite number.`);
197
+ }
198
+ return value;
199
+ }
200
+ function isRecord(value) {
201
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
202
+ }
203
+ function hasCode(error, code) {
204
+ return error instanceof Error && 'code' in error && error.code === code;
205
+ }
206
+ function delay(ms) {
207
+ return new Promise((resolve) => setTimeout(resolve, ms));
208
+ }
209
+ //# sourceMappingURL=install-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-lock.js","sourceRoot":"","sources":["../src/install-lock.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uFAAuF;IACvF,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACnC,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IACtD;gGAC4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mBAAmB;IACnB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAQD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,aAAa,EACzB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CA0CxB;AAED,wBAAsB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlF"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAIzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uFAAuF;IACvF,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACnC,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IACtD;gGAC4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mBAAmB;IACnB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAQD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,aAAa,EACzB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CA4CxB;AAED,wBAAsB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlF"}
package/dist/install.js CHANGED
@@ -14,6 +14,7 @@ import * as fs from 'fs/promises';
14
14
  import * as path from 'path';
15
15
  import { unzipSync } from 'fflate';
16
16
  import { detectPackageManager, installDependencies } from 'nypm';
17
+ import { withProjectInstallLock } from './install-lock.js';
17
18
  import { readMarketLock, writeMarketLock } from './market-lock.js';
18
19
  import { parsePackageJson } from './package-json.js';
19
20
  export async function install(client, resolution, opts = {}) {
@@ -25,11 +26,13 @@ export async function install(client, resolution, opts = {}) {
25
26
  log,
26
27
  baseUrl: opts.baseUrl,
27
28
  });
28
- await writeInstalledAssetLock(installRoot, download.assets);
29
- const packageJsonUpdate = await updatePackageJson(resolution, installRoot, {
30
- rootRequests: opts.rootRequests ?? [],
31
- installMetadata: metadata,
32
- packageManagerNeeded: download.wrotePackageJson,
29
+ const packageJsonUpdate = await withProjectInstallLock(installRoot, async () => {
30
+ await writeInstalledAssetLock(installRoot, download.assets);
31
+ return updatePackageJson(resolution, installRoot, {
32
+ rootRequests: opts.rootRequests ?? [],
33
+ installMetadata: metadata,
34
+ packageManagerNeeded: download.wrotePackageJson,
35
+ });
33
36
  });
34
37
  if (packageJsonUpdate.packageManagerNeeded) {
35
38
  await runPackageManagerInstall(installRoot, log);
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drawcall/market",
3
- "version": "0.1.56",
3
+ "version": "0.1.57",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/drawcall-ai/market",
@@ -30,7 +30,7 @@
30
30
  "build": "tsc",
31
31
  "prepack": "npm run build && node scripts/prepare-publish.mjs",
32
32
  "dev": "tsx src/cli.ts",
33
- "test:install-layout": "tsx --test tests/install-layout.test.ts tests/install-command.test.ts tests/list-command.test.ts tests/pack.test.ts",
33
+ "test:install-layout": "tsx --test tests/install-layout.test.ts tests/install-lock.test.ts tests/install-command.test.ts tests/list-command.test.ts tests/pack.test.ts",
34
34
  "typecheck": "tsc --noEmit"
35
35
  },
36
36
  "dependencies": {
@@ -0,0 +1,253 @@
1
+ import { randomUUID } from 'node:crypto'
2
+ import * as fs from 'node:fs/promises'
3
+ import { hostname } from 'node:os'
4
+ import * as path from 'node:path'
5
+
6
+ export const PROJECT_INSTALL_LOCK_PATH = '.drawcall/market-install.lock'
7
+
8
+ const OWNER_FILE = 'owner.json'
9
+ const DEFAULT_TIMEOUT_MS = 30_000
10
+ const DEFAULT_RETRY_DELAY_MS = 50
11
+ const DEFAULT_STALE_MS = 5 * 60_000
12
+
13
+ interface LockOwner {
14
+ token: string
15
+ pid: number
16
+ hostname: string
17
+ createdAtMs: number
18
+ }
19
+
20
+ interface LockSnapshot {
21
+ owner: LockOwner | null
22
+ device: number
23
+ inode: number
24
+ modifiedAtMs: number
25
+ }
26
+
27
+ export interface ProjectInstallLockOptions {
28
+ timeoutMs?: number
29
+ retryDelayMs?: number
30
+ staleMs?: number
31
+ }
32
+
33
+ export async function withProjectInstallLock<T>(
34
+ projectRoot: string,
35
+ task: () => Promise<T>,
36
+ options: ProjectInstallLockOptions = {},
37
+ ): Promise<T> {
38
+ const lockPath = path.join(projectRoot, PROJECT_INSTALL_LOCK_PATH)
39
+ const owner = await acquireLock(lockPath, options)
40
+
41
+ try {
42
+ return await task()
43
+ } finally {
44
+ await releaseLock(lockPath, owner)
45
+ }
46
+ }
47
+
48
+ async function acquireLock(
49
+ lockPath: string,
50
+ options: ProjectInstallLockOptions,
51
+ ): Promise<LockOwner> {
52
+ const timeoutMs = validDuration(options.timeoutMs, DEFAULT_TIMEOUT_MS, 'timeoutMs')
53
+ const retryDelayMs = validDuration(options.retryDelayMs, DEFAULT_RETRY_DELAY_MS, 'retryDelayMs')
54
+ const staleMs = validDuration(options.staleMs, DEFAULT_STALE_MS, 'staleMs')
55
+ const startedAtMs = Date.now()
56
+ const owner = createOwner()
57
+
58
+ await fs.mkdir(path.dirname(lockPath), { recursive: true })
59
+
60
+ while (true) {
61
+ if (await tryCreateLock(lockPath, owner)) return owner
62
+
63
+ const snapshot = await readLockSnapshot(lockPath)
64
+ if (!snapshot) continue
65
+
66
+ if (isStale(snapshot, staleMs) && (await quarantineStaleLock(lockPath, snapshot))) {
67
+ continue
68
+ }
69
+
70
+ const elapsedMs = Date.now() - startedAtMs
71
+ if (elapsedMs >= timeoutMs) {
72
+ throw new Error(lockTimeoutMessage(lockPath, timeoutMs, snapshot.owner))
73
+ }
74
+
75
+ await delay(Math.min(retryDelayMs, timeoutMs - elapsedMs))
76
+ }
77
+ }
78
+
79
+ async function tryCreateLock(lockPath: string, owner: LockOwner): Promise<boolean> {
80
+ // Directory creation is the cross-process compare-and-set: exactly one installer can succeed.
81
+ try {
82
+ await fs.mkdir(lockPath)
83
+ } catch (error) {
84
+ if (hasCode(error, 'EEXIST')) return false
85
+ throw error
86
+ }
87
+
88
+ try {
89
+ await fs.writeFile(path.join(lockPath, OWNER_FILE), JSON.stringify(owner, null, 2) + '\n', {
90
+ flag: 'wx',
91
+ })
92
+ } catch (error) {
93
+ await fs.rm(lockPath, { recursive: true, force: true })
94
+ throw error
95
+ }
96
+
97
+ return true
98
+ }
99
+
100
+ async function releaseLock(lockPath: string, owner: LockOwner): Promise<void> {
101
+ const snapshot = await readLockSnapshot(lockPath)
102
+ if (snapshot?.owner?.token !== owner.token) {
103
+ throw new Error(`Lost ownership of Market install lock at ${lockPath}; refusing to release it.`)
104
+ }
105
+
106
+ const releasedPath = `${lockPath}.released-${owner.token}`
107
+ // Cleanup happens at an owner-specific path, so a successor can acquire the canonical path
108
+ // without being vulnerable to this process deleting its lock.
109
+ await fs.rename(lockPath, releasedPath)
110
+
111
+ const released = await readLockSnapshot(releasedPath)
112
+ if (released?.owner?.token !== owner.token) {
113
+ await restoreLock(releasedPath, lockPath)
114
+ throw new Error(`Market install lock at ${lockPath} changed while it was being released.`)
115
+ }
116
+
117
+ await fs.rm(releasedPath, { recursive: true, force: true })
118
+ }
119
+
120
+ async function quarantineStaleLock(lockPath: string, expected: LockSnapshot): Promise<boolean> {
121
+ const stalePath = `${lockPath}.stale-${randomUUID()}`
122
+
123
+ try {
124
+ await fs.rename(lockPath, stalePath)
125
+ } catch (error) {
126
+ if (hasCode(error, 'ENOENT')) return true
127
+ throw error
128
+ }
129
+
130
+ const quarantined = await readLockSnapshot(stalePath)
131
+ if (!quarantined) return true
132
+
133
+ // Another process may have replaced the stale lock after our read. Inode identity keeps this
134
+ // recovery attempt from deleting that replacement.
135
+ if (
136
+ quarantined.device !== expected.device ||
137
+ quarantined.inode !== expected.inode ||
138
+ quarantined.modifiedAtMs !== expected.modifiedAtMs ||
139
+ quarantined.owner?.token !== expected.owner?.token
140
+ ) {
141
+ await restoreLock(stalePath, lockPath)
142
+ return false
143
+ }
144
+
145
+ await fs.rm(stalePath, { recursive: true, force: true })
146
+ return true
147
+ }
148
+
149
+ async function restoreLock(from: string, to: string): Promise<void> {
150
+ try {
151
+ await fs.rename(from, to)
152
+ } catch (error) {
153
+ throw new Error(`Could not restore Market install lock at ${to}.`, { cause: error })
154
+ }
155
+ }
156
+
157
+ async function readLockSnapshot(lockPath: string): Promise<LockSnapshot | null> {
158
+ let stats
159
+ try {
160
+ stats = await fs.stat(lockPath)
161
+ } catch (error) {
162
+ if (hasCode(error, 'ENOENT')) return null
163
+ throw error
164
+ }
165
+
166
+ return {
167
+ owner: await readOwner(lockPath),
168
+ device: stats.dev,
169
+ inode: stats.ino,
170
+ modifiedAtMs: stats.mtimeMs,
171
+ }
172
+ }
173
+
174
+ async function readOwner(lockPath: string): Promise<LockOwner | null> {
175
+ let value: unknown
176
+ try {
177
+ value = JSON.parse(await fs.readFile(path.join(lockPath, OWNER_FILE), 'utf-8'))
178
+ } catch (error) {
179
+ if (hasCode(error, 'ENOENT') || error instanceof SyntaxError) return null
180
+ throw error
181
+ }
182
+
183
+ if (!isRecord(value)) return null
184
+ if (typeof value.token !== 'string') return null
185
+ if (typeof value.pid !== 'number' || !Number.isSafeInteger(value.pid) || value.pid <= 0)
186
+ return null
187
+ if (typeof value.hostname !== 'string') return null
188
+ if (typeof value.createdAtMs !== 'number' || Number.isNaN(new Date(value.createdAtMs).getTime()))
189
+ return null
190
+
191
+ return {
192
+ token: value.token,
193
+ pid: value.pid,
194
+ hostname: value.hostname,
195
+ createdAtMs: value.createdAtMs,
196
+ }
197
+ }
198
+
199
+ function isStale(snapshot: LockSnapshot, staleMs: number): boolean {
200
+ if (snapshot.owner?.hostname === hostname()) {
201
+ const running = isProcessRunning(snapshot.owner.pid)
202
+ if (running !== null) return !running
203
+ }
204
+
205
+ return Date.now() - snapshot.modifiedAtMs >= staleMs
206
+ }
207
+
208
+ function isProcessRunning(pid: number): boolean | null {
209
+ try {
210
+ process.kill(pid, 0)
211
+ return true
212
+ } catch (error) {
213
+ if (hasCode(error, 'ESRCH')) return false
214
+ if (hasCode(error, 'EPERM')) return true
215
+ return null
216
+ }
217
+ }
218
+
219
+ function createOwner(): LockOwner {
220
+ return {
221
+ token: randomUUID(),
222
+ pid: process.pid,
223
+ hostname: hostname(),
224
+ createdAtMs: Date.now(),
225
+ }
226
+ }
227
+
228
+ function lockTimeoutMessage(lockPath: string, timeoutMs: number, owner: LockOwner | null): string {
229
+ const ownerDescription = owner
230
+ ? ` Owner PID ${owner.pid} on ${owner.hostname} acquired it at ${new Date(owner.createdAtMs).toISOString()}.`
231
+ : ''
232
+ return `Timed out after ${timeoutMs}ms waiting for Market install lock at ${lockPath}.${ownerDescription}`
233
+ }
234
+
235
+ function validDuration(value: number | undefined, fallback: number, name: string): number {
236
+ if (value === undefined) return fallback
237
+ if (!Number.isFinite(value) || value < 0) {
238
+ throw new TypeError(`${name} must be a non-negative finite number.`)
239
+ }
240
+ return value
241
+ }
242
+
243
+ function isRecord(value: unknown): value is Record<string, unknown> {
244
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
245
+ }
246
+
247
+ function hasCode(error: unknown, code: string): boolean {
248
+ return error instanceof Error && 'code' in error && error.code === code
249
+ }
250
+
251
+ function delay(ms: number): Promise<void> {
252
+ return new Promise((resolve) => setTimeout(resolve, ms))
253
+ }
package/src/install.ts CHANGED
@@ -17,6 +17,7 @@ import { unzipSync } from 'fflate'
17
17
  import { detectPackageManager, installDependencies } from 'nypm'
18
18
  import type { MarketClient } from './client.js'
19
19
  import type { AssetInstallMetadata } from './contract.js'
20
+ import { withProjectInstallLock } from './install-lock.js'
20
21
  import { readMarketLock, writeMarketLock } from './market-lock.js'
21
22
  import { parsePackageJson, type PackageJson } from './package-json.js'
22
23
  import type { ResolveResult } from './resolve.js'
@@ -86,11 +87,13 @@ export async function install(
86
87
  log,
87
88
  baseUrl: opts.baseUrl,
88
89
  })
89
- await writeInstalledAssetLock(installRoot, download.assets)
90
- const packageJsonUpdate = await updatePackageJson(resolution, installRoot, {
91
- rootRequests: opts.rootRequests ?? [],
92
- installMetadata: metadata,
93
- packageManagerNeeded: download.wrotePackageJson,
90
+ const packageJsonUpdate = await withProjectInstallLock(installRoot, async () => {
91
+ await writeInstalledAssetLock(installRoot, download.assets)
92
+ return updatePackageJson(resolution, installRoot, {
93
+ rootRequests: opts.rootRequests ?? [],
94
+ installMetadata: metadata,
95
+ packageManagerNeeded: download.wrotePackageJson,
96
+ })
94
97
  })
95
98
  if (packageJsonUpdate.packageManagerNeeded) {
96
99
  await runPackageManagerInstall(installRoot, log)