@manta-eu/client 0.5.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.
@@ -0,0 +1,204 @@
1
+ import { type Options } from "ldkit";
2
+ import { type GQLExecuteActionErrorCode } from "../generated/graphql.js";
3
+ import type { ActionInput } from "./action-document.js";
4
+ /** Sends a GraphQL document to Manta, scoped to the datastore the caller works in. */
5
+ export type ActionGraphql = (document: string, variables: Record<string, unknown>, options?: {
6
+ signal?: AbortSignal;
7
+ }) => Promise<unknown>;
8
+ export type ActionDeletion = Omit<ActionInput, "properties">;
9
+ export type GraphOp = {
10
+ op: "add";
11
+ input: ActionInput;
12
+ } | {
13
+ op: "update";
14
+ input: ActionInput;
15
+ } | {
16
+ op: "delete";
17
+ input: ActionDeletion;
18
+ };
19
+ export declare const adding: (input: ActionInput) => GraphOp;
20
+ export declare const updating: (input: ActionInput) => GraphOp;
21
+ export declare const deleting: (input: ActionDeletion) => GraphOp;
22
+ export type ActionGraphNode = {
23
+ "@id": string;
24
+ "@type": string | readonly [string, ...string[]];
25
+ } & Record<string, unknown>;
26
+ export type ActionGraphInput = {
27
+ graph: {
28
+ "@graph": readonly ActionGraphNode[];
29
+ };
30
+ };
31
+ export type ExecuteActionGraphVariables = {
32
+ input: ActionGraphInput;
33
+ };
34
+ /** Manta resolves the `m:` prefix against the realm it runs as, so the key holds in every realm. */
35
+ export declare const actionShapeKey = "m:actionShape";
36
+ /** Manta takes at most this many entities in one plan. */
37
+ export declare const maxGraphNodes = 101;
38
+ /** `@id` and `@type` come from the op's subject and type, never from whatever its properties hold. */
39
+ export declare function graphNode(op: GraphOp): ActionGraphNode;
40
+ export declare const actionGraphInput: (nodes: readonly ActionGraphNode[]) => ActionGraphInput;
41
+ export type ActionOutcome = {
42
+ status: "done";
43
+ planGraphIri: string;
44
+ } | {
45
+ status: "pending";
46
+ planGraphIri: string;
47
+ workflowId?: string;
48
+ message: string;
49
+ } | {
50
+ status: "failed";
51
+ message: string;
52
+ subcode?: number;
53
+ };
54
+ export type PendingAction = Extract<ActionOutcome, {
55
+ status: "pending";
56
+ }>;
57
+ export type FollowPendingAction = (pending: PendingAction) => Promise<Exclude<ActionOutcome, PendingAction>>;
58
+ export declare const rejectedWithoutReason = "Manta rejected the action without saying why.";
59
+ export declare const unreachableMessage = "Manta could not be reached.";
60
+ export declare const nothingToSendMessage = "Nothing in this change is something Manta can send.";
61
+ export declare const skippedMessage = "Not sent, because a change it depends on was not made.";
62
+ export declare const twiceMessage = "Not sent, because this change touches the same entity twice in different ways.";
63
+ export declare const unconfirmedMessage = "Manta is still sending the change; the channel has not confirmed it yet.";
64
+ /** The message a channel's error carries for a person, out of the raw error Manta recorded. */
65
+ export declare function channelErrorMessage(raw: string): string;
66
+ export declare function channelErrorSubcode(raw: string): number | undefined;
67
+ export type GraphStart = {
68
+ status: "started";
69
+ planGraphIri: string;
70
+ workflowId?: string;
71
+ } | {
72
+ status: "refused";
73
+ message: string;
74
+ code?: GQLExecuteActionErrorCode | null;
75
+ } | {
76
+ status: "unknown";
77
+ message: string;
78
+ };
79
+ export declare function startActionGraph(graphql: ActionGraphql, nodes: readonly ActionGraphNode[], options?: {
80
+ signal?: AbortSignal;
81
+ }): Promise<GraphStart>;
82
+ export type AwaitRunArgs = {
83
+ planGraphIri: string;
84
+ workflowId?: string;
85
+ pollIntervalMs: number;
86
+ timeoutMs: number;
87
+ pendingMessage: string;
88
+ formatError?: (raw: string) => string;
89
+ signal?: AbortSignal;
90
+ };
91
+ /** Polls the plan's run until it completes or fails, or reports it pending once `timeoutMs` ends. */
92
+ export declare function awaitRun(graphql: ActionGraphql, args: AwaitRunArgs): Promise<ActionOutcome>;
93
+ export type EntityOutcome = {
94
+ used: string;
95
+ generated: {
96
+ iri: string;
97
+ types: string[];
98
+ }[];
99
+ errorMessage?: string;
100
+ skippedReason?: string;
101
+ startedAt?: string;
102
+ endedAt?: string;
103
+ };
104
+ export declare const PlanOutcomeSchema: {
105
+ readonly "@type": "prov:Activity";
106
+ readonly runPlan: {
107
+ readonly "@id": "m:runPlan";
108
+ readonly "@type": "ldkit:IRI";
109
+ };
110
+ readonly used: {
111
+ readonly "@id": "prov:used";
112
+ readonly "@type": "ldkit:IRI";
113
+ readonly "@optional": true;
114
+ readonly "@array": true;
115
+ };
116
+ readonly generated: {
117
+ readonly "@id": "prov:generated";
118
+ readonly "@optional": true;
119
+ readonly "@array": true;
120
+ readonly "@schema": {
121
+ readonly types: {
122
+ readonly "@id": "rdf:type";
123
+ readonly "@type": "ldkit:IRI";
124
+ readonly "@optional": true;
125
+ readonly "@array": true;
126
+ };
127
+ };
128
+ };
129
+ readonly errorMessage: {
130
+ readonly "@id": "m:errorMessage";
131
+ readonly "@optional": true;
132
+ };
133
+ readonly skippedReason: {
134
+ readonly "@id": "m:skippedReason";
135
+ readonly "@optional": true;
136
+ };
137
+ readonly startedAt: {
138
+ readonly "@optional": true;
139
+ readonly "@id": "prov:startedAtTime";
140
+ readonly "@type": "xsd:dateTime";
141
+ };
142
+ readonly endedAt: {
143
+ readonly "@id": "prov:endedAtTime";
144
+ readonly "@type": "xsd:dateTime";
145
+ readonly "@optional": true;
146
+ };
147
+ };
148
+ /** Every entity's own run inside the plan: the subject it used, what it created, or why it failed or was skipped. */
149
+ export declare function planOutcomes(planGraphIri: string, readOptions: Options): Promise<EntityOutcome[]>;
150
+ export type OpResult = {
151
+ status: "done";
152
+ planGraphIri: string;
153
+ created?: string;
154
+ } | {
155
+ status: "pending";
156
+ planGraphIri: string;
157
+ message: string;
158
+ } | {
159
+ status: "failed";
160
+ message: string;
161
+ subcode?: number;
162
+ skipped?: boolean;
163
+ };
164
+ /** `results` lines up with the ops sent; `outcome` is the whole change as one. */
165
+ export type GraphRun = {
166
+ outcome: ActionOutcome;
167
+ results: OpResult[];
168
+ };
169
+ export type GraphRunOptions = {
170
+ graphql: ActionGraphql;
171
+ readOptions: Options;
172
+ pollIntervalMs?: number;
173
+ timeoutMs?: number;
174
+ pendingMessage?: string;
175
+ formatError?: (raw: string) => string;
176
+ signal?: AbortSignal;
177
+ /** Takes over a run still going when `timeoutMs` ends. */
178
+ follow?: FollowPendingAction;
179
+ /** Reads a finished plan's per-entity outcomes; `planOutcomes` over `readOptions` unless given. */
180
+ readOutcomes?: (planGraphIri: string) => Promise<EntityOutcome[]>;
181
+ /** Hears why a finished plan's outcomes could not be read; its ops then stay pending. */
182
+ onError?: (cause: unknown) => void;
183
+ };
184
+ /** A node may point at one an earlier plan of the same change created; it goes out under the created IRI. */
185
+ export declare function withCreatedReferences(value: unknown, created: ReadonlyMap<string, string>): unknown;
186
+ /** Every IRI an op's node points at, its own subject included. */
187
+ export declare const mentions: (op: GraphOp) => string[];
188
+ /** An op's own outcome, and whether the plan's outcomes could be read at all. */
189
+ export type OutcomeRead = {
190
+ outcome: EntityOutcome | undefined;
191
+ known: boolean;
192
+ };
193
+ /** What one op did, read off its entity's own activity in the plan's run. */
194
+ export declare function opResult(op: GraphOp, planGraphIri: string, run: ActionOutcome, { outcome, known }: OutcomeRead, formatError?: (raw: string) => string): OpResult;
195
+ /** The whole change as one outcome: a failure first, then a run still going, else done. */
196
+ export declare function graphOutcome(results: readonly OpResult[]): ActionOutcome;
197
+ /**
198
+ * Sends `ops` as one plan, or as few as Manta's per-plan cap allows, and reads back what each did. Past the cap,
199
+ * an entity that points at one an earlier plan did not make is skipped, as Manta skips it inside one plan.
200
+ */
201
+ export declare function runActionGraph(ops: readonly GraphOp[], options: GraphRunOptions): Promise<GraphRun>;
202
+ /** What happened to the op on `subjectIri`, for a caller that keyed its ops by subject. */
203
+ export declare const resultFor: (ops: readonly GraphOp[], run: GraphRun, subjectIri: string) => OpResult | undefined;
204
+ //# sourceMappingURL=action-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-graph.d.ts","sourceRoot":"","sources":["../../src/shared/action-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,319 @@
1
+ import { ProvActivitySchema } from "@manta-eu/ldo/schemas/prov";
2
+ import { isPresent } from "@manta-eu/lib/present";
3
+ import { owlNothingIri } from "@manta-eu/rdf-lib/namespaces";
4
+ import { createLens } from "ldkit";
5
+ import { ldkit, rdf } from "ldkit/namespaces";
6
+ import { uniq } from "ramda";
7
+ import { ActionPlanRunHistoryDocument, ExecuteAgentActionGraphDocument, } from "../generated/graphql.js";
8
+ export const adding = (input) => ({ op: "add", input });
9
+ export const updating = (input) => ({ op: "update", input });
10
+ export const deleting = (input) => ({ op: "delete", input });
11
+ /** Manta resolves the `m:` prefix against the realm it runs as, so the key holds in every realm. */
12
+ export const actionShapeKey = "m:actionShape";
13
+ /** Manta takes at most this many entities in one plan. */
14
+ export const maxGraphNodes = 101;
15
+ const typesIn = (value) => Array.isArray(value)
16
+ ? value.filter((type) => typeof type === "string")
17
+ : typeof value === "string"
18
+ ? [value]
19
+ : [];
20
+ /** `@id` and `@type` come from the op's subject and type, never from whatever its properties hold. */
21
+ export function graphNode(op) {
22
+ const shape = { [actionShapeKey]: { "@id": op.input.actionShape } };
23
+ if (op.op === "delete")
24
+ return { "@id": op.input.subjectIri, "@type": owlNothingIri, ...shape };
25
+ const { "@id": _id, "@type": held, ...properties } = op.input.properties;
26
+ const [first = op.input.rdfType, ...rest] = uniq([op.input.rdfType, ...typesIn(held)]);
27
+ return { ...properties, "@id": op.input.subjectIri, "@type": [first, ...rest], ...shape };
28
+ }
29
+ export const actionGraphInput = (nodes) => ({
30
+ graph: { "@graph": nodes },
31
+ });
32
+ export const rejectedWithoutReason = "Manta rejected the action without saying why.";
33
+ export const unreachableMessage = "Manta could not be reached.";
34
+ export const nothingToSendMessage = "Nothing in this change is something Manta can send.";
35
+ export const skippedMessage = "Not sent, because a change it depends on was not made.";
36
+ export const twiceMessage = "Not sent, because this change touches the same entity twice in different ways.";
37
+ export const unconfirmedMessage = "Manta is still sending the change; the channel has not confirmed it yet.";
38
+ const quotedPattern = (key, flags) => new RegExp(`:${key} "((?:[^"\\\\]|\\\\.)*)"`, flags);
39
+ /** The message a channel's error carries for a person, out of the raw error Manta recorded. */
40
+ export function channelErrorMessage(raw) {
41
+ const topics = uniq([...raw.matchAll(quotedPattern("topic", "g"))].flatMap((match) => match[1] ?? []));
42
+ if (isPresent(topics))
43
+ return `Policy: ${topics.join(", ")}.`;
44
+ const quoted = raw.match(quotedPattern("error_user_msg"))?.[1] ?? raw.match(quotedPattern("message"))?.[1];
45
+ return quoted ? quoted.replace(/\\"/g, '"') : raw;
46
+ }
47
+ export function channelErrorSubcode(raw) {
48
+ const subcode = raw.match(/:error_subcode (\d+)/)?.[1];
49
+ return subcode === undefined ? undefined : Number(subcode);
50
+ }
51
+ const reasonOf = (cause) => (cause instanceof Error ? cause.message : unreachableMessage);
52
+ export async function startActionGraph(graphql, nodes, options = {}) {
53
+ try {
54
+ const variables = { input: actionGraphInput(nodes) };
55
+ const data = (await graphql(ExecuteAgentActionGraphDocument, variables, options));
56
+ const started = data?.executeActionGraph;
57
+ if (started === undefined)
58
+ return { status: "unknown", message: rejectedWithoutReason };
59
+ if (!started.success) {
60
+ return { status: "refused", message: started.error ?? rejectedWithoutReason, code: started.code };
61
+ }
62
+ if (!isPresent(started.namedGraphIri)) {
63
+ return { status: "unknown", message: started.error ?? rejectedWithoutReason };
64
+ }
65
+ return {
66
+ status: "started",
67
+ planGraphIri: started.namedGraphIri,
68
+ ...(isPresent(started.workflowId) && { workflowId: started.workflowId }),
69
+ };
70
+ }
71
+ catch (cause) {
72
+ return { status: "unknown", message: reasonOf(cause) };
73
+ }
74
+ }
75
+ async function latestRun(graphql, planGraphIri, signal) {
76
+ try {
77
+ const data = (await graphql(ActionPlanRunHistoryDocument, { planGraphIris: [planGraphIri], limit: 1 }, { signal }));
78
+ return data?.actionPlanRunHistory.runs[0];
79
+ }
80
+ catch {
81
+ return undefined;
82
+ }
83
+ }
84
+ function waitForPoll(intervalMs, signal) {
85
+ return new Promise((resolve) => {
86
+ if (signal.aborted)
87
+ return resolve();
88
+ const finish = () => {
89
+ clearTimeout(timer);
90
+ signal.removeEventListener("abort", finish);
91
+ resolve();
92
+ };
93
+ const timer = setTimeout(finish, intervalMs);
94
+ signal.addEventListener("abort", finish, { once: true });
95
+ });
96
+ }
97
+ /** Polls the plan's run until it completes or fails, or reports it pending once `timeoutMs` ends. */
98
+ export async function awaitRun(graphql, args) {
99
+ const { planGraphIri, workflowId, pollIntervalMs, timeoutMs, pendingMessage } = args;
100
+ const formatError = args.formatError ?? channelErrorMessage;
101
+ const deadline = Date.now() + timeoutMs;
102
+ const pending = {
103
+ status: "pending",
104
+ planGraphIri,
105
+ ...(isPresent(workflowId) && { workflowId }),
106
+ message: pendingMessage,
107
+ };
108
+ if (timeoutMs <= 0 || args.signal?.aborted)
109
+ return pending;
110
+ const observation = new AbortController();
111
+ const signal = args.signal ? AbortSignal.any([args.signal, observation.signal]) : observation.signal;
112
+ const timer = setTimeout(() => observation.abort(), timeoutMs);
113
+ try {
114
+ while (Date.now() < deadline && !signal.aborted) {
115
+ const run = await latestRun(graphql, planGraphIri, signal);
116
+ if (signal.aborted)
117
+ break;
118
+ if (run?.status === "COMPLETED")
119
+ return { status: "done", planGraphIri };
120
+ if (run?.status === "FAILED") {
121
+ const subcode = isPresent(run.errorMessage) ? channelErrorSubcode(run.errorMessage) : undefined;
122
+ return {
123
+ status: "failed",
124
+ message: isPresent(run.errorMessage) ? formatError(run.errorMessage) : rejectedWithoutReason,
125
+ ...(subcode !== undefined && { subcode }),
126
+ };
127
+ }
128
+ await waitForPoll(Math.min(pollIntervalMs, Math.max(0, deadline - Date.now())), signal);
129
+ }
130
+ }
131
+ finally {
132
+ clearTimeout(timer);
133
+ }
134
+ return pending;
135
+ }
136
+ export const PlanOutcomeSchema = {
137
+ "@type": ProvActivitySchema["@type"],
138
+ runPlan: { "@id": ProvActivitySchema.runPlan["@id"], "@type": ldkit.IRI },
139
+ used: { "@id": ProvActivitySchema.used["@id"], "@type": ldkit.IRI, "@optional": true, "@array": true },
140
+ generated: {
141
+ "@id": ProvActivitySchema.generated["@id"],
142
+ "@optional": true,
143
+ "@array": true,
144
+ "@schema": { types: { "@id": rdf.type, "@type": ldkit.IRI, "@optional": true, "@array": true } },
145
+ },
146
+ errorMessage: ProvActivitySchema.errorMessage,
147
+ skippedReason: ProvActivitySchema.skippedReason,
148
+ startedAt: { ...ProvActivitySchema.startedAtTime, "@optional": true },
149
+ endedAt: ProvActivitySchema.endedAtTime,
150
+ };
151
+ /** Every entity's own run inside the plan: the subject it used, what it created, or why it failed or was skipped. */
152
+ export async function planOutcomes(planGraphIri, readOptions) {
153
+ const runs = await createLens(PlanOutcomeSchema, readOptions).find({ where: { runPlan: planGraphIri } });
154
+ return runs.flatMap((run) => run.used.map((used) => ({
155
+ used,
156
+ generated: run.generated.map((created) => ({ iri: created.$id, types: created.types })),
157
+ ...(isPresent(run.errorMessage) && { errorMessage: run.errorMessage }),
158
+ ...(isPresent(run.skippedReason) && { skippedReason: run.skippedReason }),
159
+ ...(isPresent(run.startedAt) && { startedAt: run.startedAt.toISOString() }),
160
+ ...(isPresent(run.endedAt) && { endedAt: run.endedAt.toISOString() }),
161
+ })));
162
+ }
163
+ /** A node may point at one an earlier plan of the same change created; it goes out under the created IRI. */
164
+ export function withCreatedReferences(value, created) {
165
+ if (Array.isArray(value))
166
+ return value.map((each) => withCreatedReferences(each, created));
167
+ if (value === null || typeof value !== "object")
168
+ return value;
169
+ return Object.fromEntries(Object.entries(value).map(([key, held]) => [
170
+ key,
171
+ key === "@id" && typeof held === "string" ? (created.get(held) ?? held) : withCreatedReferences(held, created),
172
+ ]));
173
+ }
174
+ const idsIn = (value) => {
175
+ if (Array.isArray(value))
176
+ return value.flatMap(idsIn);
177
+ if (value === null || typeof value !== "object")
178
+ return [];
179
+ return Object.entries(value).flatMap(([key, held]) => key === "@id" && typeof held === "string" ? [held] : idsIn(held));
180
+ };
181
+ /** Every IRI an op's node points at, its own subject included. */
182
+ export const mentions = (op) => idsIn(graphNode(op));
183
+ const createdBy = (op, outcome) => (outcome.generated.find((made) => made.types.includes(op.input.rdfType)) ?? outcome.generated[0])?.iri;
184
+ /** What one op did, read off its entity's own activity in the plan's run. */
185
+ export function opResult(op, planGraphIri, run, { outcome, known }, formatError = channelErrorMessage) {
186
+ if (run.status === "pending")
187
+ return run;
188
+ if (isPresent(outcome?.errorMessage)) {
189
+ const subcode = channelErrorSubcode(outcome.errorMessage);
190
+ return { status: "failed", message: formatError(outcome.errorMessage), ...(subcode !== undefined && { subcode }) };
191
+ }
192
+ if (isPresent(outcome?.skippedReason))
193
+ return { status: "failed", message: skippedMessage, skipped: true };
194
+ if (run.status === "failed" && outcome === undefined)
195
+ return run;
196
+ if (!known)
197
+ return { status: "pending", planGraphIri, message: unconfirmedMessage };
198
+ if (op.op !== "add")
199
+ return { status: "done", planGraphIri };
200
+ if (outcome === undefined)
201
+ return { status: "pending", planGraphIri, message: unconfirmedMessage };
202
+ const created = createdBy(op, outcome);
203
+ return { status: "done", planGraphIri, ...(isPresent(created) && { created }) };
204
+ }
205
+ async function runChunk(ops, created, options) {
206
+ const { graphql, readOptions, signal, follow, formatError, onError } = options;
207
+ const { pollIntervalMs = 2000, timeoutMs = 120_000, pendingMessage = unconfirmedMessage } = options;
208
+ const { readOutcomes = (planGraphIri) => planOutcomes(planGraphIri, readOptions) } = options;
209
+ const nodes = ops.map((op) => withCreatedReferences(graphNode(op), created));
210
+ const start = await startActionGraph(graphql, nodes, { signal });
211
+ if (start.status !== "started")
212
+ return ops.map(() => ({ status: "failed", message: start.message }));
213
+ const waited = await awaitRun(graphql, { ...start, pollIntervalMs, timeoutMs, pendingMessage, formatError, signal });
214
+ const run = waited.status === "pending" && follow !== undefined ? await follow(waited) : waited;
215
+ if (run.status === "pending")
216
+ return ops.map(() => run);
217
+ const outcomes = await readOutcomes(start.planGraphIri).catch((cause) => {
218
+ onError?.(cause);
219
+ return undefined;
220
+ });
221
+ const known = isPresent(outcomes);
222
+ const byUsed = new Map((outcomes ?? []).map((outcome) => [outcome.used, outcome]));
223
+ return ops.map((op, index) => opResult(op, start.planGraphIri, run, { outcome: byUsed.get(nodes[index]?.["@id"] ?? ""), known }, formatError));
224
+ }
225
+ /** One unit per entity: several updates of it merge into one, later properties winning; any other repeat is refused. */
226
+ function unitsOf(ops) {
227
+ const bySubject = new Map();
228
+ ops.forEach((op, index) => bySubject.set(op.input.subjectIri, [...(bySubject.get(op.input.subjectIri) ?? []), index]));
229
+ const units = [];
230
+ const refused = [];
231
+ for (const indices of bySubject.values()) {
232
+ const same = indices.flatMap((index) => ops[index] ?? []);
233
+ const updates = same.flatMap((op) => (op.op === "update" ? [op] : []));
234
+ const [first] = same;
235
+ if (first !== undefined && same.length === 1)
236
+ units.push({ op: first, indices });
237
+ else if (first !== undefined && updates.length === same.length) {
238
+ const properties = Object.assign({}, ...updates.map((op) => op.input.properties));
239
+ units.push({ op: updating({ ...first.input, properties }), indices });
240
+ }
241
+ else
242
+ refused.push(...indices);
243
+ }
244
+ return { units, refused };
245
+ }
246
+ /** Each unit after the units it points at, otherwise in the given order, so a split never sends a dependent first. */
247
+ function dependenciesFirst(units) {
248
+ const subjects = new Set(units.map((unit) => unit.op.input.subjectIri));
249
+ const needs = new Map(units.map((unit) => [
250
+ unit,
251
+ mentions(unit.op).filter((iri) => iri !== unit.op.input.subjectIri && subjects.has(iri)),
252
+ ]));
253
+ const ordered = [];
254
+ const placed = new Set();
255
+ const remaining = [...units];
256
+ while (isPresent(remaining)) {
257
+ const ready = remaining.findIndex((unit) => (needs.get(unit) ?? []).every((iri) => placed.has(iri)));
258
+ const [next] = remaining.splice(Math.max(ready, 0), 1);
259
+ if (next === undefined)
260
+ break;
261
+ ordered.push(next);
262
+ placed.add(next.op.input.subjectIri);
263
+ }
264
+ return ordered;
265
+ }
266
+ /** The whole change as one outcome: a failure first, then a run still going, else done. */
267
+ export function graphOutcome(results) {
268
+ const failed = results.find((result) => result.status === "failed");
269
+ if (failed !== undefined)
270
+ return failed;
271
+ const pending = results.find((result) => result.status === "pending");
272
+ if (pending !== undefined)
273
+ return pending;
274
+ const done = [...results].reverse().find((result) => result.status === "done");
275
+ return done === undefined
276
+ ? { status: "failed", message: nothingToSendMessage }
277
+ : { status: "done", planGraphIri: done.planGraphIri };
278
+ }
279
+ /**
280
+ * Sends `ops` as one plan, or as few as Manta's per-plan cap allows, and reads back what each did. Past the cap,
281
+ * an entity that points at one an earlier plan did not make is skipped, as Manta skips it inside one plan.
282
+ */
283
+ export async function runActionGraph(ops, options) {
284
+ const results = ops.map(() => ({ status: "failed", message: twiceMessage }));
285
+ const { units, refused } = unitsOf(ops);
286
+ const created = new Map();
287
+ const missing = new Set(refused.flatMap((index) => ops[index]?.input.subjectIri ?? []));
288
+ const ordered = dependenciesFirst(units);
289
+ const settle = (unit, result) => {
290
+ unit.indices.forEach((index) => (results[index] = result));
291
+ const subject = unit.op.input.subjectIri;
292
+ if (result.status === "done" && isPresent(result.created))
293
+ created.set(subject, result.created);
294
+ if (unit.op.op === "add" && result.status !== "done")
295
+ missing.add(subject);
296
+ };
297
+ for (let at = 0; at < ordered.length; at += maxGraphNodes) {
298
+ const chunk = ordered.slice(at, at + maxGraphNodes);
299
+ // Dependencies come first, so one pass also blocks what points at an addition blocked just before it.
300
+ const blocked = [];
301
+ for (const unit of chunk) {
302
+ if (!mentions(unit.op).some((iri) => missing.has(iri)))
303
+ continue;
304
+ blocked.push(unit);
305
+ if (unit.op.op === "add")
306
+ missing.add(unit.op.input.subjectIri);
307
+ }
308
+ const sending = chunk.filter((unit) => !blocked.includes(unit));
309
+ const sent = isPresent(sending)
310
+ ? await runChunk(sending.map((unit) => unit.op), created, options).catch((cause) => sending.map(() => ({ status: "failed", message: reasonOf(cause) })))
311
+ : [];
312
+ blocked.forEach((unit) => settle(unit, { status: "failed", message: skippedMessage, skipped: true }));
313
+ sending.forEach((unit, index) => settle(unit, sent[index] ?? { status: "failed", message: nothingToSendMessage }));
314
+ }
315
+ return { outcome: graphOutcome(results), results };
316
+ }
317
+ /** What happened to the op on `subjectIri`, for a caller that keyed its ops by subject. */
318
+ export const resultFor = (ops, run, subjectIri) => run.results[ops.findIndex((op) => op.input.subjectIri === subjectIri)];
319
+ //# sourceMappingURL=action-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-graph.js","sourceRoot":"","sources":["../../src/shared/action-graph.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ActionGraphNode } from "./action-graph.js";
1
2
  export type EmailGraphql = (document: string, variables: Record<string, unknown>) => Promise<unknown>;
2
3
  export type RealmEmailTerms = {
3
4
  emailMessageShape: string;
@@ -18,4 +19,10 @@ export type EmailStart = {
18
19
  error: string;
19
20
  };
20
21
  export declare function startRenderedEmail(graphql: EmailGraphql, terms: RealmEmailTerms, email: RenderedEmail): Promise<EmailStart>;
22
+ export declare function renderedEmailNode(terms: RealmEmailTerms, email: RenderedEmail): ActionGraphNode;
23
+ /**
24
+ * Sends every email as one plan; each email's own outcome is the plan activity that used its `subjectIri`.
25
+ * A plan holds at most `maxGraphNodes` entities, so a caller with more emails splits them into batches.
26
+ */
27
+ export declare function startRenderedEmails(graphql: EmailGraphql, terms: RealmEmailTerms, emails: readonly RenderedEmail[]): Promise<EmailStart>;
21
28
  //# sourceMappingURL=email.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/shared/email.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtG,MAAM,MAAM,eAAe,GAAG;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAsBnF,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,UAAU,CAAC,CAcrB"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/shared/email.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsD,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE1G,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtG,MAAM,MAAM,eAAe,GAAG;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAsBnF,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,UAAU,CAAC,CAcrB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,GAAG,eAAe,CAE/F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,OAAO,CAAC,UAAU,CAAC,CAarB"}
@@ -3,6 +3,7 @@ import { NmoEmailSchema } from "@manta-eu/ldo/schemas/nmo";
3
3
  import { isPresent } from "@manta-eu/lib/present";
4
4
  import { ExecuteAgentActionAdditionDocument } from "../generated/graphql.js";
5
5
  import { entityActionInput } from "./action-document.js";
6
+ import { adding, graphNode, maxGraphNodes, startActionGraph } from "./action-graph.js";
6
7
  const renderedEmailSchema = (terms) => ({
7
8
  "@type": NmoEmailSchema["@type"],
8
9
  from: { "@id": NmoEmailSchema.messageFrom["@id"], "@schema": NcoEmailAddressSchema },
@@ -34,4 +35,22 @@ export async function startRenderedEmail(graphql, terms, email) {
34
35
  return { ok: false, error: cause instanceof Error ? cause.message : String(cause) };
35
36
  }
36
37
  }
38
+ export function renderedEmailNode(terms, email) {
39
+ return graphNode(adding(renderedEmailAddition(terms, email)));
40
+ }
41
+ /**
42
+ * Sends every email as one plan; each email's own outcome is the plan activity that used its `subjectIri`.
43
+ * A plan holds at most `maxGraphNodes` entities, so a caller with more emails splits them into batches.
44
+ */
45
+ export async function startRenderedEmails(graphql, terms, emails) {
46
+ if (emails.length > maxGraphNodes)
47
+ return {
48
+ ok: false,
49
+ error: `One plan sends at most ${maxGraphNodes} emails; split the ${emails.length} into batches.`,
50
+ };
51
+ const started = await startActionGraph(graphql, emails.map((email) => renderedEmailNode(terms, email)));
52
+ return started.status === "started"
53
+ ? { ok: true, plan: started.planGraphIri }
54
+ : { ok: false, error: started.message };
55
+ }
37
56
  //# sourceMappingURL=email.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/shared/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,kCAAkC,EAA8C,MAAM,sBAAsB,CAAC;AACtH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAgBtD,MAAM,mBAAmB,GAAG,CAAC,KAAsB,EAAE,EAAE,CACrD,CAAC;IACC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC;IAChC,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE;IACpF,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE;IAC9E,OAAO,EAAE,cAAc,CAAC,cAAc;IACtC,eAAe,EAAE,cAAc,CAAC,eAAe;IAC/C,YAAY,EAAE,EAAE,GAAG,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE;CAC5E,CAA2B,CAAC;AAE/B,MAAM,qBAAqB,GAAG,CAAC,KAAsB,EAAE,KAAoB,EAAE,EAAE,CAC7E,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,iBAAiB,EAAE;IACrE,GAAG,EAAE,KAAK,CAAC,UAAU;IACrB,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE;IAClC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,EAAE;IAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,eAAe,EAAE,WAAW;IAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;CACjC,CAAC,CAAC;AAEL,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAqB,EACrB,KAAsB,EACtB,KAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,kCAAkC,EAAE;YAC9D,KAAK,EAAE,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;SAC3C,CAAC,CAAsD,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,EAAE,qBAAqB,CAAC;QAE7C,IAAI,QAAQ,EAAE,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACpE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,gCAAgC,EAAE,CAAC;IACnF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/shared/email.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/shared/tools/metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGrC,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,YAAY,EAAE,YAwJH,CAAC;AAEzB,wBAAgB,eAAe,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAEhF;AAED,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,QAAQ,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvG,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAGzG;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAEtE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAU5E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAQjE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAIlF;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,QAAQ,EAA4C,CAAC"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/shared/tools/metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGrC,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,YAAY,EAAE,YAkKH,CAAC;AAEzB,wBAAgB,eAAe,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAEhF;AAED,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,QAAQ,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvG,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAGzG;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAEtE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAU5E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAQjE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAIlF;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,QAAQ,EAA4C,CAAC"}