mcp-expose 1.0.0 → 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/CHANGELOG.md +19 -1
- package/README.md +102 -13
- package/dist/adonisjs/index.cjs +238 -0
- package/dist/adonisjs/index.cjs.map +1 -1
- package/dist/adonisjs/index.d.cts +2 -1
- package/dist/adonisjs/index.d.ts +2 -1
- package/dist/adonisjs/index.js +238 -0
- package/dist/adonisjs/index.js.map +1 -1
- package/dist/express/index.cjs +236 -1
- package/dist/express/index.cjs.map +1 -1
- package/dist/express/index.d.cts +4 -2
- package/dist/express/index.d.ts +4 -2
- package/dist/express/index.js +236 -1
- package/dist/express/index.js.map +1 -1
- package/dist/fastify/index.cjs +245 -0
- package/dist/fastify/index.cjs.map +1 -1
- package/dist/fastify/index.d.cts +2 -1
- package/dist/fastify/index.d.ts +2 -1
- package/dist/fastify/index.js +245 -0
- package/dist/fastify/index.js.map +1 -1
- package/dist/hono/index.cjs +239 -0
- package/dist/hono/index.cjs.map +1 -1
- package/dist/hono/index.d.cts +2 -1
- package/dist/hono/index.d.ts +2 -1
- package/dist/hono/index.js +239 -0
- package/dist/hono/index.js.map +1 -1
- package/dist/index.cjs +243 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +239 -0
- package/dist/index.js.map +1 -1
- package/dist/koa/index.cjs +238 -0
- package/dist/koa/index.cjs.map +1 -1
- package/dist/koa/index.d.cts +2 -1
- package/dist/koa/index.d.ts +2 -1
- package/dist/koa/index.js +238 -0
- package/dist/koa/index.js.map +1 -1
- package/dist/nestjs/index.cjs +253 -1
- package/dist/nestjs/index.cjs.map +1 -1
- package/dist/nestjs/index.d.cts +21 -7
- package/dist/nestjs/index.d.ts +21 -7
- package/dist/nestjs/index.js +254 -2
- package/dist/nestjs/index.js.map +1 -1
- package/dist/oauth/index.cjs +214 -0
- package/dist/oauth/index.cjs.map +1 -0
- package/dist/oauth/index.d.cts +69 -0
- package/dist/oauth/index.d.ts +69 -0
- package/dist/oauth/index.js +177 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth-8RmQamGP.d.cts +75 -0
- package/dist/oauth-8RmQamGP.d.ts +75 -0
- package/dist/{server-fzkb-wJo.d.ts → server-BFQ_Hdh9.d.cts} +27 -0
- package/dist/{server-fzkb-wJo.d.cts → server-BRw1E2xy.d.ts} +27 -0
- package/package.json +21 -2
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth 2.1 support per the MCP authorization spec: the MCP endpoint acts as an
|
|
3
|
+
* OAuth *resource server*. It publishes Protected Resource Metadata (RFC 9728),
|
|
4
|
+
* answers unauthenticated requests with a `WWW-Authenticate` challenge that
|
|
5
|
+
* tells the client where to log in, and checks bearer tokens with a verifier
|
|
6
|
+
* you provide (see `jwtVerifier` / `introspectionVerifier` in `mcp-expose/oauth`).
|
|
7
|
+
*
|
|
8
|
+
* Runtime-agnostic: no `node:*` imports.
|
|
9
|
+
*/
|
|
10
|
+
/** Who the access token belongs to and what it allows. Available to tools as `ctx.auth`. */
|
|
11
|
+
interface AuthInfo {
|
|
12
|
+
/** The raw access token. */
|
|
13
|
+
token: string;
|
|
14
|
+
/** Scopes granted to the token. */
|
|
15
|
+
scopes: string[];
|
|
16
|
+
/** Subject (user id), e.g. the JWT `sub` claim. */
|
|
17
|
+
subject?: string;
|
|
18
|
+
/** OAuth client the token was issued to. */
|
|
19
|
+
clientId?: string;
|
|
20
|
+
/** Expiry, in seconds since the epoch. Expired tokens are rejected. */
|
|
21
|
+
expiresAt?: number;
|
|
22
|
+
/** All claims / introspection fields. */
|
|
23
|
+
claims?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
interface VerifyTokenContext {
|
|
26
|
+
/** The canonical resource URL (`oauth.resource`). Tokens must be issued for it (audience). */
|
|
27
|
+
resource: string;
|
|
28
|
+
/** Lower-cased headers of the MCP request. */
|
|
29
|
+
headers: Record<string, string>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Checks an access token. Return its AuthInfo, or `undefined` / throw when the
|
|
33
|
+
* token is invalid. It MUST check that the token was issued for this server
|
|
34
|
+
* (audience = `ctx.resource`), or tokens meant for other services would be accepted.
|
|
35
|
+
*/
|
|
36
|
+
type TokenVerifier = (token: string, ctx: VerifyTokenContext) => AuthInfo | undefined | null | Promise<AuthInfo | undefined | null>;
|
|
37
|
+
interface OAuthOptions {
|
|
38
|
+
/**
|
|
39
|
+
* Canonical, public URL of the MCP endpoint, e.g. `https://api.example.com/mcp`.
|
|
40
|
+
* Clients request tokens for this resource, and it must match the URL they connect to.
|
|
41
|
+
*/
|
|
42
|
+
resource: string;
|
|
43
|
+
/** Issuer URLs of the authorization servers that issue tokens for this server. */
|
|
44
|
+
authorizationServers: string[];
|
|
45
|
+
/** Checks bearer tokens. */
|
|
46
|
+
verifyToken: TokenVerifier;
|
|
47
|
+
/** Scopes every token needs to use the MCP endpoint at all. */
|
|
48
|
+
requiredScopes?: string[];
|
|
49
|
+
/** Scopes advertised in the metadata. @default requiredScopes plus every tool's `scopes` */
|
|
50
|
+
scopesSupported?: string[];
|
|
51
|
+
/** Human-readable name shown by clients. */
|
|
52
|
+
resourceName?: string;
|
|
53
|
+
/** URL of documentation for developers. */
|
|
54
|
+
resourceDocumentation?: string;
|
|
55
|
+
/** Extra fields merged into the Protected Resource Metadata document. */
|
|
56
|
+
metadata?: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Paths the metadata is served on, per RFC 9728: the well-known prefix with the
|
|
60
|
+
* resource path appended (`/.well-known/oauth-protected-resource/mcp`), plus the
|
|
61
|
+
* bare well-known path that older clients fall back to.
|
|
62
|
+
*/
|
|
63
|
+
declare function protectedResourceMetadataPaths(resource: string): string[];
|
|
64
|
+
/** Absolute URL of the metadata document, used in `WWW-Authenticate`. */
|
|
65
|
+
declare function protectedResourceMetadataUrl(resource: string): string;
|
|
66
|
+
/** Build a `WWW-Authenticate: Bearer ...` challenge (RFC 6750 + RFC 9728). */
|
|
67
|
+
declare function bearerChallenge(resource: string, params?: {
|
|
68
|
+
error?: string;
|
|
69
|
+
errorDescription?: string;
|
|
70
|
+
scope?: string[];
|
|
71
|
+
}): string;
|
|
72
|
+
/** Parse a space-separated `scope` string or an array of scopes. */
|
|
73
|
+
declare function parseScopes(value: unknown): string[];
|
|
74
|
+
|
|
75
|
+
export { type AuthInfo as A, type OAuthOptions as O, type TokenVerifier as T, type VerifyTokenContext as V, protectedResourceMetadataPaths as a, bearerChallenge as b, protectedResourceMetadataUrl as c, parseScopes as p };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth 2.1 support per the MCP authorization spec: the MCP endpoint acts as an
|
|
3
|
+
* OAuth *resource server*. It publishes Protected Resource Metadata (RFC 9728),
|
|
4
|
+
* answers unauthenticated requests with a `WWW-Authenticate` challenge that
|
|
5
|
+
* tells the client where to log in, and checks bearer tokens with a verifier
|
|
6
|
+
* you provide (see `jwtVerifier` / `introspectionVerifier` in `mcp-expose/oauth`).
|
|
7
|
+
*
|
|
8
|
+
* Runtime-agnostic: no `node:*` imports.
|
|
9
|
+
*/
|
|
10
|
+
/** Who the access token belongs to and what it allows. Available to tools as `ctx.auth`. */
|
|
11
|
+
interface AuthInfo {
|
|
12
|
+
/** The raw access token. */
|
|
13
|
+
token: string;
|
|
14
|
+
/** Scopes granted to the token. */
|
|
15
|
+
scopes: string[];
|
|
16
|
+
/** Subject (user id), e.g. the JWT `sub` claim. */
|
|
17
|
+
subject?: string;
|
|
18
|
+
/** OAuth client the token was issued to. */
|
|
19
|
+
clientId?: string;
|
|
20
|
+
/** Expiry, in seconds since the epoch. Expired tokens are rejected. */
|
|
21
|
+
expiresAt?: number;
|
|
22
|
+
/** All claims / introspection fields. */
|
|
23
|
+
claims?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
interface VerifyTokenContext {
|
|
26
|
+
/** The canonical resource URL (`oauth.resource`). Tokens must be issued for it (audience). */
|
|
27
|
+
resource: string;
|
|
28
|
+
/** Lower-cased headers of the MCP request. */
|
|
29
|
+
headers: Record<string, string>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Checks an access token. Return its AuthInfo, or `undefined` / throw when the
|
|
33
|
+
* token is invalid. It MUST check that the token was issued for this server
|
|
34
|
+
* (audience = `ctx.resource`), or tokens meant for other services would be accepted.
|
|
35
|
+
*/
|
|
36
|
+
type TokenVerifier = (token: string, ctx: VerifyTokenContext) => AuthInfo | undefined | null | Promise<AuthInfo | undefined | null>;
|
|
37
|
+
interface OAuthOptions {
|
|
38
|
+
/**
|
|
39
|
+
* Canonical, public URL of the MCP endpoint, e.g. `https://api.example.com/mcp`.
|
|
40
|
+
* Clients request tokens for this resource, and it must match the URL they connect to.
|
|
41
|
+
*/
|
|
42
|
+
resource: string;
|
|
43
|
+
/** Issuer URLs of the authorization servers that issue tokens for this server. */
|
|
44
|
+
authorizationServers: string[];
|
|
45
|
+
/** Checks bearer tokens. */
|
|
46
|
+
verifyToken: TokenVerifier;
|
|
47
|
+
/** Scopes every token needs to use the MCP endpoint at all. */
|
|
48
|
+
requiredScopes?: string[];
|
|
49
|
+
/** Scopes advertised in the metadata. @default requiredScopes plus every tool's `scopes` */
|
|
50
|
+
scopesSupported?: string[];
|
|
51
|
+
/** Human-readable name shown by clients. */
|
|
52
|
+
resourceName?: string;
|
|
53
|
+
/** URL of documentation for developers. */
|
|
54
|
+
resourceDocumentation?: string;
|
|
55
|
+
/** Extra fields merged into the Protected Resource Metadata document. */
|
|
56
|
+
metadata?: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Paths the metadata is served on, per RFC 9728: the well-known prefix with the
|
|
60
|
+
* resource path appended (`/.well-known/oauth-protected-resource/mcp`), plus the
|
|
61
|
+
* bare well-known path that older clients fall back to.
|
|
62
|
+
*/
|
|
63
|
+
declare function protectedResourceMetadataPaths(resource: string): string[];
|
|
64
|
+
/** Absolute URL of the metadata document, used in `WWW-Authenticate`. */
|
|
65
|
+
declare function protectedResourceMetadataUrl(resource: string): string;
|
|
66
|
+
/** Build a `WWW-Authenticate: Bearer ...` challenge (RFC 6750 + RFC 9728). */
|
|
67
|
+
declare function bearerChallenge(resource: string, params?: {
|
|
68
|
+
error?: string;
|
|
69
|
+
errorDescription?: string;
|
|
70
|
+
scope?: string[];
|
|
71
|
+
}): string;
|
|
72
|
+
/** Parse a space-separated `scope` string or an array of scopes. */
|
|
73
|
+
declare function parseScopes(value: unknown): string[];
|
|
74
|
+
|
|
75
|
+
export { type AuthInfo as A, type OAuthOptions as O, type TokenVerifier as T, type VerifyTokenContext as V, protectedResourceMetadataPaths as a, bearerChallenge as b, protectedResourceMetadataUrl as c, parseScopes as p };
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { O as OAuthOptions, A as AuthInfo } from './oauth-8RmQamGP.cjs';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Shared types for mcp-expose. Everything in `core` is runtime-agnostic
|
|
3
5
|
* (no `node:*` imports) so it also works on Bun, Deno and edge runtimes.
|
|
@@ -48,6 +50,8 @@ interface ToolContext {
|
|
|
48
50
|
clientIp?: string;
|
|
49
51
|
/** Framework-specific raw request object (Express req, Koa ctx, Hono context...). */
|
|
50
52
|
raw?: unknown;
|
|
53
|
+
/** The verified access token, when the `oauth` option is enabled. */
|
|
54
|
+
auth?: AuthInfo;
|
|
51
55
|
}
|
|
52
56
|
/** A fully resolved MCP tool. */
|
|
53
57
|
interface McpToolDefinition {
|
|
@@ -57,6 +61,12 @@ interface McpToolDefinition {
|
|
|
57
61
|
inputSchema: JsonSchema;
|
|
58
62
|
annotations?: ToolAnnotations;
|
|
59
63
|
handler: (args: Record<string, unknown>, ctx: ToolContext) => Promise<ToolResult>;
|
|
64
|
+
/**
|
|
65
|
+
* OAuth scopes the access token needs to call this tool (only checked when the
|
|
66
|
+
* `oauth` option is enabled). Missing scopes answer HTTP 403 `insufficient_scope`,
|
|
67
|
+
* so the client can ask the user for more access.
|
|
68
|
+
*/
|
|
69
|
+
scopes?: string[];
|
|
60
70
|
/** Optional validator run before the handler (from Standard Schema inputs). */
|
|
61
71
|
validate?: (args: unknown) => Promise<{
|
|
62
72
|
ok: true;
|
|
@@ -87,6 +97,8 @@ interface RouteToolOptions {
|
|
|
87
97
|
annotations?: ToolAnnotations;
|
|
88
98
|
/** Extra static headers sent with the internal request. */
|
|
89
99
|
headers?: Record<string, string>;
|
|
100
|
+
/** OAuth scopes needed to call this tool (when the `oauth` option is enabled). */
|
|
101
|
+
scopes?: string[];
|
|
90
102
|
}
|
|
91
103
|
/** HTTP route that backs a tool. `path` may use `:param` or `{param}` placeholders. */
|
|
92
104
|
interface RouteSpec {
|
|
@@ -136,6 +148,12 @@ interface McpServerOptions {
|
|
|
136
148
|
forwardHeaders?: string[];
|
|
137
149
|
/** Max characters of an API response returned to the model. @default 100_000 */
|
|
138
150
|
maxResponseChars?: number;
|
|
151
|
+
/**
|
|
152
|
+
* Protect the MCP endpoint with OAuth 2.1, as the MCP authorization spec
|
|
153
|
+
* describes. MCP clients (Claude, Cursor, VS Code, ...) then discover your
|
|
154
|
+
* authorization server and sign the user in by themselves.
|
|
155
|
+
*/
|
|
156
|
+
oauth?: OAuthOptions;
|
|
139
157
|
}
|
|
140
158
|
|
|
141
159
|
declare const SUPPORTED_PROTOCOL_VERSIONS: string[];
|
|
@@ -184,6 +202,15 @@ declare class McpServer {
|
|
|
184
202
|
private callTool;
|
|
185
203
|
/** Check the Origin header (DNS rebinding protection). */
|
|
186
204
|
isOriginAllowed(origin: string | undefined): boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Paths on which adapters serve the OAuth Protected Resource Metadata
|
|
207
|
+
* (empty when `oauth` is not configured). They must be public: no auth middleware.
|
|
208
|
+
*/
|
|
209
|
+
get oauthMetadataPaths(): string[];
|
|
210
|
+
/** The OAuth Protected Resource Metadata document (RFC 9728). */
|
|
211
|
+
protectedResourceMetadata(): Promise<Record<string, unknown>>;
|
|
212
|
+
/** HTTP handler for the metadata paths. Public and CORS-enabled so browser-based clients can read it. */
|
|
213
|
+
handleMetadataHttp(req: Pick<McpHttpRequest, 'method'>): Promise<McpHttpResponse>;
|
|
187
214
|
/**
|
|
188
215
|
* Framework-neutral Streamable HTTP handler. Adapters convert their request
|
|
189
216
|
* into McpHttpRequest, call this, and write the McpHttpResponse back.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { O as OAuthOptions, A as AuthInfo } from './oauth-8RmQamGP.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Shared types for mcp-expose. Everything in `core` is runtime-agnostic
|
|
3
5
|
* (no `node:*` imports) so it also works on Bun, Deno and edge runtimes.
|
|
@@ -48,6 +50,8 @@ interface ToolContext {
|
|
|
48
50
|
clientIp?: string;
|
|
49
51
|
/** Framework-specific raw request object (Express req, Koa ctx, Hono context...). */
|
|
50
52
|
raw?: unknown;
|
|
53
|
+
/** The verified access token, when the `oauth` option is enabled. */
|
|
54
|
+
auth?: AuthInfo;
|
|
51
55
|
}
|
|
52
56
|
/** A fully resolved MCP tool. */
|
|
53
57
|
interface McpToolDefinition {
|
|
@@ -57,6 +61,12 @@ interface McpToolDefinition {
|
|
|
57
61
|
inputSchema: JsonSchema;
|
|
58
62
|
annotations?: ToolAnnotations;
|
|
59
63
|
handler: (args: Record<string, unknown>, ctx: ToolContext) => Promise<ToolResult>;
|
|
64
|
+
/**
|
|
65
|
+
* OAuth scopes the access token needs to call this tool (only checked when the
|
|
66
|
+
* `oauth` option is enabled). Missing scopes answer HTTP 403 `insufficient_scope`,
|
|
67
|
+
* so the client can ask the user for more access.
|
|
68
|
+
*/
|
|
69
|
+
scopes?: string[];
|
|
60
70
|
/** Optional validator run before the handler (from Standard Schema inputs). */
|
|
61
71
|
validate?: (args: unknown) => Promise<{
|
|
62
72
|
ok: true;
|
|
@@ -87,6 +97,8 @@ interface RouteToolOptions {
|
|
|
87
97
|
annotations?: ToolAnnotations;
|
|
88
98
|
/** Extra static headers sent with the internal request. */
|
|
89
99
|
headers?: Record<string, string>;
|
|
100
|
+
/** OAuth scopes needed to call this tool (when the `oauth` option is enabled). */
|
|
101
|
+
scopes?: string[];
|
|
90
102
|
}
|
|
91
103
|
/** HTTP route that backs a tool. `path` may use `:param` or `{param}` placeholders. */
|
|
92
104
|
interface RouteSpec {
|
|
@@ -136,6 +148,12 @@ interface McpServerOptions {
|
|
|
136
148
|
forwardHeaders?: string[];
|
|
137
149
|
/** Max characters of an API response returned to the model. @default 100_000 */
|
|
138
150
|
maxResponseChars?: number;
|
|
151
|
+
/**
|
|
152
|
+
* Protect the MCP endpoint with OAuth 2.1, as the MCP authorization spec
|
|
153
|
+
* describes. MCP clients (Claude, Cursor, VS Code, ...) then discover your
|
|
154
|
+
* authorization server and sign the user in by themselves.
|
|
155
|
+
*/
|
|
156
|
+
oauth?: OAuthOptions;
|
|
139
157
|
}
|
|
140
158
|
|
|
141
159
|
declare const SUPPORTED_PROTOCOL_VERSIONS: string[];
|
|
@@ -184,6 +202,15 @@ declare class McpServer {
|
|
|
184
202
|
private callTool;
|
|
185
203
|
/** Check the Origin header (DNS rebinding protection). */
|
|
186
204
|
isOriginAllowed(origin: string | undefined): boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Paths on which adapters serve the OAuth Protected Resource Metadata
|
|
207
|
+
* (empty when `oauth` is not configured). They must be public: no auth middleware.
|
|
208
|
+
*/
|
|
209
|
+
get oauthMetadataPaths(): string[];
|
|
210
|
+
/** The OAuth Protected Resource Metadata document (RFC 9728). */
|
|
211
|
+
protectedResourceMetadata(): Promise<Record<string, unknown>>;
|
|
212
|
+
/** HTTP handler for the metadata paths. Public and CORS-enabled so browser-based clients can read it. */
|
|
213
|
+
handleMetadataHttp(req: Pick<McpHttpRequest, 'method'>): Promise<McpHttpResponse>;
|
|
187
214
|
/**
|
|
188
215
|
* Framework-neutral Streamable HTTP handler. Adapters convert their request
|
|
189
216
|
* into McpHttpRequest, call this, and write the McpHttpResponse back.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-expose",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Turn the HTTP routes of your existing Node.js app (NestJS, Express, Fastify, Koa, Hono, AdonisJS) into MCP tools for AI agents, reusing your auth, validation and rate limits.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
"hono",
|
|
18
18
|
"adonisjs",
|
|
19
19
|
"openapi",
|
|
20
|
-
"tools"
|
|
20
|
+
"tools",
|
|
21
|
+
"oauth",
|
|
22
|
+
"oauth2",
|
|
23
|
+
"authorization"
|
|
21
24
|
],
|
|
22
25
|
"homepage": "https://github.com/NITINKACHHADIYA/Node-MCP#readme",
|
|
23
26
|
"bugs": {
|
|
@@ -56,6 +59,9 @@
|
|
|
56
59
|
],
|
|
57
60
|
"adonisjs": [
|
|
58
61
|
"dist/adonisjs/index.d.ts"
|
|
62
|
+
],
|
|
63
|
+
"oauth": [
|
|
64
|
+
"dist/oauth/index.d.ts"
|
|
59
65
|
]
|
|
60
66
|
}
|
|
61
67
|
},
|
|
@@ -116,6 +122,14 @@
|
|
|
116
122
|
"import": "./dist/adonisjs/index.js",
|
|
117
123
|
"require": "./dist/adonisjs/index.cjs"
|
|
118
124
|
},
|
|
125
|
+
"./oauth": {
|
|
126
|
+
"types": {
|
|
127
|
+
"import": "./dist/oauth/index.d.ts",
|
|
128
|
+
"require": "./dist/oauth/index.d.cts"
|
|
129
|
+
},
|
|
130
|
+
"import": "./dist/oauth/index.js",
|
|
131
|
+
"require": "./dist/oauth/index.cjs"
|
|
132
|
+
},
|
|
119
133
|
"./package.json": "./package.json"
|
|
120
134
|
},
|
|
121
135
|
"files": [
|
|
@@ -153,6 +167,7 @@
|
|
|
153
167
|
"express": ">=3",
|
|
154
168
|
"fastify": ">=3",
|
|
155
169
|
"hono": ">=2",
|
|
170
|
+
"jose": ">=5",
|
|
156
171
|
"koa": ">=1"
|
|
157
172
|
},
|
|
158
173
|
"peerDependenciesMeta": {
|
|
@@ -177,6 +192,9 @@
|
|
|
177
192
|
"hono": {
|
|
178
193
|
"optional": true
|
|
179
194
|
},
|
|
195
|
+
"jose": {
|
|
196
|
+
"optional": true
|
|
197
|
+
},
|
|
180
198
|
"koa": {
|
|
181
199
|
"optional": true
|
|
182
200
|
}
|
|
@@ -205,6 +223,7 @@
|
|
|
205
223
|
"fastify": "^5.12.5",
|
|
206
224
|
"globals": "^17.12.0",
|
|
207
225
|
"hono": "^4.13.9",
|
|
226
|
+
"jose": "^6.2.12",
|
|
208
227
|
"koa": "^3.2.1",
|
|
209
228
|
"prettier": "^3.9.9",
|
|
210
229
|
"publint": "^0.3.24",
|