@appport/sdk 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -3
- package/dist/application-onboarding.d.ts +52 -0
- package/dist/application-onboarding.d.ts.map +1 -0
- package/dist/application-onboarding.js +50 -0
- package/dist/application-onboarding.js.map +1 -0
- package/dist/execution-topology.d.ts +210 -0
- package/dist/execution-topology.d.ts.map +1 -0
- package/dist/execution-topology.js +558 -0
- package/dist/execution-topology.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/vendor/@appport/client/dist/host.d.ts +62 -0
- package/vendor/@appport/client/dist/host.d.ts.map +1 -0
- package/vendor/@appport/client/dist/host.js +139 -0
- package/vendor/@appport/client/dist/host.js.map +1 -0
- package/vendor/@appport/client/dist/index.d.ts +1 -0
- package/vendor/@appport/client/dist/index.d.ts.map +1 -1
- package/vendor/@appport/client/dist/index.js +1 -0
- package/vendor/@appport/client/dist/index.js.map +1 -1
- package/vendor/@appport/core/dist/appboundry-diagnostics.d.ts +107 -0
- package/vendor/@appport/core/dist/appboundry-diagnostics.d.ts.map +1 -0
- package/vendor/@appport/core/dist/appboundry-diagnostics.js +358 -0
- package/vendor/@appport/core/dist/appboundry-diagnostics.js.map +1 -0
- package/vendor/@appport/core/dist/appboundry-execution.d.ts +12 -0
- package/vendor/@appport/core/dist/appboundry-execution.d.ts.map +1 -1
- package/vendor/@appport/core/dist/appboundry-execution.js +46 -10
- package/vendor/@appport/core/dist/appboundry-execution.js.map +1 -1
- package/vendor/@appport/core/dist/appboundry-exercise.d.ts +152 -0
- package/vendor/@appport/core/dist/appboundry-exercise.d.ts.map +1 -0
- package/vendor/@appport/core/dist/appboundry-exercise.js +416 -0
- package/vendor/@appport/core/dist/appboundry-exercise.js.map +1 -0
- package/vendor/@appport/core/dist/appboundry-materialization.d.ts.map +1 -1
- package/vendor/@appport/core/dist/appboundry-materialization.js +20 -0
- package/vendor/@appport/core/dist/appboundry-materialization.js.map +1 -1
- package/vendor/@appport/core/dist/appboundry-migration.d.ts +195 -0
- package/vendor/@appport/core/dist/appboundry-migration.d.ts.map +1 -0
- package/vendor/@appport/core/dist/appboundry-migration.js +227 -0
- package/vendor/@appport/core/dist/appboundry-migration.js.map +1 -0
- package/vendor/@appport/core/dist/appboundry-onboarding.d.ts +70 -0
- package/vendor/@appport/core/dist/appboundry-onboarding.d.ts.map +1 -0
- package/vendor/@appport/core/dist/appboundry-onboarding.js +232 -0
- package/vendor/@appport/core/dist/appboundry-onboarding.js.map +1 -0
- package/vendor/@appport/core/dist/appboundry-operation-discovery.d.ts +93 -0
- package/vendor/@appport/core/dist/appboundry-operation-discovery.d.ts.map +1 -0
- package/vendor/@appport/core/dist/appboundry-operation-discovery.js +89 -0
- package/vendor/@appport/core/dist/appboundry-operation-discovery.js.map +1 -0
- package/vendor/@appport/core/dist/appboundry-usage.d.ts +94 -0
- package/vendor/@appport/core/dist/appboundry-usage.d.ts.map +1 -0
- package/vendor/@appport/core/dist/appboundry-usage.js +80 -0
- package/vendor/@appport/core/dist/appboundry-usage.js.map +1 -0
- package/vendor/@appport/core/dist/application-package.d.ts +105 -0
- package/vendor/@appport/core/dist/application-package.d.ts.map +1 -0
- package/vendor/@appport/core/dist/application-package.js +349 -0
- package/vendor/@appport/core/dist/application-package.js.map +1 -0
- package/vendor/@appport/core/dist/index.d.ts +7 -0
- package/vendor/@appport/core/dist/index.d.ts.map +1 -1
- package/vendor/@appport/core/dist/index.js +7 -0
- package/vendor/@appport/core/dist/index.js.map +1 -1
- package/vendor/@appport/core/dist/wasm-engine.d.ts +2 -0
- package/vendor/@appport/core/dist/wasm-engine.d.ts.map +1 -1
- package/vendor/@appport/core/dist/wasm-engine.js +10 -1
- package/vendor/@appport/core/dist/wasm-engine.js.map +1 -1
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AppBoundry diagnostics and guided resolution boundary.
|
|
3
|
+
*
|
|
4
|
+
* Diagnostics explain already-observed AppBoundry exercise state. They do not
|
|
5
|
+
* rediscover applications, execute providers, or infer application-specific
|
|
6
|
+
* behavior.
|
|
7
|
+
*/
|
|
8
|
+
import { randomUUID } from "node:crypto";
|
|
9
|
+
export class InMemoryAppBoundryDiagnosticStore {
|
|
10
|
+
#reports = [];
|
|
11
|
+
record(report) {
|
|
12
|
+
this.#reports.push(report);
|
|
13
|
+
}
|
|
14
|
+
list(input = {}) {
|
|
15
|
+
return this.#reports.filter((report) => {
|
|
16
|
+
if (input.applicationId && report.applicationId !== input.applicationId)
|
|
17
|
+
return false;
|
|
18
|
+
if (input.capability?.name && report.capability?.name !== input.capability.name)
|
|
19
|
+
return false;
|
|
20
|
+
if (input.capability?.version !== undefined && report.capability?.version !== input.capability.version)
|
|
21
|
+
return false;
|
|
22
|
+
return true;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class AppBoundryDiagnosticEngine {
|
|
27
|
+
#clock;
|
|
28
|
+
constructor(options = {}) {
|
|
29
|
+
this.#clock = options.clock ?? (() => new Date().toISOString());
|
|
30
|
+
}
|
|
31
|
+
diagnose(input) {
|
|
32
|
+
const timestamp = input.timestamp ?? input.exercise?.timestamp ?? this.#clock();
|
|
33
|
+
const applicationId = input.applicationId ?? input.exercise?.applicationId;
|
|
34
|
+
const capability = input.capability ?? input.exercise?.capability;
|
|
35
|
+
const evidence = diagnosticEvidence(input);
|
|
36
|
+
const diagnostics = informationalDiagnostics(input, timestamp);
|
|
37
|
+
const primary = primaryDiagnostic(input, evidence, timestamp);
|
|
38
|
+
if (primary)
|
|
39
|
+
diagnostics.unshift(primary);
|
|
40
|
+
const primaryDiagnosticId = primary?.id;
|
|
41
|
+
const resolvedExercise = input.exercise?.outcome === "VERIFIED" ? input.exercise.id : undefined;
|
|
42
|
+
return {
|
|
43
|
+
id: `diag_report_${randomUUID()}`,
|
|
44
|
+
...(applicationId ? { applicationId } : {}),
|
|
45
|
+
...(capability ? { capability } : {}),
|
|
46
|
+
...(primaryDiagnosticId ? { primaryDiagnosticId } : {}),
|
|
47
|
+
diagnostics,
|
|
48
|
+
resolution: {
|
|
49
|
+
status: primary ? (primary.blocking ? "ACTION_REQUIRED" : "INVESTIGATING") : resolvedExercise ? "RESOLVED" : "NOT_STARTED",
|
|
50
|
+
...(primaryDiagnosticId ? { diagnosticId: primaryDiagnosticId } : {}),
|
|
51
|
+
readyToRetry: false,
|
|
52
|
+
...(resolvedExercise ? { verifiedByExerciseId: resolvedExercise } : {})
|
|
53
|
+
},
|
|
54
|
+
timestamp
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function primaryDiagnostic(input, evidence, timestamp) {
|
|
59
|
+
const failure = input.exercise?.failure;
|
|
60
|
+
if (!failure)
|
|
61
|
+
return undefined;
|
|
62
|
+
const mapped = diagnosticForFailure(failure, evidence);
|
|
63
|
+
return {
|
|
64
|
+
id: `diag_${randomUUID()}`,
|
|
65
|
+
severity: "ERROR",
|
|
66
|
+
domain: mapped.domain,
|
|
67
|
+
code: mapped.code,
|
|
68
|
+
title: mapped.title,
|
|
69
|
+
summary: mapped.summary,
|
|
70
|
+
...(input.exercise?.applicationId ? { applicationId: input.exercise.applicationId } : input.applicationId ? { applicationId: input.applicationId } : {}),
|
|
71
|
+
...(input.exercise?.capability ?? input.capability ? { capability: input.exercise?.capability ?? input.capability } : {}),
|
|
72
|
+
cause: mapped.cause,
|
|
73
|
+
evidence,
|
|
74
|
+
recommendations: [recommendationFor(mapped.code)],
|
|
75
|
+
blocking: true,
|
|
76
|
+
timestamp
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function informationalDiagnostics(input, timestamp) {
|
|
80
|
+
return (input.facts ?? [])
|
|
81
|
+
.filter((fact) => isPositiveObservation(fact))
|
|
82
|
+
.map((fact) => {
|
|
83
|
+
const domain = domainForFact(fact.type);
|
|
84
|
+
return {
|
|
85
|
+
id: `diag_${randomUUID()}`,
|
|
86
|
+
severity: "INFO",
|
|
87
|
+
domain,
|
|
88
|
+
code: `${domain}_OBSERVED`,
|
|
89
|
+
title: positiveTitle(fact),
|
|
90
|
+
summary: "AppBoundry retained this fact as supporting diagnostic context.",
|
|
91
|
+
...(input.applicationId ?? input.exercise?.applicationId ? { applicationId: input.applicationId ?? input.exercise?.applicationId } : {}),
|
|
92
|
+
...(input.capability ?? input.exercise?.capability ? { capability: input.capability ?? input.exercise?.capability } : {}),
|
|
93
|
+
evidence: [{
|
|
94
|
+
type: fact.type,
|
|
95
|
+
...(fact.reference ? { reference: fact.reference } : {}),
|
|
96
|
+
value: fact.value,
|
|
97
|
+
source: fact.source
|
|
98
|
+
}],
|
|
99
|
+
recommendations: [{ id: "none", title: "No action required", description: "This observation is not blocking the exercise.", action: "NONE" }],
|
|
100
|
+
blocking: false,
|
|
101
|
+
timestamp
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function diagnosticEvidence(input) {
|
|
106
|
+
const evidence = [];
|
|
107
|
+
if (input.exercise) {
|
|
108
|
+
evidence.push({
|
|
109
|
+
type: "exercise",
|
|
110
|
+
reference: input.exercise.id,
|
|
111
|
+
value: {
|
|
112
|
+
outcome: input.exercise.outcome,
|
|
113
|
+
...(input.exercise.failure ? { failure: input.exercise.failure } : {}),
|
|
114
|
+
evidence: input.exercise.evidence
|
|
115
|
+
},
|
|
116
|
+
source: input.exercise.outcome === "VERIFIED" ? "VERIFIED" : "OBSERVED"
|
|
117
|
+
});
|
|
118
|
+
if (input.exercise.provider) {
|
|
119
|
+
evidence.push({
|
|
120
|
+
type: "provider",
|
|
121
|
+
reference: `provider:${input.exercise.provider.id}`,
|
|
122
|
+
value: input.exercise.provider,
|
|
123
|
+
source: "OBSERVED"
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (input.exercise.invocationSurface) {
|
|
127
|
+
evidence.push({
|
|
128
|
+
type: "surface",
|
|
129
|
+
value: input.exercise.invocationSurface,
|
|
130
|
+
source: "OBSERVED"
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
for (const fact of input.facts ?? []) {
|
|
135
|
+
evidence.push({
|
|
136
|
+
type: fact.type,
|
|
137
|
+
...(fact.reference ? { reference: fact.reference } : {}),
|
|
138
|
+
value: fact.value,
|
|
139
|
+
source: fact.source
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return evidence;
|
|
143
|
+
}
|
|
144
|
+
function diagnosticForFailure(failure, evidence) {
|
|
145
|
+
switch (failure) {
|
|
146
|
+
case "INVALID_INPUT":
|
|
147
|
+
return {
|
|
148
|
+
domain: "INVOCATION",
|
|
149
|
+
code: "INVALID_INPUT",
|
|
150
|
+
title: "Input does not satisfy the invocation schema",
|
|
151
|
+
summary: "The exercise stopped before invocation because the provided input did not match the available schema.",
|
|
152
|
+
cause: "The request payload failed deterministic input validation."
|
|
153
|
+
};
|
|
154
|
+
case "AUTHORIZATION_FAILED":
|
|
155
|
+
return {
|
|
156
|
+
domain: "AUTHORIZATION",
|
|
157
|
+
code: "AUTHORIZATION_FAILED",
|
|
158
|
+
title: "Invocation rejected at the authorization boundary",
|
|
159
|
+
summary: "The invocation surface was reachable far enough to evaluate authorization, but the request was rejected.",
|
|
160
|
+
cause: "The subject, scopes, policy, or provider authorization decision did not allow the invocation."
|
|
161
|
+
};
|
|
162
|
+
case "PROVIDER_NOT_ELIGIBLE":
|
|
163
|
+
return {
|
|
164
|
+
domain: "PROVIDER",
|
|
165
|
+
code: "PROVIDER_NOT_ELIGIBLE",
|
|
166
|
+
title: "No eligible provider satisfies the capability requirement",
|
|
167
|
+
summary: "AppBoundry could not resolve an eligible provider for the requested capability.",
|
|
168
|
+
cause: "Provider discovery, compatibility, or eligibility facts excluded all candidates."
|
|
169
|
+
};
|
|
170
|
+
case "PROVIDER_UNAVAILABLE":
|
|
171
|
+
return {
|
|
172
|
+
domain: "PROVIDER",
|
|
173
|
+
code: "PROVIDER_UNAVAILABLE",
|
|
174
|
+
title: "Provider cannot currently serve the request",
|
|
175
|
+
summary: "A provider was selected or expected, but current evidence shows it cannot serve this invocation.",
|
|
176
|
+
cause: "The selected provider is unavailable, missing an executable artifact, or unable to materialize."
|
|
177
|
+
};
|
|
178
|
+
case "SURFACE_NOT_REACHABLE":
|
|
179
|
+
return {
|
|
180
|
+
domain: "SURFACE",
|
|
181
|
+
code: "SURFACE_NOT_REACHABLE",
|
|
182
|
+
title: "Invocation surface is unreachable",
|
|
183
|
+
summary: "The capability cannot currently be exercised because the application boundary is not reachable.",
|
|
184
|
+
cause: surfaceCause(evidence)
|
|
185
|
+
};
|
|
186
|
+
case "TIMEOUT":
|
|
187
|
+
return {
|
|
188
|
+
domain: "INVOCATION",
|
|
189
|
+
code: "TIMEOUT",
|
|
190
|
+
title: "Invocation exceeded its execution deadline",
|
|
191
|
+
summary: "The invocation did not complete before the configured deadline.",
|
|
192
|
+
cause: "A process, dependency, provider, bridge, or application response exceeded the allowed duration."
|
|
193
|
+
};
|
|
194
|
+
case "APPLICATION_ERROR":
|
|
195
|
+
return {
|
|
196
|
+
domain: "APPLICATION",
|
|
197
|
+
code: "APPLICATION_ERROR",
|
|
198
|
+
title: "Application returned an execution error",
|
|
199
|
+
summary: "The invocation reached application code and the application returned or produced an error.",
|
|
200
|
+
cause: "Application response or execution evidence reported an application-level failure."
|
|
201
|
+
};
|
|
202
|
+
case "APPLICATION_NOT_RUNNING":
|
|
203
|
+
return {
|
|
204
|
+
domain: "PROCESS",
|
|
205
|
+
code: "PROCESS_FAILED",
|
|
206
|
+
title: "Application process is not running",
|
|
207
|
+
summary: "The process boundary is the first known broken boundary for this exercise.",
|
|
208
|
+
cause: "Observed process state indicates the application was stopped, failed to start, or exited."
|
|
209
|
+
};
|
|
210
|
+
case "INVOCATION_FAILED":
|
|
211
|
+
return {
|
|
212
|
+
domain: "INVOCATION",
|
|
213
|
+
code: invocationCode(evidence),
|
|
214
|
+
title: "Invocation failed",
|
|
215
|
+
summary: "The exercise reached the invocation boundary but did not produce a verified response.",
|
|
216
|
+
cause: "Available invocation evidence did not classify the failure more specifically."
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function recommendationFor(code) {
|
|
221
|
+
switch (code) {
|
|
222
|
+
case "INVALID_INPUT":
|
|
223
|
+
return {
|
|
224
|
+
id: "configure-input",
|
|
225
|
+
title: "Provide schema-compatible input",
|
|
226
|
+
description: "Inspect the available invocation schema and configure the request payload to satisfy it.",
|
|
227
|
+
action: "CONFIGURE"
|
|
228
|
+
};
|
|
229
|
+
case "AUTHORIZATION_FAILED":
|
|
230
|
+
return {
|
|
231
|
+
id: "review-authorization",
|
|
232
|
+
title: "Review authorization configuration",
|
|
233
|
+
description: "Inspect the subject, scopes, policies, and provider authorization decision for this capability.",
|
|
234
|
+
action: "AUTHORIZE"
|
|
235
|
+
};
|
|
236
|
+
case "PROVIDER_NOT_ELIGIBLE":
|
|
237
|
+
return {
|
|
238
|
+
id: "select-eligible-provider",
|
|
239
|
+
title: "Select or register an eligible provider",
|
|
240
|
+
description: "Inspect provider compatibility and eligibility facts, then select or register a provider that satisfies the requirement.",
|
|
241
|
+
action: "SELECT_PROVIDER"
|
|
242
|
+
};
|
|
243
|
+
case "PROVIDER_UNAVAILABLE":
|
|
244
|
+
return {
|
|
245
|
+
id: "retry-or-select-provider",
|
|
246
|
+
title: "Retry or select another provider",
|
|
247
|
+
description: "Inspect provider availability and materialization evidence, then retry or select a provider that can currently serve the request.",
|
|
248
|
+
action: "SELECT_PROVIDER"
|
|
249
|
+
};
|
|
250
|
+
case "SURFACE_NOT_REACHABLE":
|
|
251
|
+
return {
|
|
252
|
+
id: "inspect-surface",
|
|
253
|
+
title: "Inspect invocation surface",
|
|
254
|
+
description: "Inspect the process startup output and verify the application is listening on the discovered invocation surface.",
|
|
255
|
+
action: "INSPECT"
|
|
256
|
+
};
|
|
257
|
+
case "TIMEOUT":
|
|
258
|
+
return {
|
|
259
|
+
id: "inspect-timeout",
|
|
260
|
+
title: "Inspect dependency readiness and duration",
|
|
261
|
+
description: "Inspect dependency readiness, provider responsiveness, and execution duration before retrying.",
|
|
262
|
+
action: "INSPECT"
|
|
263
|
+
};
|
|
264
|
+
case "APPLICATION_ERROR":
|
|
265
|
+
return {
|
|
266
|
+
id: "inspect-application-error",
|
|
267
|
+
title: "Inspect application response and logs",
|
|
268
|
+
description: "Inspect the application response and runtime logs linked from the exercise evidence.",
|
|
269
|
+
action: "INSPECT"
|
|
270
|
+
};
|
|
271
|
+
case "PROCESS_FAILED":
|
|
272
|
+
return {
|
|
273
|
+
id: "inspect-process",
|
|
274
|
+
title: "Inspect startup output",
|
|
275
|
+
description: "Inspect the process startup output and restart the process only after the cause is understood.",
|
|
276
|
+
action: "INSPECT"
|
|
277
|
+
};
|
|
278
|
+
case "BRIDGE_FAILED":
|
|
279
|
+
return {
|
|
280
|
+
id: "inspect-bridge",
|
|
281
|
+
title: "Inspect invocation bridge",
|
|
282
|
+
description: "Inspect the bridge or adapter evidence before retrying the capability exercise.",
|
|
283
|
+
action: "INSPECT"
|
|
284
|
+
};
|
|
285
|
+
default:
|
|
286
|
+
return {
|
|
287
|
+
id: "inspect-invocation",
|
|
288
|
+
title: "Inspect invocation evidence",
|
|
289
|
+
description: "Inspect the linked exercise, execution, surface, provider, and response evidence before retrying.",
|
|
290
|
+
action: "INSPECT"
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
function surfaceCause(evidence) {
|
|
295
|
+
const hasRunningProcess = evidence.some((entry) => entry.type === "process" && String(entry.value?.state ?? "").toUpperCase() === "RUNNING");
|
|
296
|
+
if (hasRunningProcess) {
|
|
297
|
+
return "The process is observed as running, but the discovered invocation surface is not accepting requests.";
|
|
298
|
+
}
|
|
299
|
+
return "The discovered invocation surface could not be reached by the exercise.";
|
|
300
|
+
}
|
|
301
|
+
function invocationCode(evidence) {
|
|
302
|
+
return evidence.some((entry) => entry.type === "bridge") ? "BRIDGE_FAILED" : "INVOCATION_FAILED";
|
|
303
|
+
}
|
|
304
|
+
function isPositiveObservation(fact) {
|
|
305
|
+
if (!fact.value || typeof fact.value !== "object")
|
|
306
|
+
return false;
|
|
307
|
+
const value = fact.value;
|
|
308
|
+
if (fact.type === "process")
|
|
309
|
+
return String(value["state"]).toUpperCase() === "RUNNING";
|
|
310
|
+
if (fact.type === "provider")
|
|
311
|
+
return value["eligible"] === true || value["available"] === true || String(value["state"]).toUpperCase() === "AVAILABLE";
|
|
312
|
+
if (fact.type === "capability")
|
|
313
|
+
return value["promoted"] === true || String(value["state"]).toUpperCase() === "PROMOTED";
|
|
314
|
+
if (fact.type === "surface")
|
|
315
|
+
return value["reachable"] === true;
|
|
316
|
+
if (fact.type === "authorization")
|
|
317
|
+
return value["allowed"] === true;
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
function domainForFact(type) {
|
|
321
|
+
switch (type) {
|
|
322
|
+
case "application":
|
|
323
|
+
return "APPLICATION";
|
|
324
|
+
case "process":
|
|
325
|
+
return "PROCESS";
|
|
326
|
+
case "dependency":
|
|
327
|
+
return "PROCESS";
|
|
328
|
+
case "surface":
|
|
329
|
+
return "SURFACE";
|
|
330
|
+
case "bridge":
|
|
331
|
+
return "BRIDGE";
|
|
332
|
+
case "capability":
|
|
333
|
+
return "CAPABILITY";
|
|
334
|
+
case "authorization":
|
|
335
|
+
return "AUTHORIZATION";
|
|
336
|
+
case "provider":
|
|
337
|
+
return "PROVIDER";
|
|
338
|
+
case "invocation":
|
|
339
|
+
return "INVOCATION";
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
function positiveTitle(fact) {
|
|
343
|
+
switch (fact.type) {
|
|
344
|
+
case "process":
|
|
345
|
+
return "Process is running";
|
|
346
|
+
case "provider":
|
|
347
|
+
return "Provider remains eligible";
|
|
348
|
+
case "capability":
|
|
349
|
+
return "Capability is promoted";
|
|
350
|
+
case "surface":
|
|
351
|
+
return "Invocation surface is reachable";
|
|
352
|
+
case "authorization":
|
|
353
|
+
return "Authorization boundary allowed the request";
|
|
354
|
+
default:
|
|
355
|
+
return "Supporting observation retained";
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=appboundry-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appboundry-diagnostics.js","sourceRoot":"","sources":["../src/appboundry-diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { type AppErrorObject, type CapabilityRef } from "../../protocol/dist/index.d.ts";
|
|
10
10
|
import type { CapabilityContext } from "./context.js";
|
|
11
11
|
import type { AppBoundryExecutionResult as MaterializedExecutionResult, AppBoundryMaterializationAmbiguous, AppBoundryMaterializationBlocked, AppBoundryMaterializationSuccess, AppBoundryMaterializationUnsupported } from "./appboundry-materialization.js";
|
|
12
|
+
import { type UsageCaptureOverrides, type UsageEvent, type UsageEventSink, type UsageMeter } from "./appboundry-usage.js";
|
|
12
13
|
export type AppBoundryExecutionLifecycleState = "CREATED" | "MATERIALIZED" | "RUNNING" | "COMPLETED" | "MATERIALIZATION_FAILED" | "EXECUTION_FAILED";
|
|
13
14
|
export type AppBoundryExecutableMaterialization = AppBoundryMaterializationSuccess | AppBoundryMaterializationUnsupported | AppBoundryMaterializationAmbiguous | AppBoundryMaterializationBlocked;
|
|
14
15
|
export interface AppBoundryCapabilityExecutionRequest<TInput = unknown> {
|
|
@@ -18,6 +19,7 @@ export interface AppBoundryCapabilityExecutionRequest<TInput = unknown> {
|
|
|
18
19
|
readonly materialization: AppBoundryExecutableMaterialization;
|
|
19
20
|
readonly context: CapabilityContext;
|
|
20
21
|
readonly input: TInput;
|
|
22
|
+
readonly usage?: UsageCaptureOverrides;
|
|
21
23
|
}
|
|
22
24
|
export type AppBoundryCapabilityExecutionResult<TOutput = unknown> = {
|
|
23
25
|
readonly kind: "success";
|
|
@@ -30,6 +32,7 @@ export type AppBoundryCapabilityExecutionResult<TOutput = unknown> = {
|
|
|
30
32
|
readonly materializerId: string;
|
|
31
33
|
readonly output: TOutput;
|
|
32
34
|
readonly evidence: AppBoundryCapabilityExecutionEvidence;
|
|
35
|
+
readonly usage: UsageEvent;
|
|
33
36
|
} | {
|
|
34
37
|
readonly kind: "failed";
|
|
35
38
|
readonly state: "MATERIALIZATION_FAILED" | "EXECUTION_FAILED";
|
|
@@ -42,6 +45,7 @@ export type AppBoundryCapabilityExecutionResult<TOutput = unknown> = {
|
|
|
42
45
|
readonly materializerId?: string;
|
|
43
46
|
readonly error: AppErrorObject;
|
|
44
47
|
readonly evidence: AppBoundryCapabilityExecutionEvidence;
|
|
48
|
+
readonly usage?: UsageEvent;
|
|
45
49
|
};
|
|
46
50
|
export interface AppBoundryCapabilityExecutionEvidence {
|
|
47
51
|
readonly requestId: string;
|
|
@@ -62,8 +66,16 @@ export interface AppBoundryCapabilityExecutionEvidence {
|
|
|
62
66
|
readonly materializerId?: string;
|
|
63
67
|
readonly artifactHash?: string;
|
|
64
68
|
readonly contractFingerprint?: string;
|
|
69
|
+
readonly usageEventId?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface AppBoundryCapabilityExecutorOptions {
|
|
72
|
+
readonly usageSink?: UsageEventSink;
|
|
73
|
+
readonly usageMeter?: UsageMeter;
|
|
74
|
+
readonly clock?: () => string;
|
|
65
75
|
}
|
|
66
76
|
export declare class AppBoundryCapabilityExecutor {
|
|
77
|
+
#private;
|
|
78
|
+
constructor(options?: AppBoundryCapabilityExecutorOptions);
|
|
67
79
|
execute<TOutput = unknown, TInput = unknown>(request: AppBoundryCapabilityExecutionRequest<TInput>): Promise<AppBoundryCapabilityExecutionResult<TOutput>>;
|
|
68
80
|
}
|
|
69
81
|
export declare function isTerminalAppBoundryExecutionState(state: AppBoundryExecutionLifecycleState): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appboundry-execution.d.ts","sourceRoot":"","sources":["../src/appboundry-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAiC,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EACV,yBAAyB,IAAI,2BAA2B,EACxD,kCAAkC,EAClC,gCAAgC,EAChC,gCAAgC,EAChC,oCAAoC,EACrC,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"appboundry-execution.d.ts","sourceRoot":"","sources":["../src/appboundry-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,16 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { randomUUID } from "node:crypto";
|
|
10
10
|
import { NO_COMPATIBLE_MATERIALIZATION } from "../../protocol/dist/index.js";
|
|
11
|
+
import { createUsageEvent, defaultUsageMeter } from "./appboundry-usage.js";
|
|
11
12
|
export class AppBoundryCapabilityExecutor {
|
|
13
|
+
#usageSink;
|
|
14
|
+
#usageMeter;
|
|
15
|
+
#clock;
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.#usageSink = options.usageSink;
|
|
18
|
+
this.#usageMeter = options.usageMeter ?? defaultUsageMeter;
|
|
19
|
+
this.#clock = options.clock ?? (() => new Date().toISOString());
|
|
20
|
+
}
|
|
12
21
|
async execute(request) {
|
|
13
22
|
const executionId = request.executionId ?? `exec_${randomUUID()}`;
|
|
14
23
|
const baseLifecycle = ["CREATED"];
|
|
@@ -40,6 +49,12 @@ export class AppBoundryCapabilityExecutor {
|
|
|
40
49
|
executionId
|
|
41
50
|
});
|
|
42
51
|
if (result.kind === "success") {
|
|
52
|
+
const evidence = {
|
|
53
|
+
...result.evidence,
|
|
54
|
+
requestId: request.requestId,
|
|
55
|
+
lifecycle: [...lifecycle, "COMPLETED"]
|
|
56
|
+
};
|
|
57
|
+
const usage = await this.#captureUsage(request, result, "success");
|
|
43
58
|
return {
|
|
44
59
|
kind: "success",
|
|
45
60
|
state: "COMPLETED",
|
|
@@ -50,13 +65,16 @@ export class AppBoundryCapabilityExecutor {
|
|
|
50
65
|
materializationId: result.materializationId,
|
|
51
66
|
materializerId: result.materializerId,
|
|
52
67
|
output: result.output,
|
|
53
|
-
evidence: {
|
|
54
|
-
|
|
55
|
-
requestId: request.requestId,
|
|
56
|
-
lifecycle: [...lifecycle, "COMPLETED"]
|
|
57
|
-
}
|
|
68
|
+
evidence: { ...evidence, usageEventId: usage.id },
|
|
69
|
+
usage
|
|
58
70
|
};
|
|
59
71
|
}
|
|
72
|
+
const evidence = {
|
|
73
|
+
...result.evidence,
|
|
74
|
+
requestId: request.requestId,
|
|
75
|
+
lifecycle: [...lifecycle, "EXECUTION_FAILED"]
|
|
76
|
+
};
|
|
77
|
+
const usage = await this.#captureUsage(request, result, "failure");
|
|
60
78
|
return {
|
|
61
79
|
kind: "failed",
|
|
62
80
|
state: "EXECUTION_FAILED",
|
|
@@ -68,13 +86,31 @@ export class AppBoundryCapabilityExecutor {
|
|
|
68
86
|
materializationId: result.materializationId,
|
|
69
87
|
materializerId: result.materializerId,
|
|
70
88
|
error: result.error,
|
|
71
|
-
evidence: {
|
|
72
|
-
|
|
73
|
-
requestId: request.requestId,
|
|
74
|
-
lifecycle: [...lifecycle, "EXECUTION_FAILED"]
|
|
75
|
-
}
|
|
89
|
+
evidence: { ...evidence, usageEventId: usage.id },
|
|
90
|
+
usage
|
|
76
91
|
};
|
|
77
92
|
}
|
|
93
|
+
async #captureUsage(request, result, outcome) {
|
|
94
|
+
if (request.materialization.kind !== "materialized") {
|
|
95
|
+
throw new Error("usage can only be captured for materialized capability executions");
|
|
96
|
+
}
|
|
97
|
+
const meterInput = {
|
|
98
|
+
outcome,
|
|
99
|
+
requestId: request.requestId,
|
|
100
|
+
executionId: result.executionId,
|
|
101
|
+
context: request.context,
|
|
102
|
+
materializationRequest: request.materialization.materialized.request,
|
|
103
|
+
evidence: result.evidence
|
|
104
|
+
};
|
|
105
|
+
const usage = createUsageEvent({
|
|
106
|
+
...meterInput,
|
|
107
|
+
measurement: await this.#usageMeter(meterInput),
|
|
108
|
+
overrides: request.usage,
|
|
109
|
+
timestamp: this.#clock()
|
|
110
|
+
});
|
|
111
|
+
await this.#usageSink?.record(usage);
|
|
112
|
+
return usage;
|
|
113
|
+
}
|
|
78
114
|
}
|
|
79
115
|
function materializationFailure(materialization) {
|
|
80
116
|
if (materialization.kind === "blocked") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appboundry-execution.js","sourceRoot":"","sources":["../src/appboundry-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAA2C,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"appboundry-execution.js","sourceRoot":"","sources":["../src/appboundry-execution.ts"],"names":[],"mappings":"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"}
|