@abitat_reece/host-daemon 0.1.21 → 0.1.23

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.
@@ -1,9 +1,12 @@
1
1
  import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
2
- import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
3
3
  import { homedir, hostname } from "node:os";
4
4
  import { dirname, join } from "node:path";
5
+ import { setTimeout as delay } from "node:timers/promises";
5
6
  const DEFAULT_PAIRING_TTL_MS = 5 * 60 * 1000;
6
7
  const LOCAL_WORKSPACE_ID = "local";
8
+ const STATE_READ_RETRY_ATTEMPTS = 5;
9
+ const STATE_READ_RETRY_DELAY_MS = 10;
7
10
  const PAIRING_CAPABILITIES = [
8
11
  "codex_chat",
9
12
  "codex_projects",
@@ -27,7 +30,8 @@ export function createLocalControlStore(options = {}) {
27
30
  const randomSecret = options.randomSecret ?? (() => randomBytes(32).toString("base64url"));
28
31
  const idGenerator = options.idGenerator ?? ((prefix) => `${prefix}_${randomBytes(8).toString("hex")}`);
29
32
  let hostToken = null;
30
- async function loadState() {
33
+ let stateOperation = Promise.resolve();
34
+ async function readOrCreateState() {
31
35
  const existing = await readStateFile(statePath);
32
36
  if (existing) {
33
37
  return existing;
@@ -44,250 +48,287 @@ export function createLocalControlStore(options = {}) {
44
48
  await saveState(created);
45
49
  return created;
46
50
  }
51
+ function runStateOperation(operation) {
52
+ const running = stateOperation.then(operation, operation);
53
+ stateOperation = running.then(() => undefined, () => undefined);
54
+ return running;
55
+ }
47
56
  async function saveState(state) {
48
57
  await mkdir(dirname(statePath), { recursive: true });
49
- await writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
58
+ const tempPath = `${statePath}.${process.pid}.${Date.now()}.${randomBytes(6).toString("hex")}.tmp`;
59
+ await writeFile(tempPath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
60
+ await rename(tempPath, statePath);
50
61
  }
51
62
  return {
52
63
  statePath,
53
64
  async getMacIdentity() {
54
- const state = await loadState();
55
- return {
56
- macId: state.macId,
57
- macName: state.macName
58
- };
65
+ return runStateOperation(async () => {
66
+ const state = await readOrCreateState();
67
+ return {
68
+ macId: state.macId,
69
+ macName: state.macName
70
+ };
71
+ });
59
72
  },
60
73
  async getHostToken() {
61
- const state = await loadState();
62
- if (hostToken && tokenMatchesHash(hostToken, state.hostTokenHash)) {
74
+ return runStateOperation(async () => {
75
+ const state = await readOrCreateState();
76
+ if (hostToken && tokenMatchesHash(hostToken, state.hostTokenHash)) {
77
+ return hostToken;
78
+ }
79
+ hostToken = randomSecret();
80
+ await saveState({
81
+ ...state,
82
+ hostTokenHash: hashLocalControlToken(hostToken)
83
+ });
63
84
  return hostToken;
64
- }
65
- hostToken = randomSecret();
66
- await saveState({
67
- ...state,
68
- hostTokenHash: hashLocalControlToken(hostToken)
69
85
  });
70
- return hostToken;
71
86
  },
72
87
  async getRelayId() {
73
- const state = await loadState();
74
- const existingRelayId = state.relayId ?? latestStoredRelayId(state);
75
- if (existingRelayId) {
76
- if (!state.relayId) {
77
- await saveState({
78
- ...state,
79
- relayId: existingRelayId
80
- });
88
+ return runStateOperation(async () => {
89
+ const state = await readOrCreateState();
90
+ const existingRelayId = state.relayId ?? latestStoredRelayId(state);
91
+ if (existingRelayId) {
92
+ if (!state.relayId) {
93
+ await saveState({
94
+ ...state,
95
+ relayId: existingRelayId
96
+ });
97
+ }
98
+ return existingRelayId;
81
99
  }
82
- return existingRelayId;
83
- }
84
- const relayId = idGenerator("relay");
85
- await saveState({
86
- ...state,
87
- relayId
100
+ const relayId = idGenerator("relay");
101
+ await saveState({
102
+ ...state,
103
+ relayId
104
+ });
105
+ return relayId;
88
106
  });
89
- return relayId;
90
107
  },
91
108
  async createPairing(input) {
92
- const state = await loadState();
93
- const createdAt = now();
94
- const pairingSecret = randomSecret();
95
- const manualCode = manualCodeFromSeed(randomSecret());
96
- const pairing = {
97
- id: idGenerator("pairing"),
98
- endpoint: input.endpoint,
99
- secretHash: hashLocalControlToken(pairingSecret),
100
- manualCodeHash: hashLocalControlToken(normalizeManualCode(manualCode)),
101
- manualCode,
102
- expiresAt: new Date(createdAt.getTime() + (input.ttlMs ?? DEFAULT_PAIRING_TTL_MS)).toISOString(),
103
- consumedAt: null,
104
- createdAt: createdAt.toISOString(),
105
- relayId: input.relayId ?? null,
106
- transport: input.transport
107
- };
108
- await saveState({
109
- ...state,
110
- activePairings: [
111
- ...state.activePairings.filter((candidate) => !isExpired(candidate, createdAt)),
112
- pairing
113
- ]
109
+ return runStateOperation(async () => {
110
+ const state = await readOrCreateState();
111
+ const createdAt = now();
112
+ const pairingSecret = randomSecret();
113
+ const manualCode = manualCodeFromSeed(randomSecret());
114
+ const pairing = {
115
+ id: idGenerator("pairing"),
116
+ endpoint: input.endpoint,
117
+ secretHash: hashLocalControlToken(pairingSecret),
118
+ manualCodeHash: hashLocalControlToken(normalizeManualCode(manualCode)),
119
+ manualCode,
120
+ expiresAt: new Date(createdAt.getTime() + (input.ttlMs ?? DEFAULT_PAIRING_TTL_MS)).toISOString(),
121
+ consumedAt: null,
122
+ createdAt: createdAt.toISOString(),
123
+ relayId: input.relayId ?? null,
124
+ transport: input.transport
125
+ };
126
+ await saveState({
127
+ ...state,
128
+ activePairings: [
129
+ ...state.activePairings.filter((candidate) => !isExpired(candidate, createdAt)),
130
+ pairing
131
+ ]
132
+ });
133
+ return {
134
+ version: 1,
135
+ product: "abitat",
136
+ endpoint: input.endpoint,
137
+ macId: state.macId,
138
+ pairingSecret,
139
+ manualCode,
140
+ expiresAt: pairing.expiresAt,
141
+ transport: input.transport,
142
+ relayId: input.relayId,
143
+ capabilities: [...PAIRING_CAPABILITIES]
144
+ };
114
145
  });
115
- return {
116
- version: 1,
117
- product: "abitat",
118
- endpoint: input.endpoint,
119
- macId: state.macId,
120
- pairingSecret,
121
- manualCode,
122
- expiresAt: pairing.expiresAt,
123
- transport: input.transport,
124
- relayId: input.relayId,
125
- capabilities: [...PAIRING_CAPABILITIES]
126
- };
127
146
  },
128
147
  async consumePairing(input) {
129
- const state = await loadState();
130
- const pairedAt = now();
131
- const manualCode = input.manualCode ?? input.code;
132
- const pairing = state.activePairings.find((candidate) => {
133
- if (input.pairingSecret && tokenMatchesHash(input.pairingSecret, candidate.secretHash)) {
134
- return true;
148
+ return runStateOperation(async () => {
149
+ const state = await readOrCreateState();
150
+ const pairedAt = now();
151
+ const manualCode = input.manualCode ?? input.code;
152
+ const pairing = state.activePairings.find((candidate) => {
153
+ if (input.pairingSecret && tokenMatchesHash(input.pairingSecret, candidate.secretHash)) {
154
+ return true;
155
+ }
156
+ return Boolean(manualCode &&
157
+ tokenMatchesHash(normalizeManualCode(manualCode), candidate.manualCodeHash));
158
+ });
159
+ if (!pairing) {
160
+ throw new Error("Invalid pairing code");
135
161
  }
136
- return Boolean(manualCode && tokenMatchesHash(normalizeManualCode(manualCode), candidate.manualCodeHash));
137
- });
138
- if (!pairing) {
139
- throw new Error("Invalid pairing code");
140
- }
141
- if (pairing.consumedAt) {
142
- throw new Error("Pairing code has already been used");
143
- }
144
- if (isExpired(pairing, pairedAt)) {
145
- throw new Error("Pairing code has expired");
146
- }
147
- const clientToken = randomSecret();
148
- const device = {
149
- id: idGenerator("phone"),
150
- name: input.deviceName,
151
- platform: input.platform,
152
- pushSubscriptions: [],
153
- tokenHash: hashLocalControlToken(clientToken),
154
- pairedAt: pairedAt.toISOString(),
155
- lastSeenAt: pairedAt.toISOString(),
156
- relayId: pairing.relayId ?? null,
157
- revokedAt: null
158
- };
159
- const nextPairings = state.activePairings.map((candidate) => candidate.id === pairing.id
160
- ? { ...candidate, consumedAt: pairedAt.toISOString() }
161
- : candidate);
162
- await saveState({
163
- ...state,
164
- activePairings: nextPairings,
165
- pairedDevices: [...state.pairedDevices, device]
162
+ if (pairing.consumedAt) {
163
+ throw new Error("Pairing code has already been used");
164
+ }
165
+ if (isExpired(pairing, pairedAt)) {
166
+ throw new Error("Pairing code has expired");
167
+ }
168
+ const clientToken = randomSecret();
169
+ const device = {
170
+ id: idGenerator("phone"),
171
+ name: input.deviceName,
172
+ platform: input.platform,
173
+ pushSubscriptions: [],
174
+ tokenHash: hashLocalControlToken(clientToken),
175
+ pairedAt: pairedAt.toISOString(),
176
+ lastSeenAt: pairedAt.toISOString(),
177
+ relayId: pairing.relayId ?? null,
178
+ revokedAt: null
179
+ };
180
+ const nextPairings = state.activePairings.map((candidate) => candidate.id === pairing.id
181
+ ? { ...candidate, consumedAt: pairedAt.toISOString() }
182
+ : candidate);
183
+ await saveState({
184
+ ...state,
185
+ activePairings: nextPairings,
186
+ pairedDevices: [...state.pairedDevices, device]
187
+ });
188
+ return {
189
+ machineId: device.id,
190
+ workspaceId: LOCAL_WORKSPACE_ID,
191
+ hostMachineId: state.macId,
192
+ clientToken,
193
+ endpoint: pairing.endpoint,
194
+ macId: state.macId
195
+ };
166
196
  });
167
- return {
168
- machineId: device.id,
169
- workspaceId: LOCAL_WORKSPACE_ID,
170
- hostMachineId: state.macId,
171
- clientToken,
172
- endpoint: pairing.endpoint,
173
- macId: state.macId
174
- };
175
197
  },
176
198
  async getRelayKeyMaterials(relayId) {
177
- const state = await loadState();
178
- const checkedAt = now();
179
- const pairingMaterials = state.activePairings
180
- .filter((pairing) => pairing.relayId === relayId && !pairing.consumedAt && !isExpired(pairing, checkedAt))
181
- .map((pairing) => ({
182
- id: pairing.id,
183
- kind: "pairing",
184
- keyMaterial: pairing.secretHash
185
- }));
186
- const deviceMaterials = state.pairedDevices
187
- .filter((device) => device.relayId === relayId && !device.revokedAt)
188
- .map((device) => ({
189
- id: device.id,
190
- kind: "device",
191
- keyMaterial: device.tokenHash
192
- }));
193
- return [...pairingMaterials, ...deviceMaterials];
199
+ return runStateOperation(async () => {
200
+ const state = await readOrCreateState();
201
+ const checkedAt = now();
202
+ const pairingMaterials = state.activePairings
203
+ .filter((pairing) => pairing.relayId === relayId && !pairing.consumedAt && !isExpired(pairing, checkedAt))
204
+ .map((pairing) => ({
205
+ id: pairing.id,
206
+ kind: "pairing",
207
+ keyMaterial: pairing.secretHash
208
+ }));
209
+ const deviceMaterials = state.pairedDevices
210
+ .filter((device) => device.relayId === relayId && !device.revokedAt)
211
+ .map((device) => ({
212
+ id: device.id,
213
+ kind: "device",
214
+ keyMaterial: device.tokenHash
215
+ }));
216
+ return [...pairingMaterials, ...deviceMaterials];
217
+ });
194
218
  },
195
219
  async listPushSubscriptions() {
196
- const state = await loadState();
197
- return state.pairedDevices
198
- .filter((device) => !device.revokedAt)
199
- .flatMap((device) => (device.pushSubscriptions ?? [])
200
- .filter((subscription) => !subscription.revokedAt)
201
- .map((subscription) => ({
202
- ...subscription,
203
- deviceId: device.id
204
- })));
220
+ return runStateOperation(async () => {
221
+ const state = await readOrCreateState();
222
+ return state.pairedDevices
223
+ .filter((device) => !device.revokedAt)
224
+ .flatMap((device) => (device.pushSubscriptions ?? [])
225
+ .filter((subscription) => !subscription.revokedAt)
226
+ .map((subscription) => ({
227
+ ...subscription,
228
+ deviceId: device.id
229
+ })));
230
+ });
205
231
  },
206
232
  async registerPushSubscription(deviceId, input) {
207
- const state = await loadState();
208
- const device = state.pairedDevices.find((candidate) => candidate.id === deviceId && !candidate.revokedAt);
209
- const token = input.token.trim();
210
- const provider = input.provider.trim() || "expo";
211
- const platform = input.platform.trim() || "ios";
212
- if (!device) {
213
- throw new Error("Paired device not found");
214
- }
215
- if (provider !== "expo" || !isExpoPushToken(token)) {
216
- throw new Error("Invalid Expo push token");
217
- }
218
- const seenAt = now().toISOString();
219
- const subscriptions = device.pushSubscriptions ?? [];
220
- const existing = subscriptions.find((subscription) => !subscription.revokedAt &&
221
- subscription.provider === provider &&
222
- subscription.platform === platform &&
223
- subscription.token === token);
224
- const subscription = existing
225
- ? {
226
- ...existing,
227
- deviceId: device.id,
228
- lastSeenAt: seenAt
233
+ return runStateOperation(async () => {
234
+ const state = await readOrCreateState();
235
+ const device = state.pairedDevices.find((candidate) => candidate.id === deviceId && !candidate.revokedAt);
236
+ const token = input.token.trim();
237
+ const provider = input.provider.trim() || "expo";
238
+ const platform = input.platform.trim() || "ios";
239
+ if (!device) {
240
+ throw new Error("Paired device not found");
229
241
  }
230
- : {
231
- deviceId: device.id,
232
- id: `${idGenerator("push")}_${hashLocalControlToken(token).slice(0, 8)}`,
233
- lastSeenAt: seenAt,
234
- platform,
235
- provider,
236
- registeredAt: seenAt,
237
- token,
238
- revokedAt: null
239
- };
240
- await saveState({
241
- ...state,
242
- pairedDevices: state.pairedDevices.map((candidate) => candidate.id === device.id
242
+ if (provider !== "expo" || !isExpoPushToken(token)) {
243
+ throw new Error("Invalid Expo push token");
244
+ }
245
+ const seenAt = now().toISOString();
246
+ const subscriptions = device.pushSubscriptions ?? [];
247
+ const existing = subscriptions.find((subscription) => !subscription.revokedAt &&
248
+ subscription.provider === provider &&
249
+ subscription.platform === platform &&
250
+ subscription.token === token);
251
+ const subscription = existing
243
252
  ? {
244
- ...candidate,
245
- pushSubscriptions: [
246
- ...subscriptions.filter((candidateSubscription) => candidateSubscription.id !== subscription.id),
247
- subscription
248
- ]
253
+ ...existing,
254
+ deviceId: device.id,
255
+ lastSeenAt: seenAt
249
256
  }
250
- : candidate)
257
+ : {
258
+ deviceId: device.id,
259
+ id: `${idGenerator("push")}_${hashLocalControlToken(token).slice(0, 8)}`,
260
+ lastSeenAt: seenAt,
261
+ platform,
262
+ provider,
263
+ registeredAt: seenAt,
264
+ token,
265
+ revokedAt: null
266
+ };
267
+ await saveState({
268
+ ...state,
269
+ pairedDevices: state.pairedDevices.map((candidate) => candidate.id === device.id
270
+ ? {
271
+ ...candidate,
272
+ pushSubscriptions: [
273
+ ...subscriptions.filter((candidateSubscription) => candidateSubscription.id !== subscription.id),
274
+ subscription
275
+ ]
276
+ }
277
+ : candidate)
278
+ });
279
+ return subscription;
251
280
  });
252
- return subscription;
253
281
  },
254
282
  async requireDeviceByToken(token) {
255
- const state = await loadState();
256
- const device = state.pairedDevices.find((candidate) => !candidate.revokedAt && tokenMatchesHash(token, candidate.tokenHash));
257
- if (!device) {
258
- throw new Error("Invalid mobile token");
259
- }
260
- const seenAt = now().toISOString();
261
- await saveState({
262
- ...state,
263
- pairedDevices: state.pairedDevices.map((candidate) => candidate.id === device.id ? { ...candidate, lastSeenAt: seenAt } : candidate)
283
+ return runStateOperation(async () => {
284
+ const state = await readOrCreateState();
285
+ const device = state.pairedDevices.find((candidate) => !candidate.revokedAt && tokenMatchesHash(token, candidate.tokenHash));
286
+ if (!device) {
287
+ throw new Error("Invalid mobile token");
288
+ }
289
+ const seenAt = now().toISOString();
290
+ await saveState({
291
+ ...state,
292
+ pairedDevices: state.pairedDevices.map((candidate) => candidate.id === device.id ? { ...candidate, lastSeenAt: seenAt } : candidate)
293
+ });
294
+ return { ...device, lastSeenAt: seenAt };
264
295
  });
265
- return { ...device, lastSeenAt: seenAt };
266
296
  }
267
297
  };
268
298
  }
269
299
  async function readStateFile(path) {
270
- try {
271
- const parsed = JSON.parse(await readFile(path, "utf8"));
272
- if (parsed.version !== 1 || typeof parsed.macId !== "string") {
273
- return null;
300
+ for (let attempt = 0; attempt <= STATE_READ_RETRY_ATTEMPTS; attempt += 1) {
301
+ try {
302
+ const raw = await readFile(path, "utf8");
303
+ if (!raw.trim()) {
304
+ throw new SyntaxError("State file is empty");
305
+ }
306
+ const parsed = JSON.parse(raw);
307
+ if (parsed.version !== 1 || typeof parsed.macId !== "string") {
308
+ return null;
309
+ }
310
+ return {
311
+ version: 1,
312
+ macId: parsed.macId,
313
+ macName: typeof parsed.macName === "string" ? parsed.macName : hostname() || "Abitat Mac",
314
+ hostTokenHash: typeof parsed.hostTokenHash === "string" ? parsed.hostTokenHash : "",
315
+ relayId: typeof parsed.relayId === "string" ? parsed.relayId : undefined,
316
+ pairedDevices: Array.isArray(parsed.pairedDevices) ? parsed.pairedDevices : [],
317
+ activePairings: Array.isArray(parsed.activePairings) ? parsed.activePairings : []
318
+ };
274
319
  }
275
- return {
276
- version: 1,
277
- macId: parsed.macId,
278
- macName: typeof parsed.macName === "string" ? parsed.macName : hostname() || "Abitat Mac",
279
- hostTokenHash: typeof parsed.hostTokenHash === "string" ? parsed.hostTokenHash : "",
280
- relayId: typeof parsed.relayId === "string" ? parsed.relayId : undefined,
281
- pairedDevices: Array.isArray(parsed.pairedDevices) ? parsed.pairedDevices : [],
282
- activePairings: Array.isArray(parsed.activePairings) ? parsed.activePairings : []
283
- };
284
- }
285
- catch (error) {
286
- if (isNotFoundError(error)) {
287
- return null;
320
+ catch (error) {
321
+ if (isNotFoundError(error)) {
322
+ return null;
323
+ }
324
+ if (isTransientStateReadError(error) && attempt < STATE_READ_RETRY_ATTEMPTS) {
325
+ await delay(STATE_READ_RETRY_DELAY_MS);
326
+ continue;
327
+ }
328
+ throw error;
288
329
  }
289
- throw error;
290
330
  }
331
+ return null;
291
332
  }
292
333
  function isExpoPushToken(token) {
293
334
  return /^(Expo|Exponent)PushToken\[[^\]]+\]$/u.test(token);
@@ -324,4 +365,7 @@ function tokenMatchesHash(token, expectedHash) {
324
365
  function isNotFoundError(error) {
325
366
  return Boolean(error && typeof error === "object" && error.code === "ENOENT");
326
367
  }
368
+ function isTransientStateReadError(error) {
369
+ return error instanceof SyntaxError;
370
+ }
327
371
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/local-control/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/local-control/state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@abitat_reece/host-daemon",
3
3
  "private": false,
4
- "version": "0.1.21",
4
+ "version": "0.1.23",
5
5
  "type": "module",
6
6
  "description": "Mac host daemon for Abitat Workspace remote Codex control",
7
7
  "bin": {
@@ -23,7 +23,7 @@
23
23
  "node-pty": "^1.1.0",
24
24
  "qrcode-terminal": "0.12.0",
25
25
  "ws": "^8.20.0",
26
- "@abitat_reece/shared": "0.1.1"
26
+ "@abitat_reece/shared": "0.1.2"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/qrcode-terminal": "0.12.2",