@appport/sdk 1.0.2 → 1.1.1

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.
Files changed (90) hide show
  1. package/README.md +23 -1
  2. package/dist/external-compatibility.d.ts +142 -0
  3. package/dist/external-compatibility.d.ts.map +1 -0
  4. package/dist/external-compatibility.js +132 -0
  5. package/dist/external-compatibility.js.map +1 -0
  6. package/dist/index.d.ts +4 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +4 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/provider-lifecycle.d.ts +247 -0
  11. package/dist/provider-lifecycle.d.ts.map +1 -0
  12. package/dist/provider-lifecycle.js +314 -0
  13. package/dist/provider-lifecycle.js.map +1 -0
  14. package/dist/resolution-policy.d.ts +81 -0
  15. package/dist/resolution-policy.d.ts.map +1 -0
  16. package/dist/resolution-policy.js +131 -0
  17. package/dist/resolution-policy.js.map +1 -0
  18. package/package.json +1 -1
  19. package/vendor/@appport/core/dist/appboundry-capability-catalog.d.ts +930 -0
  20. package/vendor/@appport/core/dist/appboundry-capability-catalog.d.ts.map +1 -0
  21. package/vendor/@appport/core/dist/appboundry-capability-catalog.js +352 -0
  22. package/vendor/@appport/core/dist/appboundry-capability-catalog.js.map +1 -0
  23. package/vendor/@appport/core/dist/appboundry-composition.d.ts +93 -0
  24. package/vendor/@appport/core/dist/appboundry-composition.d.ts.map +1 -0
  25. package/vendor/@appport/core/dist/appboundry-composition.js +184 -0
  26. package/vendor/@appport/core/dist/appboundry-composition.js.map +1 -0
  27. package/vendor/@appport/core/dist/appboundry-discovery.d.ts +110 -0
  28. package/vendor/@appport/core/dist/appboundry-discovery.d.ts.map +1 -0
  29. package/vendor/@appport/core/dist/appboundry-discovery.js +141 -0
  30. package/vendor/@appport/core/dist/appboundry-discovery.js.map +1 -0
  31. package/vendor/@appport/core/dist/appboundry-entitlements.d.ts +128 -0
  32. package/vendor/@appport/core/dist/appboundry-entitlements.d.ts.map +1 -0
  33. package/vendor/@appport/core/dist/appboundry-entitlements.js +312 -0
  34. package/vendor/@appport/core/dist/appboundry-entitlements.js.map +1 -0
  35. package/vendor/@appport/core/dist/appboundry-execution.d.ts +72 -0
  36. package/vendor/@appport/core/dist/appboundry-execution.d.ts.map +1 -0
  37. package/vendor/@appport/core/dist/appboundry-execution.js +114 -0
  38. package/vendor/@appport/core/dist/appboundry-execution.js.map +1 -0
  39. package/vendor/@appport/core/dist/appboundry-materialization.d.ts +222 -0
  40. package/vendor/@appport/core/dist/appboundry-materialization.d.ts.map +1 -0
  41. package/vendor/@appport/core/dist/appboundry-materialization.js +474 -0
  42. package/vendor/@appport/core/dist/appboundry-materialization.js.map +1 -0
  43. package/vendor/@appport/core/dist/appboundry-resolution.d.ts +160 -0
  44. package/vendor/@appport/core/dist/appboundry-resolution.d.ts.map +1 -0
  45. package/vendor/@appport/core/dist/appboundry-resolution.js +218 -0
  46. package/vendor/@appport/core/dist/appboundry-resolution.js.map +1 -0
  47. package/vendor/@appport/core/dist/appboundry-surface.d.ts +96 -0
  48. package/vendor/@appport/core/dist/appboundry-surface.d.ts.map +1 -0
  49. package/vendor/@appport/core/dist/appboundry-surface.js +223 -0
  50. package/vendor/@appport/core/dist/appboundry-surface.js.map +1 -0
  51. package/vendor/@appport/core/dist/application.d.ts +3 -1
  52. package/vendor/@appport/core/dist/application.d.ts.map +1 -1
  53. package/vendor/@appport/core/dist/application.js +3 -0
  54. package/vendor/@appport/core/dist/application.js.map +1 -1
  55. package/vendor/@appport/core/dist/index.d.ts +8 -0
  56. package/vendor/@appport/core/dist/index.d.ts.map +1 -1
  57. package/vendor/@appport/core/dist/index.js +8 -0
  58. package/vendor/@appport/core/dist/index.js.map +1 -1
  59. package/vendor/@appport/core/dist/public.d.ts +1 -0
  60. package/vendor/@appport/core/dist/public.d.ts.map +1 -1
  61. package/vendor/@appport/core/dist/public.js +1 -0
  62. package/vendor/@appport/core/dist/public.js.map +1 -1
  63. package/vendor/@appport/core/dist/registry.d.ts +2 -1
  64. package/vendor/@appport/core/dist/registry.d.ts.map +1 -1
  65. package/vendor/@appport/core/dist/registry.js +1 -0
  66. package/vendor/@appport/core/dist/registry.js.map +1 -1
  67. package/vendor/@appport/mcp/README.md +29 -0
  68. package/vendor/@appport/mcp/dist/index.d.ts +58 -0
  69. package/vendor/@appport/mcp/dist/index.d.ts.map +1 -0
  70. package/vendor/@appport/mcp/dist/index.js +69 -0
  71. package/vendor/@appport/mcp/dist/index.js.map +1 -0
  72. package/vendor/@appport/mcp/package.json +29 -0
  73. package/vendor/@appport/protocol/dist/errors.d.ts +1 -1
  74. package/vendor/@appport/protocol/dist/errors.d.ts.map +1 -1
  75. package/vendor/@appport/protocol/dist/errors.js +1 -0
  76. package/vendor/@appport/protocol/dist/errors.js.map +1 -1
  77. package/vendor/@appport/protocol/dist/index.d.ts +1 -0
  78. package/vendor/@appport/protocol/dist/index.d.ts.map +1 -1
  79. package/vendor/@appport/protocol/dist/index.js +1 -0
  80. package/vendor/@appport/protocol/dist/index.js.map +1 -1
  81. package/vendor/@appport/protocol/dist/manifest.d.ts +3 -0
  82. package/vendor/@appport/protocol/dist/manifest.d.ts.map +1 -1
  83. package/vendor/@appport/protocol/dist/manifest.js.map +1 -1
  84. package/vendor/@appport/protocol/dist/materialization.d.ts +59 -0
  85. package/vendor/@appport/protocol/dist/materialization.d.ts.map +1 -0
  86. package/vendor/@appport/protocol/dist/materialization.js +2 -0
  87. package/vendor/@appport/protocol/dist/materialization.js.map +1 -0
  88. package/vendor/@appport/server/dist/http.d.ts.map +1 -1
  89. package/vendor/@appport/server/dist/http.js +1 -0
  90. package/vendor/@appport/server/dist/http.js.map +1 -1
