@uppercut-labs/agent-native 0.0.0-stage → 1.1.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/LICENSE +21 -0
- package/README.md +164 -2
- package/agent/agent-prompt-short.md +1 -0
- package/agent/agent-prompt.md +26 -0
- package/bin/agent-native-site.mjs +269 -0
- package/bin/discover-routes.mjs +162 -0
- package/bin/verify-publication.mjs +317 -0
- package/dist/adapters/zod.d.ts +4 -0
- package/dist/adapters/zod.d.ts.map +1 -0
- package/dist/adapters/zod.js +20 -0
- package/dist/adapters/zod.js.map +1 -0
- package/dist/astro.d.ts +13 -0
- package/dist/astro.d.ts.map +1 -0
- package/dist/astro.js +41 -0
- package/dist/astro.js.map +1 -0
- package/dist/auth.d.ts +52 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +128 -0
- package/dist/auth.js.map +1 -0
- package/dist/browser.d.ts +47 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +219 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +80 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +484 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/assert-never.d.ts +2 -0
- package/dist/core/assert-never.d.ts.map +1 -0
- package/dist/core/assert-never.js +5 -0
- package/dist/core/assert-never.js.map +1 -0
- package/dist/core/binding-internal.d.ts +10 -0
- package/dist/core/binding-internal.d.ts.map +1 -0
- package/dist/core/binding-internal.js +15 -0
- package/dist/core/binding-internal.js.map +1 -0
- package/dist/core/composition.d.ts +119 -0
- package/dist/core/composition.d.ts.map +1 -0
- package/dist/core/composition.js +545 -0
- package/dist/core/composition.js.map +1 -0
- package/dist/core/contracts.d.ts +55 -0
- package/dist/core/contracts.d.ts.map +1 -0
- package/dist/core/contracts.js +271 -0
- package/dist/core/contracts.js.map +1 -0
- package/dist/core/diagnostics.d.ts +14 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +29 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/executor.d.ts +52 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/core/executor.js +98 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/registry.d.ts +37 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +75 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/schema.d.ts +9 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +36 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/discovery.d.ts +16 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +23 -0
- package/dist/discovery.js.map +1 -0
- package/dist/doctor.d.ts +200 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +287 -0
- package/dist/doctor.js.map +1 -0
- package/dist/harness-codex.d.ts +17 -0
- package/dist/harness-codex.d.ts.map +1 -0
- package/dist/harness-codex.js +485 -0
- package/dist/harness-codex.js.map +1 -0
- package/dist/harness-mcp-bridge.d.ts +14 -0
- package/dist/harness-mcp-bridge.d.ts.map +1 -0
- package/dist/harness-mcp-bridge.js +159 -0
- package/dist/harness-mcp-bridge.js.map +1 -0
- package/dist/harness.d.ts +72 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +101 -0
- package/dist/harness.js.map +1 -0
- package/dist/http.d.ts +20 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +537 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +73 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +1039 -0
- package/dist/init.js.map +1 -0
- package/dist/mcp-apps.d.ts +9 -0
- package/dist/mcp-apps.d.ts.map +1 -0
- package/dist/mcp-apps.js +171 -0
- package/dist/mcp-apps.js.map +1 -0
- package/dist/mcp-core.d.ts +64 -0
- package/dist/mcp-core.d.ts.map +1 -0
- package/dist/mcp-core.js +358 -0
- package/dist/mcp-core.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +2 -0
- package/dist/mcp.js.map +1 -0
- package/dist/next-browser.d.ts +14 -0
- package/dist/next-browser.d.ts.map +1 -0
- package/dist/next-browser.js +14 -0
- package/dist/next-browser.js.map +1 -0
- package/dist/next.d.ts +24 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +28 -0
- package/dist/next.js.map +1 -0
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +3 -0
- package/dist/package-version.js.map +1 -0
- package/dist/publication.d.ts +115 -0
- package/dist/publication.d.ts.map +1 -0
- package/dist/publication.js +441 -0
- package/dist/publication.js.map +1 -0
- package/dist/registry.d.ts +3 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -0
- package/docs/adopt-existing-site.md +189 -0
- package/docs/browser.md +70 -0
- package/docs/capabilities-and-bindings.md +141 -0
- package/docs/cli.md +88 -0
- package/docs/compatibility.md +32 -0
- package/docs/composition-and-versioning.md +113 -0
- package/docs/doctor-and-troubleshooting.md +58 -0
- package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-03.md +17 -0
- package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-10.md +30 -0
- package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-12.md +10 -0
- package/docs/evidence/UAN-002-house-style-review.md +29 -0
- package/docs/evidence/UAN-007-astro.md +43 -0
- package/docs/evidence/UAN-008-worker-sidecar.md +56 -0
- package/docs/evidence/UAN-009-init.md +43 -0
- package/docs/evidence/UAN-010-auth.md +17 -0
- package/docs/evidence/UAN-011-discovery.md +18 -0
- package/docs/evidence/UAN-012-mcp-apps.md +14 -0
- package/docs/evidence/UAN-013-astro-on-demand.md +47 -0
- package/docs/evidence/UAN-014-next.md +57 -0
- package/docs/evidence/UAN-015-node-hono.md +69 -0
- package/docs/evidence/UAN-016-composition.md +52 -0
- package/docs/evidence/UAN-017-version-migrations.md +50 -0
- package/docs/evidence/UAN-018-surface-overrides.md +30 -0
- package/docs/evidence/UAN-019-doctor.md +19 -0
- package/docs/evidence/UAN-020-negative-security-fixtures.md +61 -0
- package/docs/evidence/UAN-020-operational-failure-safety.md +49 -0
- package/docs/evidence/UAN-021-docs-coverage.md +30 -0
- package/docs/evidence/UAN-022-cross-platform-license-notices.md +39 -0
- package/docs/evidence/UAN-022-overhead-license-audit.md +233 -0
- package/docs/evidence/UAN-022-package-portability.md +54 -0
- package/docs/evidence/UAN-023-commercial-agent-hosts.md +36 -0
- package/docs/evidence/UAN-023-inspector-host-probe.md +37 -0
- package/docs/evidence/UAN-023-inspector-web-and-astro-adoption.md +44 -0
- package/docs/evidence/UAN-023-native-webmcp-chrome.md +44 -0
- package/docs/evidence/UAN-024-release-readiness-2026-10-10.md +33 -0
- package/docs/evidence/UAN-024-release-readiness.md +41 -0
- package/docs/evidence/codex-harness.md +56 -0
- package/docs/evidence/gate-2-domain-expansion.md +35 -0
- package/docs/evidence/recovery-and-selection-recipes-2026-10-15.md +63 -0
- package/docs/for-agents.md +50 -0
- package/docs/frameworks.md +62 -0
- package/docs/getting-started.md +109 -0
- package/docs/harness-codex.md +117 -0
- package/docs/harness-mcp-bridge.md +30 -0
- package/docs/http.md +80 -0
- package/docs/installation.md +95 -0
- package/docs/mcp-apps.md +57 -0
- package/docs/mcp.md +178 -0
- package/docs/next.md +73 -0
- package/docs/permissions-and-discovery.md +58 -0
- package/docs/programmatic-harness.md +88 -0
- package/docs/readability-frameworks.md +18 -0
- package/docs/reference.md +161 -0
- package/docs/release-handoff.md +41 -0
- package/docs/site-publication.md +85 -0
- package/docs/stability.md +53 -0
- package/docs/static-sites.md +141 -0
- package/docs/support-and-limitations.md +20 -0
- package/docs/surfaces.md +27 -0
- package/docs/upgrading-to-1.0.md +26 -0
- package/package.json +188 -4
- package/skill/agent-native/SKILL.md +54 -0
- package/skill/agent-native/references/adapter-decision.md +19 -0
- package/skill/agent-native/references/verification.md +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/core/composition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type SchemaPort } from './schema.js';
|
|
2
|
+
import { type DiagnosticObservation } from './diagnostics.js';
|
|
3
|
+
export type CapabilityIdentity = {
|
|
4
|
+
readonly namespace: string;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly majorVersion: number;
|
|
7
|
+
};
|
|
8
|
+
export type CapabilityRisk = 'read' | 'write' | 'destructive';
|
|
9
|
+
export type CapabilityAccessRule = {
|
|
10
|
+
readonly kind: 'public';
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: 'protected';
|
|
13
|
+
readonly scopes: readonly string[];
|
|
14
|
+
};
|
|
15
|
+
export type CapabilityHttpSurface = {
|
|
16
|
+
readonly path: string;
|
|
17
|
+
readonly method: 'GET' | 'POST';
|
|
18
|
+
/** Maps input property names to HTTP query parameter names for GET routes. */
|
|
19
|
+
readonly query?: Readonly<Record<string, string>>;
|
|
20
|
+
};
|
|
21
|
+
export type CapabilityCliSurface = {
|
|
22
|
+
readonly command: string;
|
|
23
|
+
readonly aliases?: readonly string[];
|
|
24
|
+
};
|
|
25
|
+
export type CapabilitySurfaceOverrides = {
|
|
26
|
+
readonly http?: CapabilityHttpSurface;
|
|
27
|
+
readonly cli?: CapabilityCliSurface;
|
|
28
|
+
};
|
|
29
|
+
export type CapabilityDefinition<Input, Output> = {
|
|
30
|
+
readonly identity: CapabilityIdentity;
|
|
31
|
+
readonly description: string;
|
|
32
|
+
readonly input: SchemaPort<Input>;
|
|
33
|
+
readonly output: SchemaPort<Output>;
|
|
34
|
+
readonly risk: CapabilityRisk;
|
|
35
|
+
readonly access: CapabilityAccessRule;
|
|
36
|
+
readonly surfaces?: CapabilitySurfaceOverrides;
|
|
37
|
+
};
|
|
38
|
+
export type CapabilityDefinitionOptions<Input, Output> = {
|
|
39
|
+
readonly identity: CapabilityIdentity;
|
|
40
|
+
readonly description: string;
|
|
41
|
+
readonly input: SchemaPort<Input>;
|
|
42
|
+
readonly output: SchemaPort<Output>;
|
|
43
|
+
readonly risk: CapabilityRisk;
|
|
44
|
+
readonly access: CapabilityAccessRule;
|
|
45
|
+
readonly surfaces?: CapabilitySurfaceOverrides;
|
|
46
|
+
};
|
|
47
|
+
export declare class CapabilityDefinitionError extends TypeError {
|
|
48
|
+
readonly observation: DiagnosticObservation;
|
|
49
|
+
constructor(message: string);
|
|
50
|
+
}
|
|
51
|
+
export declare function isCapabilityDefinition(value: unknown): value is CapabilityDefinition<unknown, unknown>;
|
|
52
|
+
export declare function isValidCapabilityIdentity(identity: CapabilityIdentity): boolean;
|
|
53
|
+
export declare function canonicalCapabilityId(identity: CapabilityIdentity): string;
|
|
54
|
+
export declare function defineCapability<Input, Output>(options: CapabilityDefinitionOptions<Input, Output>): CapabilityDefinition<Input, Output>;
|
|
55
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/core/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { cloneJsonValue } from './schema.js';
|
|
2
|
+
import { createDiagnosticObservation } from './diagnostics.js';
|
|
3
|
+
export class CapabilityDefinitionError extends TypeError {
|
|
4
|
+
observation;
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'CapabilityDefinitionError';
|
|
8
|
+
this.observation = createDiagnosticObservation({
|
|
9
|
+
checkId: 'UAN-002.invalid-schema',
|
|
10
|
+
status: 'failed',
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const IDENTITY_SLUG_PATTERN = /^[a-z0-9]+(?:[.-][a-z0-9]+)*$/;
|
|
15
|
+
const CLI_COMMAND_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
16
|
+
const QUERY_PARAMETER_PATTERN = /^[A-Za-z0-9._~-]+$/;
|
|
17
|
+
function isRecord(value) {
|
|
18
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
19
|
+
}
|
|
20
|
+
function validateHttpPath(path) {
|
|
21
|
+
if (typeof path !== 'string' ||
|
|
22
|
+
!path.startsWith('/') ||
|
|
23
|
+
path === '/' ||
|
|
24
|
+
path.endsWith('/') ||
|
|
25
|
+
path.includes('?') ||
|
|
26
|
+
path.includes('#') ||
|
|
27
|
+
path.includes('\\') ||
|
|
28
|
+
path.includes('//') ||
|
|
29
|
+
path.split('/').some((part) => part === '.' || part === '..') ||
|
|
30
|
+
!path
|
|
31
|
+
.slice(1)
|
|
32
|
+
.split('/')
|
|
33
|
+
.every((segment) => Array.from(segment).every((character) => /[A-Za-z0-9._~-]/.test(character)))) {
|
|
34
|
+
throw new TypeError('surfaces.http.path must be an absolute URL path without a query, fragment, or traversal');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function validateSurfaces(surfaces, risk) {
|
|
38
|
+
if (surfaces === undefined)
|
|
39
|
+
return;
|
|
40
|
+
if (!isRecord(surfaces))
|
|
41
|
+
throw new TypeError('surfaces must be an object');
|
|
42
|
+
if (Object.keys(surfaces).some((key) => key !== 'http' && key !== 'cli')) {
|
|
43
|
+
throw new TypeError('surfaces contains an unsupported adapter override');
|
|
44
|
+
}
|
|
45
|
+
if (surfaces.http !== undefined) {
|
|
46
|
+
if (!isRecord(surfaces.http))
|
|
47
|
+
throw new TypeError('surfaces.http must be an object');
|
|
48
|
+
if (Object.keys(surfaces.http).some((key) => key !== 'path' && key !== 'method' && key !== 'query')) {
|
|
49
|
+
throw new TypeError('surfaces.http contains an unsupported option');
|
|
50
|
+
}
|
|
51
|
+
validateHttpPath(surfaces.http.path);
|
|
52
|
+
if (surfaces.http.method !== 'GET' && surfaces.http.method !== 'POST') {
|
|
53
|
+
throw new TypeError('surfaces.http.method must be GET or POST');
|
|
54
|
+
}
|
|
55
|
+
if (surfaces.http.method === 'GET' && risk !== 'read') {
|
|
56
|
+
throw new TypeError('GET HTTP surfaces are only valid for read capabilities');
|
|
57
|
+
}
|
|
58
|
+
if (surfaces.http.method === 'POST' && surfaces.http.query !== undefined) {
|
|
59
|
+
throw new TypeError('surfaces.http.query is only valid for GET surfaces');
|
|
60
|
+
}
|
|
61
|
+
if (surfaces.http.query !== undefined) {
|
|
62
|
+
if (!isRecord(surfaces.http.query)) {
|
|
63
|
+
throw new TypeError('surfaces.http.query must map input fields to query parameters');
|
|
64
|
+
}
|
|
65
|
+
let parameters = new Set();
|
|
66
|
+
for (const [field, parameter] of Object.entries(surfaces.http.query)) {
|
|
67
|
+
if (field.length === 0 ||
|
|
68
|
+
typeof parameter !== 'string' ||
|
|
69
|
+
!QUERY_PARAMETER_PATTERN.test(parameter)) {
|
|
70
|
+
throw new TypeError('surfaces.http.query must map fields to valid query parameter names');
|
|
71
|
+
}
|
|
72
|
+
if (parameters.has(parameter)) {
|
|
73
|
+
throw new TypeError(`surfaces.http.query contains duplicate parameter ${parameter}`);
|
|
74
|
+
}
|
|
75
|
+
parameters.add(parameter);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (surfaces.cli !== undefined) {
|
|
80
|
+
if (!isRecord(surfaces.cli))
|
|
81
|
+
throw new TypeError('surfaces.cli must be an object');
|
|
82
|
+
if (Object.keys(surfaces.cli).some((key) => key !== 'command' && key !== 'aliases')) {
|
|
83
|
+
throw new TypeError('surfaces.cli contains an unsupported option');
|
|
84
|
+
}
|
|
85
|
+
if (!CLI_COMMAND_PATTERN.test(surfaces.cli.command)) {
|
|
86
|
+
throw new TypeError('surfaces.cli.command must be a lowercase command slug');
|
|
87
|
+
}
|
|
88
|
+
if (surfaces.cli.aliases !== undefined &&
|
|
89
|
+
(!Array.isArray(surfaces.cli.aliases) ||
|
|
90
|
+
surfaces.cli.aliases.some((alias) => typeof alias !== 'string' || !CLI_COMMAND_PATTERN.test(alias)))) {
|
|
91
|
+
throw new TypeError('surfaces.cli.aliases must contain lowercase command slugs');
|
|
92
|
+
}
|
|
93
|
+
const names = [surfaces.cli.command, ...(surfaces.cli.aliases ?? [])];
|
|
94
|
+
if (new Set(names).size !== names.length) {
|
|
95
|
+
throw new TypeError('surfaces.cli command and aliases must be unique');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function freezeSurfaces(surfaces) {
|
|
100
|
+
if (surfaces === undefined)
|
|
101
|
+
return undefined;
|
|
102
|
+
const http = surfaces.http === undefined
|
|
103
|
+
? undefined
|
|
104
|
+
: Object.freeze({
|
|
105
|
+
path: surfaces.http.path,
|
|
106
|
+
method: surfaces.http.method,
|
|
107
|
+
...(surfaces.http.query === undefined
|
|
108
|
+
? {}
|
|
109
|
+
: { query: Object.freeze({ ...surfaces.http.query }) }),
|
|
110
|
+
});
|
|
111
|
+
const cli = surfaces.cli === undefined
|
|
112
|
+
? undefined
|
|
113
|
+
: Object.freeze({
|
|
114
|
+
command: surfaces.cli.command,
|
|
115
|
+
...(surfaces.cli.aliases === undefined
|
|
116
|
+
? {}
|
|
117
|
+
: { aliases: Object.freeze([...surfaces.cli.aliases]) }),
|
|
118
|
+
});
|
|
119
|
+
return Object.freeze({
|
|
120
|
+
...(http === undefined ? {} : { http }),
|
|
121
|
+
...(cli === undefined ? {} : { cli }),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
export function isCapabilityDefinition(value) {
|
|
125
|
+
if (!isRecord(value) || !isRecord(value['identity']) || !isRecord(value['access'])) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
const identity = value['identity'];
|
|
129
|
+
if (typeof identity['namespace'] !== 'string' ||
|
|
130
|
+
typeof identity['name'] !== 'string' ||
|
|
131
|
+
typeof identity['majorVersion'] !== 'number' ||
|
|
132
|
+
!isValidCapabilityIdentity({
|
|
133
|
+
namespace: identity['namespace'],
|
|
134
|
+
name: identity['name'],
|
|
135
|
+
majorVersion: identity['majorVersion'],
|
|
136
|
+
}) ||
|
|
137
|
+
typeof value['description'] !== 'string' ||
|
|
138
|
+
value['description'].trim().length === 0 ||
|
|
139
|
+
(value['risk'] !== 'read' && value['risk'] !== 'write' && value['risk'] !== 'destructive')) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
validateSurfaces(value['surfaces'], value['risk']);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
const access = value['access'];
|
|
149
|
+
if (access['kind'] === 'public') {
|
|
150
|
+
if (value['risk'] !== 'read' || Object.keys(access).length !== 1) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else if (access['kind'] !== 'protected' ||
|
|
155
|
+
!Array.isArray(access['scopes']) ||
|
|
156
|
+
access['scopes'].length === 0 ||
|
|
157
|
+
access['scopes'].some((scope) => typeof scope !== 'string' || !/^[a-z][a-z0-9:._-]{0,63}$/.test(scope))) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
if (!isRecord(value['input']) ||
|
|
161
|
+
typeof value['input']['parse'] !== 'function' ||
|
|
162
|
+
typeof value['input']['toJSONSchema'] !== 'function' ||
|
|
163
|
+
!isRecord(value['output']) ||
|
|
164
|
+
typeof value['output']['parse'] !== 'function' ||
|
|
165
|
+
typeof value['output']['toJSONSchema'] !== 'function') {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
const inputSchema = value['input']['toJSONSchema']();
|
|
170
|
+
const outputSchema = value['output']['toJSONSchema']();
|
|
171
|
+
return (isRecord(inputSchema) &&
|
|
172
|
+
isRecord(outputSchema) &&
|
|
173
|
+
isRecord(cloneJsonValue(inputSchema, 'input schema')) &&
|
|
174
|
+
isRecord(cloneJsonValue(outputSchema, 'output schema')));
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
export function isValidCapabilityIdentity(identity) {
|
|
181
|
+
return (IDENTITY_SLUG_PATTERN.test(identity.namespace) &&
|
|
182
|
+
IDENTITY_SLUG_PATTERN.test(identity.name) &&
|
|
183
|
+
identity.namespace.length <= 64 &&
|
|
184
|
+
identity.name.length <= 64 &&
|
|
185
|
+
Number.isSafeInteger(identity.majorVersion) &&
|
|
186
|
+
identity.majorVersion >= 1);
|
|
187
|
+
}
|
|
188
|
+
export function canonicalCapabilityId(identity) {
|
|
189
|
+
if (!isValidCapabilityIdentity(identity)) {
|
|
190
|
+
throw new TypeError('identity must use lowercase capability slugs and a positive major version');
|
|
191
|
+
}
|
|
192
|
+
return `${identity.namespace}:${identity.name}@${identity.majorVersion}`;
|
|
193
|
+
}
|
|
194
|
+
function assertNonEmpty(value, field) {
|
|
195
|
+
if (value.trim().length === 0) {
|
|
196
|
+
throw new TypeError(`${field} must be a non-empty string`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
export function defineCapability(options) {
|
|
200
|
+
if (!IDENTITY_SLUG_PATTERN.test(options.identity.namespace) ||
|
|
201
|
+
!IDENTITY_SLUG_PATTERN.test(options.identity.name) ||
|
|
202
|
+
options.identity.namespace.length > 64 ||
|
|
203
|
+
options.identity.name.length > 64) {
|
|
204
|
+
throw new TypeError('identity must use lowercase capability slugs and a positive major version');
|
|
205
|
+
}
|
|
206
|
+
if (!Number.isSafeInteger(options.identity.majorVersion) || options.identity.majorVersion < 1) {
|
|
207
|
+
throw new RangeError('identity.majorVersion must be a positive safe integer');
|
|
208
|
+
}
|
|
209
|
+
assertNonEmpty(options.description, 'description');
|
|
210
|
+
if (options.risk !== 'read' && options.risk !== 'write' && options.risk !== 'destructive') {
|
|
211
|
+
throw new TypeError('risk must be read, write, or destructive');
|
|
212
|
+
}
|
|
213
|
+
if (typeof options.access !== 'object' || options.access === null) {
|
|
214
|
+
throw new TypeError('access metadata must be explicit');
|
|
215
|
+
}
|
|
216
|
+
if (options.access.kind === 'public' && options.risk !== 'read') {
|
|
217
|
+
throw new TypeError('public access is only valid for read capabilities');
|
|
218
|
+
}
|
|
219
|
+
if (options.access.kind === 'protected') {
|
|
220
|
+
if (options.access.scopes.length === 0 ||
|
|
221
|
+
options.access.scopes.some((scope) => !/^[a-z][a-z0-9:._-]{0,63}$/.test(scope))) {
|
|
222
|
+
throw new TypeError('protected access requires one or more valid scopes');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else if (options.access.kind !== 'public') {
|
|
226
|
+
throw new TypeError('access.kind must be public or protected');
|
|
227
|
+
}
|
|
228
|
+
validateSurfaces(options.surfaces, options.risk);
|
|
229
|
+
if (typeof options.input?.parse !== 'function' ||
|
|
230
|
+
typeof options.input.toJSONSchema !== 'function' ||
|
|
231
|
+
typeof options.output?.parse !== 'function' ||
|
|
232
|
+
typeof options.output.toJSONSchema !== 'function') {
|
|
233
|
+
throw new CapabilityDefinitionError('input and output must be valid schema ports');
|
|
234
|
+
}
|
|
235
|
+
for (const [label, schema] of [
|
|
236
|
+
['input', options.input],
|
|
237
|
+
['output', options.output],
|
|
238
|
+
]) {
|
|
239
|
+
let jsonSchema;
|
|
240
|
+
try {
|
|
241
|
+
jsonSchema = schema.toJSONSchema();
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
throw new CapabilityDefinitionError(`${label} schema cannot be represented as JSON Schema`);
|
|
245
|
+
}
|
|
246
|
+
if (typeof jsonSchema !== 'object' || jsonSchema === null || Array.isArray(jsonSchema)) {
|
|
247
|
+
throw new CapabilityDefinitionError(`${label} schema must export a JSON Schema object`);
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
cloneJsonValue(jsonSchema, `${label} schema`);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
throw new CapabilityDefinitionError(`${label} schema must contain only JSON values`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
const identity = Object.freeze({ ...options.identity });
|
|
257
|
+
const access = options.access.kind === 'public'
|
|
258
|
+
? Object.freeze({ kind: 'public' })
|
|
259
|
+
: Object.freeze({ kind: 'protected', scopes: Object.freeze([...options.access.scopes]) });
|
|
260
|
+
const surfaces = freezeSurfaces(options.surfaces);
|
|
261
|
+
return Object.freeze({
|
|
262
|
+
identity,
|
|
263
|
+
description: options.description.trim(),
|
|
264
|
+
input: options.input,
|
|
265
|
+
output: options.output,
|
|
266
|
+
risk: options.risk,
|
|
267
|
+
access,
|
|
268
|
+
...(surfaces === undefined ? {} : { surfaces }),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/core/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type DiagnosticStatus = 'passed' | 'failed' | 'unknown';
|
|
2
|
+
export type DiagnosticObservation = {
|
|
3
|
+
readonly checkId: string;
|
|
4
|
+
readonly status: DiagnosticStatus;
|
|
5
|
+
readonly evidenceRefs: readonly string[];
|
|
6
|
+
};
|
|
7
|
+
export type DiagnosticObservationOptions = {
|
|
8
|
+
readonly checkId: string;
|
|
9
|
+
readonly status: DiagnosticStatus;
|
|
10
|
+
readonly evidenceRefs?: readonly string[];
|
|
11
|
+
};
|
|
12
|
+
export declare const DIAGNOSTIC_OBSERVATION_JSON_SCHEMA: Readonly<Record<string, unknown>>;
|
|
13
|
+
export declare function createDiagnosticObservation(options: DiagnosticObservationOptions): DiagnosticObservation;
|
|
14
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/core/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/D,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAa/E,CAAC;AAEH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CAevB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const DIAGNOSTIC_OBSERVATION_JSON_SCHEMA = Object.freeze({
|
|
2
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
3
|
+
type: 'object',
|
|
4
|
+
properties: {
|
|
5
|
+
checkId: { type: 'string', pattern: '^UAN-[0-9]{3}\\.[a-z0-9-]+$' },
|
|
6
|
+
status: { type: 'string', enum: ['passed', 'failed', 'unknown'] },
|
|
7
|
+
evidenceRefs: {
|
|
8
|
+
type: 'array',
|
|
9
|
+
items: { type: 'string', pattern: '^[A-Z][A-Z0-9._-]*$' },
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
required: ['checkId', 'status', 'evidenceRefs'],
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
});
|
|
15
|
+
export function createDiagnosticObservation(options) {
|
|
16
|
+
if (!/^UAN-[0-9]{3}\.[a-z0-9-]+$/.test(options.checkId)) {
|
|
17
|
+
throw new TypeError('checkId must use the stable UAN-NNN.check-name format');
|
|
18
|
+
}
|
|
19
|
+
const evidenceRefs = Object.freeze([...(options.evidenceRefs ?? [])]);
|
|
20
|
+
if (evidenceRefs.some((reference) => !/^[A-Z][A-Z0-9._-]*$/.test(reference))) {
|
|
21
|
+
throw new TypeError('evidenceRefs must use stable opaque identifiers');
|
|
22
|
+
}
|
|
23
|
+
return Object.freeze({
|
|
24
|
+
checkId: options.checkId,
|
|
25
|
+
status: options.status,
|
|
26
|
+
evidenceRefs,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/core/diagnostics.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,kCAAkC,GAAsC,MAAM,CAAC,MAAM,CAAC;IACjG,OAAO,EAAE,8CAA8C;IACvD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,EAAE;QACnE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE;QACjE,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;SAC1D;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC;IAC/C,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAC;AAEH,MAAM,UAAU,2BAA2B,CACzC,OAAqC;IAErC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,YAAY,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,SAAiB,EAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY;KACb,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { CapabilityAccessRule, CapabilityIdentity, CapabilityRisk } from './contracts.js';
|
|
2
|
+
import type { CapabilityRegistry, ExecutionSignal, RuntimeTarget } from './registry.js';
|
|
3
|
+
import { type DiagnosticObservation } from './diagnostics.js';
|
|
4
|
+
/** Verified identity fields an adapter attaches to an authenticated caller, for bindings that scope data. */
|
|
5
|
+
export type ExecutionCallerIdentity = {
|
|
6
|
+
readonly issuer: string;
|
|
7
|
+
readonly subject: string;
|
|
8
|
+
readonly tenantId: string;
|
|
9
|
+
readonly clientId: string;
|
|
10
|
+
};
|
|
11
|
+
export type ExecutionCaller = {
|
|
12
|
+
readonly kind: 'anonymous';
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: 'authenticated';
|
|
15
|
+
readonly subject: string;
|
|
16
|
+
readonly scopes: readonly string[];
|
|
17
|
+
readonly identity?: ExecutionCallerIdentity;
|
|
18
|
+
};
|
|
19
|
+
export type AuthorizationRequest = {
|
|
20
|
+
readonly identity: CapabilityIdentity;
|
|
21
|
+
readonly risk: CapabilityRisk;
|
|
22
|
+
readonly access: CapabilityAccessRule;
|
|
23
|
+
readonly caller: ExecutionCaller;
|
|
24
|
+
readonly input: unknown;
|
|
25
|
+
};
|
|
26
|
+
export interface AuthorizationPort {
|
|
27
|
+
authorize(request: AuthorizationRequest): boolean | Promise<boolean>;
|
|
28
|
+
}
|
|
29
|
+
export type ExecuteCapabilityRequest = {
|
|
30
|
+
readonly identity: CapabilityIdentity;
|
|
31
|
+
readonly runtime: RuntimeTarget;
|
|
32
|
+
readonly input: unknown;
|
|
33
|
+
readonly caller: ExecutionCaller;
|
|
34
|
+
readonly authorization: AuthorizationPort;
|
|
35
|
+
readonly bindingId?: string;
|
|
36
|
+
readonly signal?: ExecutionSignal;
|
|
37
|
+
};
|
|
38
|
+
export type ExecutionFailureKind = 'invalid-identity' | 'capability-missing' | 'binding-unavailable' | 'binding-ambiguous' | 'invalid-input' | 'unauthorized' | 'authorization-error' | 'invalid-output' | 'handler-failed' | 'deadline-exceeded';
|
|
39
|
+
export type ExecutionFailure = {
|
|
40
|
+
readonly kind: 'failure';
|
|
41
|
+
readonly reason: ExecutionFailureKind;
|
|
42
|
+
readonly observation: DiagnosticObservation;
|
|
43
|
+
};
|
|
44
|
+
export type ExecutionSuccess = {
|
|
45
|
+
readonly kind: 'success';
|
|
46
|
+
readonly capabilityId: string;
|
|
47
|
+
readonly bindingId: string;
|
|
48
|
+
readonly value: unknown;
|
|
49
|
+
};
|
|
50
|
+
export type ExecutionResult = ExecutionSuccess | ExecutionFailure;
|
|
51
|
+
export declare function executeCapability(registry: CapabilityRegistry, request: ExecuteCapabilityRequest): Promise<ExecutionResult>;
|
|
52
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,kBAAkB,EAClB,cAAc,EACf,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAEV,kBAAkB,EAClB,eAAe,EACf,aAAa,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAA+B,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE3F,6GAA6G;AAC7G,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IACE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CAC7C,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,kBAAkB,GAClB,oBAAoB,GACpB,qBAAqB,GACrB,mBAAmB,GACnB,eAAe,GACf,cAAc,GACd,qBAAqB,GACrB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,CAAC;AAExB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AA2BlE,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,eAAe,CAAC,CAuF1B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { canonicalCapabilityId, isValidCapabilityIdentity } from './contracts.js';
|
|
2
|
+
import { invokeBindingHandler } from './binding-internal.js';
|
|
3
|
+
import { createDiagnosticObservation } from './diagnostics.js';
|
|
4
|
+
function failure(reason, suffix) {
|
|
5
|
+
return Object.freeze({
|
|
6
|
+
kind: 'failure',
|
|
7
|
+
reason,
|
|
8
|
+
observation: createDiagnosticObservation({
|
|
9
|
+
checkId: `UAN-002.${suffix}`,
|
|
10
|
+
status: 'failed',
|
|
11
|
+
}),
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function isAborted(signal) {
|
|
15
|
+
return signal?.aborted === true;
|
|
16
|
+
}
|
|
17
|
+
function findDefinition(registry, capabilityId) {
|
|
18
|
+
return registry.definitions.find((definition) => canonicalCapabilityId(definition.identity) === capabilityId);
|
|
19
|
+
}
|
|
20
|
+
export async function executeCapability(registry, request) {
|
|
21
|
+
if (!isValidCapabilityIdentity(request.identity)) {
|
|
22
|
+
return failure('invalid-identity', 'invalid-identity');
|
|
23
|
+
}
|
|
24
|
+
const capabilityId = canonicalCapabilityId(request.identity);
|
|
25
|
+
const definition = findDefinition(registry, capabilityId);
|
|
26
|
+
if (definition === undefined) {
|
|
27
|
+
return failure('capability-missing', 'capability-missing');
|
|
28
|
+
}
|
|
29
|
+
const availableBindings = registry.bindings.filter((binding) => binding.capabilityId === capabilityId && binding.targets.includes(request.runtime));
|
|
30
|
+
const selectedBindings = request.bindingId === undefined
|
|
31
|
+
? availableBindings
|
|
32
|
+
: availableBindings.filter((binding) => binding.id === request.bindingId);
|
|
33
|
+
if (selectedBindings.length === 0) {
|
|
34
|
+
return failure('binding-unavailable', 'binding-unavailable');
|
|
35
|
+
}
|
|
36
|
+
if (selectedBindings.length > 1) {
|
|
37
|
+
return failure('binding-ambiguous', 'binding-ambiguous');
|
|
38
|
+
}
|
|
39
|
+
const binding = selectedBindings[0];
|
|
40
|
+
if (binding === undefined) {
|
|
41
|
+
return failure('binding-unavailable', 'binding-unavailable');
|
|
42
|
+
}
|
|
43
|
+
let parsedInput;
|
|
44
|
+
try {
|
|
45
|
+
parsedInput = definition.input.parse(request.input);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return failure('invalid-input', 'invalid-input');
|
|
49
|
+
}
|
|
50
|
+
let authorized;
|
|
51
|
+
try {
|
|
52
|
+
authorized = await request.authorization.authorize({
|
|
53
|
+
identity: definition.identity,
|
|
54
|
+
risk: definition.risk,
|
|
55
|
+
access: definition.access,
|
|
56
|
+
caller: request.caller,
|
|
57
|
+
input: parsedInput,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return failure('authorization-error', 'authorization-error');
|
|
62
|
+
}
|
|
63
|
+
if (!authorized) {
|
|
64
|
+
return failure('unauthorized', 'unauthorized');
|
|
65
|
+
}
|
|
66
|
+
if (isAborted(request.signal)) {
|
|
67
|
+
return failure('deadline-exceeded', 'deadline-exceeded');
|
|
68
|
+
}
|
|
69
|
+
let rawOutput;
|
|
70
|
+
try {
|
|
71
|
+
rawOutput = await invokeBindingHandler(binding, parsedInput, {
|
|
72
|
+
capabilityId,
|
|
73
|
+
runtime: request.runtime,
|
|
74
|
+
caller: request.caller,
|
|
75
|
+
...(request.signal === undefined ? {} : { signal: request.signal }),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return failure('handler-failed', 'handler-failed');
|
|
80
|
+
}
|
|
81
|
+
if (isAborted(request.signal)) {
|
|
82
|
+
return failure('deadline-exceeded', 'deadline-exceeded');
|
|
83
|
+
}
|
|
84
|
+
let output;
|
|
85
|
+
try {
|
|
86
|
+
output = definition.output.parse(rawOutput);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return failure('invalid-output', 'invalid-output');
|
|
90
|
+
}
|
|
91
|
+
return Object.freeze({
|
|
92
|
+
kind: 'success',
|
|
93
|
+
capabilityId,
|
|
94
|
+
bindingId: binding.id,
|
|
95
|
+
value: output,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"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"}
|