@sponson/core 0.4.0 → 0.6.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/engine/action.d.ts +22 -0
- package/dist/engine/action.js +55 -0
- package/dist/engine/action.js.map +1 -0
- package/dist/engine/apply.js +203 -22
- package/dist/engine/apply.js.map +1 -1
- package/dist/engine/destroy.js +42 -10
- package/dist/engine/destroy.js.map +1 -1
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/inspect.d.ts +7 -1
- package/dist/engine/inspect.js +68 -8
- package/dist/engine/inspect.js.map +1 -1
- package/dist/engine/lease.d.ts +39 -7
- package/dist/engine/lease.js +85 -20
- package/dist/engine/lease.js.map +1 -1
- package/dist/engine/manual.d.ts +47 -0
- package/dist/engine/manual.js +124 -0
- package/dist/engine/manual.js.map +1 -0
- package/dist/engine/once.d.ts +26 -0
- package/dist/engine/once.js +48 -0
- package/dist/engine/once.js.map +1 -0
- package/dist/engine/plan.js +24 -5
- package/dist/engine/plan.js.map +1 -1
- package/dist/engine/prepare.d.ts +1 -1
- package/dist/engine/prepare.js +71 -11
- package/dist/engine/prepare.js.map +1 -1
- package/dist/engine/run-context.d.ts +8 -2
- package/dist/engine/run-context.js +11 -2
- package/dist/engine/run-context.js.map +1 -1
- package/dist/engine/types.d.ts +33 -2
- package/dist/errors.d.ts +11 -1
- package/dist/errors.js +10 -0
- package/dist/errors.js.map +1 -1
- package/dist/receipts/git-workdir.d.ts +5 -0
- package/dist/receipts/git-workdir.js +9 -2
- package/dist/receipts/git-workdir.js.map +1 -1
- package/dist/receipts/git.d.ts +4 -0
- package/dist/receipts/git.js +35 -1
- package/dist/receipts/git.js.map +1 -1
- package/dist/receipts/layout.d.ts +8 -0
- package/dist/receipts/layout.js +11 -0
- package/dist/receipts/layout.js.map +1 -1
- package/dist/receipts/local.d.ts +4 -0
- package/dist/receipts/local.js +15 -1
- package/dist/receipts/local.js.map +1 -1
- package/dist/resolve.d.ts +19 -2
- package/dist/resolve.js +12 -3
- package/dist/resolve.js.map +1 -1
- package/dist/testing/fake.d.ts +15 -2
- package/dist/testing/fake.js +69 -3
- package/dist/testing/fake.js.map +1 -1
- package/dist/types.d.ts +190 -8
- package/dist/types.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ResolveResult } from "../resolve.js";
|
|
2
|
+
import type { Change, LedgerEntry, ManualStep, OpSpec, ReceiptLine } from "../types.js";
|
|
3
|
+
import type { Inspection } from "./inspect.js";
|
|
4
|
+
import type { RunContext } from "./run-context.js";
|
|
5
|
+
import type { ManualTodo, RunOptions } from "./types.js";
|
|
6
|
+
/** What inspection found out about a manual line whose inputs are all known. */
|
|
7
|
+
export interface ManualState {
|
|
8
|
+
step: ManualStep;
|
|
9
|
+
/** Done: seen by its verify request, or confirmed by a person for these instructions. */
|
|
10
|
+
done: boolean;
|
|
11
|
+
/** Seen done by its verify request in this inspection. */
|
|
12
|
+
verified: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** The receipt's `waitingFor` of a manual step (and of the lines that depend on it) until it is confirmed. */
|
|
15
|
+
export declare const CONFIRMATION = "confirmation";
|
|
16
|
+
/** The label a manual step's resource and diff carry. */
|
|
17
|
+
export declare function manualLabel(step: Pick<ManualStep, "title">): string;
|
|
18
|
+
/**
|
|
19
|
+
* Inspect a manual line: read its verify request (if any), and judge it against the ledger instead of the generic
|
|
20
|
+
* drift rules (`judge`): a step has no provider object another scope could own or a console could edit.
|
|
21
|
+
*/
|
|
22
|
+
export declare function inspectManual(rc: RunContext, change: Change, op: OpSpec, provider: Record<string, unknown>, resolved: ResolveResult): Promise<Inspection>;
|
|
23
|
+
/** The step as shown to the person who must do it. Text is masked like every output. */
|
|
24
|
+
export declare function todoOf(rc: RunContext, line: string, step: ManualStep, action: ManualTodo["action"]): ManualTodo;
|
|
25
|
+
/** The waiting receipt line of a manual step nobody confirmed yet. */
|
|
26
|
+
export declare function pendingLine(line: ReceiptLine, title: string, action: ManualTodo["action"]): void;
|
|
27
|
+
/**
|
|
28
|
+
* The ledger entry that records a done step: who confirmed it and when, or when a verify request first saw it.
|
|
29
|
+
* Keeps the previous record when nothing about the step changed, so the first confirmation stays on file.
|
|
30
|
+
*/
|
|
31
|
+
export declare function manualEntry(rc: RunContext, change: Change, provider: Record<string, unknown>, state: ManualState, confirmedNow: boolean, at: string): {
|
|
32
|
+
entry: LedgerEntry;
|
|
33
|
+
changed: boolean;
|
|
34
|
+
};
|
|
35
|
+
/** `confirm` needs a person's name, and may name only manual lines active in this run. */
|
|
36
|
+
export declare function checkConfirm(opts: RunOptions, lines: Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
op: OpSpec;
|
|
39
|
+
}>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Destroy a manual step's record: there is nothing to delete at a provider, but a person may have to undo it. With
|
|
42
|
+
* no `undo`, or once confirmed, the record is forgotten; otherwise the line waits for that confirmation and the undo
|
|
43
|
+
* instructions are returned for the person.
|
|
44
|
+
*/
|
|
45
|
+
export declare function destroyManual(rc: RunContext, line: ReceiptLine, entries: LedgerEntry[], at: string): ManualTodo[];
|
|
46
|
+
/** Lines `confirm` named that this run did not confirm (still waiting on an input, or done already). */
|
|
47
|
+
export declare function unusedConfirmations(opts: RunOptions, used: Set<string>): string | undefined;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manual steps (ADR 0021): lines a person does by hand, for state no API can change (a Google OAuth client's
|
|
3
|
+
* redirect URIs). The op describes the step (`OpSpec.manual`); the engine owns its state:
|
|
4
|
+
*
|
|
5
|
+
* - done when its verify request sees it (`observable` steps: `read` returns its resource), or when the ledger
|
|
6
|
+
* records a person's confirmation of these very instructions; otherwise a `todo`;
|
|
7
|
+
* - apply records a todo only when the run confirms it (`RunOptions.confirm`), and otherwise leaves the line waiting
|
|
8
|
+
* for a confirmation with MANUAL_STEP_PENDING (its dependents wait too, nothing is rolled back);
|
|
9
|
+
* - a step a verify request saw done and no longer sees is `missing` drift, and a todo again;
|
|
10
|
+
* - rollback never undoes one (a person did it); destroy shows its `undo` and forgets it only once confirmed.
|
|
11
|
+
*/
|
|
12
|
+
import { SponsonError } from "../errors.js";
|
|
13
|
+
/** The receipt's `waitingFor` of a manual step (and of the lines that depend on it) until it is confirmed. */
|
|
14
|
+
export const CONFIRMATION = "confirmation";
|
|
15
|
+
/** The label a manual step's resource and diff carry. */
|
|
16
|
+
export function manualLabel(step) {
|
|
17
|
+
return `manual step: ${step.title}`;
|
|
18
|
+
}
|
|
19
|
+
/** The ledger entry of the step, unless it is only an intent (never written for manual steps, but be strict). */
|
|
20
|
+
function recorded(rc, change, provider, key) {
|
|
21
|
+
const e = rc.ledger.get(change.adapter, provider, key);
|
|
22
|
+
return e && e.createdBy !== "intent" ? e : undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Inspect a manual line: read its verify request (if any), and judge it against the ledger instead of the generic
|
|
26
|
+
* drift rules (`judge`): a step has no provider object another scope could own or a console could edit.
|
|
27
|
+
*/
|
|
28
|
+
export async function inspectManual(rc, change, op, provider, resolved) {
|
|
29
|
+
const step = op.manual(resolved.params, rc.opts.ctx);
|
|
30
|
+
const base = { change, op, provider, resolved, drift: [] };
|
|
31
|
+
if (!step)
|
|
32
|
+
return { ...base, live: null, diffs: op.diff(null, resolved.params), desired: new Set() };
|
|
33
|
+
const e = recorded(rc, change, provider, step.key);
|
|
34
|
+
const verified = step.observable && (await op.read(rc.adapterContext(change.adapter, provider), resolved.params)) !== null;
|
|
35
|
+
const confirmed = e?.manual?.how === "confirmed" && e.hash === rc.ledger.keyed(step.hash);
|
|
36
|
+
const done = verified || confirmed;
|
|
37
|
+
const label = manualLabel(step);
|
|
38
|
+
const live = done ? { resources: [{ key: step.key, id: "manual", hash: step.hash, label }], outputs: {} } : null;
|
|
39
|
+
const inspection = { ...base, live, diffs: [manualDiff(step, e, done)], desired: new Set([step.key]), manual: { step, done, verified } };
|
|
40
|
+
if (e?.manual?.how === "verified" && !verified) {
|
|
41
|
+
inspection.drift.push({ kind: "missing", adapter: change.adapter, line: change.id, resource: { key: step.key, id: e.id, label }, message: `${label} was seen done by its verify request, which no longer sees it. It is a step to do again.` });
|
|
42
|
+
}
|
|
43
|
+
return inspection;
|
|
44
|
+
}
|
|
45
|
+
function manualDiff(step, e, done) {
|
|
46
|
+
const label = manualLabel(step);
|
|
47
|
+
if (done)
|
|
48
|
+
return { key: step.key, kind: "unchanged", label };
|
|
49
|
+
// Recorded before with other instructions (or seen done before): to do again, as an update of the step.
|
|
50
|
+
const before = e?.manual ? { state: "literal", value: e.manual.title } : { state: "absent" };
|
|
51
|
+
return { key: step.key, kind: e ? "update" : "create", label, before, after: { state: "literal", value: step.title } };
|
|
52
|
+
}
|
|
53
|
+
/** The step as shown to the person who must do it. Text is masked like every output. */
|
|
54
|
+
export function todoOf(rc, line, step, action) {
|
|
55
|
+
const instructions = action === "do" ? step.instructions : (step.undo ?? "");
|
|
56
|
+
return { line, title: rc.redactor.redact(step.title), action, instructions: rc.redactor.redact(instructions), observable: step.observable };
|
|
57
|
+
}
|
|
58
|
+
/** The waiting receipt line of a manual step nobody confirmed yet. */
|
|
59
|
+
export function pendingLine(line, title, action) {
|
|
60
|
+
Object.assign(line, {
|
|
61
|
+
status: "waiting",
|
|
62
|
+
waitingFor: CONFIRMATION,
|
|
63
|
+
errorCode: "MANUAL_STEP_PENDING",
|
|
64
|
+
error: `manual step \`${title}\` ${action === "do" ? "is not done" : "must be undone"}; a person does it, then confirms it`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The ledger entry that records a done step: who confirmed it and when, or when a verify request first saw it.
|
|
69
|
+
* Keeps the previous record when nothing about the step changed, so the first confirmation stays on file.
|
|
70
|
+
*/
|
|
71
|
+
export function manualEntry(rc, change, provider, state, confirmedNow, at) {
|
|
72
|
+
const { step } = state;
|
|
73
|
+
const prev = recorded(rc, change, provider, step.key);
|
|
74
|
+
const hash = rc.ledger.keyed(step.hash);
|
|
75
|
+
const how = confirmedNow ? "confirmed" : state.verified ? "verified" : (prev?.manual?.how ?? "confirmed");
|
|
76
|
+
const kept = prev?.manual && prev.hash === hash && prev.manual.how === how && !confirmedNow;
|
|
77
|
+
const redact = (t) => rc.redactor.redact(t);
|
|
78
|
+
const manual = kept
|
|
79
|
+
? prev.manual
|
|
80
|
+
: { title: redact(step.title), ...(step.undo ? { undo: redact(step.undo) } : {}), how, ...(confirmedNow ? { by: rc.opts.confirmedBy.trim() } : {}), at };
|
|
81
|
+
const entry = { adapter: change.adapter, op: change.op, provider, key: step.key, id: "manual", hash, label: manualLabel(step), createdBy: "sponson", line: change.id, manual };
|
|
82
|
+
return { entry, changed: !kept || prev.line !== change.id };
|
|
83
|
+
}
|
|
84
|
+
/** `confirm` needs a person's name, and may name only manual lines active in this run. */
|
|
85
|
+
export function checkConfirm(opts, lines) {
|
|
86
|
+
const confirm = opts.confirm ?? [];
|
|
87
|
+
if (confirm.length === 0)
|
|
88
|
+
return;
|
|
89
|
+
if (!(opts.confirmedBy ?? "").trim())
|
|
90
|
+
throw new SponsonError("USAGE", `Confirming ${confirm.map((l) => `\`${l}\``).join(", ")} needs the name of the person who did it (confirmedBy).`, { confirm });
|
|
91
|
+
const manual = new Set(lines.filter((l) => l.op.manual).map((l) => l.id));
|
|
92
|
+
const wrong = confirm.filter((id) => !manual.has(id));
|
|
93
|
+
if (wrong.length) {
|
|
94
|
+
throw new SponsonError("USAGE", `Cannot confirm ${wrong.map((id) => `\`${id}\``).join(", ")}: only manual steps can be confirmed. Manual steps here: ${[...manual].join(", ") || "(none)"}`, { confirm: wrong });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Destroy a manual step's record: there is nothing to delete at a provider, but a person may have to undo it. With
|
|
99
|
+
* no `undo`, or once confirmed, the record is forgotten; otherwise the line waits for that confirmation and the undo
|
|
100
|
+
* instructions are returned for the person.
|
|
101
|
+
*/
|
|
102
|
+
export function destroyManual(rc, line, entries, at) {
|
|
103
|
+
const todos = [];
|
|
104
|
+
const confirmed = (rc.opts.confirm ?? []).includes(line.id);
|
|
105
|
+
for (const e of entries) {
|
|
106
|
+
const m = e.manual;
|
|
107
|
+
if (m.undo && !confirmed) {
|
|
108
|
+
pendingLine(line, m.title, "undo");
|
|
109
|
+
todos.push({ line: line.id, title: m.title, action: "undo", instructions: m.undo, observable: false });
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
rc.ledger.delete(e);
|
|
113
|
+
line.notes = { ...line.notes, manual: m.undo ? { undoneBy: rc.opts.confirmedBy.trim(), undoneAt: at } : { nothingToUndo: true } };
|
|
114
|
+
}
|
|
115
|
+
return todos;
|
|
116
|
+
}
|
|
117
|
+
/** Lines `confirm` named that this run did not confirm (still waiting on an input, or done already). */
|
|
118
|
+
export function unusedConfirmations(opts, used) {
|
|
119
|
+
const unused = (opts.confirm ?? []).filter((id) => !used.has(id));
|
|
120
|
+
if (unused.length === 0)
|
|
121
|
+
return undefined;
|
|
122
|
+
return `Not confirmed: ${unused.map((id) => `\`${id}\``).join(", ")} (done already, or still waiting on an input, so there was nothing to confirm yet).`;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=manual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.js","sourceRoot":"","sources":["../../src/engine/manual.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LineOutputs, ResolveResult } from "../resolve.js";
|
|
2
|
+
import type { ApplyResult, LedgerEntry, Literal, OpSpec } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Once-only outputs (ADR 0018): a value only the create response carries. The ledger never holds the value, only
|
|
5
|
+
* keyed fingerprints of it: on the producer, the one its create returned (`onceFingerprints`); on each dependent, the
|
|
6
|
+
* one it was last written with (`onceInputs`). Equal fingerprints mean the dependent still holds the current value,
|
|
7
|
+
* so a later run that cannot know the value may leave it alone (`{ keep: true }`); anything else is refused.
|
|
8
|
+
*/
|
|
9
|
+
/** Keyed fingerprint of a value: never reversible, keyed per scope like every hash in the ledger. */
|
|
10
|
+
export type Fingerprint = (value: Literal) => string;
|
|
11
|
+
/**
|
|
12
|
+
* The producer's fingerprints after a write: those of the once outputs `result` returned, over the previous
|
|
13
|
+
* resource's unless the write created something (a create starts a new value).
|
|
14
|
+
*/
|
|
15
|
+
export declare function producedFingerprints(op: OpSpec, result: ApplyResult, before: LedgerEntry[], fp: Fingerprint): Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* A dependent's fingerprints after a write: the once values it was resolved with in this run, and, for references
|
|
18
|
+
* that stood as `{ keep: true }`, the fingerprints it already had.
|
|
19
|
+
*/
|
|
20
|
+
export declare function consumedFingerprints(resolved: ResolveResult, before: LedgerEntry[], outputs: Map<string, LineOutputs>, fp: Fingerprint): Record<string, string>;
|
|
21
|
+
/**
|
|
22
|
+
* True when every resource of line `lineId` was last written with the once value `line.output` that the producer's
|
|
23
|
+
* current resource returned. False for a dependent added later, an adopted producer (no fingerprint), or a dependent
|
|
24
|
+
* that never held it.
|
|
25
|
+
*/
|
|
26
|
+
export declare function holdsCurrentValue(ledger: LedgerEntry[], lineId: string, ref: string, line: string, output: string): boolean;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The producer's fingerprints after a write: those of the once outputs `result` returned, over the previous
|
|
3
|
+
* resource's unless the write created something (a create starts a new value).
|
|
4
|
+
*/
|
|
5
|
+
export function producedFingerprints(op, result, before, fp) {
|
|
6
|
+
const out = result.created.length ? {} : { ...before.find((e) => e.onceFingerprints)?.onceFingerprints };
|
|
7
|
+
for (const [name, spec] of Object.entries(op.outputs)) {
|
|
8
|
+
const v = result.outputs[name];
|
|
9
|
+
if (spec.once && v !== undefined)
|
|
10
|
+
out[name] = fp(v);
|
|
11
|
+
}
|
|
12
|
+
return out;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A dependent's fingerprints after a write: the once values it was resolved with in this run, and, for references
|
|
16
|
+
* that stood as `{ keep: true }`, the fingerprints it already had.
|
|
17
|
+
*/
|
|
18
|
+
export function consumedFingerprints(resolved, before, outputs, fp) {
|
|
19
|
+
const out = {};
|
|
20
|
+
const had = before.find((e) => e.onceInputs)?.onceInputs ?? {};
|
|
21
|
+
for (const s of resolved.spent) {
|
|
22
|
+
const was = had[s.ref];
|
|
23
|
+
if (s.kept && was)
|
|
24
|
+
out[s.ref] = was;
|
|
25
|
+
}
|
|
26
|
+
for (const input of Object.values(resolved.inputs)) {
|
|
27
|
+
if (input.state !== "resolved" || !input.dependsOn || !input.ref)
|
|
28
|
+
continue;
|
|
29
|
+
const lo = outputs.get(input.dependsOn);
|
|
30
|
+
const output = input.ref.slice(input.dependsOn.length + 1);
|
|
31
|
+
const value = lo?.values[output];
|
|
32
|
+
if (lo?.specs[output]?.once && value !== undefined)
|
|
33
|
+
out[input.ref] = fp(value);
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* True when every resource of line `lineId` was last written with the once value `line.output` that the producer's
|
|
39
|
+
* current resource returned. False for a dependent added later, an adopted producer (no fingerprint), or a dependent
|
|
40
|
+
* that never held it.
|
|
41
|
+
*/
|
|
42
|
+
export function holdsCurrentValue(ledger, lineId, ref, line, output) {
|
|
43
|
+
const entries = ledger.filter((e) => e.createdBy !== "intent");
|
|
44
|
+
const current = entries.find((e) => e.line === line && e.onceFingerprints?.[output])?.onceFingerprints?.[output];
|
|
45
|
+
const mine = entries.filter((e) => e.line === lineId);
|
|
46
|
+
return current !== undefined && mine.length > 0 && mine.every((e) => e.onceInputs?.[ref] === current);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=once.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"once.js","sourceRoot":"","sources":["../../src/engine/once.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/plan.js
CHANGED
|
@@ -2,6 +2,7 @@ import { dependenciesOf } from "../plan.js";
|
|
|
2
2
|
import { scopeDrift } from "./drift.js";
|
|
3
3
|
import { staleness } from "./history.js";
|
|
4
4
|
import { inspectLine, waitingOn } from "./inspect.js";
|
|
5
|
+
import { todoOf } from "./manual.js";
|
|
5
6
|
import { hasExternalOutputs, planOutputs } from "./outputs.js";
|
|
6
7
|
import { prepare } from "./prepare.js";
|
|
7
8
|
import { RunContext } from "./run-context.js";
|
|
@@ -93,12 +94,28 @@ async function planLine(rc, prepared, walk, c) {
|
|
|
93
94
|
if (wait.event)
|
|
94
95
|
line.waitingFor = wait.event;
|
|
95
96
|
}
|
|
96
|
-
else if (inspection.
|
|
97
|
-
line.status = "
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
else if (inspection.manual && !inspection.manual.done) {
|
|
98
|
+
line.status = "todo";
|
|
99
|
+
line.manual = todoOf(rc, c.id, inspection.manual.step, "do");
|
|
100
|
+
}
|
|
101
|
+
else
|
|
102
|
+
line.status = writeStatus(rc, inspection);
|
|
100
103
|
return line;
|
|
101
104
|
}
|
|
105
|
+
/** What apply would write for an inspected line that is neither refused, waiting nor a manual step to do. */
|
|
106
|
+
function writeStatus(rc, inspection) {
|
|
107
|
+
if (inspection.action)
|
|
108
|
+
return inspection.action.run ? "run" : "unchanged";
|
|
109
|
+
if (inspection.diffs.some((d) => d.kind === "create") || recreating(rc, inspection))
|
|
110
|
+
return "create";
|
|
111
|
+
if (inspection.diffs.some((d) => d.kind === "update"))
|
|
112
|
+
return "update";
|
|
113
|
+
return "unchanged";
|
|
114
|
+
}
|
|
115
|
+
/** The run recreates this existing line (`recreate`), so its `once` outputs will flow again. */
|
|
116
|
+
function recreating(rc, inspection) {
|
|
117
|
+
return inspection.live !== null && (rc.opts.recreate ?? []).includes(inspection.change.id);
|
|
118
|
+
}
|
|
102
119
|
/** The line's outputs as they are live right now, including external ones whose event already happened. */
|
|
103
120
|
async function knownOutputs(rc, walk, inspection) {
|
|
104
121
|
const { change: c, op, live } = inspection;
|
|
@@ -110,7 +127,9 @@ async function knownOutputs(rc, walk, inspection) {
|
|
|
110
127
|
values = { ...values, ...ext };
|
|
111
128
|
}
|
|
112
129
|
rc.guardOutputs(values, op.outputs);
|
|
113
|
-
|
|
130
|
+
// A resource that exists and that apply would not create again has shown its `once` outputs already.
|
|
131
|
+
const spent = live !== null && !inspection.diffs.some((d) => d.kind === "create") && !recreating(rc, inspection);
|
|
132
|
+
walk.outputs.set(c.id, { values: values, specs: op.outputs, spent });
|
|
114
133
|
return planOutputs(values, op.outputs);
|
|
115
134
|
}
|
|
116
135
|
//# sourceMappingURL=plan.js.map
|
package/dist/engine/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/engine/plan.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/engine/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/prepare.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Change, type OpSpec } from "../types.js";
|
|
2
2
|
import type { RunOptions } from "./types.js";
|
|
3
3
|
/** Everything about a run that follows from the plan and context alone, before touching any provider. */
|
|
4
4
|
export interface Prepared {
|
package/dist/engine/prepare.js
CHANGED
|
@@ -3,6 +3,8 @@ import { SponsonError } from "../errors.js";
|
|
|
3
3
|
import { orderChanges, outputRefs } from "../graph.js";
|
|
4
4
|
import { changesFor } from "../plan.js";
|
|
5
5
|
import { secretRefs } from "../resolve.js";
|
|
6
|
+
import { isFromRef, isSecretRef } from "../types.js";
|
|
7
|
+
import { providerOf } from "./run-context.js";
|
|
6
8
|
export function prepare(opts) {
|
|
7
9
|
const { plan, ctx, registry } = opts;
|
|
8
10
|
if (!plan.environments.includes(ctx.env)) {
|
|
@@ -12,29 +14,29 @@ export function prepare(opts) {
|
|
|
12
14
|
});
|
|
13
15
|
}
|
|
14
16
|
const ordered = orderChanges(changesFor(plan, ctx.env), plan.changes);
|
|
17
|
+
checkRecreate(opts.recreate ?? [], ordered, ctx.env, registry);
|
|
15
18
|
const ops = new Map();
|
|
19
|
+
const providers = new Map();
|
|
16
20
|
const params = new Map();
|
|
17
21
|
const refs = new Set();
|
|
18
22
|
const productionLines = [];
|
|
19
|
-
for (const c of ordered)
|
|
20
|
-
|
|
23
|
+
for (const c of ordered) {
|
|
24
|
+
const op = specialize(registry.op(c.adapter, c.op), c);
|
|
25
|
+
// A provider block the op cannot use (an unknown API name) must fail here, before any provider call.
|
|
26
|
+
providers.set(c.id, providerOf(plan.providers[c.adapter] ?? {}, op, c));
|
|
27
|
+
ops.set(c.id, op);
|
|
28
|
+
}
|
|
21
29
|
for (const c of ordered) {
|
|
22
30
|
const op = ops.get(c.id);
|
|
23
|
-
|
|
24
|
-
for (const ref of outputRefs(c)) {
|
|
25
|
-
const target = ordered.find((x) => x.id === ref.line);
|
|
26
|
-
const known = Object.keys(ops.get(target.id).outputs);
|
|
27
|
-
if (!known.includes(ref.output)) {
|
|
28
|
-
throw new SponsonError("REF_OUTPUT_UNKNOWN", `Line \`${c.id}\` reads \`${ref.line}.${ref.output}\`, but ${target.adapter}.${target.op} has no output \`${ref.output}\`. Known: ${known.join(", ") || "(none)"}`, { id: c.id, ref: `${ref.line}.${ref.output}`, known });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
+
checkRefs(c, ordered, ops);
|
|
31
32
|
let p = interpolate(c.params, ctx, `line \`${c.id}\``);
|
|
32
33
|
if (op.defaults)
|
|
33
34
|
p = op.defaults(p, ctx);
|
|
34
35
|
params.set(c.id, p);
|
|
35
36
|
for (const r of secretRefs(p))
|
|
36
37
|
refs.add(r);
|
|
37
|
-
|
|
38
|
+
// The provider block counts too: a LaunchDarkly block naming a production environment writes production.
|
|
39
|
+
if (ctx.env !== "production" && op.writesEnvironment?.(p, ctx, providers.get(c.id)) === "production")
|
|
38
40
|
productionLines.push(c.id);
|
|
39
41
|
}
|
|
40
42
|
return {
|
|
@@ -46,6 +48,51 @@ export function prepare(opts) {
|
|
|
46
48
|
productionLines,
|
|
47
49
|
};
|
|
48
50
|
}
|
|
51
|
+
/** A line's references, before any provider call: every output it reads exists, every credential it takes is masked. */
|
|
52
|
+
function checkRefs(c, ordered, ops) {
|
|
53
|
+
// Output names are static: a typo must fail at plan time, not after half an apply.
|
|
54
|
+
for (const ref of outputRefs(c)) {
|
|
55
|
+
const target = ordered.find((x) => x.id === ref.line);
|
|
56
|
+
const known = Object.keys(ops.get(target.id).outputs);
|
|
57
|
+
if (!known.includes(ref.output)) {
|
|
58
|
+
throw new SponsonError("REF_OUTPUT_UNKNOWN", `Line \`${c.id}\` reads \`${ref.line}.${ref.output}\`, but ${target.adapter}.${target.op} has no output \`${ref.output}\`. Known: ${known.join(", ") || "(none)"}`, { id: c.id, ref: `${ref.line}.${ref.output}`, known });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
for (const name of ops.get(c.id).credentialInputs?.(c.params) ?? [])
|
|
62
|
+
checkCredentialInput(c, name, ordered, ops);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A param that carries a credential (`OpSpec.credentialInputs`) must be a reference whose value Sponson masks: a
|
|
66
|
+
* `{ secret }`, or a `{ from }` naming a sensitive output that later runs can read again (not `once`, ADR 0018).
|
|
67
|
+
* A literal would put the credential in the plan file; a non-sensitive output would show it in receipts.
|
|
68
|
+
*/
|
|
69
|
+
function checkCredentialInput(c, name, ordered, ops) {
|
|
70
|
+
const v = c.params[name];
|
|
71
|
+
if (isSecretRef(v))
|
|
72
|
+
return;
|
|
73
|
+
const fail = (why) => new SponsonError("PARAM_INVALID", `${c.adapter}: line \`${c.id}\`: \`${name}\` ${why}`, { adapter: c.adapter, id: c.id, param: name });
|
|
74
|
+
if (!isFromRef(v) || Object.keys(v).length !== 1)
|
|
75
|
+
throw fail("must be `{ secret: <reference> }` or `{ from: <line>.<output> }` naming a sensitive output, never a literal credential");
|
|
76
|
+
const [line, ...rest] = v.from.split(".");
|
|
77
|
+
const target = ordered.find((x) => x.id === line);
|
|
78
|
+
const spec = target ? ops.get(target.id).outputs[rest.join(".")] : undefined;
|
|
79
|
+
if (!spec)
|
|
80
|
+
return; // an unknown line or output is reported as REF_UNKNOWN / REF_OUTPUT_UNKNOWN
|
|
81
|
+
if (spec.sensitive !== true)
|
|
82
|
+
throw fail(`reads \`${v.from}\`, which is not a sensitive output: a credential must never reach receipts or output`);
|
|
83
|
+
if (spec.once === true)
|
|
84
|
+
throw fail(`reads \`${v.from}\`, which the provider shows only when it is created (once): later runs could not authenticate with it`);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The op as this line uses it: with the outputs the line declares when the op derives them from its params
|
|
88
|
+
* (`OpSpec.outputsFor`), so references to them are checked here like any other output. The prototype keeps every
|
|
89
|
+
* other member of the op.
|
|
90
|
+
*/
|
|
91
|
+
function specialize(op, c) {
|
|
92
|
+
if (!op.outputsFor)
|
|
93
|
+
return op;
|
|
94
|
+
return Object.assign(Object.create(op), { outputs: op.outputsFor(c.params) });
|
|
95
|
+
}
|
|
49
96
|
/**
|
|
50
97
|
* Approval is a non-empty name; whitespace is not a person. Only `opts.approvedBy` counts: where it comes from
|
|
51
98
|
* (a flag, an environment variable, an approval workflow) is the caller's business.
|
|
@@ -66,4 +113,17 @@ export function requireApproval(opts, prepared) {
|
|
|
66
113
|
}
|
|
67
114
|
return approvedBy;
|
|
68
115
|
}
|
|
116
|
+
/** `recreate` may name only lines active in this environment, and never a manual step (a person did it). */
|
|
117
|
+
function checkRecreate(recreate, ordered, env, registry) {
|
|
118
|
+
const unknown = recreate.filter((id) => !ordered.some((c) => c.id === id));
|
|
119
|
+
if (unknown.length) {
|
|
120
|
+
throw new SponsonError("USAGE", `Cannot recreate ${unknown.map((id) => `\`${id}\``).join(", ")}: no such line in environment ${env}. Lines: ${ordered.map((c) => c.id).join(", ")}`, {
|
|
121
|
+
recreate: unknown,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
const manual = ordered.filter((c) => recreate.includes(c.id) && registry.op(c.adapter, c.op).manual);
|
|
125
|
+
if (manual.length) {
|
|
126
|
+
throw new SponsonError("USAGE", `Cannot recreate ${manual.map((c) => `\`${c.id}\``).join(", ")}: a manual step is done by a person; change its instructions to make it a step to do again.`, { recreate: manual.map((c) => c.id) });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
69
129
|
//# sourceMappingURL=prepare.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/engine/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/engine/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,WAAW,EAA4B,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiB9C,MAAM,UAAU,OAAO,CAAC,IAAgB;IACtC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,YAAY,CAAC,aAAa,EAAE,yBAAyB,GAAG,CAAC,GAAG,iBAAiB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACrH,WAAW,EAAE,GAAG,CAAC,GAAG;YACpB,KAAK,EAAE,IAAI,CAAC,YAAY;SACzB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,aAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,qGAAqG;QACrG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACxE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;QAC1B,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,QAAQ;YAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,yGAAyG;QACzG,IAAI,GAAG,CAAC,GAAG,KAAK,YAAY,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,KAAK,YAAY;YAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpI,CAAC;IAED,OAAO;QACL,OAAO;QACP,GAAG;QACH,MAAM;QACN,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC;QACrB,gBAAgB,EAAE,GAAG,CAAC,GAAG,KAAK,YAAY,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;QACxE,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,wHAAwH;AACxH,SAAS,SAAS,CAAC,CAAS,EAAE,OAAiB,EAAE,GAAwB;IACvE,mFAAmF;IACnF,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAE,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CACpB,oBAAoB,EACpB,UAAU,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,WAAW,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,oBAAoB,GAAG,CAAC,MAAM,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,EAClK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CACtD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AACpH,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,CAAS,EAAE,IAAY,EAAE,OAAiB,EAAE,GAAwB;IAChG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,WAAW,CAAC,CAAC,CAAC;QAAE,OAAO;IAC3B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,CAAC,wHAAwH,CAAC,CAAC;IACvL,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,4EAA4E;IAC/F,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;QAAE,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,uFAAuF,CAAC,CAAC;IAClJ,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,wGAAwG,CAAC,CAAC;AAChK,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,EAAU,EAAE,CAAS;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAW,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAgB,EAAE,QAAkB;IAClE,IAAI,CAAC,QAAQ,CAAC,gBAAgB;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC;QAC1C,MAAM,GAAG,GACP,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,YAAY;YAC3B,CAAC,CAAC,gCAAgC;YAClC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,8CAA8C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACjL,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,GAAG,GAAG,sCAAsC,EAAE;YACvF,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;YACzB,eAAe,EAAE,QAAQ,CAAC,eAAe;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,4GAA4G;AAC5G,SAAS,aAAa,CAAC,QAAkB,EAAE,OAAiB,EAAE,GAAW,EAAE,QAAgC;IACzG,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,mBAAmB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,GAAG,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACnL,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,6FAA6F,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtO,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ErrorCode } from "../errors.js";
|
|
2
2
|
import { Redactor } from "../redact.js";
|
|
3
|
-
import type { AdapterContext, LedgerEntry, Receipt } from "../types.js";
|
|
3
|
+
import type { AdapterContext, Change, LedgerEntry, OpSpec, Receipt } from "../types.js";
|
|
4
4
|
import { Ledger } from "./ledger.js";
|
|
5
5
|
import type { Prepared } from "./prepare.js";
|
|
6
6
|
import type { RunOptions } from "./types.js";
|
|
@@ -40,7 +40,11 @@ export declare class RunContext {
|
|
|
40
40
|
guardOutputs(values: Record<string, unknown>, specs: Record<string, {
|
|
41
41
|
sensitive?: boolean;
|
|
42
42
|
}>): void;
|
|
43
|
-
|
|
43
|
+
/**
|
|
44
|
+
* The provider block a line's resources live in: `providers.<adapter>`, narrowed by the op's `providerFor` when it
|
|
45
|
+
* has one (the generic `http` adapter keeps one block per API there). It is part of every ledger identity.
|
|
46
|
+
*/
|
|
47
|
+
provider(change: Change): Record<string, unknown>;
|
|
44
48
|
foreignScopeOf(entry: Pick<LedgerEntry, "adapter" | "provider" | "key">): string | undefined;
|
|
45
49
|
adapterContext(adapter: string, provider: Record<string, unknown>, intend?: (keys: string[]) => Promise<void>): AdapterContext;
|
|
46
50
|
/** What was thrown, redacted, with its code when it is a SponsonError. Anything may be thrown, not only Errors. */
|
|
@@ -49,3 +53,5 @@ export declare class RunContext {
|
|
|
49
53
|
code?: ErrorCode;
|
|
50
54
|
};
|
|
51
55
|
}
|
|
56
|
+
/** `block` as the op narrows it for `change` (see `OpSpec.providerFor`); the whole block when the op does not. */
|
|
57
|
+
export declare function providerOf(block: Record<string, unknown>, op: OpSpec, change: Change): Record<string, unknown>;
|
|
@@ -101,8 +101,12 @@ export class RunContext {
|
|
|
101
101
|
if (specs[k]?.sensitive && typeof v === "string")
|
|
102
102
|
this.redactor.register(v);
|
|
103
103
|
}
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
/**
|
|
105
|
+
* The provider block a line's resources live in: `providers.<adapter>`, narrowed by the op's `providerFor` when it
|
|
106
|
+
* has one (the generic `http` adapter keeps one block per API there). It is part of every ledger identity.
|
|
107
|
+
*/
|
|
108
|
+
provider(change) {
|
|
109
|
+
return providerOf(this.opts.plan.providers[change.adapter] ?? {}, this.opts.registry.op(change.adapter, change.op), change);
|
|
106
110
|
}
|
|
107
111
|
foreignScopeOf(entry) {
|
|
108
112
|
return this.foreign.get(identity(entry.adapter, entry.provider, entry.key));
|
|
@@ -116,6 +120,7 @@ export class RunContext {
|
|
|
116
120
|
log: (m) => log(this.redactor.redact(`[${adapter}] ${m}`)),
|
|
117
121
|
intend,
|
|
118
122
|
redact: (t) => this.redactor.redact(t),
|
|
123
|
+
secret: (v) => this.redactor.register(v),
|
|
119
124
|
};
|
|
120
125
|
}
|
|
121
126
|
/** What was thrown, redacted, with its code when it is a SponsonError. Anything may be thrown, not only Errors. */
|
|
@@ -125,4 +130,8 @@ export class RunContext {
|
|
|
125
130
|
return isSponsonError(e) ? { message, code: e.code } : { message };
|
|
126
131
|
}
|
|
127
132
|
}
|
|
133
|
+
/** `block` as the op narrows it for `change` (see `OpSpec.providerFor`); the whole block when the op does not. */
|
|
134
|
+
export function providerOf(block, op, change) {
|
|
135
|
+
return op.providerFor ? op.providerFor(block, change.params) : block;
|
|
136
|
+
}
|
|
128
137
|
//# sourceMappingURL=run-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-context.js","sourceRoot":"","sources":["../../src/engine/run-context.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run-context.js","sourceRoot":"","sources":["../../src/engine/run-context.ts"],"names":[],"mappings":"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"}
|