@mono-agent/agent-app 0.11.2 → 0.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +222 -26
- package/dist/adapter-send-tools-main.js +7 -1
- package/dist/adapter-send-tools-main.js.map +1 -1
- package/dist/adapter-send-tools.d.ts +19 -1
- package/dist/adapter-send-tools.d.ts.map +1 -1
- package/dist/adapter-send-tools.js +127 -13
- package/dist/adapter-send-tools.js.map +1 -1
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +15 -2
- package/dist/app-config.js.map +1 -1
- package/dist/app-controller-channels.d.ts +8 -0
- package/dist/app-controller-channels.d.ts.map +1 -0
- package/dist/app-controller-channels.js +207 -0
- package/dist/app-controller-channels.js.map +1 -0
- package/dist/app-controller-continuation.d.ts +26 -0
- package/dist/app-controller-continuation.d.ts.map +1 -0
- package/dist/app-controller-continuation.js +198 -0
- package/dist/app-controller-continuation.js.map +1 -0
- package/dist/app-controller-lifecycle.d.ts +6 -0
- package/dist/app-controller-lifecycle.d.ts.map +1 -0
- package/dist/app-controller-lifecycle.js +81 -0
- package/dist/app-controller-lifecycle.js.map +1 -0
- package/dist/app-controller-maintenance.d.ts +13 -0
- package/dist/app-controller-maintenance.d.ts.map +1 -0
- package/dist/app-controller-maintenance.js +180 -0
- package/dist/app-controller-maintenance.js.map +1 -0
- package/dist/app-controller-memory-health.d.ts +12 -0
- package/dist/app-controller-memory-health.d.ts.map +1 -0
- package/dist/app-controller-memory-health.js +160 -0
- package/dist/app-controller-memory-health.js.map +1 -0
- package/dist/app-controller-memory.d.ts +9 -0
- package/dist/app-controller-memory.d.ts.map +1 -0
- package/dist/app-controller-memory.js +83 -0
- package/dist/app-controller-memory.js.map +1 -0
- package/dist/app-controller-responder.d.ts +20 -0
- package/dist/app-controller-responder.d.ts.map +1 -0
- package/dist/app-controller-responder.js +246 -0
- package/dist/app-controller-responder.js.map +1 -0
- package/dist/app-controller-traceability.d.ts +25 -0
- package/dist/app-controller-traceability.d.ts.map +1 -0
- package/dist/app-controller-traceability.js +418 -0
- package/dist/app-controller-traceability.js.map +1 -0
- package/dist/app-controller-utils.d.ts +38 -0
- package/dist/app-controller-utils.d.ts.map +1 -0
- package/dist/app-controller-utils.js +185 -0
- package/dist/app-controller-utils.js.map +1 -0
- package/dist/app-controller.d.ts +400 -0
- package/dist/app-controller.d.ts.map +1 -0
- package/dist/app-controller.js +336 -0
- package/dist/app-controller.js.map +1 -0
- package/dist/app.d.ts +7 -115
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +6 -1912
- package/dist/app.js.map +1 -1
- package/dist/artifact-retention.d.ts +4 -0
- package/dist/artifact-retention.d.ts.map +1 -1
- package/dist/artifact-retention.js +38 -0
- package/dist/artifact-retention.js.map +1 -1
- package/dist/backfill.d.ts +3 -1
- package/dist/backfill.d.ts.map +1 -1
- package/dist/backfill.js +5 -1
- package/dist/backfill.js.map +1 -1
- package/dist/background-runtime.d.ts +27 -0
- package/dist/background-runtime.d.ts.map +1 -1
- package/dist/background-runtime.js +383 -205
- package/dist/background-runtime.js.map +1 -1
- package/dist/background-worker-lease.d.ts.map +1 -1
- package/dist/background-worker-lease.js +41 -241
- package/dist/background-worker-lease.js.map +1 -1
- package/dist/background.d.ts +31 -9
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +543 -272
- package/dist/background.js.map +1 -1
- package/dist/channel-drivers/cron.d.ts +11 -0
- package/dist/channel-drivers/cron.d.ts.map +1 -0
- package/dist/channel-drivers/cron.js +168 -0
- package/dist/channel-drivers/cron.js.map +1 -0
- package/dist/channel-drivers/live.d.ts +11 -0
- package/dist/channel-drivers/live.d.ts.map +1 -0
- package/dist/channel-drivers/live.js +47 -0
- package/dist/channel-drivers/live.js.map +1 -0
- package/dist/channel-drivers/native-notify.d.ts +27 -0
- package/dist/channel-drivers/native-notify.d.ts.map +1 -0
- package/dist/channel-drivers/native-notify.js +94 -0
- package/dist/channel-drivers/native-notify.js.map +1 -0
- package/dist/channel-drivers/openai-api.d.ts +7 -0
- package/dist/channel-drivers/openai-api.d.ts.map +1 -0
- package/dist/channel-drivers/openai-api.js +63 -0
- package/dist/channel-drivers/openai-api.js.map +1 -0
- package/dist/channel-drivers/shared.d.ts +4 -0
- package/dist/channel-drivers/shared.d.ts.map +1 -0
- package/dist/channel-drivers/shared.js +5 -0
- package/dist/channel-drivers/shared.js.map +1 -0
- package/dist/channel-drivers/slack.d.ts +14 -0
- package/dist/channel-drivers/slack.d.ts.map +1 -0
- package/dist/channel-drivers/slack.js +227 -0
- package/dist/channel-drivers/slack.js.map +1 -0
- package/dist/channel-drivers/telegram.d.ts +11 -0
- package/dist/channel-drivers/telegram.d.ts.map +1 -0
- package/dist/channel-drivers/telegram.js +244 -0
- package/dist/channel-drivers/telegram.js.map +1 -0
- package/dist/channel-drivers/tui.d.ts +15 -0
- package/dist/channel-drivers/tui.d.ts.map +1 -0
- package/dist/channel-drivers/tui.js +108 -0
- package/dist/channel-drivers/tui.js.map +1 -0
- package/dist/channel-drivers/webhook.d.ts +7 -0
- package/dist/channel-drivers/webhook.d.ts.map +1 -0
- package/dist/channel-drivers/webhook.js +115 -0
- package/dist/channel-drivers/webhook.js.map +1 -0
- package/dist/channels.d.ts +21 -81
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +11 -1174
- package/dist/channels.js.map +1 -1
- package/dist/cli-args.d.ts +121 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +532 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-background-command.d.ts +59 -0
- package/dist/cli-background-command.d.ts.map +1 -0
- package/dist/cli-background-command.js +475 -0
- package/dist/cli-background-command.js.map +1 -0
- package/dist/cli-cancellation.d.ts +6 -0
- package/dist/cli-cancellation.d.ts.map +1 -0
- package/dist/cli-cancellation.js +23 -0
- package/dist/cli-cancellation.js.map +1 -0
- package/dist/cli-commands.d.ts +12 -0
- package/dist/cli-commands.d.ts.map +1 -0
- package/dist/cli-commands.js +306 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/cli-help.d.ts +11 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +262 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli-init-command.d.ts +60 -0
- package/dist/cli-init-command.d.ts.map +1 -0
- package/dist/cli-init-command.js +1910 -0
- package/dist/cli-init-command.js.map +1 -0
- package/dist/cli-install-skill-command.d.ts +3 -0
- package/dist/cli-install-skill-command.d.ts.map +1 -0
- package/dist/cli-install-skill-command.js +51 -0
- package/dist/cli-install-skill-command.js.map +1 -0
- package/dist/cli-sandbox-command.d.ts +10 -0
- package/dist/cli-sandbox-command.d.ts.map +1 -0
- package/dist/cli-sandbox-command.js +100 -0
- package/dist/cli-sandbox-command.js.map +1 -0
- package/dist/cli-validate-config-command.d.ts +36 -0
- package/dist/cli-validate-config-command.d.ts.map +1 -0
- package/dist/cli-validate-config-command.js +317 -0
- package/dist/cli-validate-config-command.js.map +1 -0
- package/dist/cli.d.ts +6 -248
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -3792
- package/dist/cli.js.map +1 -1
- package/dist/config-reference.d.ts +2 -1
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +34 -8
- package/dist/config-reference.js.map +1 -1
- package/dist/configured-agent.d.ts +23 -0
- package/dist/configured-agent.d.ts.map +1 -1
- package/dist/configured-agent.js +92 -13
- package/dist/configured-agent.js.map +1 -1
- package/dist/continuation-dispatch-worker.d.ts +21 -0
- package/dist/continuation-dispatch-worker.d.ts.map +1 -0
- package/dist/continuation-dispatch-worker.js +425 -0
- package/dist/continuation-dispatch-worker.js.map +1 -0
- package/dist/continuation-http-routes.d.ts +15 -0
- package/dist/continuation-http-routes.d.ts.map +1 -0
- package/dist/continuation-http-routes.js +265 -0
- package/dist/continuation-http-routes.js.map +1 -0
- package/dist/continuation-operator-api.d.ts +18 -0
- package/dist/continuation-operator-api.d.ts.map +1 -0
- package/dist/continuation-operator-api.js +164 -0
- package/dist/continuation-operator-api.js.map +1 -0
- package/dist/continuation-origin-store.d.ts +19 -0
- package/dist/continuation-origin-store.d.ts.map +1 -0
- package/dist/continuation-origin-store.js +273 -0
- package/dist/continuation-origin-store.js.map +1 -0
- package/dist/continuation-service-errors.d.ts +18 -0
- package/dist/continuation-service-errors.d.ts.map +1 -0
- package/dist/continuation-service-errors.js +35 -0
- package/dist/continuation-service-errors.js.map +1 -0
- package/dist/continuation-service-helpers.d.ts +39 -0
- package/dist/continuation-service-helpers.d.ts.map +1 -0
- package/dist/continuation-service-helpers.js +308 -0
- package/dist/continuation-service-helpers.js.map +1 -0
- package/dist/continuation-service-origin.d.ts +55 -0
- package/dist/continuation-service-origin.d.ts.map +1 -0
- package/dist/continuation-service-origin.js +325 -0
- package/dist/continuation-service-origin.js.map +1 -0
- package/dist/continuation-service-types.d.ts +110 -0
- package/dist/continuation-service-types.d.ts.map +1 -0
- package/dist/continuation-service-types.js +11 -0
- package/dist/continuation-service-types.js.map +1 -0
- package/dist/continuation-service.d.ts +4 -97
- package/dist/continuation-service.d.ts.map +1 -1
- package/dist/continuation-service.js +9 -1525
- package/dist/continuation-service.js.map +1 -1
- package/dist/continuation-store-fs.d.ts +15 -0
- package/dist/continuation-store-fs.d.ts.map +1 -0
- package/dist/continuation-store-fs.js +247 -0
- package/dist/continuation-store-fs.js.map +1 -0
- package/dist/continuation-store-policy.d.ts +21 -0
- package/dist/continuation-store-policy.d.ts.map +1 -0
- package/dist/continuation-store-policy.js +278 -0
- package/dist/continuation-store-policy.js.map +1 -0
- package/dist/continuation-store-records.d.ts +9 -0
- package/dist/continuation-store-records.d.ts.map +1 -0
- package/dist/continuation-store-records.js +221 -0
- package/dist/continuation-store-records.js.map +1 -0
- package/dist/continuation-store-types.d.ts +173 -0
- package/dist/continuation-store-types.d.ts.map +1 -0
- package/dist/continuation-store-types.js +26 -0
- package/dist/continuation-store-types.js.map +1 -0
- package/dist/continuation-store.d.ts +4 -138
- package/dist/continuation-store.d.ts.map +1 -1
- package/dist/continuation-store.js +145 -1049
- package/dist/continuation-store.js.map +1 -1
- package/dist/doctor.d.ts +10 -5
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +629 -58
- package/dist/doctor.js.map +1 -1
- package/dist/init.d.ts +2 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +92 -239
- package/dist/init.js.map +1 -1
- package/dist/interaction-bridge.d.ts +19 -0
- package/dist/interaction-bridge.d.ts.map +1 -1
- package/dist/interaction-bridge.js +130 -0
- package/dist/interaction-bridge.js.map +1 -1
- package/dist/launchd-logs.d.ts +91 -0
- package/dist/launchd-logs.d.ts.map +1 -0
- package/dist/launchd-logs.js +1499 -0
- package/dist/launchd-logs.js.map +1 -0
- package/dist/launchd.d.ts +27 -0
- package/dist/launchd.d.ts.map +1 -1
- package/dist/launchd.js +89 -10
- package/dist/launchd.js.map +1 -1
- package/dist/memory-command.d.ts +2 -0
- package/dist/memory-command.d.ts.map +1 -1
- package/dist/memory-command.js +161 -48
- package/dist/memory-command.js.map +1 -1
- package/dist/memory-recall-settings.d.ts +64 -0
- package/dist/memory-recall-settings.d.ts.map +1 -0
- package/dist/memory-recall-settings.js +51 -0
- package/dist/memory-recall-settings.js.map +1 -0
- package/dist/memory-recall.d.ts +7 -95
- package/dist/memory-recall.d.ts.map +1 -1
- package/dist/memory-recall.js +8 -143
- package/dist/memory-recall.js.map +1 -1
- package/dist/memory-rituals.d.ts +3 -3
- package/dist/memory-rituals.d.ts.map +1 -1
- package/dist/memory-rituals.js +16 -111
- package/dist/memory-rituals.js.map +1 -1
- package/dist/modules/catalog.js +2 -2
- package/dist/modules/catalog.js.map +1 -1
- package/dist/modules/known-tools.d.ts +8 -6
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +8 -6
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/notify-destinations.d.ts +5 -0
- package/dist/notify-destinations.d.ts.map +1 -1
- package/dist/notify-destinations.js +7 -1
- package/dist/notify-destinations.js.map +1 -1
- package/dist/owner-private-lock.d.ts +95 -0
- package/dist/owner-private-lock.d.ts.map +1 -0
- package/dist/owner-private-lock.js +566 -0
- package/dist/owner-private-lock.js.map +1 -0
- package/dist/pi-oauth-login.d.ts +2 -0
- package/dist/pi-oauth-login.d.ts.map +1 -1
- package/dist/pi-oauth-login.js +39 -5
- package/dist/pi-oauth-login.js.map +1 -1
- package/dist/posted-message-index.d.ts +35 -16
- package/dist/posted-message-index.d.ts.map +1 -1
- package/dist/posted-message-index.js +1068 -52
- package/dist/posted-message-index.js.map +1 -1
- package/dist/posted-reply-history.d.ts +17 -0
- package/dist/posted-reply-history.d.ts.map +1 -0
- package/dist/posted-reply-history.js +169 -0
- package/dist/posted-reply-history.js.map +1 -0
- package/dist/proactive-notify.d.ts.map +1 -1
- package/dist/proactive-notify.js +6 -4
- package/dist/proactive-notify.js.map +1 -1
- package/dist/project-skills.d.ts +4 -0
- package/dist/project-skills.d.ts.map +1 -1
- package/dist/project-skills.js +99 -130
- package/dist/project-skills.js.map +1 -1
- package/dist/provider-setup.d.ts +0 -1
- package/dist/provider-setup.d.ts.map +1 -1
- package/dist/provider-setup.js +0 -3
- package/dist/provider-setup.js.map +1 -1
- package/dist/readiness-probe-worker.d.ts +61 -1
- package/dist/readiness-probe-worker.d.ts.map +1 -1
- package/dist/readiness-probe-worker.js +54 -58
- package/dist/readiness-probe-worker.js.map +1 -1
- package/dist/readiness-probe.d.ts +6 -9
- package/dist/readiness-probe.d.ts.map +1 -1
- package/dist/readiness-probe.js +30 -56
- package/dist/readiness-probe.js.map +1 -1
- package/dist/redact-secrets.d.ts +15 -0
- package/dist/redact-secrets.d.ts.map +1 -0
- package/dist/redact-secrets.js +65 -0
- package/dist/redact-secrets.js.map +1 -0
- package/dist/run-history.js +34 -24
- package/dist/run-history.js.map +1 -1
- package/dist/runtime-provenance.d.ts +8 -0
- package/dist/runtime-provenance.d.ts.map +1 -0
- package/dist/runtime-provenance.js +225 -0
- package/dist/runtime-provenance.js.map +1 -0
- package/dist/sandbox-manager.d.ts +4 -1
- package/dist/sandbox-manager.d.ts.map +1 -1
- package/dist/sandbox-manager.js +114 -273
- package/dist/sandbox-manager.js.map +1 -1
- package/dist/secure-file-replace.d.ts +49 -0
- package/dist/secure-file-replace.d.ts.map +1 -0
- package/dist/secure-file-replace.js +270 -0
- package/dist/secure-file-replace.js.map +1 -0
- package/dist/seen-conversations.d.ts +32 -5
- package/dist/seen-conversations.d.ts.map +1 -1
- package/dist/seen-conversations.js +145 -15
- package/dist/seen-conversations.js.map +1 -1
- package/dist/sessions.d.ts +20 -0
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +41 -6
- package/dist/sessions.js.map +1 -1
- package/dist/wizard/index.d.ts +2 -2
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +1 -1
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/presets.d.ts +2 -1
- package/dist/wizard/presets.d.ts.map +1 -1
- package/dist/wizard/presets.js +2 -1
- package/dist/wizard/presets.js.map +1 -1
- package/dist/wizard/run.d.ts +0 -26
- package/dist/wizard/run.d.ts.map +1 -1
- package/dist/wizard/run.js +0 -53
- package/dist/wizard/run.js.map +1 -1
- package/package.json +22 -17
- package/schema/mono-agent.config.schema.json +45 -10
- package/skills/mono-agent-composer/SKILL.md +3 -3
- package/skills/mono-agent-composer/references/config-blueprint.md +123 -29
- package/skills/mono-agent-composer/references/discovery-questions.md +10 -8
- package/skills/mono-agent-composer/references/feature-coverage.md +90 -76
- package/skills/mono-agent-composer/references/package-map.md +6 -4
- package/skills/mono-agent-composer/references/playbooks.md +48 -27
- package/skills/mono-agent-composer/references/validation.md +16 -3
- package/dist/notify-runtime.d.ts +0 -26
- package/dist/notify-runtime.d.ts.map +0 -1
- package/dist/notify-runtime.js +0 -27
- package/dist/notify-runtime.js.map +0 -1
- package/dist/notify-tool.d.ts +0 -51
- package/dist/notify-tool.d.ts.map +0 -1
- package/dist/notify-tool.js +0 -182
- package/dist/notify-tool.js.map +0 -1
- package/dist/recipes/base.d.ts +0 -15
- package/dist/recipes/base.d.ts.map +0 -1
- package/dist/recipes/base.js +0 -51
- package/dist/recipes/base.js.map +0 -1
- package/dist/recipes/catalog.d.ts +0 -4
- package/dist/recipes/catalog.d.ts.map +0 -1
- package/dist/recipes/catalog.js +0 -525
- package/dist/recipes/catalog.js.map +0 -1
- package/dist/recipes/index.d.ts +0 -11
- package/dist/recipes/index.d.ts.map +0 -1
- package/dist/recipes/index.js +0 -14
- package/dist/recipes/index.js.map +0 -1
- package/dist/recipes/types.d.ts +0 -70
- package/dist/recipes/types.d.ts.map +0 -1
- package/dist/recipes/types.js +0 -15
- package/dist/recipes/types.js.map +0 -1
- package/dist/setup.d.ts +0 -29
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js +0 -97
- package/dist/setup.js.map +0 -1
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { lstat, mkdir, open, rename, rm } from "node:fs/promises";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import process from "node:process";
|
|
6
|
+
import { currentProcessIncarnation, isSameProcessIncarnation as matchesProcessIncarnation, processIncarnationFromJson, } from "./process-incarnation.js";
|
|
7
|
+
import { secureFileReplace } from "./secure-file-replace.js";
|
|
8
|
+
const OWNER_MAX_BYTES = 4 * 1024;
|
|
9
|
+
const OWNER_PUBLICATION_TEMPORARY = ".owner.mono-agent-publication.tmp";
|
|
10
|
+
const OWNER_PUBLICATION_IN_PROGRESS = Symbol("owner-publication-in-progress");
|
|
11
|
+
export function validateOwnerPrivateLockInputs(label, pid, ownerlessGraceMs) {
|
|
12
|
+
if (!positivePid(pid))
|
|
13
|
+
throw new Error(`${label} pid must be a positive safe integer.`);
|
|
14
|
+
if (!Number.isFinite(ownerlessGraceMs) || ownerlessGraceMs < 0) {
|
|
15
|
+
throw new Error(`${label} ownerless grace must be non-negative and finite.`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Shared private-directory lock with atomic ownership, liveness, quarantine, and exact release. */
|
|
19
|
+
export async function acquireOwnerPrivateLock(options) {
|
|
20
|
+
validateOptions(options);
|
|
21
|
+
const pid = options.pid ?? process.pid;
|
|
22
|
+
const now = options.now ?? Date.now;
|
|
23
|
+
const randomToken = options.randomToken ?? randomUUID;
|
|
24
|
+
const incarnation = options.processIncarnation ?? await currentProcessIncarnation();
|
|
25
|
+
const sameProcess = options.isSameProcessIncarnation ?? matchesProcessIncarnation;
|
|
26
|
+
const timeout = options.waitTimeoutMs ?? 0;
|
|
27
|
+
const deadline = now() + timeout;
|
|
28
|
+
let attempts = 0;
|
|
29
|
+
let retriedMissingAtDeadline = false;
|
|
30
|
+
for (;;) {
|
|
31
|
+
if (options.maxAcquireAttempts !== undefined && attempts >= options.maxAcquireAttempts)
|
|
32
|
+
return undefined;
|
|
33
|
+
options.beforeIteration?.();
|
|
34
|
+
attempts += 1;
|
|
35
|
+
const token = checkedToken(randomToken(), options.label);
|
|
36
|
+
let created;
|
|
37
|
+
try {
|
|
38
|
+
await mkdir(options.path, { mode: 0o700 });
|
|
39
|
+
created = identity(await privateDirectory(options.path, options));
|
|
40
|
+
await options.afterDirectoryCreated?.(options.path);
|
|
41
|
+
await sameDirectoryRequired(options.path, created, options);
|
|
42
|
+
const base = {
|
|
43
|
+
schema: options.schemaTag,
|
|
44
|
+
pid,
|
|
45
|
+
token,
|
|
46
|
+
createdAt: new Date(now()).toISOString(),
|
|
47
|
+
incarnation,
|
|
48
|
+
};
|
|
49
|
+
const record = { ...options.ownerFields?.(base), ...base };
|
|
50
|
+
const owner = await publishOwner(options, created, record);
|
|
51
|
+
await syncDirectory(options.path, created, options);
|
|
52
|
+
return makeHeld(options, created, owner, pid, now, randomToken);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (created !== undefined) {
|
|
56
|
+
// An exclusive owner publication can lose to a same-user contender
|
|
57
|
+
// inside the directory we just created. Preserve that record and let
|
|
58
|
+
// normal inspection decide whether it is live, stale, or unsafe.
|
|
59
|
+
if (!isErrno(error, "EEXIST")) {
|
|
60
|
+
try {
|
|
61
|
+
await abandon(options, created, pid, now, randomToken);
|
|
62
|
+
}
|
|
63
|
+
catch (cleanupError) {
|
|
64
|
+
throw new AggregateError([error, cleanupError], `${options.label} acquisition and failed-acquisition cleanup both failed.`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (!isErrno(error, "EEXIST"))
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
if (await options.isSatisfied?.())
|
|
72
|
+
return undefined;
|
|
73
|
+
const observed = await inspect(options.path, options);
|
|
74
|
+
if (observed === undefined) {
|
|
75
|
+
if (timeout > 0 && now() >= deadline) {
|
|
76
|
+
if (retriedMissingAtDeadline)
|
|
77
|
+
return undefined;
|
|
78
|
+
retriedMissingAtDeadline = true;
|
|
79
|
+
}
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
await options.afterInspected?.(observed);
|
|
84
|
+
let stale = observed.kind === "ownerless"
|
|
85
|
+
&& now() - observed.mtimeMs >= options.ownerlessGraceMs;
|
|
86
|
+
if (observed.kind === "owned") {
|
|
87
|
+
try {
|
|
88
|
+
stale = !(observed.owner.incarnation === undefined
|
|
89
|
+
? await (options.isLegacyProcessAlive?.(observed.owner.pid) ?? true)
|
|
90
|
+
: await sameProcess(observed.owner.pid, observed.owner.incarnation));
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const decision = options.livenessError?.(error, observed.owner);
|
|
94
|
+
if (decision instanceof Error)
|
|
95
|
+
throw decision;
|
|
96
|
+
if (decision !== "assume-live")
|
|
97
|
+
throw error;
|
|
98
|
+
stale = false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (stale) {
|
|
102
|
+
if (await quarantine(options, observed, pid, now, randomToken) === "retry")
|
|
103
|
+
continue;
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
if ((options.maxAcquireAttempts !== undefined && attempts >= options.maxAcquireAttempts)
|
|
107
|
+
|| timeout === 0 || now() >= deadline) {
|
|
108
|
+
const error = options.timeoutError?.(observed);
|
|
109
|
+
if (error !== undefined)
|
|
110
|
+
throw error;
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
// A fresh publication is only observed, never quarantined. Release its
|
|
114
|
+
// inode pin before waiting so the publisher can finish on every platform.
|
|
115
|
+
await closeObserved(observed);
|
|
116
|
+
await (options.sleep ?? sleep)(Math.min(options.pollIntervalMs ?? 100, Math.max(0, deadline - now())));
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
await closeObserved(observed);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function makeHeld(options, expectedIdentity, expectedOwner, pid, now, randomToken) {
|
|
124
|
+
let released = false;
|
|
125
|
+
return {
|
|
126
|
+
path: options.path,
|
|
127
|
+
ownerPid: expectedOwner.pid,
|
|
128
|
+
async release(releaseOptions = {}) {
|
|
129
|
+
if (released)
|
|
130
|
+
return;
|
|
131
|
+
const expected = { kind: "owned", identity: expectedIdentity, owner: expectedOwner };
|
|
132
|
+
if (!await matchesObserved(options.path, options, expected)) {
|
|
133
|
+
throw unsafe(options, `${options.label} identity or owner changed before release; the replacement was left untouched.`);
|
|
134
|
+
}
|
|
135
|
+
await releaseOptions.beforeRename?.(options.path);
|
|
136
|
+
if (!await matchesObserved(options.path, options, expected)) {
|
|
137
|
+
throw unsafe(options, `${options.label} changed at the release boundary; the replacement was left untouched.`);
|
|
138
|
+
}
|
|
139
|
+
const releasedPath = artifactPath(options, "released", pid, now, randomToken);
|
|
140
|
+
try {
|
|
141
|
+
await rename(options.path, releasedPath);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (isErrno(error, "ENOENT"))
|
|
145
|
+
throw unsafe(options, `${options.label} disappeared during release.`);
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
if (!await matchesObserved(releasedPath, options, expected)) {
|
|
149
|
+
throw unsafe(options, `${options.label} changed across release and was retained at ${releasedPath}.`, { releasedPath });
|
|
150
|
+
}
|
|
151
|
+
released = true;
|
|
152
|
+
await rm(releasedPath, { recursive: true, force: true });
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
async function publishOwner(options, directoryIdentity, record) {
|
|
157
|
+
const ownerPath = join(options.path, "owner.json");
|
|
158
|
+
const content = `${JSON.stringify(record)}\n`;
|
|
159
|
+
await secureFileReplace({
|
|
160
|
+
path: ownerPath,
|
|
161
|
+
temporaryPath: join(options.path, OWNER_PUBLICATION_TEMPORARY),
|
|
162
|
+
contents: content,
|
|
163
|
+
mode: 0o600,
|
|
164
|
+
beforeCommit: () => sameDirectoryRequired(options.path, directoryIdentity, options),
|
|
165
|
+
// A contender in the mkdir-to-owner window must never be replaced.
|
|
166
|
+
target: { expected: { kind: "missing" }, recovery: "preserve-current" },
|
|
167
|
+
});
|
|
168
|
+
await sameDirectoryRequired(options.path, directoryIdentity, options);
|
|
169
|
+
const owner = await readOwner(ownerPath, options);
|
|
170
|
+
if (owner !== undefined && isOwnerPublication(owner)) {
|
|
171
|
+
await closePublication(owner[OWNER_PUBLICATION_IN_PROGRESS]);
|
|
172
|
+
throw unsafe(options, `The atomically published ${options.label} owner record could not be verified.`);
|
|
173
|
+
}
|
|
174
|
+
if (owner === undefined || owner.content !== content) {
|
|
175
|
+
throw unsafe(options, `The atomically published ${options.label} owner record could not be verified.`);
|
|
176
|
+
}
|
|
177
|
+
return owner;
|
|
178
|
+
}
|
|
179
|
+
async function inspect(path, options) {
|
|
180
|
+
let details;
|
|
181
|
+
try {
|
|
182
|
+
details = await privateDirectory(path, options);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (isErrno(error, "ENOENT"))
|
|
186
|
+
return undefined;
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
const directoryIdentity = identity(details);
|
|
190
|
+
const owner = await readOwner(join(path, "owner.json"), options);
|
|
191
|
+
let transferred = false;
|
|
192
|
+
try {
|
|
193
|
+
if (!(await sameDirectory(path, directoryIdentity, options)))
|
|
194
|
+
return undefined;
|
|
195
|
+
if (owner === undefined) {
|
|
196
|
+
return { kind: "ownerless", identity: directoryIdentity, mtimeMs: Number(details.mtimeMs) };
|
|
197
|
+
}
|
|
198
|
+
if (isOwnerPublication(owner)) {
|
|
199
|
+
const publication = owner[OWNER_PUBLICATION_IN_PROGRESS];
|
|
200
|
+
transferred = true;
|
|
201
|
+
return {
|
|
202
|
+
kind: "ownerless", identity: directoryIdentity, mtimeMs: Number(details.mtimeMs),
|
|
203
|
+
[OWNER_PUBLICATION_IN_PROGRESS]: publication,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return { kind: "owned", identity: directoryIdentity, owner };
|
|
207
|
+
}
|
|
208
|
+
finally {
|
|
209
|
+
if (!transferred && owner !== undefined && isOwnerPublication(owner))
|
|
210
|
+
await closePublication(owner[OWNER_PUBLICATION_IN_PROGRESS]);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async function readOwner(path, options) {
|
|
214
|
+
let handle;
|
|
215
|
+
try {
|
|
216
|
+
// O_NONBLOCK matters before fstat: a same-user pathname swap to a FIFO
|
|
217
|
+
// must fail closed instead of hanging lock inspection.
|
|
218
|
+
handle = await open(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0));
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
if (isErrno(error, "ENOENT"))
|
|
222
|
+
return undefined;
|
|
223
|
+
throw unsafe(options, message(error));
|
|
224
|
+
}
|
|
225
|
+
let transferred = false;
|
|
226
|
+
try {
|
|
227
|
+
let before = await handle.stat({ bigint: true });
|
|
228
|
+
if (before.nlink === 0n)
|
|
229
|
+
return undefined;
|
|
230
|
+
// The current publisher temporarily gives the staged owner inode one exact
|
|
231
|
+
// second name. Never accept that state as an owner; normal grace and
|
|
232
|
+
// quarantine policy treats a crashed publication like other ownerless state.
|
|
233
|
+
if (before.nlink === 2n) {
|
|
234
|
+
const publication = await pinOwnerPublication(handle, path, before, options);
|
|
235
|
+
if (publication !== undefined) {
|
|
236
|
+
transferred = true;
|
|
237
|
+
return { [OWNER_PUBLICATION_IN_PROGRESS]: publication };
|
|
238
|
+
}
|
|
239
|
+
const settled = await settledOwnerDetails(handle, path, before);
|
|
240
|
+
if (settled !== undefined)
|
|
241
|
+
before = settled;
|
|
242
|
+
}
|
|
243
|
+
ownerFile(before, path, options);
|
|
244
|
+
const fileIdentity = identity(before);
|
|
245
|
+
const content = await boundedRead(handle, path, options);
|
|
246
|
+
const after = await handle.stat({ bigint: true });
|
|
247
|
+
if (after.nlink === 0n)
|
|
248
|
+
return undefined;
|
|
249
|
+
const named = await lstatExisting(path);
|
|
250
|
+
if (named === undefined)
|
|
251
|
+
return undefined;
|
|
252
|
+
ownerFile(after, path, options);
|
|
253
|
+
ownerFile(named, path, options);
|
|
254
|
+
if (options.allowCurrentUserLegacyOwnerMode !== true) {
|
|
255
|
+
privateOwnerModes(path, options, before, after, named);
|
|
256
|
+
}
|
|
257
|
+
if (!sameIdentity(after, fileIdentity) || !sameIdentity(named, fileIdentity)) {
|
|
258
|
+
throw unsafe(options, `${options.label} owner record identity changed while it was read.`);
|
|
259
|
+
}
|
|
260
|
+
let record;
|
|
261
|
+
try {
|
|
262
|
+
const parsed = JSON.parse(content);
|
|
263
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
|
|
264
|
+
throw new Error("not an object");
|
|
265
|
+
record = parsed;
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
if (options.invalidOwner === "ownerless")
|
|
269
|
+
return undefined;
|
|
270
|
+
throw unsafe(options, `${options.label} owner record JSON is malformed: ${message(error)}`);
|
|
271
|
+
}
|
|
272
|
+
const incarnation = processIncarnationFromJson(record.incarnation);
|
|
273
|
+
if (record.schema === options.schemaTag && positivePid(record.pid)
|
|
274
|
+
&& typeof record.token === "string" && record.token.length > 0 && record.token.length <= 256
|
|
275
|
+
&& typeof record.createdAt === "string" && Number.isFinite(Date.parse(record.createdAt))
|
|
276
|
+
&& incarnation !== undefined && (options.validateOwnerFields?.(record) ?? true)) {
|
|
277
|
+
if (options.allowCurrentUserLegacyOwnerMode === true)
|
|
278
|
+
privateOwnerModes(path, options, before, after, named);
|
|
279
|
+
return { pid: record.pid, incarnation, content, identity: fileIdentity };
|
|
280
|
+
}
|
|
281
|
+
const legacy = record.schema === undefined ? options.parseLegacyOwner?.(record) : undefined;
|
|
282
|
+
if (legacy !== undefined) {
|
|
283
|
+
return { ...legacy, content, identity: fileIdentity };
|
|
284
|
+
}
|
|
285
|
+
if (options.invalidOwner === "ownerless")
|
|
286
|
+
return undefined;
|
|
287
|
+
throw unsafe(options, `${options.label} owner record is malformed or has an unexpected schema.`);
|
|
288
|
+
}
|
|
289
|
+
finally {
|
|
290
|
+
if (!transferred)
|
|
291
|
+
await handle.close();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
async function boundedRead(handle, path, options) {
|
|
295
|
+
return (await boundedReadBuffer(handle, path, options)).toString("utf8");
|
|
296
|
+
}
|
|
297
|
+
async function boundedReadBuffer(handle, path, options) {
|
|
298
|
+
const buffer = Buffer.alloc(OWNER_MAX_BYTES + 1);
|
|
299
|
+
let offset = 0;
|
|
300
|
+
while (offset < buffer.length) {
|
|
301
|
+
const { bytesRead } = await handle.read(buffer, offset, buffer.length - offset, offset);
|
|
302
|
+
if (bytesRead === 0)
|
|
303
|
+
break;
|
|
304
|
+
offset += bytesRead;
|
|
305
|
+
}
|
|
306
|
+
if (offset > OWNER_MAX_BYTES)
|
|
307
|
+
throw unsafe(options, `${options.label} owner record ${path} exceeds ${OWNER_MAX_BYTES} bytes.`);
|
|
308
|
+
return buffer.subarray(0, offset);
|
|
309
|
+
}
|
|
310
|
+
async function pinOwnerPublication(handle, path, before, options) {
|
|
311
|
+
if (!ownerPublicationFile(before, before, 2n))
|
|
312
|
+
return undefined;
|
|
313
|
+
const content = await boundedReadBuffer(handle, path, options);
|
|
314
|
+
const after = await handle.stat({ bigint: true });
|
|
315
|
+
const named = await lstatExisting(path);
|
|
316
|
+
const staged = await lstatExisting(join(dirname(path), OWNER_PUBLICATION_TEMPORARY));
|
|
317
|
+
if (named === undefined || staged === undefined
|
|
318
|
+
|| ![after, named, staged].every((value) => samePublicationSnapshot(value, before)))
|
|
319
|
+
return undefined;
|
|
320
|
+
if (BigInt(content.length) !== before.size)
|
|
321
|
+
return undefined;
|
|
322
|
+
return { handle, details: before, content: Buffer.from(content), closed: false };
|
|
323
|
+
}
|
|
324
|
+
async function settledOwnerDetails(handle, path, expected) {
|
|
325
|
+
const settled = await handle.stat({ bigint: true });
|
|
326
|
+
const named = await lstatExisting(path);
|
|
327
|
+
if (named === undefined)
|
|
328
|
+
return undefined;
|
|
329
|
+
return ownerPublicationFile(settled, expected, 1n)
|
|
330
|
+
&& ownerPublicationFile(named, expected, 1n)
|
|
331
|
+
? settled
|
|
332
|
+
: undefined;
|
|
333
|
+
}
|
|
334
|
+
function samePublicationSnapshot(value, expected) {
|
|
335
|
+
return ownerPublicationFile(value, expected, 2n)
|
|
336
|
+
&& value.size === expected.size
|
|
337
|
+
&& value.mtimeNs === expected.mtimeNs
|
|
338
|
+
&& value.ctimeNs === expected.ctimeNs;
|
|
339
|
+
}
|
|
340
|
+
function ownerPublicationFile(details, expected, linkCount) {
|
|
341
|
+
return details.isFile()
|
|
342
|
+
&& !details.isSymbolicLink()
|
|
343
|
+
&& details.nlink === linkCount
|
|
344
|
+
&& sameIdentity(details, expected)
|
|
345
|
+
&& (typeof process.getuid !== "function" || details.uid === BigInt(process.getuid()))
|
|
346
|
+
&& (details.mode & 511n) === 384n;
|
|
347
|
+
}
|
|
348
|
+
function isOwnerPublication(value) {
|
|
349
|
+
return OWNER_PUBLICATION_IN_PROGRESS in value;
|
|
350
|
+
}
|
|
351
|
+
async function lstatExisting(path) {
|
|
352
|
+
try {
|
|
353
|
+
return await lstat(path, { bigint: true });
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
if (isErrno(error, "ENOENT"))
|
|
357
|
+
return undefined;
|
|
358
|
+
throw error;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
async function quarantine(options, expected, pid, now, randomToken) {
|
|
362
|
+
await options.beforeStaleRename?.(options.path);
|
|
363
|
+
const current = await compareObserved(options.path, options, expected);
|
|
364
|
+
if (current === undefined)
|
|
365
|
+
return "retry";
|
|
366
|
+
if (!current) {
|
|
367
|
+
return staleRace(options, `${options.label} changed during stale-lock verification; the replacement was left untouched.`);
|
|
368
|
+
}
|
|
369
|
+
const stalePath = artifactPath(options, "stale", pid, now, randomToken);
|
|
370
|
+
try {
|
|
371
|
+
await rename(options.path, stalePath);
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
if (isErrno(error, "ENOENT")) {
|
|
375
|
+
const current = await compareObserved(options.path, options, expected);
|
|
376
|
+
if (current === undefined)
|
|
377
|
+
return "retry";
|
|
378
|
+
if (!current) {
|
|
379
|
+
return staleRace(options, `${options.label} changed while stale-lock quarantine was attempted; the replacement was left untouched.`);
|
|
380
|
+
}
|
|
381
|
+
throw unsafe(options, `${options.label} could not be quarantined at ${stalePath}; the source lock was left untouched.`, { stalePath });
|
|
382
|
+
}
|
|
383
|
+
if (isErrno(error, "EEXIST")) {
|
|
384
|
+
throw unsafe(options, `${options.label} quarantine destination already exists; both paths were left untouched.`, { stalePath });
|
|
385
|
+
}
|
|
386
|
+
throw error;
|
|
387
|
+
}
|
|
388
|
+
if (await compareObserved(stalePath, options, expected) !== true) {
|
|
389
|
+
return staleRace(options, `${options.label} changed across stale-lock quarantine and was retained at ${stalePath}.`, { stalePath });
|
|
390
|
+
}
|
|
391
|
+
await closeObserved(expected);
|
|
392
|
+
await rm(stalePath, { recursive: true, force: true });
|
|
393
|
+
return "retry";
|
|
394
|
+
}
|
|
395
|
+
function staleRace(options, cause, details = {}) {
|
|
396
|
+
if (options.staleRace === "error")
|
|
397
|
+
throw unsafe(options, cause, details);
|
|
398
|
+
return options.staleRace === "retry" ? "retry" : "return";
|
|
399
|
+
}
|
|
400
|
+
async function abandon(options, expected, pid, now, randomToken) {
|
|
401
|
+
if (!(await sameDirectory(options.path, expected, options)))
|
|
402
|
+
return;
|
|
403
|
+
const path = artifactPath(options, "abandoned", pid, now, randomToken);
|
|
404
|
+
try {
|
|
405
|
+
await rename(options.path, path);
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
if (isErrno(error, "ENOENT"))
|
|
409
|
+
return;
|
|
410
|
+
throw error;
|
|
411
|
+
}
|
|
412
|
+
if (!sameIdentity(await lstat(path, { bigint: true }), expected)) {
|
|
413
|
+
throw unsafe(options, `${options.label} changed across failed-acquisition cleanup and was retained at ${path}.`);
|
|
414
|
+
}
|
|
415
|
+
await rm(path, { recursive: true, force: true });
|
|
416
|
+
}
|
|
417
|
+
async function privateDirectory(path, options) {
|
|
418
|
+
const details = await lstat(path, { bigint: true });
|
|
419
|
+
if (!details.isDirectory() || details.isSymbolicLink()) {
|
|
420
|
+
throw unsafe(options, `${options.label} ${path} must be a real directory.`, { lockFailure: "not-directory" });
|
|
421
|
+
}
|
|
422
|
+
owned(details, path, options);
|
|
423
|
+
if ((details.mode & 63n) !== 0n)
|
|
424
|
+
throw unsafe(options, `${options.label} ${path} must be owner-only (mode 0700).`);
|
|
425
|
+
return details;
|
|
426
|
+
}
|
|
427
|
+
function ownerFile(details, path, options) {
|
|
428
|
+
if (!details.isFile() || details.isSymbolicLink() || details.nlink !== 1n) {
|
|
429
|
+
throw unsafe(options, `${options.label} owner ${path} must be a single-link regular file.`);
|
|
430
|
+
}
|
|
431
|
+
owned(details, path, options);
|
|
432
|
+
}
|
|
433
|
+
function privateOwnerModes(path, options, ...details) {
|
|
434
|
+
if (details.some((value) => (value.mode & 63n) !== 0n)) {
|
|
435
|
+
throw unsafe(options, `${options.label} owner ${path} must be owner-only (mode 0600).`);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
function owned(details, path, options) {
|
|
439
|
+
if (process.getuid !== undefined && details.uid !== BigInt(process.getuid())) {
|
|
440
|
+
throw unsafe(options, `${options.label} ${path} is not owned by the current user.`);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
async function sameDirectoryRequired(path, expected, options) {
|
|
444
|
+
if (!(await sameDirectory(path, expected, options)))
|
|
445
|
+
throw unsafe(options, `${options.label} directory identity changed.`);
|
|
446
|
+
}
|
|
447
|
+
async function sameDirectory(path, expected, options) {
|
|
448
|
+
try {
|
|
449
|
+
return sameIdentity(await privateDirectory(path, options), expected);
|
|
450
|
+
}
|
|
451
|
+
catch (error) {
|
|
452
|
+
if (isErrno(error, "ENOENT"))
|
|
453
|
+
return false;
|
|
454
|
+
throw error;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
async function syncDirectory(path, expected, options) {
|
|
458
|
+
let handle;
|
|
459
|
+
try {
|
|
460
|
+
handle = await open(path, constants.O_RDONLY | (constants.O_DIRECTORY ?? 0) | (constants.O_NOFOLLOW ?? 0));
|
|
461
|
+
const details = await handle.stat({ bigint: true });
|
|
462
|
+
if (!details.isDirectory() || !sameIdentity(details, expected)) {
|
|
463
|
+
throw unsafe(options, `${options.label} changed before its owner publication was synced.`);
|
|
464
|
+
}
|
|
465
|
+
if (options.syncDirectoryHandle === undefined)
|
|
466
|
+
await handle.sync();
|
|
467
|
+
else
|
|
468
|
+
await options.syncDirectoryHandle(handle);
|
|
469
|
+
}
|
|
470
|
+
catch (error) {
|
|
471
|
+
if (!isUnsupportedWindowsDirectorySync(error, options.platform ?? process.platform))
|
|
472
|
+
throw error;
|
|
473
|
+
}
|
|
474
|
+
finally {
|
|
475
|
+
await handle?.close().catch(() => undefined);
|
|
476
|
+
}
|
|
477
|
+
await sameDirectoryRequired(path, expected, options);
|
|
478
|
+
}
|
|
479
|
+
async function matchesObserved(path, options, expected) {
|
|
480
|
+
return await compareObserved(path, options, expected) === true;
|
|
481
|
+
}
|
|
482
|
+
async function compareObserved(path, options, expected) {
|
|
483
|
+
const value = await inspect(path, options);
|
|
484
|
+
try {
|
|
485
|
+
return value === undefined ? undefined : sameObserved(value, expected);
|
|
486
|
+
}
|
|
487
|
+
finally {
|
|
488
|
+
await closeObserved(value);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
function sameObserved(value, expected) {
|
|
492
|
+
if (value.kind !== expected.kind || !sameIdentity(value.identity, expected.identity))
|
|
493
|
+
return false;
|
|
494
|
+
if (value.kind === "ownerless") {
|
|
495
|
+
if (expected.kind !== "ownerless")
|
|
496
|
+
return false;
|
|
497
|
+
if (value.mtimeMs !== expected.mtimeMs)
|
|
498
|
+
return false;
|
|
499
|
+
const valuePin = value[OWNER_PUBLICATION_IN_PROGRESS];
|
|
500
|
+
const expectedPin = expected[OWNER_PUBLICATION_IN_PROGRESS];
|
|
501
|
+
if (valuePin === undefined || expectedPin === undefined)
|
|
502
|
+
return valuePin === expectedPin;
|
|
503
|
+
return !valuePin.closed && !expectedPin.closed
|
|
504
|
+
&& samePublicationSnapshot(valuePin.details, expectedPin.details)
|
|
505
|
+
&& valuePin.content.equals(expectedPin.content);
|
|
506
|
+
}
|
|
507
|
+
return expected.kind === "owned"
|
|
508
|
+
&& value.owner.content === expected.owner.content
|
|
509
|
+
&& sameIdentity(value.owner.identity, expected.owner.identity);
|
|
510
|
+
}
|
|
511
|
+
async function closeObserved(observed) {
|
|
512
|
+
const publication = observed?.kind === "ownerless" ? observed[OWNER_PUBLICATION_IN_PROGRESS] : undefined;
|
|
513
|
+
if (publication !== undefined)
|
|
514
|
+
await closePublication(publication);
|
|
515
|
+
}
|
|
516
|
+
async function closePublication(publication) {
|
|
517
|
+
if (publication.closed)
|
|
518
|
+
return;
|
|
519
|
+
await publication.handle.close();
|
|
520
|
+
publication.closed = true;
|
|
521
|
+
}
|
|
522
|
+
function artifactPath(options, kind, pid, now, randomToken) {
|
|
523
|
+
const input = { path: options.path, pid, now: now(), token: checkedToken(randomToken(), options.label) };
|
|
524
|
+
const custom = kind === "stale" ? options.stalePath : kind === "released" ? options.releasedPath : options.abandonedPath;
|
|
525
|
+
return custom?.(input) ?? `${options.path}.${kind}.${input.now}.${pid}.${input.token}`;
|
|
526
|
+
}
|
|
527
|
+
function validateOptions(options) {
|
|
528
|
+
validateOwnerPrivateLockInputs(options.label, options.pid ?? process.pid, options.ownerlessGraceMs);
|
|
529
|
+
if (options.schemaTag.length === 0)
|
|
530
|
+
throw new Error(`${options.label} schema tag must not be empty.`);
|
|
531
|
+
for (const value of [options.waitTimeoutMs ?? 0, options.pollIntervalMs ?? 100]) {
|
|
532
|
+
if (!Number.isFinite(value) || value < 0)
|
|
533
|
+
throw new Error(`${options.label} durations must be non-negative and finite.`);
|
|
534
|
+
}
|
|
535
|
+
if (options.maxAcquireAttempts !== undefined
|
|
536
|
+
&& (!Number.isSafeInteger(options.maxAcquireAttempts) || options.maxAcquireAttempts < 1)) {
|
|
537
|
+
throw new Error(`${options.label} maxAcquireAttempts must be a positive safe integer.`);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
function positivePid(value) {
|
|
541
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
542
|
+
}
|
|
543
|
+
function identity(value) { return { dev: value.dev, ino: value.ino }; }
|
|
544
|
+
function sameIdentity(value, expected) {
|
|
545
|
+
return value.dev === expected.dev && value.ino === expected.ino;
|
|
546
|
+
}
|
|
547
|
+
function checkedToken(value, label) {
|
|
548
|
+
if (!/^[0-9A-Za-z._-]+$/u.test(value) || value.length === 0 || value.length > 256)
|
|
549
|
+
throw new Error(`${label} token is invalid.`);
|
|
550
|
+
return value;
|
|
551
|
+
}
|
|
552
|
+
function unsafe(options, cause, details = {}) {
|
|
553
|
+
return options.unsafeError?.(cause, details) ?? new Error(cause);
|
|
554
|
+
}
|
|
555
|
+
function message(error) { return error instanceof Error ? error.message : String(error); }
|
|
556
|
+
function isErrno(error, code) {
|
|
557
|
+
return typeof error === "object" && error !== null && error.code === code;
|
|
558
|
+
}
|
|
559
|
+
function isUnsupportedWindowsDirectorySync(error, platform) {
|
|
560
|
+
return platform === "win32"
|
|
561
|
+
&& ["EISDIR", "EPERM", "EACCES", "EINVAL", "EBADF"].some((code) => isErrno(error, code));
|
|
562
|
+
}
|
|
563
|
+
async function sleep(milliseconds) {
|
|
564
|
+
await new Promise((resolvePromise) => setTimeout(resolvePromise, milliseconds));
|
|
565
|
+
}
|
|
566
|
+
//# sourceMappingURL=owner-private-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-private-lock.js","sourceRoot":"","sources":["../src/owner-private-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/pi-oauth-login.d.ts
CHANGED
|
@@ -19,4 +19,6 @@ export interface RunPiOAuthLoginOptions {
|
|
|
19
19
|
* against the PKCE verifier before token exchange.
|
|
20
20
|
*/
|
|
21
21
|
export declare function runPiOAuthLogin(providerId: string, options?: RunPiOAuthLoginOptions): Promise<void>;
|
|
22
|
+
/** @internal Exported only for deterministic platform-policy tests. */
|
|
23
|
+
export declare function assertPiOAuthLoginPersistenceSupported(platform: NodeJS.Platform): void;
|
|
22
24
|
//# sourceMappingURL=pi-oauth-login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-oauth-login.d.ts","sourceRoot":"","sources":["../src/pi-oauth-login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pi-oauth-login.d.ts","sourceRoot":"","sources":["../src/pi-oauth-login.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED,uEAAuE;AACvE,wBAAgB,sCAAsC,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAMtF"}
|