@q32/core 0.1.20 → 0.1.22
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/README.md +10 -2
- package/dist/auth.d.ts +98 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +230 -0
- package/dist/auth.js.map +1 -0
- package/dist/hono.d.ts +22 -0
- package/dist/hono.d.ts.map +1 -0
- package/dist/hono.js +26 -0
- package/dist/hono.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/jobs.d.ts +394 -6
- package/dist/jobs.d.ts.map +1 -1
- package/dist/jobs.js +1134 -62
- package/dist/jobs.js.map +1 -1
- package/dist/react-router.d.ts +14 -0
- package/dist/react-router.d.ts.map +1 -0
- package/dist/react-router.js +30 -0
- package/dist/react-router.js.map +1 -0
- package/docs/evaluation.md +5 -4
- package/docs/jobs.md +49 -0
- package/package.json +13 -1
- package/src/auth.ts +338 -0
- package/src/hono.ts +54 -0
- package/src/index.ts +3 -0
- package/src/jobs.ts +1665 -71
- package/src/react-router.ts +53 -0
package/README.md
CHANGED
|
@@ -6,6 +6,7 @@ The first release focuses on common infrastructure repeated across Q32 apps:
|
|
|
6
6
|
|
|
7
7
|
- AI provider contracts and JSON extraction helpers
|
|
8
8
|
- API operation registries
|
|
9
|
+
- framework-neutral auth/session/MCP auth services with thin Hono and React Router adapters
|
|
9
10
|
- billing plan/status primitives
|
|
10
11
|
- Cloudflare binding guards
|
|
11
12
|
- environment parsing
|
|
@@ -15,7 +16,7 @@ The first release focuses on common infrastructure repeated across Q32 apps:
|
|
|
15
16
|
- HTTP JSON/error helpers
|
|
16
17
|
- D1-like database types and migration runner
|
|
17
18
|
- encoding helpers
|
|
18
|
-
- D1-backed jobs
|
|
19
|
+
- durable D1-backed jobs, child orchestration, queue publishers, and pipeline managers
|
|
19
20
|
- `ops_events`
|
|
20
21
|
- Postgres migration helpers
|
|
21
22
|
- R2 JSON artifacts
|
|
@@ -50,13 +51,20 @@ import {
|
|
|
50
51
|
D1JobStore,
|
|
51
52
|
D1_JOBS_SCHEMA,
|
|
52
53
|
appUrl,
|
|
54
|
+
createAuthSystem,
|
|
53
55
|
createId,
|
|
56
|
+
honoAuthMiddleware,
|
|
54
57
|
jsonResponse,
|
|
55
58
|
oauthAuthorizationServerMetadata,
|
|
59
|
+
reactRouterAuthContext,
|
|
56
60
|
renderSitemapXml,
|
|
57
61
|
recordOpsEvent,
|
|
58
62
|
signSession,
|
|
59
63
|
} from "@q32/core";
|
|
60
64
|
```
|
|
61
65
|
|
|
62
|
-
See [docs/evaluation.md](docs/evaluation.md) for the project-inventory replacement matrix.
|
|
66
|
+
See [docs/evaluation.md](docs/evaluation.md) for the project-inventory replacement matrix and [docs/jobs.md](docs/jobs.md) for the shared jobs model.
|
|
67
|
+
|
|
68
|
+
Framework adapters are deliberately thin. Put policy and persistence in `auth`,
|
|
69
|
+
`jobs`, `ops-events`, and `api`; use `hono` or `react-router` only to translate a
|
|
70
|
+
framework request/response shape into those shared services.
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { type McpOAuthRepository, type McpTokenRow, type OAuthClientInformation, type OAuthClientRegistration, type OAuthTokens } from "./oauth.js";
|
|
2
|
+
export type CookieOptions = {
|
|
3
|
+
name: string;
|
|
4
|
+
};
|
|
5
|
+
export type SessionAuthOptions<TSession> = {
|
|
6
|
+
secret: string;
|
|
7
|
+
cookie: CookieOptions;
|
|
8
|
+
verify?: (payload: TSession) => Promise<TSession | null> | TSession | null;
|
|
9
|
+
};
|
|
10
|
+
export type AuthContext<TPrincipal = unknown, TSession = unknown> = {
|
|
11
|
+
request: Request;
|
|
12
|
+
session: TSession | null;
|
|
13
|
+
principal: TPrincipal | null;
|
|
14
|
+
};
|
|
15
|
+
export type AuthSystemOptions<TPrincipal, TSession> = {
|
|
16
|
+
session?: SessionAuthOptions<TSession>;
|
|
17
|
+
loadPrincipal?: (session: TSession, request: Request) => Promise<TPrincipal | null> | TPrincipal | null;
|
|
18
|
+
};
|
|
19
|
+
export declare class AuthSystem<TPrincipal = unknown, TSession = unknown> {
|
|
20
|
+
private readonly options;
|
|
21
|
+
constructor(options: AuthSystemOptions<TPrincipal, TSession>);
|
|
22
|
+
sessionFromRequest(request: Request): Promise<TSession | null>;
|
|
23
|
+
contextFromRequest(request: Request): Promise<AuthContext<TPrincipal, TSession>>;
|
|
24
|
+
requirePrincipal(request: Request): Promise<TPrincipal>;
|
|
25
|
+
}
|
|
26
|
+
export declare function createAuthSystem<TPrincipal = unknown, TSession = unknown>(options: AuthSystemOptions<TPrincipal, TSession>): AuthSystem<TPrincipal, TSession>;
|
|
27
|
+
export declare function getCookie(request: Request, name: string): string | undefined;
|
|
28
|
+
export declare function requireAdminRequest(request: Request, expectedToken: string | undefined): void;
|
|
29
|
+
export type McpAuthInfo<TSubject extends Record<string, string> = Record<string, string>> = {
|
|
30
|
+
token: string;
|
|
31
|
+
clientId: string;
|
|
32
|
+
scopes: string[];
|
|
33
|
+
expiresAt: number;
|
|
34
|
+
resource?: URL;
|
|
35
|
+
subject: TSubject;
|
|
36
|
+
extra?: Record<string, unknown>;
|
|
37
|
+
};
|
|
38
|
+
export type McpAuthorizationParams = {
|
|
39
|
+
redirectUri: string;
|
|
40
|
+
state?: string;
|
|
41
|
+
scopes?: string[];
|
|
42
|
+
resource?: URL;
|
|
43
|
+
codeChallenge: string;
|
|
44
|
+
};
|
|
45
|
+
export type McpAuthorizeResult = {
|
|
46
|
+
kind: "redirect";
|
|
47
|
+
location: string;
|
|
48
|
+
status?: number;
|
|
49
|
+
} | {
|
|
50
|
+
kind: "authorized";
|
|
51
|
+
code: string;
|
|
52
|
+
redirect: string;
|
|
53
|
+
};
|
|
54
|
+
export type McpAuthServiceOptions<TPrincipal, TSubject extends Record<string, string>> = {
|
|
55
|
+
repository: McpOAuthRepository;
|
|
56
|
+
sessionAuth?: AuthSystem<TPrincipal, unknown>;
|
|
57
|
+
loginPath?: string;
|
|
58
|
+
defaultScopes?: string[];
|
|
59
|
+
authCodeTtlSeconds?: number;
|
|
60
|
+
accessTokenTtlSeconds?: number;
|
|
61
|
+
refreshTokenTtlSeconds?: number;
|
|
62
|
+
refreshTokenReuseGraceSeconds?: number;
|
|
63
|
+
tokenEncryptionSecret: string;
|
|
64
|
+
principalToSubject: (principal: TPrincipal) => TSubject | null | Promise<TSubject | null>;
|
|
65
|
+
subjectToPrincipal?: (subject: TSubject) => TPrincipal | null | Promise<TPrincipal | null>;
|
|
66
|
+
canAuthorize?: (principal: TPrincipal, client: OAuthClientInformation, params: McpAuthorizationParams) => boolean | Promise<boolean>;
|
|
67
|
+
canUseToken?: (principal: TPrincipal, row: McpTokenRow) => boolean | Promise<boolean>;
|
|
68
|
+
accessDeniedDescription?: string;
|
|
69
|
+
createAuthorizationCode?: () => string;
|
|
70
|
+
createAccessToken?: () => string;
|
|
71
|
+
createRefreshToken?: () => string;
|
|
72
|
+
now?: () => number;
|
|
73
|
+
};
|
|
74
|
+
export declare class McpAuthService<TPrincipal, TSubject extends Record<string, string> = Record<string, string>> {
|
|
75
|
+
private readonly options;
|
|
76
|
+
readonly skipLocalPkceValidation = false;
|
|
77
|
+
constructor(options: McpAuthServiceOptions<TPrincipal, TSubject>);
|
|
78
|
+
get clientsStore(): {
|
|
79
|
+
getClient: (clientId: string) => Promise<OAuthClientInformation | undefined>;
|
|
80
|
+
registerClient: (client: OAuthClientRegistration) => Promise<OAuthClientInformation>;
|
|
81
|
+
};
|
|
82
|
+
authorize(client: OAuthClientInformation, params: McpAuthorizationParams, request: Request): Promise<McpAuthorizeResult>;
|
|
83
|
+
challengeForAuthorizationCode(client: OAuthClientInformation, authorizationCode: string): Promise<string>;
|
|
84
|
+
exchangeAuthorizationCode(client: OAuthClientInformation, authorizationCode: string, _codeVerifier?: string, redirectUri?: string, resource?: URL): Promise<OAuthTokens>;
|
|
85
|
+
exchangeRefreshToken(client: OAuthClientInformation, refreshToken: string, scopes?: string[], resource?: URL): Promise<OAuthTokens>;
|
|
86
|
+
verifyAccessToken(token: string): Promise<McpAuthInfo<TSubject>>;
|
|
87
|
+
revokeToken(client: OAuthClientInformation, request: {
|
|
88
|
+
token: string;
|
|
89
|
+
}): Promise<void>;
|
|
90
|
+
private validAuthorizationCode;
|
|
91
|
+
private issueTokens;
|
|
92
|
+
private issueTokenSet;
|
|
93
|
+
private cachedRefreshResponse;
|
|
94
|
+
private defaultScopes;
|
|
95
|
+
private loginRedirect;
|
|
96
|
+
private now;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { HttpError, requireAdminToken } from "./http.js";
|
|
2
|
+
import { createOAuthRedirect, decryptOAuthTokenResponse, encryptOAuthTokenResponse, issueMcpOAuthTokenSet, parseOAuthJsonArray, } from "./oauth.js";
|
|
3
|
+
import { verifySession } from "./session.js";
|
|
4
|
+
export class AuthSystem {
|
|
5
|
+
options;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.options = options;
|
|
8
|
+
}
|
|
9
|
+
async sessionFromRequest(request) {
|
|
10
|
+
const config = this.options.session;
|
|
11
|
+
if (!config)
|
|
12
|
+
return null;
|
|
13
|
+
const token = getCookie(request, config.cookie.name);
|
|
14
|
+
const payload = await verifySession(token, config.secret);
|
|
15
|
+
if (!payload)
|
|
16
|
+
return null;
|
|
17
|
+
return config.verify ? await config.verify(payload) : payload;
|
|
18
|
+
}
|
|
19
|
+
async contextFromRequest(request) {
|
|
20
|
+
const session = await this.sessionFromRequest(request);
|
|
21
|
+
const principal = session && this.options.loadPrincipal ? await this.options.loadPrincipal(session, request) : null;
|
|
22
|
+
return { request, session, principal };
|
|
23
|
+
}
|
|
24
|
+
async requirePrincipal(request) {
|
|
25
|
+
const context = await this.contextFromRequest(request);
|
|
26
|
+
if (!context.principal)
|
|
27
|
+
throw new HttpError(401, "Authentication required.", "authentication_required");
|
|
28
|
+
return context.principal;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function createAuthSystem(options) {
|
|
32
|
+
return new AuthSystem(options);
|
|
33
|
+
}
|
|
34
|
+
export function getCookie(request, name) {
|
|
35
|
+
const cookie = request.headers.get("cookie");
|
|
36
|
+
if (!cookie)
|
|
37
|
+
return undefined;
|
|
38
|
+
for (const part of cookie.split(";")) {
|
|
39
|
+
const [rawName, ...rawValue] = part.trim().split("=");
|
|
40
|
+
if (rawName === name)
|
|
41
|
+
return decodeURIComponent(rawValue.join("="));
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
export function requireAdminRequest(request, expectedToken) {
|
|
46
|
+
requireAdminToken(request, expectedToken);
|
|
47
|
+
}
|
|
48
|
+
const DEFAULT_SCOPE = "mcp:read";
|
|
49
|
+
const DEFAULT_AUTH_CODE_TTL_SECONDS = 10 * 60;
|
|
50
|
+
const DEFAULT_ACCESS_TOKEN_TTL_SECONDS = 60 * 60;
|
|
51
|
+
const DEFAULT_REFRESH_TOKEN_TTL_SECONDS = 30 * 24 * 60 * 60;
|
|
52
|
+
const DEFAULT_REFRESH_TOKEN_REUSE_GRACE_SECONDS = 10 * 60;
|
|
53
|
+
export class McpAuthService {
|
|
54
|
+
options;
|
|
55
|
+
skipLocalPkceValidation = false;
|
|
56
|
+
constructor(options) {
|
|
57
|
+
this.options = options;
|
|
58
|
+
}
|
|
59
|
+
get clientsStore() {
|
|
60
|
+
return {
|
|
61
|
+
getClient: (clientId) => this.options.repository.getClient(clientId),
|
|
62
|
+
registerClient: (client) => this.options.repository.registerClient(client),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
async authorize(client, params, request) {
|
|
66
|
+
const principal = this.options.sessionAuth ? await this.options.sessionAuth.requirePrincipal(request).catch(() => null) : null;
|
|
67
|
+
if (!principal) {
|
|
68
|
+
return { kind: "redirect", location: this.loginRedirect(request), status: 302 };
|
|
69
|
+
}
|
|
70
|
+
const allowed = this.options.canAuthorize ? await this.options.canAuthorize(principal, client, params) : true;
|
|
71
|
+
const subject = allowed ? await this.options.principalToSubject(principal) : null;
|
|
72
|
+
if (!allowed || !subject) {
|
|
73
|
+
const redirect = createOAuthRedirect(params.redirectUri, {
|
|
74
|
+
error: "access_denied",
|
|
75
|
+
error_description: this.options.accessDeniedDescription ?? "Access denied.",
|
|
76
|
+
state: params.state,
|
|
77
|
+
});
|
|
78
|
+
return { kind: "redirect", location: redirect, status: 302 };
|
|
79
|
+
}
|
|
80
|
+
const code = this.options.createAuthorizationCode?.() ?? `mcpcode_${crypto.randomUUID().replace(/-/g, "")}`;
|
|
81
|
+
await this.options.repository.createAuthorizationCode({
|
|
82
|
+
code,
|
|
83
|
+
clientId: client.client_id,
|
|
84
|
+
subject,
|
|
85
|
+
redirectUri: params.redirectUri,
|
|
86
|
+
scopes: params.scopes?.length ? params.scopes : this.defaultScopes(),
|
|
87
|
+
resource: params.resource?.href ?? null,
|
|
88
|
+
codeChallenge: params.codeChallenge,
|
|
89
|
+
expiresAt: this.now() + (this.options.authCodeTtlSeconds ?? DEFAULT_AUTH_CODE_TTL_SECONDS),
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
kind: "authorized",
|
|
93
|
+
code,
|
|
94
|
+
redirect: createOAuthRedirect(params.redirectUri, { code, state: params.state }),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async challengeForAuthorizationCode(client, authorizationCode) {
|
|
98
|
+
const row = await this.validAuthorizationCode(client, authorizationCode);
|
|
99
|
+
return row.codeChallenge;
|
|
100
|
+
}
|
|
101
|
+
async exchangeAuthorizationCode(client, authorizationCode, _codeVerifier, redirectUri, resource) {
|
|
102
|
+
const row = await this.validAuthorizationCode(client, authorizationCode);
|
|
103
|
+
if (redirectUri && row.redirectUri !== redirectUri)
|
|
104
|
+
throw invalidGrant("Redirect URI mismatch");
|
|
105
|
+
if (resource?.href && row.resource && row.resource !== resource.href)
|
|
106
|
+
throw invalidGrant("Resource mismatch");
|
|
107
|
+
await this.options.repository.consumeAuthorizationCode(row.authorizationCodeId);
|
|
108
|
+
return this.issueTokens({
|
|
109
|
+
clientId: row.clientId,
|
|
110
|
+
subject: row.subject,
|
|
111
|
+
scopes: parseOAuthJsonArray(row.scopesJson),
|
|
112
|
+
resource: row.resource ? new URL(row.resource) : resource,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async exchangeRefreshToken(client, refreshToken, scopes, resource) {
|
|
116
|
+
const row = await this.options.repository.getTokenByRefreshToken(refreshToken);
|
|
117
|
+
if (!row || row.clientId !== client.client_id)
|
|
118
|
+
throw invalidGrant("Invalid refresh token");
|
|
119
|
+
const cachedResponse = await this.cachedRefreshResponse(row);
|
|
120
|
+
if (cachedResponse)
|
|
121
|
+
return cachedResponse;
|
|
122
|
+
if (row.revokedAt)
|
|
123
|
+
throw invalidGrant("Invalid refresh token");
|
|
124
|
+
if (row.refreshExpiresAt && row.refreshExpiresAt < this.now())
|
|
125
|
+
throw invalidGrant("Refresh token expired");
|
|
126
|
+
const grantedScopes = parseOAuthJsonArray(row.scopesJson);
|
|
127
|
+
const requestedScopes = scopes?.length ? scopes.filter((scope) => grantedScopes.includes(scope)) : grantedScopes;
|
|
128
|
+
const issued = await this.issueTokenSet({
|
|
129
|
+
clientId: row.clientId,
|
|
130
|
+
subject: row.subject,
|
|
131
|
+
scopes: requestedScopes,
|
|
132
|
+
resource: resource ?? (row.resource ? new URL(row.resource) : undefined),
|
|
133
|
+
});
|
|
134
|
+
const encryptedResponse = await encryptOAuthTokenResponse(issued.tokens, this.options.tokenEncryptionSecret);
|
|
135
|
+
const claimedRotation = await this.options.repository.markTokenRotated({
|
|
136
|
+
tokenId: row.tokenId,
|
|
137
|
+
rotatedToTokenId: issued.tokenId,
|
|
138
|
+
refreshReuseExpiresAt: this.now() + (this.options.refreshTokenReuseGraceSeconds ?? DEFAULT_REFRESH_TOKEN_REUSE_GRACE_SECONDS),
|
|
139
|
+
rotatedResponseCiphertext: encryptedResponse.ciphertext,
|
|
140
|
+
rotatedResponseNonce: encryptedResponse.nonce,
|
|
141
|
+
});
|
|
142
|
+
if (claimedRotation)
|
|
143
|
+
return issued.tokens;
|
|
144
|
+
await this.options.repository.revokeToken(issued.tokenId);
|
|
145
|
+
const winner = await this.options.repository.getTokenByRefreshToken(refreshToken);
|
|
146
|
+
const winnerResponse = winner ? await this.cachedRefreshResponse(winner) : null;
|
|
147
|
+
if (winnerResponse)
|
|
148
|
+
return winnerResponse;
|
|
149
|
+
throw invalidGrant("Invalid refresh token");
|
|
150
|
+
}
|
|
151
|
+
async verifyAccessToken(token) {
|
|
152
|
+
const row = await this.options.repository.getTokenByAccessToken(token);
|
|
153
|
+
if (!row || row.revokedAt || row.accessExpiresAt < this.now())
|
|
154
|
+
throw new HttpError(401, "Invalid access token.", "invalid_access_token");
|
|
155
|
+
const subject = row.subject;
|
|
156
|
+
const principal = this.options.subjectToPrincipal ? await this.options.subjectToPrincipal(subject) : null;
|
|
157
|
+
if (this.options.subjectToPrincipal && !principal)
|
|
158
|
+
throw new HttpError(401, "Invalid access token.", "invalid_access_token");
|
|
159
|
+
if (principal && this.options.canUseToken && !(await this.options.canUseToken(principal, row))) {
|
|
160
|
+
throw new HttpError(403, "Token is not allowed.", "token_not_allowed");
|
|
161
|
+
}
|
|
162
|
+
await this.options.repository.touchAccessToken(row.tokenId);
|
|
163
|
+
return {
|
|
164
|
+
token,
|
|
165
|
+
clientId: row.clientId,
|
|
166
|
+
scopes: parseOAuthJsonArray(row.scopesJson),
|
|
167
|
+
expiresAt: row.accessExpiresAt,
|
|
168
|
+
resource: row.resource ? new URL(row.resource) : undefined,
|
|
169
|
+
subject,
|
|
170
|
+
extra: { ...subject },
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
async revokeToken(client, request) {
|
|
174
|
+
const accessRow = await this.options.repository.getTokenByAccessToken(request.token);
|
|
175
|
+
if (accessRow && accessRow.clientId === client.client_id) {
|
|
176
|
+
await this.options.repository.revokeToken(accessRow.tokenId);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const refreshRow = await this.options.repository.getTokenByRefreshToken(request.token);
|
|
180
|
+
if (refreshRow && refreshRow.clientId === client.client_id)
|
|
181
|
+
await this.options.repository.revokeToken(refreshRow.tokenId);
|
|
182
|
+
}
|
|
183
|
+
async validAuthorizationCode(client, authorizationCode) {
|
|
184
|
+
const row = await this.options.repository.getAuthorizationCode(authorizationCode);
|
|
185
|
+
if (!row || row.clientId !== client.client_id || row.usedAt || row.expiresAt < this.now()) {
|
|
186
|
+
throw invalidGrant("Invalid authorization code");
|
|
187
|
+
}
|
|
188
|
+
return row;
|
|
189
|
+
}
|
|
190
|
+
async issueTokens(input) {
|
|
191
|
+
return (await this.issueTokenSet(input)).tokens;
|
|
192
|
+
}
|
|
193
|
+
async issueTokenSet(input) {
|
|
194
|
+
return issueMcpOAuthTokenSet(this.options.repository, {
|
|
195
|
+
clientId: input.clientId,
|
|
196
|
+
subject: input.subject,
|
|
197
|
+
scopes: input.scopes,
|
|
198
|
+
resource: input.resource,
|
|
199
|
+
}, {
|
|
200
|
+
accessTokenTtlSeconds: this.options.accessTokenTtlSeconds ?? DEFAULT_ACCESS_TOKEN_TTL_SECONDS,
|
|
201
|
+
refreshTokenTtlSeconds: this.options.refreshTokenTtlSeconds ?? DEFAULT_REFRESH_TOKEN_TTL_SECONDS,
|
|
202
|
+
createAccessToken: this.options.createAccessToken,
|
|
203
|
+
createRefreshToken: this.options.createRefreshToken,
|
|
204
|
+
now: this.options.now,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
async cachedRefreshResponse(row) {
|
|
208
|
+
if (!row.rotatedResponseCiphertext || !row.rotatedResponseNonce || !row.refreshReuseExpiresAt || row.refreshReuseExpiresAt < this.now())
|
|
209
|
+
return null;
|
|
210
|
+
return decryptOAuthTokenResponse(row.rotatedResponseCiphertext, row.rotatedResponseNonce, this.options.tokenEncryptionSecret);
|
|
211
|
+
}
|
|
212
|
+
defaultScopes() {
|
|
213
|
+
return this.options.defaultScopes?.length ? this.options.defaultScopes : [DEFAULT_SCOPE];
|
|
214
|
+
}
|
|
215
|
+
loginRedirect(request) {
|
|
216
|
+
const loginPath = this.options.loginPath ?? "/login";
|
|
217
|
+
const url = new URL(loginPath, request.url);
|
|
218
|
+
url.searchParams.set("next", request.url);
|
|
219
|
+
return `${url.pathname}${url.search}`;
|
|
220
|
+
}
|
|
221
|
+
now() {
|
|
222
|
+
return this.options.now?.() ?? Math.floor(Date.now() / 1000);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function invalidGrant(message) {
|
|
226
|
+
const error = new Error(message);
|
|
227
|
+
error.name = "InvalidGrantError";
|
|
228
|
+
return error;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/hono.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AuthSystem, McpAuthService, McpAuthorizationParams } from "./auth.js";
|
|
2
|
+
import type { OAuthClientInformation } from "./oauth.js";
|
|
3
|
+
export type HonoContextLike<TEnv = unknown> = {
|
|
4
|
+
req: {
|
|
5
|
+
raw: Request;
|
|
6
|
+
url: string;
|
|
7
|
+
};
|
|
8
|
+
env?: TEnv;
|
|
9
|
+
set?: (key: string, value: unknown) => void;
|
|
10
|
+
get?: (key: string) => unknown;
|
|
11
|
+
json: (value: unknown, status?: number) => Response;
|
|
12
|
+
redirect: (location: string, status?: number) => Response;
|
|
13
|
+
res?: Response;
|
|
14
|
+
};
|
|
15
|
+
export type HonoNext = () => Promise<void>;
|
|
16
|
+
export declare function honoAuthMiddleware<TPrincipal, TSession>(auth: AuthSystem<TPrincipal, TSession>, options?: {
|
|
17
|
+
contextKey?: string;
|
|
18
|
+
requirePrincipal?: boolean;
|
|
19
|
+
}): (context: HonoContextLike, next: HonoNext) => Promise<Response | void>;
|
|
20
|
+
export declare function honoRequirePrincipal<TPrincipal, TSession>(context: HonoContextLike, auth: AuthSystem<TPrincipal, TSession>): Promise<TPrincipal>;
|
|
21
|
+
export declare function honoMcpAuthorize<TPrincipal, TSubject extends Record<string, string>>(context: HonoContextLike, service: McpAuthService<TPrincipal, TSubject>, client: OAuthClientInformation, params: McpAuthorizationParams): Promise<Response>;
|
|
22
|
+
//# sourceMappingURL=hono.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../src/hono.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,eAAe,CAAC,IAAI,GAAG,OAAO,IAAI;IAC5C,GAAG,EAAE;QACH,GAAG,EAAE,OAAO,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/B,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,QAAQ,CAAC;IACpD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,QAAQ,CAAC;IAC1D,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3C,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,QAAQ,EACrD,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,EACtC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAChE,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAaxE;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAC7D,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,GACrC,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACxF,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,EAC7C,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAInB"}
|
package/dist/hono.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { errorResponse, HttpError } from "./http.js";
|
|
2
|
+
export function honoAuthMiddleware(auth, options = {}) {
|
|
3
|
+
return async (context, next) => {
|
|
4
|
+
try {
|
|
5
|
+
const authContext = await auth.contextFromRequest(context.req.raw);
|
|
6
|
+
if (options.requirePrincipal && !authContext.principal) {
|
|
7
|
+
throw new HttpError(401, "Authentication required.", "authentication_required");
|
|
8
|
+
}
|
|
9
|
+
context.set?.(options.contextKey ?? "auth", authContext);
|
|
10
|
+
await next();
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export async function honoRequirePrincipal(context, auth) {
|
|
18
|
+
return auth.requirePrincipal(context.req.raw);
|
|
19
|
+
}
|
|
20
|
+
export async function honoMcpAuthorize(context, service, client, params) {
|
|
21
|
+
const result = await service.authorize(client, params, context.req.raw);
|
|
22
|
+
if (result.kind === "redirect")
|
|
23
|
+
return context.redirect(result.location, result.status ?? 302);
|
|
24
|
+
return context.redirect(result.redirect, 302);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=hono.js.map
|
package/dist/hono.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../src/hono.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAkBrD,MAAM,UAAU,kBAAkB,CAChC,IAAsC,EACtC,UAA+D,EAAE;IAEjE,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnE,IAAI,OAAO,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBACvD,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,EAAE,WAAW,CAAC,CAAC;YACzD,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAwB,EACxB,IAAsC;IAEtC,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAwB,EACxB,OAA6C,EAC7C,MAA8B,EAC9B,MAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxE,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;IAC/F,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./api.js";
|
|
2
2
|
export * from "./ai.js";
|
|
3
|
+
export * from "./auth.js";
|
|
3
4
|
export * from "./billing.js";
|
|
4
5
|
export * from "./cloudflare.js";
|
|
5
6
|
export * from "./crypto.js";
|
|
@@ -7,6 +8,7 @@ export * from "./d1.js";
|
|
|
7
8
|
export * from "./encoding.js";
|
|
8
9
|
export * from "./email.js";
|
|
9
10
|
export * from "./env.js";
|
|
11
|
+
export * from "./hono.js";
|
|
10
12
|
export * from "./http.js";
|
|
11
13
|
export * from "./ids.js";
|
|
12
14
|
export * from "./jobs.js";
|
|
@@ -17,6 +19,7 @@ export * from "./pg.js";
|
|
|
17
19
|
export * from "./pg-kysely.js";
|
|
18
20
|
export * from "./r2-json.js";
|
|
19
21
|
export * from "./rate-limit.js";
|
|
22
|
+
export * from "./react-router.js";
|
|
20
23
|
export * from "./seo.js";
|
|
21
24
|
export * from "./session.js";
|
|
22
25
|
export * from "./testing.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./api.js";
|
|
2
2
|
export * from "./ai.js";
|
|
3
|
+
export * from "./auth.js";
|
|
3
4
|
export * from "./billing.js";
|
|
4
5
|
export * from "./cloudflare.js";
|
|
5
6
|
export * from "./crypto.js";
|
|
@@ -7,6 +8,7 @@ export * from "./d1.js";
|
|
|
7
8
|
export * from "./encoding.js";
|
|
8
9
|
export * from "./email.js";
|
|
9
10
|
export * from "./env.js";
|
|
11
|
+
export * from "./hono.js";
|
|
10
12
|
export * from "./http.js";
|
|
11
13
|
export * from "./ids.js";
|
|
12
14
|
export * from "./jobs.js";
|
|
@@ -17,6 +19,7 @@ export * from "./pg.js";
|
|
|
17
19
|
export * from "./pg-kysely.js";
|
|
18
20
|
export * from "./r2-json.js";
|
|
19
21
|
export * from "./rate-limit.js";
|
|
22
|
+
export * from "./react-router.js";
|
|
20
23
|
export * from "./seo.js";
|
|
21
24
|
export * from "./session.js";
|
|
22
25
|
export * from "./testing.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|