@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
package/dist/mcp-core.js
ADDED
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import { createMcpHandler as createOfficialMcpHandler, fromJsonSchema, McpServer, requireBearerAuth, } from '@modelcontextprotocol/server';
|
|
2
|
+
import { createGrantAuthorization, executionCallerForPrincipal, hasGrantForScopes, } from './auth.js';
|
|
3
|
+
import { assertNever } from './core/assert-never.js';
|
|
4
|
+
import { capabilitySurfaceNames, createCapabilitySurfaceMap } from './core/composition.js';
|
|
5
|
+
import { canonicalCapabilityId, } from './core/contracts.js';
|
|
6
|
+
import { executeCapability } from './core/executor.js';
|
|
7
|
+
import { evaluateCapabilityDiscovery, isDestructiveCapabilityExposed, } from './discovery.js';
|
|
8
|
+
import { PACKAGE_VERSION } from './package-version.js';
|
|
9
|
+
const DEFAULT_ENDPOINT = '/mcp';
|
|
10
|
+
const DEFAULT_MAX_REQUEST_BYTES = 32 * 1024;
|
|
11
|
+
const MAX_REQUEST_BYTES = 1024 * 1024;
|
|
12
|
+
const DEFAULT_DEADLINE_MS = 10_000;
|
|
13
|
+
const MAX_DEADLINE_MS = 300_000;
|
|
14
|
+
// MCP 2025-11-25 tool names: 1 to 128 characters of ASCII letters, digits, underscore, hyphen and dot.
|
|
15
|
+
const TOOL_NAME_PATTERN = /^[A-Za-z0-9_.-]{1,128}$/;
|
|
16
|
+
function validateEndpoint(value = DEFAULT_ENDPOINT) {
|
|
17
|
+
if (!value.startsWith('/') ||
|
|
18
|
+
value === '/' ||
|
|
19
|
+
value.includes('?') ||
|
|
20
|
+
value.includes('#') ||
|
|
21
|
+
value.includes('\\') ||
|
|
22
|
+
value.includes('//') ||
|
|
23
|
+
value.split('/').some((part) => part === '.' || part === '..') ||
|
|
24
|
+
!value
|
|
25
|
+
.slice(1)
|
|
26
|
+
.split('/')
|
|
27
|
+
.every((segment) => Array.from(segment).every((character) => /[A-Za-z0-9._~-]/.test(character)))) {
|
|
28
|
+
throw new TypeError('endpoint must be an absolute URL path without query or traversal segments');
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
function validateOptions(options) {
|
|
33
|
+
const endpoint = validateEndpoint(options.endpoint);
|
|
34
|
+
const maxRequestBytes = options.maxRequestBytes ?? DEFAULT_MAX_REQUEST_BYTES;
|
|
35
|
+
const deadlineMs = options.deadlineMs ?? DEFAULT_DEADLINE_MS;
|
|
36
|
+
if (!Number.isSafeInteger(maxRequestBytes) ||
|
|
37
|
+
maxRequestBytes < 1 ||
|
|
38
|
+
maxRequestBytes > MAX_REQUEST_BYTES) {
|
|
39
|
+
throw new RangeError('maxRequestBytes must be between 1 and 1048576');
|
|
40
|
+
}
|
|
41
|
+
if (!Number.isSafeInteger(deadlineMs) || deadlineMs < 1 || deadlineMs > MAX_DEADLINE_MS) {
|
|
42
|
+
throw new RangeError('deadlineMs must be between 1 and 300000');
|
|
43
|
+
}
|
|
44
|
+
if ((options.resolveTrustedPrincipal !== undefined || options.grantAuthorization !== undefined) &&
|
|
45
|
+
options.bearerAuth === undefined) {
|
|
46
|
+
throw new TypeError('trusted principal resolution requires the official bearer auth gate');
|
|
47
|
+
}
|
|
48
|
+
if ((options.resolveTrustedPrincipal === undefined) !==
|
|
49
|
+
(options.grantAuthorization === undefined)) {
|
|
50
|
+
throw new TypeError('trusted principal resolution and grant authorization must be configured together');
|
|
51
|
+
}
|
|
52
|
+
if (options.discoverProtected !== undefined &&
|
|
53
|
+
(options.bearerAuth === undefined ||
|
|
54
|
+
options.resolveTrustedPrincipal === undefined ||
|
|
55
|
+
options.grantAuthorization === undefined)) {
|
|
56
|
+
throw new TypeError('protected discovery requires verified principals and grant authorization');
|
|
57
|
+
}
|
|
58
|
+
if (options.resolveExecutionContext !== undefined &&
|
|
59
|
+
(options.resolveTrustedPrincipal !== undefined || options.grantAuthorization !== undefined)) {
|
|
60
|
+
throw new TypeError('custom execution context cannot be combined with grant authorization');
|
|
61
|
+
}
|
|
62
|
+
return { endpoint, maxRequestBytes, deadlineMs };
|
|
63
|
+
}
|
|
64
|
+
function isPublicRead(definition) {
|
|
65
|
+
return definition.risk === 'read' && definition.access.kind === 'public';
|
|
66
|
+
}
|
|
67
|
+
function serverBindingsFor(registry, definition) {
|
|
68
|
+
return registry.bindings.filter((binding) => binding.capabilityId === canonicalCapabilityId(definition.identity) &&
|
|
69
|
+
binding.targets.includes('server'));
|
|
70
|
+
}
|
|
71
|
+
function resolveToolNames(registry, options) {
|
|
72
|
+
const names = new Map();
|
|
73
|
+
const used = new Set();
|
|
74
|
+
for (const definition of registry.definitions) {
|
|
75
|
+
const name = options.toolName === undefined
|
|
76
|
+
? mcpToolName(definition.identity)
|
|
77
|
+
: options.toolName(definition);
|
|
78
|
+
if (typeof name !== 'string' || !TOOL_NAME_PATTERN.test(name)) {
|
|
79
|
+
throw new TypeError('toolName must return 1 to 128 characters of A-Z, a-z, 0-9, _, - or .');
|
|
80
|
+
}
|
|
81
|
+
if (used.has(name))
|
|
82
|
+
throw new TypeError('toolName must return a unique name per capability');
|
|
83
|
+
used.add(name);
|
|
84
|
+
names.set(canonicalCapabilityId(definition.identity), name);
|
|
85
|
+
}
|
|
86
|
+
return names;
|
|
87
|
+
}
|
|
88
|
+
function reportFailure(options, failure) {
|
|
89
|
+
if (options.onToolFailure === undefined)
|
|
90
|
+
return;
|
|
91
|
+
try {
|
|
92
|
+
const pending = options.onToolFailure(Object.freeze(failure));
|
|
93
|
+
if (pending instanceof Promise)
|
|
94
|
+
pending.catch(() => undefined);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// The hook is diagnostic only; it must not change the tool result.
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export function mcpToolName(identity) {
|
|
101
|
+
return capabilitySurfaceNames(identity).mcp;
|
|
102
|
+
}
|
|
103
|
+
function sdkSchema(schema) {
|
|
104
|
+
// The Workerd validator annotates nested schemas, so give the SDK its own mutable JSON copy.
|
|
105
|
+
return fromJsonSchema(JSON.parse(JSON.stringify(schema)));
|
|
106
|
+
}
|
|
107
|
+
function resultSchema(schema) {
|
|
108
|
+
return {
|
|
109
|
+
type: 'object',
|
|
110
|
+
properties: { result: schema },
|
|
111
|
+
required: ['result'],
|
|
112
|
+
additionalProperties: false,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function toolError(message) {
|
|
116
|
+
return {
|
|
117
|
+
content: [{ type: 'text', text: message }],
|
|
118
|
+
isError: true,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function deadlineToolError(risk) {
|
|
122
|
+
return toolError(risk === 'read'
|
|
123
|
+
? 'Capability execution exceeded its deadline.'
|
|
124
|
+
: 'Capability execution exceeded its deadline; the write may have completed. Do not retry without checking its state.');
|
|
125
|
+
}
|
|
126
|
+
function executorError(reason) {
|
|
127
|
+
switch (reason) {
|
|
128
|
+
case 'capability-missing':
|
|
129
|
+
case 'invalid-identity':
|
|
130
|
+
case 'unauthorized':
|
|
131
|
+
return 'Capability not found.';
|
|
132
|
+
case 'invalid-input':
|
|
133
|
+
return 'Capability input is invalid.';
|
|
134
|
+
case 'binding-unavailable':
|
|
135
|
+
case 'binding-ambiguous':
|
|
136
|
+
case 'authorization-error':
|
|
137
|
+
case 'invalid-output':
|
|
138
|
+
case 'handler-failed':
|
|
139
|
+
case 'deadline-exceeded':
|
|
140
|
+
return 'Capability execution is unavailable.';
|
|
141
|
+
default:
|
|
142
|
+
return assertNever(reason);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function defaultContext() {
|
|
146
|
+
return {
|
|
147
|
+
caller: { kind: 'anonymous' },
|
|
148
|
+
authorization: {
|
|
149
|
+
authorize: (request) => request.risk === 'read' && request.access.kind === 'public',
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async function defineServer(registry, requestInfo, authInfo, options, deadlineMs, toolNames, appRegistration) {
|
|
154
|
+
const server = new McpServer({
|
|
155
|
+
name: 'uppercut-agent-native',
|
|
156
|
+
version: PACKAGE_VERSION,
|
|
157
|
+
});
|
|
158
|
+
if (requestInfo === undefined)
|
|
159
|
+
return server;
|
|
160
|
+
let visibleAppResources = new Map();
|
|
161
|
+
for (const definition of registry.definitions) {
|
|
162
|
+
const serverBindings = serverBindingsFor(registry, definition);
|
|
163
|
+
if (serverBindings.length !== 1)
|
|
164
|
+
continue;
|
|
165
|
+
const publicRead = isPublicRead(definition);
|
|
166
|
+
const discovery = await evaluateCapabilityDiscovery(definition, 'mcp', options.surfaceExposure, publicRead
|
|
167
|
+
? async (candidate) => (await options.canDiscover?.(candidate, requestInfo)) ?? true
|
|
168
|
+
: async (candidate) => {
|
|
169
|
+
const auth = options.grantAuthorization;
|
|
170
|
+
const principal = authInfo === undefined || options.resolveTrustedPrincipal === undefined
|
|
171
|
+
? null
|
|
172
|
+
: await options.resolveTrustedPrincipal(authInfo);
|
|
173
|
+
if (principal === null ||
|
|
174
|
+
authInfo === undefined ||
|
|
175
|
+
auth === undefined ||
|
|
176
|
+
auth.store === undefined ||
|
|
177
|
+
candidate.access.kind !== 'protected')
|
|
178
|
+
return false;
|
|
179
|
+
const hasGrant = await hasGrantForScopes({
|
|
180
|
+
principal,
|
|
181
|
+
applicationId: auth.applicationId,
|
|
182
|
+
audience: auth.audience,
|
|
183
|
+
policyRevision: auth.policyRevision,
|
|
184
|
+
store: auth.store,
|
|
185
|
+
requiredScopes: candidate.access.scopes,
|
|
186
|
+
...(auth.now === undefined ? {} : { now: auth.now }),
|
|
187
|
+
});
|
|
188
|
+
if (!hasGrant || options.discoverProtected === undefined)
|
|
189
|
+
return false;
|
|
190
|
+
return await options.discoverProtected(candidate, requestInfo, authInfo);
|
|
191
|
+
});
|
|
192
|
+
if (!discovery.visible)
|
|
193
|
+
continue;
|
|
194
|
+
const capabilityId = canonicalCapabilityId(definition.identity);
|
|
195
|
+
const name = toolNames.get(capabilityId) ?? mcpToolName(definition.identity);
|
|
196
|
+
const fail = (reason, result, observation) => {
|
|
197
|
+
reportFailure(options, {
|
|
198
|
+
capabilityId,
|
|
199
|
+
toolName: name,
|
|
200
|
+
reason,
|
|
201
|
+
...(observation === undefined ? {} : { observation }),
|
|
202
|
+
});
|
|
203
|
+
return result;
|
|
204
|
+
};
|
|
205
|
+
const inputSchema = sdkSchema(definition.input.toJSONSchema());
|
|
206
|
+
const outputSchema = sdkSchema(resultSchema(definition.output.toJSONSchema()));
|
|
207
|
+
const toolConfig = {
|
|
208
|
+
description: `${definition.description} Returns the contract value under structuredContent.result.`,
|
|
209
|
+
inputSchema,
|
|
210
|
+
outputSchema,
|
|
211
|
+
annotations: {
|
|
212
|
+
readOnlyHint: definition.risk === 'read',
|
|
213
|
+
destructiveHint: definition.risk === 'destructive',
|
|
214
|
+
...(definition.risk === 'read' ? { idempotentHint: true } : {}),
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
const appResource = appRegistration?.resources.find((resource) => resource.capabilityId === canonicalCapabilityId(definition.identity));
|
|
218
|
+
if (appResource !== undefined)
|
|
219
|
+
visibleAppResources.set(appResource.uri, appResource);
|
|
220
|
+
const toolHandler = async (input) => {
|
|
221
|
+
if (!isDestructiveCapabilityExposed(definition, 'mcp', options.surfaceExposure)) {
|
|
222
|
+
return fail('not-exposed', toolError('Capability not found.'));
|
|
223
|
+
}
|
|
224
|
+
let controller = new AbortController();
|
|
225
|
+
let timer;
|
|
226
|
+
const timeout = new Promise((resolve) => {
|
|
227
|
+
timer = setTimeout(() => {
|
|
228
|
+
controller.abort();
|
|
229
|
+
resolve({ kind: 'timeout' });
|
|
230
|
+
}, deadlineMs);
|
|
231
|
+
});
|
|
232
|
+
const operation = (async () => {
|
|
233
|
+
let context;
|
|
234
|
+
try {
|
|
235
|
+
if (options.resolveExecutionContext !== undefined) {
|
|
236
|
+
context = await options.resolveExecutionContext(requestInfo, authInfo);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const principal = authInfo === undefined || options.resolveTrustedPrincipal === undefined
|
|
240
|
+
? null
|
|
241
|
+
: await options.resolveTrustedPrincipal(authInfo);
|
|
242
|
+
context = {
|
|
243
|
+
caller: principal === null ? { kind: 'anonymous' } : executionCallerForPrincipal(principal),
|
|
244
|
+
authorization: options.grantAuthorization === undefined
|
|
245
|
+
? defaultContext().authorization
|
|
246
|
+
: createGrantAuthorization({
|
|
247
|
+
...options.grantAuthorization,
|
|
248
|
+
principal,
|
|
249
|
+
}),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return { kind: 'unavailable' };
|
|
255
|
+
}
|
|
256
|
+
const result = await executeCapability(registry, {
|
|
257
|
+
identity: definition.identity,
|
|
258
|
+
runtime: 'server',
|
|
259
|
+
input,
|
|
260
|
+
caller: context.caller,
|
|
261
|
+
authorization: context.authorization,
|
|
262
|
+
signal: controller.signal,
|
|
263
|
+
});
|
|
264
|
+
return { kind: 'complete', result };
|
|
265
|
+
})();
|
|
266
|
+
try {
|
|
267
|
+
const outcome = await Promise.race([operation, timeout]);
|
|
268
|
+
if (outcome.kind === 'timeout')
|
|
269
|
+
return fail('deadline-exceeded', deadlineToolError(definition.risk));
|
|
270
|
+
if (outcome.kind === 'unavailable')
|
|
271
|
+
return fail('context-unavailable', toolError('Capability execution is unavailable.'));
|
|
272
|
+
if (outcome.result.kind === 'failure')
|
|
273
|
+
return fail(outcome.result.reason, outcome.result.reason === 'deadline-exceeded'
|
|
274
|
+
? deadlineToolError(definition.risk)
|
|
275
|
+
: toolError(executorError(outcome.result.reason)), outcome.result.observation);
|
|
276
|
+
const value = outcome.result.value;
|
|
277
|
+
let valueJson;
|
|
278
|
+
try {
|
|
279
|
+
if (typeof value === 'number' && !Number.isFinite(value))
|
|
280
|
+
return fail('result-not-serializable', toolError('Capability result could not be serialized.'));
|
|
281
|
+
valueJson = JSON.stringify(value);
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return fail('result-not-serializable', toolError('Capability result could not be serialized.'));
|
|
285
|
+
}
|
|
286
|
+
if (valueJson === undefined)
|
|
287
|
+
return fail('result-not-serializable', toolError('Capability result could not be serialized.'));
|
|
288
|
+
const structuredContent = { result: JSON.parse(valueJson) };
|
|
289
|
+
const text = JSON.stringify(structuredContent);
|
|
290
|
+
return {
|
|
291
|
+
content: [{ type: 'text', text }],
|
|
292
|
+
structuredContent,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
return fail('adapter-error', toolError('Capability execution is unavailable.'));
|
|
297
|
+
}
|
|
298
|
+
finally {
|
|
299
|
+
if (timer !== undefined)
|
|
300
|
+
clearTimeout(timer);
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
if (appResource === undefined || appRegistration === undefined) {
|
|
304
|
+
server.registerTool(name, toolConfig, toolHandler);
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
appRegistration.registerTool(server, name, toolConfig, toolHandler, appResource.uri);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
if (visibleAppResources.size > 0 && appRegistration !== undefined) {
|
|
311
|
+
appRegistration.registerResources(server, [...visibleAppResources.values()]);
|
|
312
|
+
}
|
|
313
|
+
return server;
|
|
314
|
+
}
|
|
315
|
+
export function createMcpHandler(registry, options = {}) {
|
|
316
|
+
return createMcpHandlerWithAppRegistration(registry, options);
|
|
317
|
+
}
|
|
318
|
+
export function createMcpHandlerWithAppRegistration(registry, options = {}, appRegistration) {
|
|
319
|
+
createCapabilitySurfaceMap(registry.definitions);
|
|
320
|
+
const config = validateOptions(options);
|
|
321
|
+
const toolNames = resolveToolNames(registry, options);
|
|
322
|
+
const hasPublicRead = registry.definitions.some((definition) => isPublicRead(definition) && serverBindingsFor(registry, definition).length === 1);
|
|
323
|
+
const authenticationRequired = options.bearerAuth !== undefined && (options.bearerAuth.required ?? !hasPublicRead);
|
|
324
|
+
const officialHandler = createOfficialMcpHandler(async (context) => await defineServer(registry, context.requestInfo, context.authInfo, options, config.deadlineMs, toolNames, appRegistration), {
|
|
325
|
+
legacy: 'stateless',
|
|
326
|
+
maxRequestBodySize: config.maxRequestBytes,
|
|
327
|
+
});
|
|
328
|
+
const bearerGate = options.bearerAuth === undefined
|
|
329
|
+
? undefined
|
|
330
|
+
: requireBearerAuth({
|
|
331
|
+
verifier: options.bearerAuth.verifier,
|
|
332
|
+
expectedResource: options.bearerAuth.expectedResource,
|
|
333
|
+
...(options.bearerAuth.requiredScopes === undefined
|
|
334
|
+
? {}
|
|
335
|
+
: { requiredScopes: [...options.bearerAuth.requiredScopes] }),
|
|
336
|
+
...(options.bearerAuth.resourceMetadataUrl === undefined
|
|
337
|
+
? {}
|
|
338
|
+
: { resourceMetadataUrl: options.bearerAuth.resourceMetadataUrl }),
|
|
339
|
+
});
|
|
340
|
+
return async (request) => {
|
|
341
|
+
if (new URL(request.url).pathname !== config.endpoint) {
|
|
342
|
+
return new Response(JSON.stringify({ error: { code: 'not_found', message: 'Not found.' } }), {
|
|
343
|
+
status: 404,
|
|
344
|
+
headers: { 'content-type': 'application/json; charset=utf-8' },
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
let authInfo;
|
|
348
|
+
if (bearerGate !== undefined &&
|
|
349
|
+
(authenticationRequired || request.headers.has('authorization'))) {
|
|
350
|
+
const gated = await bearerGate(request);
|
|
351
|
+
if (gated instanceof Response)
|
|
352
|
+
return gated;
|
|
353
|
+
authInfo = gated;
|
|
354
|
+
}
|
|
355
|
+
return officialHandler.fetch(request, authInfo === undefined ? {} : { authInfo });
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=mcp-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-core.js","sourceRoot":"","sources":["../src/mcp-core.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/mcp.js
ADDED
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type BrowserAdapterOptions, type BrowserDocumentLike, type BrowserSyncReport } from './browser.js';
|
|
2
|
+
import type { CapabilityRegistry } from './core/registry.js';
|
|
3
|
+
export interface NextBrowserBootstrap {
|
|
4
|
+
readonly supported: boolean;
|
|
5
|
+
/** Call from a client component whenever usePathname() changes. */
|
|
6
|
+
sync(): Promise<BrowserSyncReport>;
|
|
7
|
+
dispose(): void;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Keeps the framework-neutral browser adapter separate from server route code.
|
|
11
|
+
* Next does not expose a stable DOM navigation event, so callers explicitly resync from usePathname().
|
|
12
|
+
*/
|
|
13
|
+
export declare function createNextBrowserBootstrap(document: BrowserDocumentLike, registry: CapabilityRegistry, options?: BrowserAdapterOptions): NextBrowserBootstrap;
|
|
14
|
+
//# sourceMappingURL=next-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-browser.d.ts","sourceRoot":"","sources":["../src/next-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,mEAAmE;IACnE,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CAOtB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createBrowserCapabilityAdapter, } from './browser.js';
|
|
2
|
+
/**
|
|
3
|
+
* Keeps the framework-neutral browser adapter separate from server route code.
|
|
4
|
+
* Next does not expose a stable DOM navigation event, so callers explicitly resync from usePathname().
|
|
5
|
+
*/
|
|
6
|
+
export function createNextBrowserBootstrap(document, registry, options = {}) {
|
|
7
|
+
const adapter = createBrowserCapabilityAdapter(document);
|
|
8
|
+
return {
|
|
9
|
+
supported: adapter.supported,
|
|
10
|
+
sync: () => adapter.sync(registry, options),
|
|
11
|
+
dispose: () => adapter.dispose(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=next-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-browser.js","sourceRoot":"","sources":["../src/next-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,GAK/B,MAAM,cAAc,CAAC;AAUtB;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAA6B,EAC7B,QAA4B,EAC5B,OAAO,GAA0B,EAAE;IAEnC,MAAM,OAAO,GAA6B,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACnF,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,GAA+B,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;QACvE,OAAO,EAAE,GAAS,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;KACvC,CAAC;AACJ,CAAC"}
|
package/dist/next.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CapabilityRegistry } from './core/registry.js';
|
|
2
|
+
import { type HttpAdapterOptions } from './http.js';
|
|
3
|
+
import { type McpAdapterOptions } from './mcp.js';
|
|
4
|
+
export type NextRouteHandler = (request: Request) => Promise<Response>;
|
|
5
|
+
export type NextRouteHandlers = {
|
|
6
|
+
readonly GET: NextRouteHandler;
|
|
7
|
+
readonly POST: NextRouteHandler;
|
|
8
|
+
readonly DELETE: NextRouteHandler;
|
|
9
|
+
readonly HEAD: NextRouteHandler;
|
|
10
|
+
readonly OPTIONS: NextRouteHandler;
|
|
11
|
+
readonly PATCH: NextRouteHandler;
|
|
12
|
+
readonly PUT: NextRouteHandler;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Adapts the Web-standard HTTP capability handler to Next App Router exports.
|
|
16
|
+
* Mount the returned methods from a Node-runtime catch-all route that covers the configured base path.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createNextHttpRoute(registry: CapabilityRegistry, options?: HttpAdapterOptions): NextRouteHandlers;
|
|
19
|
+
/**
|
|
20
|
+
* Adapts the official SDK Streamable HTTP MCP handler to Next App Router exports.
|
|
21
|
+
* The owning route module must export `runtime = 'nodejs'` and must be mounted at the endpoint.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createNextMcpRoute(registry: CapabilityRegistry, options?: McpAdapterOptions): NextRouteHandlers;
|
|
24
|
+
//# sourceMappingURL=next.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;CAChC,CAAC;AAcF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAEnB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,iBAAsB,GAC9B,iBAAiB,CAEnB"}
|
package/dist/next.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createHttpHandler } from './http.js';
|
|
2
|
+
import { createMcpHandler } from './mcp.js';
|
|
3
|
+
function exposeRoute(handler) {
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
GET: handler,
|
|
6
|
+
POST: handler,
|
|
7
|
+
DELETE: handler,
|
|
8
|
+
HEAD: handler,
|
|
9
|
+
OPTIONS: handler,
|
|
10
|
+
PATCH: handler,
|
|
11
|
+
PUT: handler,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Adapts the Web-standard HTTP capability handler to Next App Router exports.
|
|
16
|
+
* Mount the returned methods from a Node-runtime catch-all route that covers the configured base path.
|
|
17
|
+
*/
|
|
18
|
+
export function createNextHttpRoute(registry, options = {}) {
|
|
19
|
+
return exposeRoute(createHttpHandler(registry, options));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Adapts the official SDK Streamable HTTP MCP handler to Next App Router exports.
|
|
23
|
+
* The owning route module must export `runtime = 'nodejs'` and must be mounted at the endpoint.
|
|
24
|
+
*/
|
|
25
|
+
export function createNextMcpRoute(registry, options = {}) {
|
|
26
|
+
return exposeRoute(createMcpHandler(registry, options));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=next.js.map
|
package/dist/next.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA2B,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAA0B,MAAM,UAAU,CAAC;AAcpE,SAAS,WAAW,CAAC,OAAyB;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,OAAO;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAA4B,EAC5B,OAAO,GAAuB,EAAE;IAEhC,OAAO,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAA4B,EAC5B,OAAO,GAAsB,EAAE;IAE/B,OAAO,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.d.ts","sourceRoot":"","sources":["../src/package-version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.js","sourceRoot":"","sources":["../src/package-version.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export interface PublicationConfig {
|
|
2
|
+
readonly enabled: boolean;
|
|
3
|
+
readonly siteUrl: string;
|
|
4
|
+
readonly title: string;
|
|
5
|
+
readonly description: string;
|
|
6
|
+
readonly full?: boolean;
|
|
7
|
+
readonly maxFullBytes?: number;
|
|
8
|
+
/** Site-relative paths. Each exclusion includes all descendants. */
|
|
9
|
+
readonly excludedRoutes?: readonly string[];
|
|
10
|
+
readonly protocols?: readonly PublicationProtocol[];
|
|
11
|
+
}
|
|
12
|
+
export interface PublicationProtocol {
|
|
13
|
+
readonly url: string;
|
|
14
|
+
readonly protocol: string;
|
|
15
|
+
readonly required?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** An owner-declared labeled value, published beside the prose that states it. */
|
|
18
|
+
export interface PublicationFact {
|
|
19
|
+
readonly label: string;
|
|
20
|
+
readonly value: string;
|
|
21
|
+
}
|
|
22
|
+
export interface PublicationCandidate {
|
|
23
|
+
/** Stable opaque identifiers. Source paths and credentials do not belong here. */
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly revision: string;
|
|
26
|
+
readonly route: string;
|
|
27
|
+
readonly visibility: 'public' | 'private' | 'draft' | 'authenticated' | 'personalized' | 'unknown';
|
|
28
|
+
/** Only fields explicitly selected for the public projection. */
|
|
29
|
+
readonly title?: string;
|
|
30
|
+
readonly markdown?: string;
|
|
31
|
+
readonly locale?: string;
|
|
32
|
+
readonly category?: string;
|
|
33
|
+
readonly structuredType?: 'WebPage' | 'Article';
|
|
34
|
+
/** Links to other selected sources. Withdrawal automatically removes the link. */
|
|
35
|
+
readonly links?: readonly string[];
|
|
36
|
+
/** Labeled values restated from the prose, rendered as a "Key facts" list in the mirror. */
|
|
37
|
+
readonly facts?: readonly PublicationFact[];
|
|
38
|
+
}
|
|
39
|
+
export interface PublicationEntry {
|
|
40
|
+
readonly sourceId: string;
|
|
41
|
+
readonly revision: string;
|
|
42
|
+
readonly status: 'included' | 'excluded';
|
|
43
|
+
readonly reason?: string;
|
|
44
|
+
readonly canonical?: string;
|
|
45
|
+
readonly mirror?: string;
|
|
46
|
+
readonly structuredData?: string;
|
|
47
|
+
readonly locale?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface PublicationAsset {
|
|
50
|
+
readonly path: string;
|
|
51
|
+
readonly mediaType: string;
|
|
52
|
+
readonly content: string;
|
|
53
|
+
readonly digest: string;
|
|
54
|
+
}
|
|
55
|
+
export interface PublicationDiagnostic {
|
|
56
|
+
readonly code: string;
|
|
57
|
+
readonly severity: 'error' | 'warning';
|
|
58
|
+
readonly message: string;
|
|
59
|
+
readonly sourceId?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface PublicationPlan {
|
|
62
|
+
readonly schemaVersion: 1;
|
|
63
|
+
readonly digest: string;
|
|
64
|
+
readonly manifest: {
|
|
65
|
+
readonly entries: readonly PublicationEntry[];
|
|
66
|
+
};
|
|
67
|
+
readonly assets: readonly PublicationAsset[];
|
|
68
|
+
readonly diagnostics: readonly PublicationDiagnostic[];
|
|
69
|
+
}
|
|
70
|
+
export interface PublicationOptions {
|
|
71
|
+
/** Owner-supplied read-only verifier. JSON configuration cannot attest to its own endpoint. */
|
|
72
|
+
readonly verifyProtocol?: (declaration: PublicationProtocol) => Promise<boolean>;
|
|
73
|
+
}
|
|
74
|
+
export declare function digestText(text: string): Promise<string>;
|
|
75
|
+
/** A relative path safe across supported filesystems, before checking for symlinks/ownership. */
|
|
76
|
+
export declare function safePublicationPath(path: string): boolean;
|
|
77
|
+
export declare function planPublication(config: PublicationConfig, candidates: readonly PublicationCandidate[], options?: PublicationOptions): Promise<PublicationPlan>;
|
|
78
|
+
/** True when Accept names text/markdown with q > 0 and no lower than the q that admits HTML. */
|
|
79
|
+
export declare function acceptsMarkdown(accept: string | null | undefined): boolean;
|
|
80
|
+
/** Canonical path to mirror path for every published page, from plan entries or projection pages. */
|
|
81
|
+
export declare function markdownMirrors(pages: readonly {
|
|
82
|
+
readonly canonical?: string;
|
|
83
|
+
readonly mirror?: string | null;
|
|
84
|
+
}[]): Record<string, string>;
|
|
85
|
+
export interface MarkdownNegotiation {
|
|
86
|
+
/** Path of the mirror to serve in place of the HTML page, or null to serve the page. */
|
|
87
|
+
readonly mirror: string | null;
|
|
88
|
+
/** The response depends on Accept: send `Vary: Accept` whichever representation is served. */
|
|
89
|
+
readonly vary: boolean;
|
|
90
|
+
}
|
|
91
|
+
export declare function negotiateMarkdown(request: {
|
|
92
|
+
readonly method?: string | undefined;
|
|
93
|
+
readonly pathname: string;
|
|
94
|
+
readonly accept?: string | null | undefined;
|
|
95
|
+
}, mirrors: Readonly<Record<string, string>>): MarkdownNegotiation;
|
|
96
|
+
/** Adds a token to a Vary header value without duplicating it. */
|
|
97
|
+
export declare function addVary(current: unknown, token?: string): string;
|
|
98
|
+
interface NodeLikeRequest {
|
|
99
|
+
readonly method?: string;
|
|
100
|
+
readonly url?: string;
|
|
101
|
+
readonly headers: Readonly<Record<string, string | readonly string[] | undefined>>;
|
|
102
|
+
}
|
|
103
|
+
interface NodeLikeResponse {
|
|
104
|
+
statusCode: number;
|
|
105
|
+
setHeader(name: string, value: string): unknown;
|
|
106
|
+
getHeader(name: string): unknown;
|
|
107
|
+
end(body?: string | Uint8Array): unknown;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Node `(req, res, next)` middleware. `read` returns the mirror bytes for a mirror path (for
|
|
111
|
+
* example from the generated asset directory) or null when it is unavailable.
|
|
112
|
+
*/
|
|
113
|
+
export declare function markdownNegotiationHandler(mirrors: Readonly<Record<string, string>>, read: (mirrorPath: string) => Promise<string | Uint8Array | null | undefined>): (req: NodeLikeRequest, res: NodeLikeResponse, next: (error?: unknown) => void) => void;
|
|
114
|
+
export {};
|
|
115
|
+
//# sourceMappingURL=publication.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publication.d.ts","sourceRoot":"","sources":["../src/publication.ts"],"names":[],"mappings":"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"}
|