@dsh-enhanced/plugin-control-plane 0.1.31 → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +352 -4
- package/bin/dsh-local-release-adapter.js +80 -16
- package/bin/dsh-npm-registry-adapter.js +613 -0
- package/bin/dsh-source-adoption-authority.js +12 -0
- package/bin/dsh-source-approval-authority.js +16 -0
- package/bin/dsh-source-release-authority.js +12 -0
- package/bin/dsh-systemd-host-attestor.js +707 -0
- package/bin/dsh-task-observation-authority.js +15 -0
- package/lib/adapter-process.d.ts +23 -0
- package/lib/adapter-process.d.ts.map +1 -0
- package/lib/adapter-process.js +305 -0
- package/lib/adapter-process.js.map +1 -0
- package/lib/adoption-coordinator.d.ts +63 -0
- package/lib/adoption-coordinator.d.ts.map +1 -0
- package/lib/adoption-coordinator.js +241 -0
- package/lib/adoption-coordinator.js.map +1 -0
- package/lib/adoption-handoff.d.ts +16 -0
- package/lib/adoption-handoff.d.ts.map +1 -0
- package/lib/adoption-handoff.js +11 -0
- package/lib/adoption-handoff.js.map +1 -0
- package/lib/attestation.d.ts.map +1 -1
- package/lib/attestation.js +49 -1
- package/lib/attestation.js.map +1 -1
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +29 -2
- package/lib/catalog.js.map +1 -1
- package/lib/cli.d.ts +33 -9
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +624 -178
- package/lib/cli.js.map +1 -1
- package/lib/deployment-readiness.d.ts +38 -0
- package/lib/deployment-readiness.d.ts.map +1 -0
- package/lib/deployment-readiness.js +154 -0
- package/lib/deployment-readiness.js.map +1 -0
- package/lib/effect-blocked-replay.d.ts +81 -0
- package/lib/effect-blocked-replay.d.ts.map +1 -0
- package/lib/effect-blocked-replay.js +259 -0
- package/lib/effect-blocked-replay.js.map +1 -0
- package/lib/errors.d.ts +6 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +9 -0
- package/lib/errors.js.map +1 -0
- package/lib/foreground-deployment-runtime.d.ts +20 -0
- package/lib/foreground-deployment-runtime.d.ts.map +1 -0
- package/lib/foreground-deployment-runtime.js +79 -0
- package/lib/foreground-deployment-runtime.js.map +1 -0
- package/lib/foreground-deployment.d.ts +17 -0
- package/lib/foreground-deployment.d.ts.map +1 -0
- package/lib/foreground-deployment.js +43 -0
- package/lib/foreground-deployment.js.map +1 -0
- package/lib/host-attestor.d.ts +1 -1
- package/lib/host-attestor.d.ts.map +1 -1
- package/lib/host-attestor.js +51 -57
- package/lib/host-attestor.js.map +1 -1
- package/lib/index.d.ts +25 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -2
- package/lib/index.js.map +1 -1
- package/lib/npm-publish.d.ts +25 -0
- package/lib/npm-publish.d.ts.map +1 -0
- package/lib/npm-publish.js +280 -0
- package/lib/npm-publish.js.map +1 -0
- package/lib/owner-task-gap-types.d.ts +21 -0
- package/lib/owner-task-gap-types.d.ts.map +1 -0
- package/lib/owner-task-gap-types.js +2 -0
- package/lib/owner-task-gap-types.js.map +1 -0
- package/lib/owner-task-gaps.d.ts +24 -0
- package/lib/owner-task-gaps.d.ts.map +1 -0
- package/lib/owner-task-gaps.js +74 -0
- package/lib/owner-task-gaps.js.map +1 -0
- package/lib/post-activation.d.ts +33 -0
- package/lib/post-activation.d.ts.map +1 -0
- package/lib/post-activation.js +219 -0
- package/lib/post-activation.js.map +1 -0
- package/lib/registry-fetch.d.ts +50 -0
- package/lib/registry-fetch.d.ts.map +1 -0
- package/lib/registry-fetch.js +267 -0
- package/lib/registry-fetch.js.map +1 -0
- package/lib/release.d.ts +4 -4
- package/lib/release.d.ts.map +1 -1
- package/lib/release.js +142 -56
- package/lib/release.js.map +1 -1
- package/lib/replay-endpoint-protocol.d.ts +65 -0
- package/lib/replay-endpoint-protocol.d.ts.map +1 -0
- package/lib/replay-endpoint-protocol.js +183 -0
- package/lib/replay-endpoint-protocol.js.map +1 -0
- package/lib/replay-endpoint.d.ts +7 -0
- package/lib/replay-endpoint.d.ts.map +1 -0
- package/lib/replay-endpoint.js +193 -0
- package/lib/replay-endpoint.js.map +1 -0
- package/lib/replay-grant.d.ts +62 -0
- package/lib/replay-grant.d.ts.map +1 -0
- package/lib/replay-grant.js +208 -0
- package/lib/replay-grant.js.map +1 -0
- package/lib/replay-journal.d.ts +25 -0
- package/lib/replay-journal.d.ts.map +1 -0
- package/lib/replay-journal.js +275 -0
- package/lib/replay-journal.js.map +1 -0
- package/lib/runtime-observer-protocol.d.ts +63 -0
- package/lib/runtime-observer-protocol.d.ts.map +1 -0
- package/lib/runtime-observer-protocol.js +280 -0
- package/lib/runtime-observer-protocol.js.map +1 -0
- package/lib/runtime-observer.d.ts +8 -0
- package/lib/runtime-observer.d.ts.map +1 -0
- package/lib/runtime-observer.js +182 -0
- package/lib/runtime-observer.js.map +1 -0
- package/lib/service.d.ts +145 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +734 -6
- package/lib/service.js.map +1 -1
- package/lib/source-adoption-authority.d.ts +65 -0
- package/lib/source-adoption-authority.d.ts.map +1 -0
- package/lib/source-adoption-authority.js +271 -0
- package/lib/source-adoption-authority.js.map +1 -0
- package/lib/source-adoption-runner.d.ts +28 -0
- package/lib/source-adoption-runner.d.ts.map +1 -0
- package/lib/source-adoption-runner.js +197 -0
- package/lib/source-adoption-runner.js.map +1 -0
- package/lib/source-approval-authority.d.ts +50 -0
- package/lib/source-approval-authority.d.ts.map +1 -0
- package/lib/source-approval-authority.js +412 -0
- package/lib/source-approval-authority.js.map +1 -0
- package/lib/source-approval-client.d.ts +32 -0
- package/lib/source-approval-client.d.ts.map +1 -0
- package/lib/source-approval-client.js +175 -0
- package/lib/source-approval-client.js.map +1 -0
- package/lib/source-build.d.ts +60 -0
- package/lib/source-build.d.ts.map +1 -0
- package/lib/source-build.js +311 -0
- package/lib/source-build.js.map +1 -0
- package/lib/source-context.d.ts +24 -0
- package/lib/source-context.d.ts.map +1 -0
- package/lib/source-context.js +99 -0
- package/lib/source-context.js.map +1 -0
- package/lib/source-job-types.d.ts +87 -0
- package/lib/source-job-types.d.ts.map +1 -0
- package/lib/source-job-types.js +2 -0
- package/lib/source-job-types.js.map +1 -0
- package/lib/source-jobs.d.ts +113 -0
- package/lib/source-jobs.d.ts.map +1 -0
- package/lib/source-jobs.js +535 -0
- package/lib/source-jobs.js.map +1 -0
- package/lib/source-release-authority.d.ts +35 -0
- package/lib/source-release-authority.d.ts.map +1 -0
- package/lib/source-release-authority.js +271 -0
- package/lib/source-release-authority.js.map +1 -0
- package/lib/source-release-client.d.ts +10 -0
- package/lib/source-release-client.d.ts.map +1 -0
- package/lib/source-release-client.js +24 -0
- package/lib/source-release-client.js.map +1 -0
- package/lib/source-release-runner.d.ts +31 -0
- package/lib/source-release-runner.d.ts.map +1 -0
- package/lib/source-release-runner.js +125 -0
- package/lib/source-release-runner.js.map +1 -0
- package/lib/source-versioning.d.ts +24 -0
- package/lib/source-versioning.d.ts.map +1 -0
- package/lib/source-versioning.js +213 -0
- package/lib/source-versioning.js.map +1 -0
- package/lib/source-workspace.d.ts +117 -0
- package/lib/source-workspace.d.ts.map +1 -0
- package/lib/source-workspace.js +458 -0
- package/lib/source-workspace.js.map +1 -0
- package/lib/sqlite.d.ts +1 -1
- package/lib/sqlite.d.ts.map +1 -1
- package/lib/sqlite.js +509 -7
- package/lib/sqlite.js.map +1 -1
- package/lib/store.d.ts +229 -6
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +2431 -383
- package/lib/store.js.map +1 -1
- package/lib/task-observation-authority.d.ts +29 -0
- package/lib/task-observation-authority.d.ts.map +1 -0
- package/lib/task-observation-authority.js +370 -0
- package/lib/task-observation-authority.js.map +1 -0
- package/lib/task-observation-client.d.ts +4 -0
- package/lib/task-observation-client.d.ts.map +1 -0
- package/lib/task-observation-client.js +20 -0
- package/lib/task-observation-client.js.map +1 -0
- package/lib/task-observation-runtime.d.ts +59 -0
- package/lib/task-observation-runtime.d.ts.map +1 -0
- package/lib/task-observation-runtime.js +331 -0
- package/lib/task-observation-runtime.js.map +1 -0
- package/lib/task-observation-store.d.ts +17 -0
- package/lib/task-observation-store.d.ts.map +1 -0
- package/lib/task-observation-store.js +115 -0
- package/lib/task-observation-store.js.map +1 -0
- package/lib/task-observation-types.d.ts +67 -0
- package/lib/task-observation-types.d.ts.map +1 -0
- package/lib/task-observation-types.js +2 -0
- package/lib/task-observation-types.js.map +1 -0
- package/lib/trust.d.ts +3 -0
- package/lib/trust.d.ts.map +1 -1
- package/lib/trust.js +0 -0
- package/lib/trust.js.map +1 -1
- package/lib/types.d.ts +275 -8
- package/lib/types.d.ts.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +40 -5
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/** Host-owned continuation from a completed source release into normal activation. */
|
|
2
|
+
import { validateAdoptionHandoffTerms } from './adoption-handoff.js';
|
|
3
|
+
import { lstat, realpath } from 'node:fs/promises';
|
|
4
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
5
|
+
import { Ed25519ApprovalAuthority, parseApprovalReceipt } from './approval.js';
|
|
6
|
+
import { discover, loadCatalogWithMetadata } from './catalog.js';
|
|
7
|
+
import { activatePluginPlan, probePluginPlan } from './cli.js';
|
|
8
|
+
import { requestSourceAuthorityReceipt, validateSourceApprovalClientConfig } from './source-approval-client.js';
|
|
9
|
+
import { controlPlaneDigest } from './store.js';
|
|
10
|
+
import { resolveTrustKey } from './trust.js';
|
|
11
|
+
const PROFILE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
|
|
12
|
+
const AWAITING = new Set(['awaiting-reload', 'awaiting-readiness', 'awaiting-effect-blocked-replay', 'awaiting-shadow', 'awaiting-canary', 'awaiting-soak', 'awaiting-health']);
|
|
13
|
+
export function validateSourceAdoptionConfig(value) {
|
|
14
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
15
|
+
throw new Error('plugin-control-plane: invalid source adoption config');
|
|
16
|
+
const item = value;
|
|
17
|
+
if (Object.keys(item).sort().join('\0') !== ['authority', ...(Object.hasOwn(item, 'handoff') ? ['handoff'] : []), 'planTtlMs', 'profile', 'timeoutMs'].join('\0')
|
|
18
|
+
|| typeof item.profile !== 'string' || item.profile.normalize('NFC').trim() !== item.profile || !PROFILE.test(item.profile)
|
|
19
|
+
|| !Number.isSafeInteger(item.planTtlMs) || Number(item.planTtlMs) < 60_000 || Number(item.planTtlMs) > 86_400_000
|
|
20
|
+
|| !Number.isSafeInteger(item.timeoutMs) || Number(item.timeoutMs) < 1_000 || Number(item.timeoutMs) > 3_600_000) {
|
|
21
|
+
throw new Error('plugin-control-plane: invalid source adoption config');
|
|
22
|
+
}
|
|
23
|
+
validateSourceApprovalClientConfig(item.authority);
|
|
24
|
+
if (Object.hasOwn(item, 'handoff'))
|
|
25
|
+
validateAdoptionHandoffTerms(item.handoff);
|
|
26
|
+
}
|
|
27
|
+
function same(left, right) { return controlPlaneDigest(left) === controlPlaneDigest(right); }
|
|
28
|
+
async function canonicalTarget(trust, profile) {
|
|
29
|
+
const profiles = join(trust.dshHome, 'profiles');
|
|
30
|
+
if (await realpath(profiles) !== resolve(profiles))
|
|
31
|
+
throw new Error('plugin-control-plane: profiles directory is not canonical');
|
|
32
|
+
const profilePath = join(profiles, profile);
|
|
33
|
+
try {
|
|
34
|
+
const metadata = await lstat(profilePath);
|
|
35
|
+
if (!metadata.isDirectory() || metadata.isSymbolicLink() || await realpath(profilePath) !== resolve(profilePath))
|
|
36
|
+
throw new Error('plugin-control-plane: target profile is not canonical');
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (!(typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT'))
|
|
40
|
+
throw error;
|
|
41
|
+
if (await realpath(dirname(profilePath)) !== resolve(dirname(profilePath)) || basename(profilePath) !== profile)
|
|
42
|
+
throw new Error('plugin-control-plane: target profile parent is not canonical');
|
|
43
|
+
}
|
|
44
|
+
return Object.freeze({ dshHome: trust.dshHome, profile, profilePath });
|
|
45
|
+
}
|
|
46
|
+
function assertPlanBinding(plan, sourcePlanId, trust, target, catalog, candidate) {
|
|
47
|
+
if (plan.profile !== target.profile || plan.installationId !== trust.installationId || !same(plan.target, target)
|
|
48
|
+
|| !same(plan.ledger, trust.ledger) || !same(plan.executor, { id: trust.executor.id, version: trust.executor.version, path: trust.executor.path, sha256: trust.executor.sha256 })
|
|
49
|
+
|| plan.dossier.catalogDigest !== catalog.digest || plan.dossier.catalogProvenance !== 'owner-provided-integrity-pinned' || !same(plan.candidate, candidate)) {
|
|
50
|
+
throw new Error(`plugin-control-plane: source adoption ${sourcePlanId} binding no longer matches current owner trust`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Immutable fields sufficient for the shared engine to restore an exposed plan. */
|
|
54
|
+
function recoveryBinding(plan, trust, profile) {
|
|
55
|
+
return plan.profile === profile && plan.installationId === trust.installationId && plan.target.dshHome === trust.dshHome
|
|
56
|
+
&& plan.target.profile === profile && plan.target.profilePath === join(trust.dshHome, 'profiles', profile)
|
|
57
|
+
&& same(plan.ledger, trust.ledger)
|
|
58
|
+
&& same(plan.executor, { id: trust.executor.id, version: trust.executor.version, path: trust.executor.path, sha256: trust.executor.sha256 });
|
|
59
|
+
}
|
|
60
|
+
function authority(trust, receipt) {
|
|
61
|
+
const key = resolveTrustKey(trust, 'approval', receipt.authority, receipt.keyId);
|
|
62
|
+
return new Ed25519ApprovalAuthority(key.publicKeyPem, key.authority, key.keyId);
|
|
63
|
+
}
|
|
64
|
+
function terminal(plan) { return plan.status === 'activated' || plan.status === 'rolled-back'; }
|
|
65
|
+
async function recoverAwaiting(store, trust, plan, timeoutMs) {
|
|
66
|
+
const recoverySignal = AbortSignal.timeout(timeoutMs);
|
|
67
|
+
let rollback = plan;
|
|
68
|
+
if (plan.status !== 'rollback-pending') {
|
|
69
|
+
if ((!AWAITING.has(plan.status) && plan.status !== 'staging' && plan.status !== 'commit-pending') || plan.activation === undefined)
|
|
70
|
+
return;
|
|
71
|
+
// The Store rejects a live lease. Expired staging/commit work can instead
|
|
72
|
+
// be converted to the same durable rollback path as an awaiting failure.
|
|
73
|
+
rollback = store.requestActivationRollback({ planId: plan.id, expectedRevision: plan.revision, fence: plan.activation.fence, failureCode: 'source-adoption-interrupted' });
|
|
74
|
+
}
|
|
75
|
+
const restored = await activatePluginPlan({ store, trust, planId: rollback.id, expectedRevision: rollback.revision, signal: recoverySignal });
|
|
76
|
+
if (restored.status === 'rollback-pending' && restored.activation?.rollbackProfileRestored) {
|
|
77
|
+
await probePluginPlan({ store, trust, planId: restored.id, expectedRevision: restored.revision, expectedFence: restored.activation.fence, signal: recoverySignal });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create or recover the exact source-linked plan, obtain one finite approval,
|
|
82
|
+
* then delegate all deployment and rollback mechanics to the shared engine.
|
|
83
|
+
*/
|
|
84
|
+
export async function adoptSourceRelease(options) {
|
|
85
|
+
// Locate a durable link before checking current job authority: a withdrawn
|
|
86
|
+
// job may still have exposed a profile that needs the engine's recovery.
|
|
87
|
+
let created = options.store.findSourceAdoption(options.sourcePlanId);
|
|
88
|
+
let trustBound = created !== undefined && recoveryBinding(created, options.trust, options.config.profile);
|
|
89
|
+
try {
|
|
90
|
+
validateSourceAdoptionConfig(options.config);
|
|
91
|
+
const deadline = AbortSignal.timeout(options.config.timeoutMs);
|
|
92
|
+
const signal = options.signal === undefined ? deadline : AbortSignal.any([options.signal, deadline]);
|
|
93
|
+
const source = options.store.getSourcePlan(options.sourcePlanId);
|
|
94
|
+
if (source.status !== 'release-complete' || source.mode !== 'modify')
|
|
95
|
+
throw new Error('plugin-control-plane: source adoption requires a release-complete owner modify plan');
|
|
96
|
+
const released = options.store.sourceReleaseCandidate(source.id);
|
|
97
|
+
const catalog = await loadCatalogWithMetadata(options.trust.catalog.path);
|
|
98
|
+
const admitted = catalog.catalog.entries.find(entry => entry.id === released.id);
|
|
99
|
+
// Owner-failure source plans retain the generic repair gap rather than
|
|
100
|
+
// pretending that it is a candidate capability. Their durable Store link
|
|
101
|
+
// already binds this exact released entry; ordinary gaps still require
|
|
102
|
+
// catalog capability applicability.
|
|
103
|
+
if (admitted === undefined || !same(admitted, released)
|
|
104
|
+
|| (source.gapSnapshot.capability !== 'foreground-task-repair' && !discover(catalog.catalog, source.gapSnapshot.capability).some(entry => entry.id === released.id))) {
|
|
105
|
+
throw new Error('plugin-control-plane: source release is not the exact applicable current catalog entry');
|
|
106
|
+
}
|
|
107
|
+
const target = await canonicalTarget(options.trust, options.config.profile);
|
|
108
|
+
let plan = created;
|
|
109
|
+
// A job can expire while catalog and filesystem checks await. Never make
|
|
110
|
+
// its durable activation claim until the Host has revalidated it.
|
|
111
|
+
await options.assertCurrent();
|
|
112
|
+
signal.throwIfAborted();
|
|
113
|
+
if (plan === undefined) {
|
|
114
|
+
plan = options.withSourceFence(() => options.store.createPlan({ candidate: admitted, catalog: { digest: catalog.digest, provenance: catalog.provenance }, matchedCapabilities: admitted.capabilities,
|
|
115
|
+
profile: options.config.profile, target, installationId: options.trust.installationId, ledger: options.trust.ledger,
|
|
116
|
+
executor: { id: options.trust.executor.id, version: options.trust.executor.version, path: options.trust.executor.path, sha256: options.trust.executor.sha256 },
|
|
117
|
+
ttlMs: options.config.planTtlMs, gapId: source.gapId, sourcePlanId: source.id, ...(options.config.handoff ? { handoff: options.config.handoff } : {}), idempotencyKey: `source-adoption:${source.id}` }).result);
|
|
118
|
+
}
|
|
119
|
+
assertPlanBinding(plan, source.id, options.trust, target, catalog, admitted);
|
|
120
|
+
created = plan;
|
|
121
|
+
trustBound = true;
|
|
122
|
+
if (!same(plan.dossier.handoff ?? null, options.config.handoff ?? null))
|
|
123
|
+
throw new Error('plugin-control-plane: adoption handoff configuration changed');
|
|
124
|
+
let requestedApproval = false;
|
|
125
|
+
for (let step = 0; step < 32; step++) {
|
|
126
|
+
await options.assertCurrent();
|
|
127
|
+
signal.throwIfAborted();
|
|
128
|
+
const current = options.store.getPlan(plan.id);
|
|
129
|
+
assertPlanBinding(current, source.id, options.trust, target, catalog, admitted);
|
|
130
|
+
if (terminal(current))
|
|
131
|
+
return current;
|
|
132
|
+
const before = { status: current.status, revision: current.revision, fence: current.activation?.fence };
|
|
133
|
+
if (current.status === 'pending-approval') {
|
|
134
|
+
if (requestedApproval)
|
|
135
|
+
return current;
|
|
136
|
+
requestedApproval = true;
|
|
137
|
+
const sourceReference = options.store.getOwnerTaskFailureReference(current.gapId);
|
|
138
|
+
if (sourceReference === undefined)
|
|
139
|
+
throw new Error('plugin-control-plane: source adoption owner reference is absent');
|
|
140
|
+
const request = { protocol: 'dsh-source-adoption/v1', planId: current.id, planDigest: current.digest, sourceReferenceDigest: controlPlaneDigest(sourceReference) };
|
|
141
|
+
const receipt = await requestSourceAuthorityReceipt(options.config.authority, request, value => {
|
|
142
|
+
const parsed = parseApprovalReceipt(value);
|
|
143
|
+
if (parsed.decision !== 'approved' || parsed.planId !== request.planId || parsed.planDigest !== request.planDigest)
|
|
144
|
+
throw new Error('plugin-control-plane: source adoption authority receipt is not exact');
|
|
145
|
+
return parsed;
|
|
146
|
+
}, signal);
|
|
147
|
+
await options.assertCurrent();
|
|
148
|
+
signal.throwIfAborted();
|
|
149
|
+
plan = (await options.store.approve({ planId: current.id, expectedRevision: current.revision, receipt,
|
|
150
|
+
resolveAuthority: value => authority(options.trust, value), idempotencyKey: `source-adoption-approval:${receipt.approvalId}`, withSourceFence: options.withSourceFence })).result;
|
|
151
|
+
}
|
|
152
|
+
else if (options.config.handoff) {
|
|
153
|
+
if (current.status === 'approved') {
|
|
154
|
+
options.withSourceFence(() => options.store.prepareAdoptionHandoff({ planId: current.id, expectedRevision: current.revision }));
|
|
155
|
+
}
|
|
156
|
+
else if (current.status === 'commit-pending') {
|
|
157
|
+
options.store.assertAdoptionHandoff(current.id);
|
|
158
|
+
return await activatePluginPlan({ store: options.store, trust: options.trust, planId: current.id, expectedRevision: current.revision, signal });
|
|
159
|
+
}
|
|
160
|
+
// The external native continuation owns staging, probes and recovery.
|
|
161
|
+
return options.store.getPlan(current.id);
|
|
162
|
+
}
|
|
163
|
+
else if (current.status === 'rollback-pending' && current.activation?.rollbackProfileRestored) {
|
|
164
|
+
plan = await probePluginPlan({ store: options.store, trust: options.trust, planId: current.id, expectedRevision: current.revision, expectedFence: current.activation.fence, signal });
|
|
165
|
+
}
|
|
166
|
+
else if (current.status === 'approved' || current.status === 'staging' || current.status === 'commit-pending' || current.status === 'rollback-pending') {
|
|
167
|
+
plan = await activatePluginPlan({ store: options.store, trust: options.trust, planId: current.id, expectedRevision: current.revision, signal });
|
|
168
|
+
}
|
|
169
|
+
else if (AWAITING.has(current.status)) {
|
|
170
|
+
if (current.activation === undefined)
|
|
171
|
+
throw new Error('plugin-control-plane: awaiting source adoption has no activation fence');
|
|
172
|
+
plan = await probePluginPlan({ store: options.store, trust: options.trust, planId: current.id, expectedRevision: current.revision, expectedFence: current.activation.fence, signal });
|
|
173
|
+
}
|
|
174
|
+
else
|
|
175
|
+
return current;
|
|
176
|
+
if (plan.status === before.status && plan.revision === before.revision && plan.activation?.fence === before.fence)
|
|
177
|
+
return plan;
|
|
178
|
+
}
|
|
179
|
+
return options.store.getPlan(plan.id);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
if (created !== undefined && trustBound) {
|
|
183
|
+
try {
|
|
184
|
+
if (created.dossier.handoff) {
|
|
185
|
+
// Unloading the target must not cancel the durable handoff it just made.
|
|
186
|
+
if (!options.signal?.aborted)
|
|
187
|
+
options.store.revokeAdoptionHandoff(created.id);
|
|
188
|
+
}
|
|
189
|
+
else
|
|
190
|
+
await recoverAwaiting(options.store, options.trust, options.store.getPlan(created.id), options.config.timeoutMs);
|
|
191
|
+
}
|
|
192
|
+
catch { /* preserve the triggering failure */ }
|
|
193
|
+
}
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=source-adoption-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-adoption-runner.js","sourceRoot":"","sources":["../src/source-adoption-runner.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,OAAO,EAAE,4BAA4B,EAA6B,MAAM,uBAAuB,CAAA;AAC/F,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,EAAE,6BAA6B,EAAE,kCAAkC,EAAmC,MAAM,6BAA6B,CAAA;AAChJ,OAAO,EAAE,kBAAkB,EAA0B,MAAM,YAAY,CAAA;AACvE,OAAO,EAAE,eAAe,EAAiC,MAAM,YAAY,CAAA;AAG3E,MAAM,OAAO,GAAG,oCAAoC,CAAA;AACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAiC,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,gCAAgC,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAA;AAU/M,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACxI,MAAM,IAAI,GAAG,KAAgC,CAAA;IAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;WAC5J,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;WACxH,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU;WAC/G,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAAC;QACnH,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IACD,kCAAkC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;QAAE,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAChF,CAAC;AAED,SAAS,IAAI,CAAC,IAAa,EAAE,KAAc,IAAa,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;AAEvH,KAAK,UAAU,eAAe,CAAC,KAA+B,EAAE,OAAe;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAChD,IAAI,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAChI,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC5L,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;YAAE,MAAM,KAAK,CAAA;QAC7G,IAAI,MAAM,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IAClM,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;AACxE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA0B,EAAE,YAAoB,EAAE,KAA+B,EAAE,MAAsC,EAAE,OAA2B,EAAE,SAA4C;IAC7N,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;WAC5G,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;WAC9K,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,KAAK,iCAAiC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;QAC/J,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,gDAAgD,CAAC,CAAA;IACxH,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,SAAS,eAAe,CAAC,IAA0B,EAAE,KAA+B,EAAE,OAAe;IACnG,OAAO,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;WACnH,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;WACvG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;WAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;AAChJ,CAAC;AAED,SAAS,SAAS,CAAC,KAA+B,EAAE,OAAgD;IAClG,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAChF,OAAO,IAAI,wBAAwB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,QAAQ,CAAC,IAA0B,IAAa,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAA,CAAC,CAAC;AAE9H,KAAK,UAAU,eAAe,CAAC,KAAwB,EAAE,KAA+B,EAAE,IAA0B,EAAE,SAAiB;IACrI,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACrD,IAAI,QAAQ,GAAG,IAAI,CAAA;IACnB,IAAI,IAAI,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;QACvC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAM;QAC1I,0EAA0E;QAC1E,yEAAyE;QACzE,QAAQ,GAAG,KAAK,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,CAAA;IAC5K,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;IAC7I,IAAI,QAAQ,CAAC,MAAM,KAAK,kBAAkB,IAAI,QAAQ,CAAC,UAAU,EAAE,uBAAuB,EAAE,CAAC;QAC3F,MAAM,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;IACrK,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAQxC;IACC,2EAA2E;IAC3E,yEAAyE;IACzE,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IACpE,IAAI,UAAU,GAAG,OAAO,KAAK,SAAS,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACzG,IAAI,CAAC;QACH,4BAA4B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;QACpG,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAChE,IAAI,MAAM,CAAC,MAAM,KAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAA;QAC5K,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAChE,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAA;QAChF,uEAAuE;QACvE,yEAAyE;QACzE,uEAAuE;QACvE,oCAAoC;QACpC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;eAClD,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,KAAK,wBAAwB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACvK,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAA;QAC3G,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC3E,IAAI,IAAI,GAAG,OAAO,CAAA;QAClB,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAAC,MAAM,CAAC,cAAc,EAAE,CAAA;QACtD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,mBAAmB,EAAE,QAAQ,CAAC,YAAY;gBAClM,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;gBACnH,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC9J,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,mBAAmB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;QACpN,CAAC;QACD,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAAC,OAAO,GAAG,IAAI,CAAC;QAAC,UAAU,GAAG,IAAI,CAAA;QAC/G,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;QACxJ,IAAI,iBAAiB,GAAG,KAAK,CAAA;QAC7B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;YACrC,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAAC,MAAM,CAAC,cAAc,EAAE,CAAA;YACtD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;YAC/H,IAAI,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAA;YACrC,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,CAAA;YACvG,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;gBAC1C,IAAI,iBAAiB;oBAAE,OAAO,OAAO,CAAA;gBACrC,iBAAiB,GAAG,IAAI,CAAA;gBACxB,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACjF,IAAI,eAAe,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;gBACrH,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,wBAAiC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAAE,CAAA;gBAC3K,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE;oBAC7F,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;oBAC1C,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU;wBAAE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;oBAC3M,OAAO,MAAM,CAAA;gBACf,CAAC,EAAE,MAAM,CAAC,CAAA;gBACV,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;gBAAC,MAAM,CAAC,cAAc,EAAE,CAAA;gBACtD,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO;oBACnG,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,cAAc,EAAE,4BAA4B,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;YACrL,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAClC,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;gBACjI,CAAC;qBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;oBAC/C,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;oBAC/C,OAAO,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;gBACjJ,CAAC;gBACD,sEAAsE;gBACtE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC1C,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,IAAI,OAAO,CAAC,UAAU,EAAE,uBAAuB,EAAE,CAAC;gBAChG,IAAI,GAAG,MAAM,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACvL,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;gBACzJ,IAAI,GAAG,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;YACjJ,CAAC;iBAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;gBAC/H,IAAI,GAAG,MAAM,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACvL,CAAC;;gBAAM,OAAO,OAAO,CAAA;YACrB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAA;QAChI,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBAC5B,yEAAyE;oBACzE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO;wBAAE,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;gBAC/E,CAAC;;oBAAM,MAAM,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACzH,CAAC;YAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { SourceJobOwnerReceipt } from './source-job-types.js';
|
|
2
|
+
import type { ApprovalReceipt, PluginSourcePlan } from './types.js';
|
|
3
|
+
export interface SourceApprovalRequest {
|
|
4
|
+
protocol: 'dsh-source-approval/v1';
|
|
5
|
+
planId: string;
|
|
6
|
+
planDigest: string;
|
|
7
|
+
sourceReferenceDigest: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SourceApprovalAuthorityConfig {
|
|
10
|
+
schemaVersion: 1;
|
|
11
|
+
authority: string;
|
|
12
|
+
keyId: string;
|
|
13
|
+
keyPath: string;
|
|
14
|
+
statePath: string;
|
|
15
|
+
controlDatabasePath: string;
|
|
16
|
+
grant: {
|
|
17
|
+
id: string;
|
|
18
|
+
expiresAt: number;
|
|
19
|
+
maxApprovals: number;
|
|
20
|
+
repository: string;
|
|
21
|
+
worktreeRoot: string;
|
|
22
|
+
owner: Pick<SourceJobOwnerReceipt, 'authorityId' | 'authorityHash' | 'principalId' | 'principalRecordId' | 'principalVersion' | 'workspace' | 'agentPreset'>;
|
|
23
|
+
plugins: readonly string[];
|
|
24
|
+
maxChangedFiles: number;
|
|
25
|
+
maxChangedBytes: number;
|
|
26
|
+
receiptTtlMs: number;
|
|
27
|
+
/** Independently authorize only the deterministic Host-owned version delta. */
|
|
28
|
+
versioning?: 'patch';
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export declare function sourceAuthorityCanonicalSafePath(path: string, kind: 'file' | 'directory', createFile?: boolean): string;
|
|
32
|
+
export declare function sourceAuthorityCanonicalRepository(path: string): string;
|
|
33
|
+
export declare function sourceAuthorityReadSafeFile(path: string, maximum: number): Buffer;
|
|
34
|
+
export declare function sourceAuthorityEnvironment(): NodeJS.ProcessEnv;
|
|
35
|
+
export declare function validateSourceApprovalAuthorityConfig(value: unknown): asserts value is SourceApprovalAuthorityConfig;
|
|
36
|
+
export declare function sourceAuthorityValidatePrepared(plan: PluginSourcePlan, now: number, status?: PluginSourcePlan['status']): void;
|
|
37
|
+
export interface SourceAuthorityWorktreeGrant {
|
|
38
|
+
repository: string;
|
|
39
|
+
worktreeRoot: string;
|
|
40
|
+
plugins: readonly string[];
|
|
41
|
+
maxChangedFiles: number;
|
|
42
|
+
maxChangedBytes: number;
|
|
43
|
+
versioning?: 'patch';
|
|
44
|
+
}
|
|
45
|
+
export declare function sourceAuthorityValidateWorktree(plan: PluginSourcePlan, grant: SourceAuthorityWorktreeGrant): Promise<void>;
|
|
46
|
+
/** Sign a finite, freshly rechecked source approval. It cannot approve a release or activation. */
|
|
47
|
+
export declare function authorizePreparedSource(configInput: SourceApprovalAuthorityConfig, requestInput: SourceApprovalRequest): Promise<ApprovalReceipt>;
|
|
48
|
+
/** CLI entrypoint: exactly --config <absolute-path>, one bounded JSON request on stdin, one receipt on stdout. */
|
|
49
|
+
export declare function runSourceApprovalAuthority(argv?: string[]): Promise<void>;
|
|
50
|
+
//# sourceMappingURL=source-approval-authority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-approval-authority.d.ts","sourceRoot":"","sources":["../src/source-approval-authority.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAWnE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,wBAAwB,CAAA;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,qBAAqB,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,6BAA6B;IAC5C,aAAa,EAAE,CAAC,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAA;QACV,SAAS,EAAE,MAAM,CAAA;QACjB,YAAY,EAAE,MAAM,CAAA;QACpB,UAAU,EAAE,MAAM,CAAA;QAClB,YAAY,EAAE,MAAM,CAAA;QACpB,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,eAAe,GAAG,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,CAAC,CAAA;QAC5J,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;QAC1B,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,MAAM,CAAA;QACvB,YAAY,EAAE,MAAM,CAAA;QACpB,+EAA+E;QAC/E,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;CACF;AAkCD,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,UAAU,UAAQ,GAAG,MAAM,CAiBrH;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAWjF;AAQD,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,UAAU,CAK9D;AASD,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,6BAA6B,CAiBpH;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,gBAAgB,CAAC,QAAQ,CAAsB,GAAG,IAAI,CAclJ;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC7I;AAED,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChI;AA0BD,mGAAmG;AACnG,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,6BAA6B,EAAE,YAAY,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA0DvJ;AAYD,kHAAkH;AAClH,wBAAsB,0BAA0B,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5F"}
|