stitchkit 0.50.0 → 0.51.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/dist/cli.js +3 -3
- package/dist/{index-a4qmxybq.js → index-8mt47qk7.js} +5 -154
- package/dist/{index-jewp9r0a.js → index-8qghvg18.js} +1 -1
- package/dist/{index-h05ygjqx.js → index-bmnhqtya.js} +4 -1
- package/dist/{index-p9d4cxt5.js → index-gff2mxzk.js} +1 -1
- package/dist/{index-0hj37z43.js → index-h55e1wyq.js} +2 -2
- package/dist/{index-v58mwa19.js → index-psrxjvbw.js} +2 -2
- package/dist/{index-03j2t778.js → index-tw7mhqgy.js} +15 -4
- package/dist/index-ynts85ew.js +246 -0
- package/dist/node.d.ts +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +7 -6
- package/dist/observability/index.js +3 -3
- package/dist/server/implement.d.ts +30 -3
- package/dist/server/implement.d.ts.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +14 -14
- package/dist/server/middleware/auth.d.ts +63 -3
- package/dist/server/middleware/auth.d.ts.map +1 -1
- package/dist/testing.js +2 -2
- package/dist/tools/list-names.d.ts +13 -1
- package/dist/tools/list-names.d.ts.map +1 -1
- package/dist/tools.d.ts +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +13 -8
- package/llms-full.txt +145 -4
- package/package.json +1 -1
- package/dist/index-r1qp4rve.js +0 -57
|
@@ -48,6 +48,16 @@ export declare function defineMultipartStream<const E extends StreamingEndpoint,
|
|
|
48
48
|
* handler only ever sees the loose `RuntimeContext`.
|
|
49
49
|
*/
|
|
50
50
|
export declare function createMultipartStream<TCtx extends RuntimeContext>(): <const E extends StreamingEndpoint, const R extends ReceiverMap<E>>(endpoint: E, config: MultipartStreamConfig<E, R, TCtx>) => StreamingMultipartImplementation;
|
|
51
|
+
/**
|
|
52
|
+
* A `ServiceDef` whose handlers only throw — enough for everything that reads
|
|
53
|
+
* the mounted surface (names, exposure, kinds) without implementing anything.
|
|
54
|
+
*
|
|
55
|
+
* Internal on purpose (not re-exported from an entrypoint): a listing helper.
|
|
56
|
+
* Going through the real `bindContract` is the point — the produced methods are
|
|
57
|
+
* the same objects the real mounts see, so a name listing derived from here can
|
|
58
|
+
* never drift from the mounted surface.
|
|
59
|
+
*/
|
|
60
|
+
export declare function contractOnlyService(contract: ContractDef): ServiceDef;
|
|
51
61
|
export declare function implement<T extends Record<string, EndpointDef>, TCtx extends RuntimeContext = RuntimeContext>(contract: ContractDef<T, string>, handlers: Handlers<T, TCtx>): ServiceDef;
|
|
52
62
|
/**
|
|
53
63
|
* Fix the handler context type once — `const implement =
|
|
@@ -102,7 +112,7 @@ export type ExactScopedRegistryHandlers<TContracts extends ImplementationRegistr
|
|
|
102
112
|
* endpoint's effective scope. Missing, extra and endpoint-incompatible entries
|
|
103
113
|
* fail exactly as they do in `implementRegistry`.
|
|
104
114
|
*/
|
|
105
|
-
export declare function createScopedImplementRegistry<TScopes extends ScopeContexts>(): <const TContracts extends ScopedImplementationRegistry<TScopes>, const THandlers extends ScopedRegistryHandlers<TContracts, TScopes>>(contracts: TContracts, handlers: ExactScopedRegistryHandlers<TContracts, THandlers, TScopes>) =>
|
|
115
|
+
export declare function createScopedImplementRegistry<TScopes extends ScopeContexts>(): <const TContracts extends ScopedImplementationRegistry<TScopes>, const THandlers extends ScopedRegistryHandlers<TContracts, TScopes>>(contracts: TContracts, handlers: ExactScopedRegistryHandlers<TContracts, THandlers, TScopes>) => KeyedServices<TContracts>;
|
|
106
116
|
export type ImplementationRegistry = Record<string, ContractDef<Record<string, EndpointDef>, string>>;
|
|
107
117
|
/** Exact handlers map derived from a literal contract registry. */
|
|
108
118
|
export type RegistryHandlers<TContracts extends ImplementationRegistry, TCtx extends RuntimeContext = RuntimeContext> = {
|
|
@@ -111,13 +121,30 @@ export type RegistryHandlers<TContracts extends ImplementationRegistry, TCtx ext
|
|
|
111
121
|
export type ExactRegistryHandlers<TContracts extends ImplementationRegistry, THandlers extends RegistryHandlers<TContracts, TCtx>, TCtx extends RuntimeContext> = THandlers & RegistryHandlers<TContracts, TCtx> & Record<Exclude<keyof THandlers, keyof TContracts>, never> & {
|
|
112
122
|
[K in keyof THandlers & keyof TContracts]: THandlers[K] & Record<Exclude<keyof THandlers[K], keyof RegistryHandlers<TContracts, TCtx>[K]>, never>;
|
|
113
123
|
};
|
|
124
|
+
/**
|
|
125
|
+
* Registry results keep both shapes: the mount-ordered array a server consumes,
|
|
126
|
+
* and the same services by their registry key. Keys are load-bearing for
|
|
127
|
+
* consumers that filter a tool surface per caller ("these bots see only
|
|
128
|
+
* services X and Y") — dropping them forced a hand-rebuilt prefix lookup, and a
|
|
129
|
+
* silent one at that.
|
|
130
|
+
*/
|
|
131
|
+
export type KeyedServices<TContracts extends ImplementationRegistry> = ServiceDef[] & {
|
|
132
|
+
/**
|
|
133
|
+
* The same services, by registry key. Same objects as the array entries.
|
|
134
|
+
* Non-enumerable: `Object.keys` / `Object.values` / object spread of the
|
|
135
|
+
* array see only the services, exactly as before.
|
|
136
|
+
*/
|
|
137
|
+
readonly byKey: {
|
|
138
|
+
readonly [K in keyof TContracts]: ServiceDef;
|
|
139
|
+
};
|
|
140
|
+
};
|
|
114
141
|
/**
|
|
115
142
|
* Bind an exact `name → contract` registry to its exact handlers map. Missing,
|
|
116
143
|
* extra and endpoint-incompatible implementations fail at compile time; loose
|
|
117
144
|
* JavaScript callers receive the same checks at runtime.
|
|
118
145
|
*/
|
|
119
|
-
export declare function implementRegistry<const TContracts extends ImplementationRegistry, const THandlers extends RegistryHandlers<TContracts>>(contracts: TContracts, handlers: ExactRegistryHandlers<TContracts, THandlers, RuntimeContext>):
|
|
146
|
+
export declare function implementRegistry<const TContracts extends ImplementationRegistry, const THandlers extends RegistryHandlers<TContracts>>(contracts: TContracts, handlers: ExactRegistryHandlers<TContracts, THandlers, RuntimeContext>): KeyedServices<TContracts>;
|
|
120
147
|
/** Fix one handler context type for every entry in an implementation registry. */
|
|
121
|
-
export declare function createImplementRegistry<TCtx extends RuntimeContext>(): <const TContracts extends ImplementationRegistry, const THandlers extends RegistryHandlers<TContracts, TCtx>>(contracts: TContracts, handlers: ExactRegistryHandlers<TContracts, THandlers, TCtx>) =>
|
|
148
|
+
export declare function createImplementRegistry<TCtx extends RuntimeContext>(): <const TContracts extends ImplementationRegistry, const THandlers extends RegistryHandlers<TContracts, TCtx>>(contracts: TContracts, handlers: ExactRegistryHandlers<TContracts, THandlers, TCtx>) => KeyedServices<TContracts>;
|
|
122
149
|
export {};
|
|
123
150
|
//# sourceMappingURL=implement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/server/implement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,cAAc,EACf,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/server/implement.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -7,9 +7,9 @@ export { createHandler } from './create';
|
|
|
7
7
|
export { createErrorHook, type ErrorHookConfig, type ResolvedError, } from './error-hook';
|
|
8
8
|
export { createEventBus, type DefaultEventMap, type EventBus, type EventBusOptions, type EventHandler, } from './event-bus';
|
|
9
9
|
export { type ByteRange, parseByteRange, type ServeFileOptions, serveFile, staticRoute, weakETag, } from './file';
|
|
10
|
-
export { createImplement, createImplementRegistry, createMultipartStream, createScopedImplement, createScopedImplementRegistry, defineMultipartStream, type ExactRegistryHandlers, type ExactScopedRegistryHandlers, type ImplementationRegistry, implement, implementRegistry, type MultipartStreamConfig, type RegistryHandlers, type ScopedImplementationRegistry, type ScopedRegistryHandlers, type StreamScope, } from './implement';
|
|
10
|
+
export { createImplement, createImplementRegistry, createMultipartStream, createScopedImplement, createScopedImplementRegistry, defineMultipartStream, type ExactRegistryHandlers, type ExactScopedRegistryHandlers, type ImplementationRegistry, implement, implementRegistry, type KeyedServices, type MultipartStreamConfig, type RegistryHandlers, type ScopedImplementationRegistry, type ScopedRegistryHandlers, type StreamScope, } from './implement';
|
|
11
11
|
export type { LogFormat } from './logger';
|
|
12
|
-
export { type AuthHook, type AuthHookConfig, type AuthRule, type BearerResolverConfig, createAuthHook, createBearerResolver, extractToken, type JwtPayload, type SignJwtOptions, signJwt, type VerifyJwtOptions, verifyJwt, } from './middleware/auth';
|
|
12
|
+
export { type AuthHook, type AuthHookConfig, type AuthRule, type AuthRules, type AuthScopes, type BearerResolverConfig, createAuthHook, createBearerResolver, extractToken, type JwtPayload, type RuleScopes, type ScopedAuthHook, type ScopedAuthRule, type SignJwtOptions, signJwt, type VerifyJwtOptions, verifyJwt, } from './middleware/auth';
|
|
13
13
|
export { type CookieDef, type CookieOptions, defineCookie, parseCookies, serializeCookie, } from './middleware/cookies';
|
|
14
14
|
export { type CorsConfig, corsHeaders, corsPreflightResponse, DEFAULT_CORS_ALLOW_HEADERS, DEFAULT_CORS_EXPOSE_HEADERS, } from './middleware/cors';
|
|
15
15
|
export { deriveCodeChallenge, type PkceMethod, verifyPkce } from './middleware/pkce';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.js
CHANGED
|
@@ -7,20 +7,12 @@ import {
|
|
|
7
7
|
bindRealtimeServer,
|
|
8
8
|
composeWebSocketHandlers,
|
|
9
9
|
createHandler,
|
|
10
|
-
createImplement,
|
|
11
|
-
createImplementRegistry,
|
|
12
|
-
createMultipartStream,
|
|
13
|
-
createScopedImplement,
|
|
14
|
-
createScopedImplementRegistry,
|
|
15
10
|
createServerLifecycle,
|
|
16
11
|
createSocketIOServer,
|
|
17
|
-
defineMultipartStream,
|
|
18
|
-
implement,
|
|
19
|
-
implementRegistry,
|
|
20
12
|
parseMultipart,
|
|
21
13
|
socketIoLane,
|
|
22
14
|
webSocketLane
|
|
23
|
-
} from "../index-
|
|
15
|
+
} from "../index-8mt47qk7.js";
|
|
24
16
|
import {
|
|
25
17
|
createAuthHook,
|
|
26
18
|
createBearerResolver,
|
|
@@ -32,13 +24,21 @@ import {
|
|
|
32
24
|
signJwt,
|
|
33
25
|
verifyJwt,
|
|
34
26
|
verifyPkce
|
|
35
|
-
} from "../index-
|
|
27
|
+
} from "../index-tw7mhqgy.js";
|
|
36
28
|
import {
|
|
37
29
|
DEFAULT_CORS_ALLOW_HEADERS,
|
|
38
30
|
DEFAULT_CORS_EXPOSE_HEADERS,
|
|
39
31
|
corsHeaders,
|
|
40
|
-
corsPreflightResponse
|
|
41
|
-
|
|
32
|
+
corsPreflightResponse,
|
|
33
|
+
createImplement,
|
|
34
|
+
createImplementRegistry,
|
|
35
|
+
createMultipartStream,
|
|
36
|
+
createScopedImplement,
|
|
37
|
+
createScopedImplementRegistry,
|
|
38
|
+
defineMultipartStream,
|
|
39
|
+
implement,
|
|
40
|
+
implementRegistry
|
|
41
|
+
} from "../index-ynts85ew.js";
|
|
42
42
|
import {
|
|
43
43
|
isWithinDir,
|
|
44
44
|
jsonSchemaFields,
|
|
@@ -69,11 +69,11 @@ import {
|
|
|
69
69
|
resolveTraceId,
|
|
70
70
|
unauthorized,
|
|
71
71
|
zodIssues
|
|
72
|
-
} from "../index-
|
|
72
|
+
} from "../index-8qghvg18.js";
|
|
73
73
|
import {
|
|
74
74
|
isRecord,
|
|
75
75
|
parseTrailingWildcard
|
|
76
|
-
} from "../index-
|
|
76
|
+
} from "../index-bmnhqtya.js";
|
|
77
77
|
// src/server/bun.ts
|
|
78
78
|
function createServer(config) {
|
|
79
79
|
const {
|
|
@@ -40,7 +40,48 @@ export declare function extractToken(req: Request, cookieName?: string): string
|
|
|
40
40
|
* async — resource-scoped checks usually need a DB lookup.
|
|
41
41
|
*/
|
|
42
42
|
export type AuthRule<TIdentity> = 'public' | 'authenticated' | ((identity: Awaited<TIdentity>, ctx: RuntimeContext) => boolean | Promise<boolean>);
|
|
43
|
-
|
|
43
|
+
/**
|
|
44
|
+
* A rule that also DECLARES this scope's contribution to the handler context —
|
|
45
|
+
* by doing it. `inject` runs whenever an identity resolved (on `'public'` too:
|
|
46
|
+
* that rule admits the anonymous, it does not refuse to know the logged-in),
|
|
47
|
+
* and its returned fields are merged into the context.
|
|
48
|
+
*
|
|
49
|
+
* The return type is the point: {@link AuthScopes} derives the scope→context
|
|
50
|
+
* map from it, so `createScopedImplement<AuthScopes<typeof hook>>()` types
|
|
51
|
+
* handlers from the same declaration that fills the context. One source of
|
|
52
|
+
* truth instead of a hand-written map drifting beside the hook. → ADR 0078
|
|
53
|
+
*
|
|
54
|
+
* `inject` must be **synchronous** — the type forbids a thenable and the
|
|
55
|
+
* runtime throws on one, because `Object.assign(ctx, promise)` would merge
|
|
56
|
+
* nothing, silently. It also runs before the rule check (and so for an
|
|
57
|
+
* identity the rule may still reject), so keep it pure: derive fields, cause
|
|
58
|
+
* nothing.
|
|
59
|
+
*/
|
|
60
|
+
export interface ScopedAuthRule<TIdentity, TFields extends object = object> {
|
|
61
|
+
rule: AuthRule<TIdentity>;
|
|
62
|
+
/** Fields this scope guarantees. Runs after the shared `inject`, only with an identity. */
|
|
63
|
+
inject?: (identity: Awaited<TIdentity>, ctx: RuntimeContext) => TFields & {
|
|
64
|
+
then?: never;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** The `rules` map: a bare rule, or a rule carrying its context contribution. */
|
|
68
|
+
export type AuthRules<TIdentity> = Record<string, AuthRule<TIdentity> | ScopedAuthRule<TIdentity, object>>;
|
|
69
|
+
/**
|
|
70
|
+
* The scope→context map derived from a `rules` object. A rule whose TYPE can
|
|
71
|
+
* be `'public'` yields optional fields — public still resolves and injects for
|
|
72
|
+
* a logged-in caller, it just never rejects the anonymous one — so its
|
|
73
|
+
* handlers see `field?: T`, not a promise the runtime may break. The test is
|
|
74
|
+
* membership, not the exact literal: a union such as
|
|
75
|
+
* `flag ? 'public' : 'authenticated'` may skip the inject at runtime, so its
|
|
76
|
+
* fields must be optional too.
|
|
77
|
+
*/
|
|
78
|
+
export type RuleScopes<TRules> = {
|
|
79
|
+
[K in keyof TRules & string]: TRules[K] extends {
|
|
80
|
+
rule: infer TRule;
|
|
81
|
+
inject: (...args: never[]) => infer TFields extends object;
|
|
82
|
+
} ? 'public' extends Extract<TRule, string> ? Partial<TFields> : TFields : object;
|
|
83
|
+
};
|
|
84
|
+
export interface AuthHookConfig<TIdentity, TRules extends AuthRules<TIdentity> = AuthRules<TIdentity>> {
|
|
44
85
|
/** Resolve the request identity — cookie / bearer + DB lookup. */
|
|
45
86
|
resolve: (ctx: RuntimeContext) => Promise<TIdentity | null>;
|
|
46
87
|
/**
|
|
@@ -52,7 +93,7 @@ export interface AuthHookConfig<TIdentity> {
|
|
|
52
93
|
*/
|
|
53
94
|
resolveFromContext?: (ctx: RuntimeContext) => TIdentity | null | Promise<TIdentity | null>;
|
|
54
95
|
/** Access rule per scope; `endpoint.scope` is the key. */
|
|
55
|
-
rules:
|
|
96
|
+
rules: TRules;
|
|
56
97
|
/** Scope applied when an endpoint declares none. */
|
|
57
98
|
defaultScope?: string;
|
|
58
99
|
/** Write the resolved identity onto the context for handlers. */
|
|
@@ -66,6 +107,25 @@ export interface AuthHook {
|
|
|
66
107
|
(ctx: AuthorizationContext, endpoint: OperationIdentity): Promise<void>;
|
|
67
108
|
(ctx: RuntimeContext, endpoint: OperationIdentity): Promise<void>;
|
|
68
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* An auth hook that carries its derived scope→context map at the type level.
|
|
112
|
+
* The marker property never exists at runtime; it only lets {@link AuthScopes}
|
|
113
|
+
* recover the map.
|
|
114
|
+
*/
|
|
115
|
+
export interface ScopedAuthHook<TScopes extends Record<string, object>> extends AuthHook {
|
|
116
|
+
/** Type-only carrier for {@link AuthScopes}; never present at runtime. */
|
|
117
|
+
readonly '~scopes'?: TScopes;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The scope→context map a hook derived from its rules — feed it straight to
|
|
121
|
+
* `createScopedImplement`:
|
|
122
|
+
*
|
|
123
|
+
* ```ts
|
|
124
|
+
* const hook = createAuthHook({ resolve, rules })
|
|
125
|
+
* export const implementFor = createScopedImplement<AuthScopes<typeof hook>>()
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export type AuthScopes<THook extends ScopedAuthHook<Record<string, object>>> = THook extends ScopedAuthHook<infer TScopes> ? TScopes : never;
|
|
69
129
|
/**
|
|
70
130
|
* Build a scope authorization hook.
|
|
71
131
|
*
|
|
@@ -79,7 +139,7 @@ export interface AuthHook {
|
|
|
79
139
|
* `req` — it uses `resolveFromContext`. If `resolveFromContext` is omitted, a
|
|
80
140
|
* scoped tool call has no identity and **fails closed** (never silently passes).
|
|
81
141
|
*/
|
|
82
|
-
export declare function createAuthHook<TIdentity>(config: AuthHookConfig<TIdentity>):
|
|
142
|
+
export declare function createAuthHook<TIdentity, const TRules extends AuthRules<TIdentity> = AuthRules<TIdentity>>(config: AuthHookConfig<TIdentity, TRules>): ScopedAuthHook<RuleScopes<TRules>>;
|
|
83
143
|
/**
|
|
84
144
|
* Bearer-token identity resolver — the MCP / API-key counterpart of the
|
|
85
145
|
* cookie session hook. Strips `Authorization: Bearer <token>` and hands the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGxE,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,8BAA8B;AAC9B,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAsB,SAAS,CAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAgErB;AAED,4BAA4B;AAC5B,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU7E;AAUD;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,CAAC,SAAS,IAC1B,QAAQ,GACR,eAAe,GACf,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAExF,MAAM,WAAW,cAAc,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/testing.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createClient,
|
|
3
3
|
createClients
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-gff2mxzk.js";
|
|
5
5
|
import"./index-48ffdxgk.js";
|
|
6
|
-
import"./index-
|
|
6
|
+
import"./index-bmnhqtya.js";
|
|
7
7
|
|
|
8
8
|
// src/testing.ts
|
|
9
9
|
function resolveTestBaseUrl(origin, pathPrefix) {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Built on the mixed-surface collector used by the mounts — the listing cannot
|
|
11
11
|
* drift when pathless runtime tools sit beside contract operations.
|
|
12
12
|
*/
|
|
13
|
-
import type { Transport } from '../contract';
|
|
13
|
+
import type { ContractDef, Transport } from '../contract';
|
|
14
14
|
import { type ToolSurfaceDefinition } from './surface';
|
|
15
15
|
/** One mounted tool name and where it comes from. */
|
|
16
16
|
export interface ToolNameEntry {
|
|
@@ -33,4 +33,16 @@ export interface ToolNameEntry {
|
|
|
33
33
|
* mirroring the real mounts.
|
|
34
34
|
*/
|
|
35
35
|
export declare function listToolNames(surface: ToolSurfaceDefinition): ToolNameEntry[];
|
|
36
|
+
/**
|
|
37
|
+
* The same listing straight from contracts — no handlers required. Names, kinds
|
|
38
|
+
* and exposure are deterministic contract facts, so a surface snapshot should
|
|
39
|
+
* not force the caller to build (or stub) services; a stub factory left lying
|
|
40
|
+
* around is an untyped door out of `createScopedImplement`.
|
|
41
|
+
*
|
|
42
|
+
* Each contract runs through the real `implement` binding internally, so this
|
|
43
|
+
* produces exactly the entries `listToolNames` yields for the implemented
|
|
44
|
+
* services — structurally guaranteed (both read only the mounted method
|
|
45
|
+
* definitions) and pinned by a deep-equality test.
|
|
46
|
+
*/
|
|
47
|
+
export declare function listContractToolNames(contracts: readonly ContractDef[]): ToolNameEntry[];
|
|
36
48
|
//# sourceMappingURL=list-names.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-names.d.ts","sourceRoot":"","sources":["../../src/tools/list-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"list-names.d.ts","sourceRoot":"","sources":["../../src/tools/list-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,WAAW,CAAC;AAEnB,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAID;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,EAAE,CA6B7E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,WAAW,EAAE,GAAG,aAAa,EAAE,CAExF"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { coerceJsonArgs } from './tools/coerce';
|
|
|
8
8
|
export type { AfterToolCallOptions, BeforeToolCallOptions, ErrorHintFn, ToolCallContext, ToolCallHooks, ToolErrorOptions, ToolLifecycle, ToolOperation, ToolResult, } from './tools/execute';
|
|
9
9
|
export { flattenToolJsonSchema, type ToolPresentationSchema, } from './tools/flatten';
|
|
10
10
|
export { createToolInvoker, type ToolInvocationOptions, type ToolInvoker, type ToolInvokerConfig, type ToolInvokerTransport, } from './tools/invoker';
|
|
11
|
-
export { listToolNames, type ToolNameEntry } from './tools/list-names';
|
|
11
|
+
export { listContractToolNames, listToolNames, type ToolNameEntry, } from './tools/list-names';
|
|
12
12
|
export { buildToolManifest, type ToolManifestConfig, type ToolManifestEntry, } from './tools/manifest';
|
|
13
13
|
export { buildMcpServer, type DirectMcpSurfaceConfig, type FiniteMcpSurfaceConfig, type McpMountConfig, type McpServerBuildConfig, type McpServerSharedConfig, mountMcp, mountMcpResource, validateMcpSchemas, } from './tools/mcp';
|
|
14
14
|
export { EXT_APPS_BUNDLE_PLACEHOLDER, inlineMcpAppBundle, type McpAppCsp, type McpAppResourceMeta, type McpResourceDef, RESOURCE_MIME_TYPE, } from './tools/mcp-app';
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
signJwt,
|
|
3
3
|
verifyPkce
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-tw7mhqgy.js";
|
|
5
5
|
import {
|
|
6
|
-
DEFAULT_CORS_ALLOW_HEADERS
|
|
7
|
-
|
|
6
|
+
DEFAULT_CORS_ALLOW_HEADERS,
|
|
7
|
+
contractOnlyService
|
|
8
|
+
} from "./index-ynts85ew.js";
|
|
8
9
|
import {
|
|
9
10
|
assertToolName,
|
|
10
11
|
assertUniqueToolName,
|
|
@@ -25,7 +26,7 @@ import {
|
|
|
25
26
|
toolErrorFromResult,
|
|
26
27
|
toolResultFromError,
|
|
27
28
|
writeDownload
|
|
28
|
-
} from "./index-
|
|
29
|
+
} from "./index-h55e1wyq.js";
|
|
29
30
|
import {
|
|
30
31
|
isWithinDir,
|
|
31
32
|
realPathWithinDir,
|
|
@@ -34,22 +35,22 @@ import {
|
|
|
34
35
|
import {
|
|
35
36
|
ApiError,
|
|
36
37
|
createClient
|
|
37
|
-
} from "./index-
|
|
38
|
+
} from "./index-gff2mxzk.js";
|
|
38
39
|
import"./index-48ffdxgk.js";
|
|
39
40
|
import {
|
|
40
41
|
redact
|
|
41
|
-
} from "./index-
|
|
42
|
+
} from "./index-psrxjvbw.js";
|
|
42
43
|
import {
|
|
43
44
|
AppError,
|
|
44
45
|
getRequestContext,
|
|
45
46
|
getTraceId,
|
|
46
47
|
mergeMeta,
|
|
47
48
|
runWithRequestContext
|
|
48
|
-
} from "./index-
|
|
49
|
+
} from "./index-8qghvg18.js";
|
|
49
50
|
import {
|
|
50
51
|
isRecord,
|
|
51
52
|
resolvePropagationContext
|
|
52
|
-
} from "./index-
|
|
53
|
+
} from "./index-bmnhqtya.js";
|
|
53
54
|
|
|
54
55
|
// src/tools/agent.ts
|
|
55
56
|
import { jsonSchema, tool } from "ai";
|
|
@@ -336,6 +337,9 @@ function listToolNames(surface) {
|
|
|
336
337
|
}
|
|
337
338
|
return [...entries.values()].sort((a, b) => a.name.localeCompare(b.name) || a.service.localeCompare(b.service));
|
|
338
339
|
}
|
|
340
|
+
function listContractToolNames(contracts) {
|
|
341
|
+
return listToolNames({ services: contracts.map(contractOnlyService) });
|
|
342
|
+
}
|
|
339
343
|
// src/tools/manifest.ts
|
|
340
344
|
function buildToolManifest(config) {
|
|
341
345
|
return collectToolSurface({
|
|
@@ -2506,6 +2510,7 @@ export {
|
|
|
2506
2510
|
mountDownload,
|
|
2507
2511
|
mountAgent,
|
|
2508
2512
|
listToolNames,
|
|
2513
|
+
listContractToolNames,
|
|
2509
2514
|
inlineMcpAppBundle,
|
|
2510
2515
|
implementRemote,
|
|
2511
2516
|
flattenToolJsonSchema,
|
package/llms-full.txt
CHANGED
|
@@ -737,7 +737,12 @@ Three boundaries worth knowing:
|
|
|
737
737
|
it). It degrades to `unknown`, so it can no longer pose as a `string`; using it
|
|
738
738
|
in a typed position fails.
|
|
739
739
|
- The map states what **your** `beforeHandle` / `createAuthHook.inject` puts on
|
|
740
|
-
the context. The framework does not verify
|
|
740
|
+
the context. The framework does not verify a hand-written claim (→ ADR 0075) —
|
|
741
|
+
so prefer not to write one: scoped auth rules declare their contribution by
|
|
742
|
+
performing it, and `createScopedImplement<AuthScopes<typeof hook>>()` derives
|
|
743
|
+
the map from the hook
|
|
744
|
+
([details](./auth-and-errors.md#scoped-rules--the-map-createscopedimplement-consumes),
|
|
745
|
+
→ ADR 0078).
|
|
741
746
|
- An endpoint hoisted out of the contract literal widens its `scope` to `string`,
|
|
742
747
|
which is no key of any map, and lands in the error branch. An endpoint whose
|
|
743
748
|
`scope` is added by a conditional spread is optional, so it resolves to **both**
|
|
@@ -785,7 +790,17 @@ export const apiServices = implementRegistry(apiContractRegistry, {
|
|
|
785
790
|
|
|
786
791
|
Every registry key is required, extra keys fail, and each handler map is checked
|
|
787
792
|
against its own contract. The returned service order follows the contract
|
|
788
|
-
registry order
|
|
793
|
+
registry order — and the same services ride along under `.byKey`, so a consumer
|
|
794
|
+
whose registry keys are load-bearing (filtering a tool surface per caller) never
|
|
795
|
+
rebuilds a prefix lookup by hand:
|
|
796
|
+
|
|
797
|
+
```ts
|
|
798
|
+
const services = implementRegistry(apiContractRegistry, handlers)
|
|
799
|
+
createServer({ services }) // the array, as before
|
|
800
|
+
const visible = [services.byKey.users] // the same objects, by key
|
|
801
|
+
```
|
|
802
|
+
|
|
803
|
+
`createImplementRegistry<AppContext>()` fixes the application
|
|
789
804
|
context once, like `createImplement` does for a single contract. Runtime callers
|
|
790
805
|
also fail first on missing/extra keys and duplicate contract prefixes.
|
|
791
806
|
|
|
@@ -3755,7 +3770,61 @@ endpoints under the group declare `scope: 'tenant'`.
|
|
|
3755
3770
|
| `onForbidden` | thrown when an identity is present but the rule rejects it (default 403) |
|
|
3756
3771
|
|
|
3757
3772
|
Annotate `rules` with `satisfies Record<MyScope, AuthRule<User>>` so the compiler
|
|
3758
|
-
catches a scope you forgot to cover.
|
|
3773
|
+
catches a scope you forgot to cover. With the scoped rule objects below, widen
|
|
3774
|
+
the annotation to
|
|
3775
|
+
`satisfies Record<MyScope, AuthRule<User> | ScopedAuthRule<User, object>>` — it
|
|
3776
|
+
keeps the coverage check and does not disturb the derivation. (When every scope
|
|
3777
|
+
comes from the derived map, the check is already implicit: a scope missing from
|
|
3778
|
+
`rules` is no key of the map, and a contract using it fails to compile.)
|
|
3779
|
+
|
|
3780
|
+
### Scoped rules — the map `createScopedImplement` consumes
|
|
3781
|
+
|
|
3782
|
+
A rule may take an object form, `{ rule, inject }`, where `inject` **returns**
|
|
3783
|
+
the fields this scope contributes. That return type is a declaration the hook
|
|
3784
|
+
derives a scope→context map from — feed it to
|
|
3785
|
+
[`createScopedImplement`](./server.md#per-scope-handler-context--createscopedimplement)
|
|
3786
|
+
and the map can never drift from the hook, because it is computed from it:
|
|
3787
|
+
|
|
3788
|
+
```ts
|
|
3789
|
+
const authHook = createAuthHook({
|
|
3790
|
+
resolve: sessionResolver, // no explicit generic — let it infer
|
|
3791
|
+
rules: {
|
|
3792
|
+
public: { rule: 'public', inject: (user) => ({ userId: user.id }) },
|
|
3793
|
+
user: { rule: 'authenticated', inject: (user) => ({ userId: user.id }) },
|
|
3794
|
+
admin: {
|
|
3795
|
+
rule: (user) => user.admin,
|
|
3796
|
+
inject: (user) => ({ userId: user.id, isAdmin: user.admin }),
|
|
3797
|
+
},
|
|
3798
|
+
},
|
|
3799
|
+
})
|
|
3800
|
+
|
|
3801
|
+
export const implementFor = createScopedImplement<AuthScopes<typeof authHook>>()
|
|
3802
|
+
```
|
|
3803
|
+
|
|
3804
|
+
- A `'public'` rule's fields come out **optional**: public admits the anonymous
|
|
3805
|
+
caller, it does not refuse to know the logged-in one — `resolve` and `inject`
|
|
3806
|
+
still run, so a public `me` / `logout` handler reads `ctx.userId` as
|
|
3807
|
+
`string | undefined` and narrows, instead of being pushed toward a cast by a
|
|
3808
|
+
`public: object` map.
|
|
3809
|
+
- Any other rule's fields are required — the rule rejected the request before
|
|
3810
|
+
the handler if no identity resolved.
|
|
3811
|
+
- A scope with no rule is no key of the derived map, so a contract using it
|
|
3812
|
+
fails to compile — the type-level mirror of the hook's fail-closed
|
|
3813
|
+
`no rule for scope` throw.
|
|
3814
|
+
|
|
3815
|
+
The per-rule `inject` runs after the shared one, only when an identity
|
|
3816
|
+
resolved, and **before** the rule check — it may run for an identity the rule
|
|
3817
|
+
then rejects, so keep it pure and synchronous (an async `inject` is a compile
|
|
3818
|
+
error, and a runtime one for untyped callers: merging a Promise would merge
|
|
3819
|
+
nothing). Write rule objects inline in `rules` — a hoisted, annotated rule
|
|
3820
|
+
widens its inject and degrades that scope's fields to `object`.
|
|
3821
|
+
|
|
3822
|
+
Derivation needs the identity generic to be **inferred** (write no explicit
|
|
3823
|
+
`createAuthHook<User>` — TypeScript has no partial inference); with an explicit
|
|
3824
|
+
generic, or fields injected outside the hook, keep the hand-written map. Two
|
|
3825
|
+
hooks guarding different scopes compose by intersection:
|
|
3826
|
+
`createScopedImplement<AuthScopes<typeof userHook> & AuthScopes<typeof botHook>>()`.
|
|
3827
|
+
→ ADR 0078
|
|
3759
3828
|
|
|
3760
3829
|
### Auth on the tool surface — `resolveFromContext`
|
|
3761
3830
|
|
|
@@ -4797,6 +4866,71 @@ closing one whose chain is already running leaves that chain to finish and keeps
|
|
|
4797
4866
|
the handle claimed, since a second binding could not force it. `promise` is
|
|
4798
4867
|
already observed internally, so ignoring it never raises an `unhandledRejection`.
|
|
4799
4868
|
|
|
4869
|
+
#### Composite shutdown target — parallel domain drains
|
|
4870
|
+
|
|
4871
|
+
`bindProcessSignals` takes `Pick<ManagedServerHandle, 'shutdown'>` — an
|
|
4872
|
+
**interface**, not the server. An application whose shutdown spans several
|
|
4873
|
+
domains (transport, bots, agent runs, broadcasts) composes them into one target;
|
|
4874
|
+
the signal machine stays the framework's, the composition stays yours:
|
|
4875
|
+
|
|
4876
|
+
```ts
|
|
4877
|
+
const composite: ShutdownTarget = {
|
|
4878
|
+
async shutdown(options?: ShutdownOptions): Promise<ShutdownResult> {
|
|
4879
|
+
const { signal } = ShutdownOptionsSchema.parse(options ?? {})
|
|
4880
|
+
// Domain drains run in parallel with the transport drain, all watching the
|
|
4881
|
+
// same force signal the second OS signal aborts.
|
|
4882
|
+
const [transport, bots, agents, broadcasts] = await Promise.all([
|
|
4883
|
+
server.shutdown(options),
|
|
4884
|
+
drainBots(signal),
|
|
4885
|
+
drainAgents(signal),
|
|
4886
|
+
drainBroadcasts(signal),
|
|
4887
|
+
])
|
|
4888
|
+
return {
|
|
4889
|
+
...transport,
|
|
4890
|
+
// Fold domain leftovers into the transport result so `onComplete` sees
|
|
4891
|
+
// one honest outcome.
|
|
4892
|
+
outcome: transport.outcome === 'clean' && bots + agents + broadcasts === 0
|
|
4893
|
+
? 'clean'
|
|
4894
|
+
: 'forced',
|
|
4895
|
+
}
|
|
4896
|
+
},
|
|
4897
|
+
}
|
|
4898
|
+
|
|
4899
|
+
bindProcessSignals(composite, { shutdown: { gracePeriodMs: 30_000 } })
|
|
4900
|
+
```
|
|
4901
|
+
|
|
4902
|
+
The transport half inside stays the real managed handle — its admission gate and
|
|
4903
|
+
HTTP drain are not reimplemented, only composed. Domain drains must watch the
|
|
4904
|
+
`signal` themselves: it is the only channel a second OS signal has into a
|
|
4905
|
+
running chain.
|
|
4906
|
+
|
|
4907
|
+
#### The last line of defence is yours
|
|
4908
|
+
|
|
4909
|
+
The framework never calls `process.exit`, and `process.exitCode` only takes
|
|
4910
|
+
effect once the event loop empties — which is exactly what a stuck resource
|
|
4911
|
+
prevents. If the deployment must exit before the supervisor's `SIGKILL`, arm an
|
|
4912
|
+
application-side timer:
|
|
4913
|
+
|
|
4914
|
+
```ts
|
|
4915
|
+
onShutdown: () => {
|
|
4916
|
+
setTimeout(() => process.exit(1), 60_000).unref()
|
|
4917
|
+
},
|
|
4918
|
+
```
|
|
4919
|
+
|
|
4920
|
+
`unref()` keeps the timer from holding a healthy process open; it only fires if
|
|
4921
|
+
something else already is.
|
|
4922
|
+
|
|
4923
|
+
#### When NOT to use `bindProcessSignals`
|
|
4924
|
+
|
|
4925
|
+
- The application already runs a signal machine with states this one does not
|
|
4926
|
+
have (staged escalation policies, per-signal semantics beyond
|
|
4927
|
+
first/force/escalate). Two machines on the same signals is worse than either.
|
|
4928
|
+
- Signal policy must differ per signal (e.g. `SIGHUP` = reload, not shutdown) —
|
|
4929
|
+
bind only the terminating signals here and keep the rest yours.
|
|
4930
|
+
- Something else in the process must keep listening for the same signal: the
|
|
4931
|
+
escalation path restores the default disposition only when nothing else
|
|
4932
|
+
listens, and reports `onEscalationBlocked` otherwise.
|
|
4933
|
+
|
|
4800
4934
|
The server owns HTTP/Socket.IO transport resources. MCP, databases, queues and
|
|
4801
4935
|
domain run-state remain application resources and close explicitly after server
|
|
4802
4936
|
drain. Do not call `runtime.stop()` or `socket.io.close()` in parallel with
|
|
@@ -6229,6 +6363,7 @@ Also re-exports the error helpers from `stitchkit/contract`.
|
|
|
6229
6363
|
| `implementRegistry` | function | bind one exact contract registry to one exact backend handler registry |
|
|
6230
6364
|
| `createImplementRegistry` | function | context-typed factory for `implementRegistry` |
|
|
6231
6365
|
| `ImplementationRegistry` | _type_ | flat literal registry of concrete contracts accepted by `implementRegistry` |
|
|
6366
|
+
| `KeyedServices` | _type_ | registry result: the mount-ordered `ServiceDef[]` carrying the same services under `.byKey` |
|
|
6232
6367
|
| `RegistryHandlers` | _type_ | exact backend handler registry inferred from a contract registry |
|
|
6233
6368
|
| `ExactRegistryHandlers` | _type_ | fail-first handler shape that rejects extra registry and endpoint keys |
|
|
6234
6369
|
| `staticRoute` | function | a raw route that serves a directory |
|
|
@@ -6290,6 +6425,11 @@ Also re-exports the error helpers from `stitchkit/contract`.
|
|
|
6290
6425
|
| `AuthHook` | _type_ | the hook `createAuthHook` returns |
|
|
6291
6426
|
| `AuthHookConfig` | _type_ | config for `createAuthHook` |
|
|
6292
6427
|
| `AuthRule` | _type_ | `'public' \| 'authenticated' \| predicate` |
|
|
6428
|
+
| `ScopedAuthRule` | _type_ | a rule plus its typed context contribution — `{ rule, inject? }` |
|
|
6429
|
+
| `AuthRules` | _type_ | the `rules` map: bare rules or scoped rules |
|
|
6430
|
+
| `RuleScopes` | _type_ | scope→context map derived from a `rules` object; `'public'` fields become optional |
|
|
6431
|
+
| `ScopedAuthHook` | _type_ | an auth hook carrying its derived scope map at the type level |
|
|
6432
|
+
| `AuthScopes` | _type_ | recover the derived map — `createScopedImplement<AuthScopes<typeof hook>>()` |
|
|
6293
6433
|
| `BearerResolverConfig` | _type_ | config for `createBearerResolver` |
|
|
6294
6434
|
| `JwtPayload` | _type_ | a decoded JWT payload |
|
|
6295
6435
|
| `SignJwtOptions` | _type_ | options for `signJwt` (expiry, claims) |
|
|
@@ -6352,7 +6492,7 @@ Also re-exports the error helpers from `stitchkit/contract`.
|
|
|
6352
6492
|
| `ProcessSignalsErrorPhase` | _type_ | `'prepare' \| 'shutdown' \| 'complete'` — which phase an `onError` report came from |
|
|
6353
6493
|
| `SignalSource` | _type_ | injectable signal source — `process` by default |
|
|
6354
6494
|
| `ProcessSignalName` | _type_ | signal names the binding accepts (owned, so the published types need no `@types/node`) |
|
|
6355
|
-
| `ShutdownTarget` | _type_ | the `shutdown`-only slice
|
|
6495
|
+
| `ShutdownTarget` | _type_ | the `shutdown`-only slice a binding needs — an interface, so a [composite target](../guide/testing-and-deployment.md#composite-shutdown-target--parallel-domain-drains) can drain several domains under one signal machine |
|
|
6356
6496
|
| `createRateLimiter` | function | token-bucket rate limiting — [guide](../guide/server.md#rate-limiting) |
|
|
6357
6497
|
| `createCache` | function | an in-memory TTL cache |
|
|
6358
6498
|
| `CacheOptions` | _type_ | bounded-cache options, including the maximum retained entry count |
|
|
@@ -6481,6 +6621,7 @@ payload.
|
|
|
6481
6621
|
| `resolveMedia` | function | resolve a media reference for a tool result |
|
|
6482
6622
|
| `validateMcpSchemas` | function | object-shaped assertion over the exact advertised schema surface — compatibility, typed properties and portable formats ([guide](../guide/mcp-and-agents.md#mcp-schema-validation-profile)) |
|
|
6483
6623
|
| `listToolNames` | function | every contract/runtime tool name with origin, identity and transports — for stable snapshots — [guide](../guide/mcp-and-agents.md#pinning-tool-names--listtoolnames) |
|
|
6624
|
+
| `listContractToolNames` | function | the same listing straight from contracts — no handlers or stub services needed |
|
|
6484
6625
|
| `McpHandlerConfig` | _type_ | server surface plus stateless HTTP transport config |
|
|
6485
6626
|
| `McpHttpConfig` | _type_ | HTTP auth, protected-resource, legacy-era and security options |
|
|
6486
6627
|
| `McpHttpHandler` | _type_ | framework-owned `{ fetch(request), close() }` lifecycle |
|