@peerbit/server 6.0.42 → 7.0.0
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/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +161 -352
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client.d.ts +1 -1
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +2 -5
- package/dist/src/client.js.map +1 -1
- package/dist/src/docker.d.ts +70 -1
- package/dist/src/docker.d.ts.map +1 -1
- package/dist/src/docker.js +559 -14
- package/dist/src/docker.js.map +1 -1
- package/dist/src/domain-lease.d.ts +126 -0
- package/dist/src/domain-lease.d.ts.map +1 -0
- package/dist/src/domain-lease.js +800 -0
- package/dist/src/domain-lease.js.map +1 -0
- package/dist/src/domain.d.ts +50 -2
- package/dist/src/domain.d.ts.map +1 -1
- package/dist/src/domain.js +484 -67
- package/dist/src/domain.js.map +1 -1
- package/dist/src/hetzner.d.ts +4 -21
- package/dist/src/hetzner.d.ts.map +1 -1
- package/dist/src/hetzner.js +4 -116
- package/dist/src/hetzner.js.map +1 -1
- package/dist/src/nginx-template.conf +19 -1
- package/dist/src/remotes.browser.d.ts +4 -1
- package/dist/src/remotes.browser.d.ts.map +1 -1
- package/dist/src/remotes.browser.js +1 -2
- package/dist/src/remotes.browser.js.map +1 -1
- package/dist/src/remotes.d.ts +2 -1
- package/dist/src/remotes.d.ts.map +1 -1
- package/dist/src/remotes.js +1 -0
- package/dist/src/remotes.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +3 -5
- package/dist/src/server.js.map +1 -1
- package/dist/test/api.spec.js +2 -1
- package/dist/test/api.spec.js.map +1 -1
- package/dist/test/cli.spec.js +48 -1
- package/dist/test/cli.spec.js.map +1 -1
- package/dist/test/docker.spec.d.ts +2 -0
- package/dist/test/docker.spec.d.ts.map +1 -0
- package/dist/test/docker.spec.js +822 -0
- package/dist/test/docker.spec.js.map +1 -0
- package/dist/test/domain-lease.spec.d.ts +2 -0
- package/dist/test/domain-lease.spec.d.ts.map +1 -0
- package/dist/test/domain-lease.spec.js +530 -0
- package/dist/test/domain-lease.spec.js.map +1 -0
- package/dist/test/domain.integration.spec.js +358 -75
- package/dist/test/domain.integration.spec.js.map +1 -1
- package/dist/test/remotes.spec.d.ts +2 -0
- package/dist/test/remotes.spec.d.ts.map +1 -0
- package/dist/test/remotes.spec.js +15 -0
- package/dist/test/remotes.spec.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/assets/index-CjZwCewh.js +10 -0
- package/dist/ui/assets/index-e3g42MbC.js +9 -0
- package/dist/ui/index.html +1 -1
- package/package.json +14 -19
- package/src/cli.ts +204 -408
- package/src/client.ts +2 -6
- package/src/docker.ts +841 -20
- package/src/domain-lease.ts +1118 -0
- package/src/domain.ts +650 -90
- package/src/hetzner.ts +4 -184
- package/src/nginx-template.conf +19 -1
- package/src/remotes.browser.ts +7 -1
- package/src/remotes.ts +6 -1
- package/src/server.ts +3 -5
- package/dist/src/aws.browser.d.ts +0 -2
- package/dist/src/aws.browser.d.ts.map +0 -1
- package/dist/src/aws.browser.js +0 -3
- package/dist/src/aws.browser.js.map +0 -1
- package/dist/src/aws.d.ts +0 -30
- package/dist/src/aws.d.ts.map +0 -1
- package/dist/src/aws.js +0 -240
- package/dist/src/aws.js.map +0 -1
- package/dist/test/launch.spec.d.ts +0 -2
- package/dist/test/launch.spec.d.ts.map +0 -1
- package/dist/test/launch.spec.js +0 -23
- package/dist/test/launch.spec.js.map +0 -1
- package/dist/ui/assets/index-BBTKOM0z.js +0 -6
- package/dist/ui/assets/index-DVtj_GOf.js +0 -13
- package/src/aws.browser.ts +0 -1
- package/src/aws.ts +0 -327
package/dist/src/docker.js
CHANGED
|
@@ -13,6 +13,20 @@ const execCommand = async (cmd) => {
|
|
|
13
13
|
});
|
|
14
14
|
});
|
|
15
15
|
};
|
|
16
|
+
const execDockerCommand = async (args) => {
|
|
17
|
+
const { execFile } = await import("child_process");
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
execFile("docker", [...args], (error, stdout, stderr) => {
|
|
20
|
+
if (error) {
|
|
21
|
+
error.stdout = stdout;
|
|
22
|
+
error.stderr = stderr;
|
|
23
|
+
reject(error);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
resolve({ stdout, stderr });
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
};
|
|
16
30
|
const commandExists = async (command) => {
|
|
17
31
|
try {
|
|
18
32
|
await execCommand(`command -v ${command}`);
|
|
@@ -128,26 +142,557 @@ export const installDocker = async () => {
|
|
|
128
142
|
throw new Error(`Docker is installed but not available: ${error?.message || "unknown error"}`);
|
|
129
143
|
}
|
|
130
144
|
};
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
145
|
+
const runDockerWithRetry = async (args, execute) => {
|
|
146
|
+
try {
|
|
147
|
+
return await execute(args);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
await delay(10000);
|
|
151
|
+
return execute(args);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
const isMissingContainerError = (error) => {
|
|
155
|
+
const details = `${error?.stderr || ""}\n${error?.message || ""}`;
|
|
156
|
+
return /no such (object|container)/i.test(details);
|
|
157
|
+
};
|
|
158
|
+
export const inspectDockerContainer = async (name, execute = execDockerCommand) => {
|
|
159
|
+
try {
|
|
160
|
+
const result = await execute(["container", "inspect", name]);
|
|
161
|
+
const parsed = JSON.parse(result.stdout);
|
|
162
|
+
if (!Array.isArray(parsed) || parsed.length !== 1) {
|
|
163
|
+
throw new Error(`Unexpected Docker inspection result for ${name}`);
|
|
164
|
+
}
|
|
165
|
+
return parsed[0];
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
if (isMissingContainerError(error)) {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
export const pullDockerImage = async (image, execute = execDockerCommand) => {
|
|
175
|
+
try {
|
|
176
|
+
await runDockerWithRetry(["pull", image], execute);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
throw new Error(`Failed to pull Docker image ${image}: ${error?.message}`);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
const errorMessage = (error) => error?.message || error?.stderr || String(error);
|
|
183
|
+
export const DOCKER_REPLACEMENT_LABEL = "org.peerbit.replacement";
|
|
184
|
+
export const DOCKER_REPLACEMENT_ORIGINAL_ID_LABEL = "org.peerbit.replacement.original-id";
|
|
185
|
+
export const DOCKER_REPLACEMENT_ORIGINAL_RUNNING_LABEL = "org.peerbit.replacement.original-running";
|
|
186
|
+
const getContainerReplacementLockAddress = async (name) => {
|
|
187
|
+
const { createHash } = await import("crypto");
|
|
188
|
+
const digest = createHash("sha256").update(name).digest("hex").slice(0, 32);
|
|
189
|
+
if (process.platform === "linux") {
|
|
190
|
+
// Linux abstract sockets have no filesystem entry and are released by the
|
|
191
|
+
// kernel if this process exits, including on an unclean exit.
|
|
192
|
+
return `\0peerbit-docker-replace-${digest}`;
|
|
193
|
+
}
|
|
194
|
+
if (process.platform === "win32") {
|
|
195
|
+
return `\\\\.\\pipe\\peerbit-docker-replace-${digest}`;
|
|
196
|
+
}
|
|
197
|
+
const path = await import("path");
|
|
198
|
+
return path.join("/tmp", `peerbit-docker-replace-${digest}.sock`);
|
|
199
|
+
};
|
|
200
|
+
const acquireContainerReplacementLock = async (name) => {
|
|
201
|
+
if (process.platform !== "linux" && process.platform !== "win32") {
|
|
202
|
+
const { createRequire } = await import("module");
|
|
203
|
+
const properLockfile = createRequire(import.meta.url)("proper-lockfile");
|
|
204
|
+
try {
|
|
205
|
+
return await properLockfile.lock(await getContainerReplacementLockAddress(name), {
|
|
206
|
+
realpath: false,
|
|
207
|
+
stale: 10_000,
|
|
208
|
+
update: 2_000,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
if (error?.code === "ELOCKED") {
|
|
213
|
+
throw new Error(`Another Peerbit configuration is already replacing Docker container ${name}`);
|
|
138
214
|
}
|
|
139
|
-
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const { createServer } = await import("net");
|
|
219
|
+
const address = await getContainerReplacementLockAddress(name);
|
|
220
|
+
const server = createServer();
|
|
221
|
+
try {
|
|
222
|
+
await new Promise((resolve, reject) => {
|
|
223
|
+
const onError = (error) => {
|
|
224
|
+
server.off("listening", onListening);
|
|
225
|
+
reject(error);
|
|
226
|
+
};
|
|
227
|
+
const onListening = () => {
|
|
228
|
+
server.off("error", onError);
|
|
229
|
+
resolve();
|
|
230
|
+
};
|
|
231
|
+
server.once("error", onError);
|
|
232
|
+
server.once("listening", onListening);
|
|
233
|
+
server.listen(address);
|
|
140
234
|
});
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
if (error?.code === "EADDRINUSE") {
|
|
238
|
+
throw new Error(`Another Peerbit configuration is already replacing Docker container ${name}`);
|
|
239
|
+
}
|
|
240
|
+
throw error;
|
|
241
|
+
}
|
|
242
|
+
return () => new Promise((resolve) => {
|
|
243
|
+
server.close(() => resolve());
|
|
141
244
|
});
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Briefly stop a known running container while holding the same lock used by
|
|
248
|
+
* replacement transactions. The immutable container ID is checked before and
|
|
249
|
+
* after both mutations so an unrelated or concurrently replaced container is
|
|
250
|
+
* never stopped or started by name.
|
|
251
|
+
*/
|
|
252
|
+
export const withQuiescedDockerContainer = async (name, validate, action, options = {}) => {
|
|
253
|
+
const execute = options.execute || execDockerCommand;
|
|
254
|
+
const releaseLock = await acquireContainerReplacementLock(name);
|
|
255
|
+
try {
|
|
256
|
+
const initial = await inspectDockerContainer(name, execute);
|
|
257
|
+
if (!initial?.Id ||
|
|
258
|
+
initial.Name !== `/${name}` ||
|
|
259
|
+
initial.State?.Running !== true ||
|
|
260
|
+
!validate(initial)) {
|
|
261
|
+
throw new Error(`Port owner is not the running recognized Peerbit-managed Docker container ${name}; refusing to stop anything`);
|
|
262
|
+
}
|
|
263
|
+
const id = initial.Id;
|
|
264
|
+
let shouldRestart = false;
|
|
265
|
+
let result;
|
|
266
|
+
let operationError;
|
|
267
|
+
try {
|
|
268
|
+
try {
|
|
269
|
+
await execute(["container", "stop", id]);
|
|
270
|
+
shouldRestart = true;
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
const afterFailedStop = await inspectDockerContainer(id, execute);
|
|
274
|
+
if (afterFailedStop?.Id !== id ||
|
|
275
|
+
afterFailedStop.State?.Running !== false) {
|
|
276
|
+
throw error;
|
|
277
|
+
}
|
|
278
|
+
shouldRestart = true;
|
|
279
|
+
}
|
|
280
|
+
const stoppedById = await inspectDockerContainer(id, execute);
|
|
281
|
+
const stoppedByName = await inspectDockerContainer(name, execute);
|
|
282
|
+
if (stoppedById?.Id !== id ||
|
|
283
|
+
stoppedById.State?.Running !== false ||
|
|
284
|
+
stoppedByName?.Id !== id ||
|
|
285
|
+
stoppedByName.Name !== `/${name}` ||
|
|
286
|
+
!validate(stoppedByName)) {
|
|
287
|
+
throw new Error(`Docker container ${name} could not be verified after stopping`);
|
|
288
|
+
}
|
|
289
|
+
result = await action();
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
operationError = error;
|
|
293
|
+
}
|
|
294
|
+
let restartError;
|
|
295
|
+
if (shouldRestart) {
|
|
296
|
+
try {
|
|
297
|
+
const beforeRestartById = await inspectDockerContainer(id, execute);
|
|
298
|
+
const beforeRestartByName = await inspectDockerContainer(name, execute);
|
|
299
|
+
if (beforeRestartById?.Id !== id ||
|
|
300
|
+
beforeRestartByName?.Id !== id ||
|
|
301
|
+
beforeRestartByName.Name !== `/${name}` ||
|
|
302
|
+
!validate(beforeRestartByName)) {
|
|
303
|
+
throw new Error(`Docker container ${name} changed while quiesced; refusing an unsafe restart`);
|
|
304
|
+
}
|
|
305
|
+
try {
|
|
306
|
+
await execute(["container", "start", id]);
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
const afterFailedStart = await inspectDockerContainer(id, execute);
|
|
310
|
+
if (afterFailedStart?.Id !== id ||
|
|
311
|
+
afterFailedStart.State?.Running !== true) {
|
|
312
|
+
throw error;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
const restarted = await inspectDockerContainer(id, execute);
|
|
316
|
+
const restartedByName = await inspectDockerContainer(name, execute);
|
|
317
|
+
if (restarted?.Id !== id ||
|
|
318
|
+
restarted.State?.Running !== true ||
|
|
319
|
+
restartedByName?.Id !== id ||
|
|
320
|
+
restartedByName.Name !== `/${name}` ||
|
|
321
|
+
!validate(restartedByName)) {
|
|
322
|
+
throw new Error(`Docker container ${name} did not restart after DNS verification`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
restartError = error;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (operationError && restartError) {
|
|
330
|
+
const error = new Error(`DNS verification failed and Docker container ${name} could not be safely restarted: ${errorMessage(restartError)}`);
|
|
331
|
+
error.cause = operationError;
|
|
332
|
+
throw error;
|
|
333
|
+
}
|
|
334
|
+
if (restartError)
|
|
335
|
+
throw restartError;
|
|
336
|
+
if (operationError)
|
|
337
|
+
throw operationError;
|
|
338
|
+
return result;
|
|
339
|
+
}
|
|
340
|
+
finally {
|
|
341
|
+
await releaseLock();
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
const inspectOwnedReplacement = async (reference, replacementToken, execute) => {
|
|
345
|
+
const inspection = await inspectDockerContainer(reference, execute);
|
|
346
|
+
if (inspection?.Config?.Labels?.[DOCKER_REPLACEMENT_LABEL] !== replacementToken) {
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
349
|
+
if (!inspection.Id) {
|
|
350
|
+
throw new Error(`Owned Docker replacement ${reference} has no inspection ID`);
|
|
351
|
+
}
|
|
352
|
+
return inspection;
|
|
353
|
+
};
|
|
354
|
+
const isCanonicalReplacement = (inspection, replacementId, name) => inspection?.Id === replacementId && inspection.Name === `/${name}`;
|
|
355
|
+
const removeOwnedReplacement = async (name, replacementId, replacementToken, execute) => {
|
|
356
|
+
const owned = await inspectOwnedReplacement(replacementId || name, replacementToken, execute);
|
|
357
|
+
if (owned?.Id) {
|
|
358
|
+
await execute(["container", "rm", "--force", owned.Id]);
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
const restoreDockerContainer = async (name, existing, wasRunning, execute) => {
|
|
362
|
+
if (!existing.Id) {
|
|
363
|
+
throw new Error(`Previous Docker container ${name} has no inspection ID`);
|
|
364
|
+
}
|
|
365
|
+
// Restore the state while the state-encoded backup name still exists. If the
|
|
366
|
+
// process exits between these operations, the next attempt can still infer the
|
|
367
|
+
// intended state from that name. Rename to the canonical name last.
|
|
368
|
+
let target = await inspectDockerContainer(existing.Id, execute);
|
|
369
|
+
if (!target || target.Id !== existing.Id) {
|
|
370
|
+
throw new Error(`Previous Docker container ${name} could not be inspected`);
|
|
371
|
+
}
|
|
372
|
+
if (wasRunning && target.State?.Running !== true) {
|
|
373
|
+
await execute(["container", "start", existing.Id]);
|
|
374
|
+
}
|
|
375
|
+
else if (!wasRunning && target.State?.Running === true) {
|
|
376
|
+
await execute(["container", "stop", existing.Id]);
|
|
377
|
+
}
|
|
378
|
+
target = await inspectDockerContainer(existing.Id, execute);
|
|
379
|
+
if (target?.Id !== existing.Id ||
|
|
380
|
+
(wasRunning && target.State?.Running !== true) ||
|
|
381
|
+
(!wasRunning && target.State?.Running === true)) {
|
|
382
|
+
throw new Error(`Previous Docker container ${name} did not return to its original state`);
|
|
383
|
+
}
|
|
384
|
+
const canonical = await inspectDockerContainer(name, execute);
|
|
385
|
+
if (canonical?.Id !== existing.Id) {
|
|
386
|
+
await execute(["container", "rename", existing.Id, name]);
|
|
387
|
+
}
|
|
388
|
+
target = await inspectDockerContainer(name, execute);
|
|
389
|
+
if (target?.Id !== existing.Id ||
|
|
390
|
+
(wasRunning && target.State?.Running !== true) ||
|
|
391
|
+
(!wasRunning && target.State?.Running === true)) {
|
|
392
|
+
throw new Error(`Previous Docker container ${name} did not return to its original state`);
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
const RESERVED_REPLACEMENT_LABELS = new Set([
|
|
396
|
+
DOCKER_REPLACEMENT_LABEL,
|
|
397
|
+
DOCKER_REPLACEMENT_ORIGINAL_ID_LABEL,
|
|
398
|
+
DOCKER_REPLACEMENT_ORIGINAL_RUNNING_LABEL,
|
|
399
|
+
]);
|
|
400
|
+
const assertNoReservedReplacementLabels = (args) => {
|
|
401
|
+
for (let index = 0; index < args.length; index++) {
|
|
402
|
+
let label;
|
|
403
|
+
if (args[index] === "--label-file" ||
|
|
404
|
+
args[index].startsWith("--label-file=")) {
|
|
405
|
+
throw new Error("Docker replacement arguments cannot use --label-file because it could override reserved transaction labels");
|
|
406
|
+
}
|
|
407
|
+
if (args[index] === "--label" || args[index] === "-l") {
|
|
408
|
+
label = args[index + 1];
|
|
409
|
+
index += 1;
|
|
410
|
+
}
|
|
411
|
+
else if (args[index].startsWith("--label=")) {
|
|
412
|
+
label = args[index].slice("--label=".length);
|
|
413
|
+
}
|
|
414
|
+
else if (args[index].startsWith("-l=")) {
|
|
415
|
+
label = args[index].slice("-l=".length);
|
|
416
|
+
}
|
|
417
|
+
else if (args[index].startsWith("-l") && args[index].length > 2) {
|
|
418
|
+
label = args[index].slice(2);
|
|
419
|
+
}
|
|
420
|
+
if (!label)
|
|
421
|
+
continue;
|
|
422
|
+
const separator = label.indexOf("=");
|
|
423
|
+
const key = separator === -1 ? label : label.slice(0, separator);
|
|
424
|
+
if (RESERVED_REPLACEMENT_LABELS.has(key)) {
|
|
425
|
+
throw new Error(`Docker replacement arguments cannot override reserved label ${key}`);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
const assertDockerRunName = (args, expectedName) => {
|
|
430
|
+
const nameOptions = args.filter((argument) => argument === "--name" || argument.startsWith("--name="));
|
|
431
|
+
const hasCanonicalPrefix = (args[1] === "--name" && args[2] === expectedName) ||
|
|
432
|
+
args[1] === `--name=${expectedName}`;
|
|
433
|
+
if (!hasCanonicalPrefix || nameOptions.length !== 1) {
|
|
434
|
+
throw new Error(`Docker replacement arguments must place exactly one canonical --name ${expectedName} immediately after 'run'`);
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
/**
|
|
438
|
+
* Replace a named container with rollback. An existing container is renamed and
|
|
439
|
+
* stopped, not deleted, until the replacement has remained stable and the
|
|
440
|
+
* caller's commit callback has completed. A cross-working-directory process
|
|
441
|
+
* lock serializes cooperative Peerbit replacements of the same Docker name.
|
|
442
|
+
*/
|
|
443
|
+
export const replaceDockerContainer = async (name, runArgs, options = {}) => {
|
|
444
|
+
const execute = options.execute || execDockerCommand;
|
|
445
|
+
const { randomUUID } = await import("crypto");
|
|
446
|
+
const replacementToken = options.replacementToken || randomUUID();
|
|
447
|
+
const releaseLock = await acquireContainerReplacementLock(name);
|
|
448
|
+
const backupNameBase = options.backupName || `${name}-peerbit-backup`;
|
|
449
|
+
const runningBackupName = `${backupNameBase}-running`;
|
|
450
|
+
const stoppedBackupName = `${backupNameBase}-stopped`;
|
|
451
|
+
let backupName = backupNameBase;
|
|
452
|
+
let existing;
|
|
453
|
+
let wasRunning = false;
|
|
454
|
+
let replacementId;
|
|
455
|
+
let rollbackExisting;
|
|
456
|
+
let rollbackWasRunning = false;
|
|
457
|
+
let transactionStarted = false;
|
|
458
|
+
let committed = false;
|
|
142
459
|
try {
|
|
143
|
-
await
|
|
460
|
+
existing = await inspectDockerContainer(name, execute);
|
|
461
|
+
const interruptedBackups = (await Promise.all([runningBackupName, stoppedBackupName, backupNameBase].map(async (candidateName) => ({
|
|
462
|
+
inspection: await inspectDockerContainer(candidateName, execute),
|
|
463
|
+
name: candidateName,
|
|
464
|
+
})))).filter((candidate) => candidate.inspection !== undefined);
|
|
465
|
+
if (interruptedBackups.length > 1) {
|
|
466
|
+
throw new Error(`Multiple Docker backups exist for ${name}; refusing ambiguous recovery`);
|
|
467
|
+
}
|
|
468
|
+
const interrupted = interruptedBackups[0];
|
|
469
|
+
const interruptedBackup = interrupted?.inspection;
|
|
470
|
+
if (interruptedBackup) {
|
|
471
|
+
backupName = interrupted.name;
|
|
472
|
+
const backupWasRunning = backupName === runningBackupName
|
|
473
|
+
? true
|
|
474
|
+
: backupName === stoppedBackupName
|
|
475
|
+
? false
|
|
476
|
+
: undefined;
|
|
477
|
+
if (!options.validateExisting?.(interruptedBackup) ||
|
|
478
|
+
!interruptedBackup.Id) {
|
|
479
|
+
throw new Error(`Docker backup ${backupName} is not a recognized recoverable container`);
|
|
480
|
+
}
|
|
481
|
+
if (existing) {
|
|
482
|
+
if (!options.validateExisting?.(existing) || !existing.Id) {
|
|
483
|
+
throw new Error(`Docker container ${name} is not a recognized recoverable replacement`);
|
|
484
|
+
}
|
|
485
|
+
const labels = existing.Config?.Labels;
|
|
486
|
+
const interruptedToken = labels?.[DOCKER_REPLACEMENT_LABEL];
|
|
487
|
+
const originalId = labels?.[DOCKER_REPLACEMENT_ORIGINAL_ID_LABEL];
|
|
488
|
+
const originalRunning = labels?.[DOCKER_REPLACEMENT_ORIGINAL_RUNNING_LABEL];
|
|
489
|
+
if (!interruptedToken ||
|
|
490
|
+
originalId !== interruptedBackup.Id ||
|
|
491
|
+
(originalRunning !== "true" && originalRunning !== "false") ||
|
|
492
|
+
backupWasRunning === undefined ||
|
|
493
|
+
(originalRunning === "true") !== backupWasRunning) {
|
|
494
|
+
throw new Error(`Docker containers ${name} and ${backupName} do not form a recognized interrupted replacement; refusing to mutate them`);
|
|
495
|
+
}
|
|
496
|
+
const resolution = await options.resolveInterruptedPair?.(existing, interruptedBackup);
|
|
497
|
+
if (resolution === "keep-current") {
|
|
498
|
+
await execute(["container", "rm", "--force", interruptedBackup.Id]);
|
|
499
|
+
}
|
|
500
|
+
else if (resolution === "restore-backup") {
|
|
501
|
+
rollbackExisting = interruptedBackup;
|
|
502
|
+
rollbackWasRunning = backupWasRunning;
|
|
503
|
+
await removeOwnedReplacement(name, existing.Id, interruptedToken, execute);
|
|
504
|
+
await restoreDockerContainer(name, interruptedBackup, backupWasRunning, execute);
|
|
505
|
+
existing = await inspectDockerContainer(name, execute);
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
throw new Error(`Docker containers ${name} and ${backupName} require an unambiguous interrupted-replacement decision; refusing to mutate them`);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
else {
|
|
512
|
+
if (backupWasRunning === undefined) {
|
|
513
|
+
throw new Error(`Docker backup ${backupName} predates crash-safe state metadata; resolve it manually before retrying`);
|
|
514
|
+
}
|
|
515
|
+
rollbackExisting = interruptedBackup;
|
|
516
|
+
rollbackWasRunning = backupWasRunning;
|
|
517
|
+
await restoreDockerContainer(name, interruptedBackup, backupWasRunning, execute);
|
|
518
|
+
existing = await inspectDockerContainer(name, execute);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
wasRunning = existing?.State?.Running === true;
|
|
522
|
+
backupName = wasRunning ? runningBackupName : stoppedBackupName;
|
|
523
|
+
if (existing &&
|
|
524
|
+
options.validateExisting &&
|
|
525
|
+
!options.validateExisting(existing)) {
|
|
526
|
+
throw new Error(`Docker container ${name} is not a recognized Peerbit-managed container; refusing to replace it`);
|
|
527
|
+
}
|
|
528
|
+
if (existing && !existing.Id) {
|
|
529
|
+
throw new Error(`Docker container ${name} has no inspection ID; refusing to replace it`);
|
|
530
|
+
}
|
|
531
|
+
if (options.expectedContainerId !== undefined) {
|
|
532
|
+
const actualId = existing?.Id || null;
|
|
533
|
+
if (actualId !== options.expectedContainerId) {
|
|
534
|
+
throw new Error(`Docker container ${name} changed during configuration; refusing to replace it`);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
const baseRunArgs = typeof runArgs === "function" ? await runArgs(existing) : runArgs;
|
|
538
|
+
if (baseRunArgs[0] !== "run") {
|
|
539
|
+
throw new Error("Docker replacement arguments must start with 'run'");
|
|
540
|
+
}
|
|
541
|
+
assertNoReservedReplacementLabels(baseRunArgs);
|
|
542
|
+
assertDockerRunName(baseRunArgs, name);
|
|
543
|
+
const labeledRunArgs = [
|
|
544
|
+
"run",
|
|
545
|
+
"--label",
|
|
546
|
+
`${DOCKER_REPLACEMENT_LABEL}=${replacementToken}`,
|
|
547
|
+
"--label",
|
|
548
|
+
`${DOCKER_REPLACEMENT_ORIGINAL_ID_LABEL}=${existing?.Id || "none"}`,
|
|
549
|
+
"--label",
|
|
550
|
+
`${DOCKER_REPLACEMENT_ORIGINAL_RUNNING_LABEL}=${wasRunning}`,
|
|
551
|
+
...baseRunArgs.slice(1),
|
|
552
|
+
];
|
|
553
|
+
const startupProbeAttempts = options.startupProbeAttempts ?? 4;
|
|
554
|
+
const startupProbeIntervalMs = options.startupProbeIntervalMs ?? 1000;
|
|
555
|
+
if (!Number.isInteger(startupProbeAttempts) || startupProbeAttempts < 1) {
|
|
556
|
+
throw new Error("Docker startup probe attempts must be a positive integer");
|
|
557
|
+
}
|
|
558
|
+
if (startupProbeIntervalMs < 0) {
|
|
559
|
+
throw new Error("Docker startup probe interval must not be negative");
|
|
560
|
+
}
|
|
561
|
+
const startReplacement = async () => {
|
|
562
|
+
const result = await execute(labeledRunArgs);
|
|
563
|
+
const returnedId = result.stdout.trim();
|
|
564
|
+
if (returnedId)
|
|
565
|
+
replacementId = returnedId;
|
|
566
|
+
const started = await inspectOwnedReplacement(returnedId || name, replacementToken, execute);
|
|
567
|
+
if (!started?.Id) {
|
|
568
|
+
throw new Error(`Docker container ${name} did not return a verifiable replacement ID`);
|
|
569
|
+
}
|
|
570
|
+
replacementId = started.Id;
|
|
571
|
+
if (!isCanonicalReplacement(started, replacementId, name)) {
|
|
572
|
+
throw new Error(`Docker replacement ${replacementId} did not use canonical name ${name}`);
|
|
573
|
+
}
|
|
574
|
+
for (let attempt = 0; attempt < startupProbeAttempts; attempt++) {
|
|
575
|
+
if (attempt > 0 && startupProbeIntervalMs > 0) {
|
|
576
|
+
await delay(startupProbeIntervalMs);
|
|
577
|
+
}
|
|
578
|
+
const probe = await inspectOwnedReplacement(replacementId, replacementToken, execute);
|
|
579
|
+
if (!isCanonicalReplacement(probe, replacementId, name) ||
|
|
580
|
+
probe?.State?.Running !== true ||
|
|
581
|
+
probe.State.Restarting === true ||
|
|
582
|
+
(probe.RestartCount ?? 0) > 0 ||
|
|
583
|
+
probe.State.Health?.Status === "unhealthy") {
|
|
584
|
+
throw new Error(`Docker container ${name} did not remain stably running`);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
};
|
|
588
|
+
if (existing) {
|
|
589
|
+
rollbackExisting = existing;
|
|
590
|
+
rollbackWasRunning = wasRunning;
|
|
591
|
+
transactionStarted = true;
|
|
592
|
+
await execute(["container", "rename", existing.Id, backupName]);
|
|
593
|
+
if (wasRunning) {
|
|
594
|
+
await execute(["container", "stop", existing.Id]);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
transactionStarted = true;
|
|
599
|
+
}
|
|
600
|
+
try {
|
|
601
|
+
await startReplacement();
|
|
602
|
+
}
|
|
603
|
+
catch {
|
|
604
|
+
await removeOwnedReplacement(name, replacementId, replacementToken, execute);
|
|
605
|
+
replacementId = undefined;
|
|
606
|
+
if ((options.retryDelayMs ?? 10000) > 0) {
|
|
607
|
+
await delay(options.retryDelayMs ?? 10000);
|
|
608
|
+
}
|
|
609
|
+
await startReplacement();
|
|
610
|
+
}
|
|
611
|
+
await options.onStarted?.();
|
|
612
|
+
const finalProbe = replacementId
|
|
613
|
+
? await inspectOwnedReplacement(replacementId, replacementToken, execute)
|
|
614
|
+
: undefined;
|
|
615
|
+
if (!finalProbe ||
|
|
616
|
+
!replacementId ||
|
|
617
|
+
!isCanonicalReplacement(finalProbe, replacementId, name) ||
|
|
618
|
+
finalProbe.State?.Running !== true ||
|
|
619
|
+
finalProbe.State.Restarting === true ||
|
|
620
|
+
(finalProbe.RestartCount ?? 0) > 0 ||
|
|
621
|
+
finalProbe.State.Health?.Status === "unhealthy") {
|
|
622
|
+
throw new Error(`Docker container ${name} did not remain stably running through activation`);
|
|
623
|
+
}
|
|
624
|
+
await options.onCommit?.();
|
|
625
|
+
committed = true;
|
|
626
|
+
if (existing?.Id) {
|
|
627
|
+
try {
|
|
628
|
+
await execute(["container", "rm", "--force", existing.Id]);
|
|
629
|
+
}
|
|
630
|
+
catch (error) {
|
|
631
|
+
throw new Error(`Docker container ${name} started, but backup ${backupName} could not be removed: ${errorMessage(error)}`);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
await options.onCommitted?.();
|
|
144
635
|
}
|
|
145
636
|
catch (error) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
637
|
+
if (committed) {
|
|
638
|
+
throw error;
|
|
639
|
+
}
|
|
640
|
+
const rollbackFailures = [];
|
|
641
|
+
try {
|
|
642
|
+
if (transactionStarted) {
|
|
643
|
+
await removeOwnedReplacement(name, replacementId, replacementToken, execute);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
catch (rollbackError) {
|
|
647
|
+
rollbackFailures.push(`replacement cleanup failed: ${errorMessage(rollbackError)}`);
|
|
648
|
+
}
|
|
649
|
+
try {
|
|
650
|
+
if (rollbackExisting) {
|
|
651
|
+
await restoreDockerContainer(name, rollbackExisting, rollbackWasRunning, execute);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
catch (rollbackError) {
|
|
655
|
+
rollbackFailures.push(`previous-container restore failed: ${errorMessage(rollbackError)}`);
|
|
656
|
+
}
|
|
657
|
+
if (options.onRollbackInspected) {
|
|
658
|
+
try {
|
|
659
|
+
const references = new Set([
|
|
660
|
+
name,
|
|
661
|
+
backupNameBase,
|
|
662
|
+
runningBackupName,
|
|
663
|
+
stoppedBackupName,
|
|
664
|
+
backupName,
|
|
665
|
+
existing?.Id,
|
|
666
|
+
rollbackExisting?.Id,
|
|
667
|
+
replacementId,
|
|
668
|
+
].filter((reference) => Boolean(reference)));
|
|
669
|
+
const inspected = await Promise.all([...references].map((reference) => inspectDockerContainer(reference, execute)));
|
|
670
|
+
const seen = new Set();
|
|
671
|
+
const remainingContainers = inspected.filter((inspection) => {
|
|
672
|
+
if (!inspection)
|
|
673
|
+
return false;
|
|
674
|
+
const identity = inspection.Id || inspection.Name;
|
|
675
|
+
if (identity && seen.has(identity))
|
|
676
|
+
return false;
|
|
677
|
+
if (identity)
|
|
678
|
+
seen.add(identity);
|
|
679
|
+
return true;
|
|
680
|
+
});
|
|
681
|
+
await options.onRollbackInspected(remainingContainers);
|
|
682
|
+
}
|
|
683
|
+
catch (rollbackError) {
|
|
684
|
+
rollbackFailures.push(`rollback inspection callback failed: ${errorMessage(rollbackError)}`);
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
const rollbackDetails = rollbackFailures.length
|
|
688
|
+
? `; rollback also failed: ${rollbackFailures.join("; ")}`
|
|
689
|
+
: rollbackExisting
|
|
690
|
+
? "; previous container restored"
|
|
691
|
+
: "";
|
|
692
|
+
throw new Error(`Failed to replace Docker container ${name}: ${errorMessage(error)}${rollbackDetails}`);
|
|
693
|
+
}
|
|
694
|
+
finally {
|
|
695
|
+
await releaseLock();
|
|
151
696
|
}
|
|
152
697
|
};
|
|
153
698
|
//# sourceMappingURL=docker.js.map
|
package/dist/src/docker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/docker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/docker.ts"],"names":[],"mappings":"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"}
|