@@ -0,0 +1,312 @@
1
+ /**
2
+ * AppBoundry capability relationship and entitlement filtering.
3
+ *
4
+ * This layer answers whether a discovered provider is an eligible candidate for
5
+ * the requesting consumer, subject, purpose, contract, and context. It does not
6
+ * replace authorization; it narrows discovery before the authorization boundary
7
+ * makes the final decision.
8
+ */
9
+ import { NO_ELIGIBLE_PROVIDER } from "./appboundry-discovery.js";
10
+ import { satisfiesVersionConstraint } from "./resolver.js";
11
+ export class AppBoundryEntitlementEvaluator {
12
+ evaluate(input) {
13
+ const { relationship, request, candidate } = input;
14
+ if (relationship.status !== "active")
15
+ return { eligible: false, relationship, reason: "relationship_inactive" };
16
+ if (!relationshipAllowsCapability(relationship, request.request.requirement, candidate)) {
17
+ return { eligible: false, relationship, reason: "capability_not_entitled" };
18
+ }
19
+ if (!relationshipAllowsSubject(relationship, request.context.subject.id, request.context.subject.scopes ?? [])) {
20
+ return { eligible: false, relationship, reason: "subject_not_entitled" };
21
+ }
22
+ const purpose = stringAttribute(request.context.attributes, "purpose");
23
+ if (relationship.purposes?.length && (!purpose || !relationship.purposes.includes(purpose))) {
24
+ return { eligible: false, relationship, reason: "purpose_not_entitled" };
25
+ }
26
+ if (!relationshipAllowsConstraints(relationship, request.context.attributes ?? {})) {
27
+ return { eligible: false, relationship, reason: "constraint_mismatch" };
28
+ }
29
+ if (relationship.contractFingerprint && relationship.contractFingerprint !== candidate.contractFingerprint) {
30
+ return { eligible: false, relationship, reason: "contract_mismatch" };
31
+ }
32
+ const now = input.now ?? new Date();
33
+ if (relationship.effective?.from && Date.parse(relationship.effective.from) > now.getTime()) {
34
+ return { eligible: false, relationship, reason: "not_yet_effective" };
35
+ }
36
+ if (relationship.effective?.until && Date.parse(relationship.effective.until) <= now.getTime()) {
37
+ return { eligible: false, relationship, reason: "expired" };
38
+ }
39
+ return { eligible: true, relationship, source: "relationship" };
40
+ }
41
+ }
42
+ export class AppBoundryOpenOfferEvaluator {
43
+ evaluate(input) {
44
+ const { offer, request, candidate } = input;
45
+ if (offer.status !== "active")
46
+ return { eligible: false, offer, reason: "offer_inactive" };
47
+ if (offer.availabilityModel !== "open" || offer.terms?.relationshipRequired) {
48
+ return { eligible: false, offer, reason: "offer_requires_relationship" };
49
+ }
50
+ if (!offerAllowsCapability(offer, request.request.requirement, candidate)) {
51
+ return { eligible: false, offer, reason: "capability_not_entitled" };
52
+ }
53
+ if (!offerAllowsSubject(offer, request.context.subject.id, request.context.subject.scopes ?? [])) {
54
+ return { eligible: false, offer, reason: "subject_not_entitled" };
55
+ }
56
+ const purpose = stringAttribute(request.context.attributes, "purpose");
57
+ if (offer.purposes?.length && (!purpose || !offer.purposes.includes(purpose))) {
58
+ return { eligible: false, offer, reason: "purpose_not_entitled" };
59
+ }
60
+ if (!offerAllowsConstraints(offer, request.context.attributes ?? {})) {
61
+ return { eligible: false, offer, reason: "constraint_mismatch" };
62
+ }
63
+ if (offer.contractFingerprint && offer.contractFingerprint !== candidate.contractFingerprint) {
64
+ return { eligible: false, offer, reason: "contract_mismatch" };
65
+ }
66
+ const environment = request.request.materialization?.requestedTarget ?? request.context.environment;
67
+ if (offer.supportedEnvironments?.length && (!environment || !offer.supportedEnvironments.includes(environment))) {
68
+ return { eligible: false, offer, reason: "environment_not_supported" };
69
+ }
70
+ const now = input.now ?? new Date();
71
+ if (offer.effective?.from && Date.parse(offer.effective.from) > now.getTime()) {
72
+ return { eligible: false, offer, reason: "not_yet_effective" };
73
+ }
74
+ if (offer.effective?.until && Date.parse(offer.effective.until) <= now.getTime()) {
75
+ return { eligible: false, offer, reason: "expired" };
76
+ }
77
+ return { eligible: true, offer, source: "open_offer" };
78
+ }
79
+ }
80
+ export class AppBoundryEntitledCapabilityDiscovery {
81
+ discovery;
82
+ relationships;
83
+ relationshipEvaluator;
84
+ offerStore;
85
+ offerEvaluator;
86
+ constructor(discovery, relationships, evaluatorOrOptions = new AppBoundryEntitlementEvaluator()) {
87
+ this.discovery = discovery;
88
+ this.relationships = relationships;
89
+ if (evaluatorOrOptions instanceof AppBoundryEntitlementEvaluator) {
90
+ this.relationshipEvaluator = evaluatorOrOptions;
91
+ this.offerEvaluator = new AppBoundryOpenOfferEvaluator();
92
+ return;
93
+ }
94
+ this.relationshipEvaluator = evaluatorOrOptions.relationshipEvaluator ?? new AppBoundryEntitlementEvaluator();
95
+ this.offerStore = evaluatorOrOptions.offerStore;
96
+ this.offerEvaluator = evaluatorOrOptions.offerEvaluator ?? new AppBoundryOpenOfferEvaluator();
97
+ }
98
+ async discover(input) {
99
+ const discovered = await this.discovery.discover(input);
100
+ if (discovered.kind !== "discovered")
101
+ return discovered;
102
+ const eligible = [];
103
+ const ineligibleProviders = [];
104
+ for (const candidate of discovered.candidates) {
105
+ const relationships = await this.relationships.listRelationships({
106
+ consumerApplicationId: input.request.applicationId,
107
+ providerApplicationId: candidate.providerId,
108
+ capability: input.request.requirement
109
+ });
110
+ const evaluations = relationships.map((relationship) => this.relationshipEvaluator.evaluate({ relationship, request: input, candidate }));
111
+ const allowed = evaluations.find((evaluation) => evaluation.eligible && evaluation.relationship);
112
+ if (allowed?.relationship) {
113
+ eligible.push(enrichCandidateWithRelationship(candidate, allowed.relationship, input));
114
+ continue;
115
+ }
116
+ const offers = await this.offerStore?.listOffers({
117
+ providerApplicationId: candidate.providerId,
118
+ capability: input.request.requirement
119
+ }) ?? [];
120
+ const offerEvaluations = offers.map((offer) => this.offerEvaluator.evaluate({ offer, request: input, candidate }));
121
+ const openOffer = offerEvaluations.find((evaluation) => evaluation.eligible && evaluation.offer);
122
+ if (openOffer?.offer) {
123
+ eligible.push(enrichCandidateWithOpenOffer(candidate, openOffer.offer, input));
124
+ continue;
125
+ }
126
+ ineligibleProviders.push(describeIneligibleProvider(candidate, evaluations, offerEvaluations));
127
+ }
128
+ if (eligible.length === 0) {
129
+ return {
130
+ kind: "none",
131
+ discoveryId: discovered.discoveryId,
132
+ requestId: discovered.requestId,
133
+ code: NO_ELIGIBLE_PROVIDER,
134
+ candidates: [],
135
+ providerIds: discovered.providerIds,
136
+ message: `No eligible provider relationship or open offer found for "${input.request.requirement.name}"`,
137
+ ineligibleProviders,
138
+ };
139
+ }
140
+ return {
141
+ ...discovered,
142
+ candidates: eligible,
143
+ providerIds: discovered.providerIds,
144
+ ...(ineligibleProviders.length ? { ineligibleProviders } : {})
145
+ };
146
+ }
147
+ }
148
+ function describeIneligibleProvider(candidate, relationshipEvaluations, offerEvaluations) {
149
+ const inactiveRelationship = relationshipEvaluations.find((evaluation) => evaluation.reason === "relationship_inactive" && evaluation.relationship);
150
+ if (inactiveRelationship?.relationship) {
151
+ return {
152
+ providerId: candidate.providerId,
153
+ capabilityName: candidate.capabilityName,
154
+ capabilityVersion: candidate.capabilityVersion,
155
+ reason: inactiveRelationship.reason ?? "relationship_inactive",
156
+ eligibilitySource: "relationship",
157
+ relationshipId: inactiveRelationship.relationship.relationshipId,
158
+ relationshipStatus: inactiveRelationship.relationship.status
159
+ };
160
+ }
161
+ const offer = offerEvaluations.find((evaluation) => evaluation.offer);
162
+ if (offer?.offer) {
163
+ return {
164
+ providerId: candidate.providerId,
165
+ capabilityName: candidate.capabilityName,
166
+ capabilityVersion: candidate.capabilityVersion,
167
+ reason: offer.reason ?? "offer_inactive",
168
+ eligibilitySource: "open_offer",
169
+ offerId: offer.offer.offerId,
170
+ offerStatus: offer.offer.status
171
+ };
172
+ }
173
+ const relationship = relationshipEvaluations.find((evaluation) => evaluation.relationship);
174
+ if (relationship?.relationship) {
175
+ return {
176
+ providerId: candidate.providerId,
177
+ capabilityName: candidate.capabilityName,
178
+ capabilityVersion: candidate.capabilityVersion,
179
+ reason: relationship.reason ?? "no_relationship",
180
+ eligibilitySource: "relationship",
181
+ relationshipId: relationship.relationship.relationshipId,
182
+ relationshipStatus: relationship.relationship.status
183
+ };
184
+ }
185
+ return {
186
+ providerId: candidate.providerId,
187
+ capabilityName: candidate.capabilityName,
188
+ capabilityVersion: candidate.capabilityVersion,
189
+ reason: "no_relationship"
190
+ };
191
+ }
192
+ function enrichCandidateWithRelationship(candidate, relationship, request) {
193
+ return {
194
+ ...candidate,
195
+ metadata: {
196
+ ...(candidate.metadata ?? {}),
197
+ eligibility: "ELIGIBLE",
198
+ eligibilitySource: "relationship",
199
+ relationshipId: relationship.relationshipId,
200
+ entitlementRevision: relationship.revision,
201
+ relationshipStatus: relationship.status,
202
+ ...(stringAttribute(request.context.attributes, "purpose")
203
+ ? { purpose: stringAttribute(request.context.attributes, "purpose") }
204
+ : {})
205
+ },
206
+ offer: {
207
+ ...candidate.offer,
208
+ metadata: {
209
+ ...(candidate.offer.metadata ?? {}),
210
+ eligibility: "ELIGIBLE",
211
+ eligibilitySource: "relationship",
212
+ relationshipId: relationship.relationshipId,
213
+ entitlementRevision: relationship.revision,
214
+ relationshipStatus: relationship.status,
215
+ ...(stringAttribute(request.context.attributes, "purpose")
216
+ ? { purpose: stringAttribute(request.context.attributes, "purpose") }
217
+ : {})
218
+ }
219
+ }
220
+ };
221
+ }
222
+ function enrichCandidateWithOpenOffer(candidate, offer, request) {
223
+ const offerMetadata = {
224
+ eligibility: "ELIGIBLE",
225
+ eligibilitySource: "open_offer",
226
+ offerId: offer.offerId,
227
+ offerRevision: offer.revision,
228
+ offerStatus: offer.status,
229
+ availabilityModel: offer.availabilityModel,
230
+ ...(offer.terms?.pricing ? { pricing: offer.terms.pricing } : {}),
231
+ ...(offer.terms?.quota ? { quota: offer.terms.quota } : {}),
232
+ ...(offer.terms?.usageUnit ? { usageUnit: offer.terms.usageUnit } : {}),
233
+ ...(stringAttribute(request.context.attributes, "purpose")
234
+ ? { purpose: stringAttribute(request.context.attributes, "purpose") }
235
+ : {})
236
+ };
237
+ return {
238
+ ...candidate,
239
+ metadata: {
240
+ ...(candidate.metadata ?? {}),
241
+ ...offerMetadata
242
+ },
243
+ offer: {
244
+ ...candidate.offer,
245
+ metadata: {
246
+ ...(candidate.offer.metadata ?? {}),
247
+ ...offerMetadata
248
+ }
249
+ }
250
+ };
251
+ }
252
+ function relationshipAllowsCapability(relationship, requirement, candidate) {
253
+ return relationship.capabilities.some((capability) => {
254
+ if (capability.name !== requirement.name)
255
+ return false;
256
+ if (capability.version !== undefined && capability.version !== candidate.capabilityVersion)
257
+ return false;
258
+ const constraint = capability.versionConstraint ?? requirement.versionConstraint ?? String(requirement.version);
259
+ return satisfiesVersionConstraint(candidate.capabilityVersion, constraint);
260
+ });
261
+ }
262
+ function offerAllowsCapability(offer, requirement, candidate) {
263
+ if (offer.providerApplicationId !== candidate.providerId)
264
+ return false;
265
+ const capability = offer.capability;
266
+ if (capability.name !== requirement.name)
267
+ return false;
268
+ if (capability.version !== undefined && capability.version !== candidate.capabilityVersion)
269
+ return false;
270
+ const constraint = capability.versionConstraint ?? requirement.versionConstraint ?? String(requirement.version);
271
+ return satisfiesVersionConstraint(candidate.capabilityVersion, constraint);
272
+ }
273
+ function relationshipAllowsSubject(relationship, subjectId, scopes) {
274
+ const allowedSubjects = relationship.subjects?.ids;
275
+ if (allowedSubjects?.length && !allowedSubjects.includes(subjectId))
276
+ return false;
277
+ const allowedScopes = relationship.subjects?.scopes;
278
+ if (allowedScopes?.length && !allowedScopes.some((scope) => scopes.includes(scope)))
279
+ return false;
280
+ return true;
281
+ }
282
+ function offerAllowsSubject(offer, subjectId, scopes) {
283
+ const allowedSubjects = offer.subjects?.ids;
284
+ if (allowedSubjects?.length && !allowedSubjects.includes(subjectId))
285
+ return false;
286
+ const allowedScopes = offer.subjects?.scopes;
287
+ if (allowedScopes?.length && !allowedScopes.some((scope) => scopes.includes(scope)))
288
+ return false;
289
+ return true;
290
+ }
291
+ function relationshipAllowsConstraints(relationship, attributes) {
292
+ for (const [key, expected] of Object.entries(relationship.constraints ?? {})) {
293
+ if (attributes[key] !== expected)
294
+ return false;
295
+ }
296
+ return true;
297
+ }
298
+ function offerAllowsConstraints(offer, attributes) {
299
+ for (const [key, expected] of Object.entries(offer.constraints ?? {})) {
300
+ if (attributes[key] !== expected)
301
+ return false;
302
+ }
303
+ return true;
304
+ }
305
+ function stringAttribute(attributes, key) {
306
+ const value = attributes?.[key];
307
+ return typeof value === "string" ? value : undefined;
308
+ }
309
+ export function appBoundryRelationshipCapability(capability) {
310
+ return { name: capability.name, version: capability.version };
311
+ }
312
+ //# sourceMappingURL=appboundry-entitlements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appboundry-entitlements.js","sourceRoot":"","sources":["../src/appboundry-entitlements.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * AppBoundry ephemeral capability execution boundary.
3
+ *
4
+ * This layer invokes an already materialized capability and records the
5
+ * terminal lifecycle state for that one request. It does not discover,
6
+ * authorize, resolve, materialize, schedule, host, retry, persist, or supervise
7
+ * applications.
8
+ */
9
+ import { type AppErrorObject, type CapabilityRef } from "../../protocol/dist/index.d.ts";
10
+ import type { CapabilityContext } from "./context.js";
11
+ import type { AppBoundryExecutionResult as MaterializedExecutionResult, AppBoundryMaterializationAmbiguous, AppBoundryMaterializationBlocked, AppBoundryMaterializationSuccess, AppBoundryMaterializationUnsupported } from "./appboundry-materialization.js";
12
+ export type AppBoundryExecutionLifecycleState = "CREATED" | "MATERIALIZED" | "RUNNING" | "COMPLETED" | "MATERIALIZATION_FAILED" | "EXECUTION_FAILED";
13
+ export type AppBoundryExecutableMaterialization = AppBoundryMaterializationSuccess | AppBoundryMaterializationUnsupported | AppBoundryMaterializationAmbiguous | AppBoundryMaterializationBlocked;
14
+ export interface AppBoundryCapabilityExecutionRequest<TInput = unknown> {
15
+ readonly requestId: string;
16
+ readonly executionId?: string;
17
+ readonly capability: CapabilityRef;
18
+ readonly materialization: AppBoundryExecutableMaterialization;
19
+ readonly context: CapabilityContext;
20
+ readonly input: TInput;
21
+ }
22
+ export type AppBoundryCapabilityExecutionResult<TOutput = unknown> = {
23
+ readonly kind: "success";
24
+ readonly state: "COMPLETED";
25
+ readonly requestId: string;
26
+ readonly executionId: string;
27
+ readonly capability: CapabilityRef;
28
+ readonly resolutionId: string;
29
+ readonly materializationId: string;
30
+ readonly materializerId: string;
31
+ readonly output: TOutput;
32
+ readonly evidence: AppBoundryCapabilityExecutionEvidence;
33
+ } | {
34
+ readonly kind: "failed";
35
+ readonly state: "MATERIALIZATION_FAILED" | "EXECUTION_FAILED";
36
+ readonly failure: "authorization" | "resolution" | "materialization" | "execution";
37
+ readonly requestId: string;
38
+ readonly executionId: string;
39
+ readonly capability: CapabilityRef;
40
+ readonly resolutionId?: string;
41
+ readonly materializationId?: string;
42
+ readonly materializerId?: string;
43
+ readonly error: AppErrorObject;
44
+ readonly evidence: AppBoundryCapabilityExecutionEvidence;
45
+ };
46
+ export interface AppBoundryCapabilityExecutionEvidence {
47
+ readonly requestId: string;
48
+ readonly executionId: string;
49
+ readonly capability: CapabilityRef;
50
+ readonly lifecycle: readonly AppBoundryExecutionLifecycleState[];
51
+ readonly resolutionId?: string;
52
+ readonly materializationId?: string;
53
+ readonly discoveryId?: string;
54
+ readonly authorizationId?: string;
55
+ readonly materializationRequestId?: string;
56
+ readonly remoteHandoffId?: string;
57
+ readonly providerApplicationId?: string;
58
+ readonly consumerApplicationId?: string;
59
+ readonly requestedTarget?: string;
60
+ readonly resolvedTarget?: string;
61
+ readonly resolvedEnvironment?: string;
62
+ readonly materializerId?: string;
63
+ readonly artifactHash?: string;
64
+ readonly contractFingerprint?: string;
65
+ }
66
+ export declare class AppBoundryCapabilityExecutor {
67
+ execute<TOutput = unknown, TInput = unknown>(request: AppBoundryCapabilityExecutionRequest<TInput>): Promise<AppBoundryCapabilityExecutionResult<TOutput>>;
68
+ }
69
+ export declare function isTerminalAppBoundryExecutionState(state: AppBoundryExecutionLifecycleState): boolean;
70
+ export declare function assertAppBoundryExecutionTerminal(result: AppBoundryCapabilityExecutionResult): void;
71
+ export type { MaterializedExecutionResult };
72
+ //# sourceMappingURL=appboundry-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appboundry-execution.d.ts","sourceRoot":"","sources":["../src/appboundry-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * AppBoundry ephemeral capability execution boundary.
3
+ *
4
+ * This layer invokes an already materialized capability and records the
5
+ * terminal lifecycle state for that one request. It does not discover,
6
+ * authorize, resolve, materialize, schedule, host, retry, persist, or supervise
7
+ * applications.
8
+ */
9
+ import { randomUUID } from "node:crypto";
10
+ import { NO_COMPATIBLE_MATERIALIZATION } from "../../protocol/dist/index.js";
11
+ export class AppBoundryCapabilityExecutor {
12
+ async execute(request) {
13
+ const executionId = request.executionId ?? `exec_${randomUUID()}`;
14
+ const baseLifecycle = ["CREATED"];
15
+ if (request.materialization.kind !== "materialized") {
16
+ const failure = materializationFailure(request.materialization);
17
+ return {
18
+ kind: "failed",
19
+ state: "MATERIALIZATION_FAILED",
20
+ failure: failure.stage,
21
+ requestId: request.requestId,
22
+ executionId,
23
+ capability: request.capability,
24
+ ...(failure.resolutionId ? { resolutionId: failure.resolutionId } : {}),
25
+ error: failure.error,
26
+ evidence: {
27
+ requestId: request.requestId,
28
+ executionId,
29
+ capability: request.capability,
30
+ lifecycle: [...baseLifecycle, "MATERIALIZATION_FAILED"],
31
+ ...(failure.resolutionId ? { resolutionId: failure.resolutionId } : {})
32
+ }
33
+ };
34
+ }
35
+ const materialized = request.materialization.materialized;
36
+ const lifecycle = [...baseLifecycle, "MATERIALIZED", "RUNNING"];
37
+ const result = await materialized.execute({
38
+ input: request.input,
39
+ context: request.context,
40
+ executionId
41
+ });
42
+ if (result.kind === "success") {
43
+ return {
44
+ kind: "success",
45
+ state: "COMPLETED",
46
+ requestId: request.requestId,
47
+ executionId: result.executionId,
48
+ capability: request.capability,
49
+ resolutionId: result.resolutionId,
50
+ materializationId: result.materializationId,
51
+ materializerId: result.materializerId,
52
+ output: result.output,
53
+ evidence: {
54
+ ...result.evidence,
55
+ requestId: request.requestId,
56
+ lifecycle: [...lifecycle, "COMPLETED"]
57
+ }
58
+ };
59
+ }
60
+ return {
61
+ kind: "failed",
62
+ state: "EXECUTION_FAILED",
63
+ failure: "execution",
64
+ requestId: request.requestId,
65
+ executionId: result.executionId,
66
+ capability: request.capability,
67
+ resolutionId: result.resolutionId,
68
+ materializationId: result.materializationId,
69
+ materializerId: result.materializerId,
70
+ error: result.error,
71
+ evidence: {
72
+ ...result.evidence,
73
+ requestId: request.requestId,
74
+ lifecycle: [...lifecycle, "EXECUTION_FAILED"]
75
+ }
76
+ };
77
+ }
78
+ }
79
+ function materializationFailure(materialization) {
80
+ if (materialization.kind === "blocked") {
81
+ const stage = materialization.resolution.kind === "denied" ? "authorization" : "resolution";
82
+ return {
83
+ stage,
84
+ error: materialization.result.ok
85
+ ? { code: NO_COMPATIBLE_MATERIALIZATION, message: "Materialization was blocked" }
86
+ : materialization.result.error,
87
+ ...("resolutionId" in materialization.resolution ? { resolutionId: materialization.resolution.resolutionId } : {})
88
+ };
89
+ }
90
+ if (materialization.kind === "unsupported") {
91
+ return {
92
+ stage: "materialization",
93
+ error: materialization.result.error,
94
+ resolutionId: materialization.resolution.resolutionId
95
+ };
96
+ }
97
+ return {
98
+ stage: "materialization",
99
+ error: {
100
+ code: "appboundry.MATERIALIZATION_AMBIGUOUS",
101
+ message: materialization.reason
102
+ },
103
+ resolutionId: materialization.resolution.resolutionId
104
+ };
105
+ }
106
+ export function isTerminalAppBoundryExecutionState(state) {
107
+ return state === "COMPLETED" || state === "MATERIALIZATION_FAILED" || state === "EXECUTION_FAILED";
108
+ }
109
+ export function assertAppBoundryExecutionTerminal(result) {
110
+ if (!isTerminalAppBoundryExecutionState(result.state)) {
111
+ throw new Error(`AppBoundry execution did not reach a terminal state: ${result.state}`);
112
+ }
113
+ }
114
+ //# sourceMappingURL=appboundry-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appboundry-execution.js","sourceRoot":"","sources":["../src/appboundry-execution.ts"],"names":[],"mappings":"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"}