@web-ts-toolkit/express-oidc-vault 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +892 -0
- package/index.d.mts +258 -0
- package/index.d.ts +258 -0
- package/index.js +1001 -0
- package/index.mjs +954 -0
- package/package.json +48 -0
package/index.d.mts
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { Request, Response, RequestHandler, Router } from 'express';
|
|
2
|
+
import { KeyObject } from 'node:crypto';
|
|
3
|
+
import { JWK } from 'jose';
|
|
4
|
+
|
|
5
|
+
type OidcVaultRouteName = 'login' | 'callback' | 'exchange' | 'refresh' | 'logout' | 'backchannel-logout';
|
|
6
|
+
interface OidcVaultUserProfile {
|
|
7
|
+
sub: string;
|
|
8
|
+
email?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
preferredUsername?: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
interface OidcVaultProviderMetadata {
|
|
14
|
+
issuer?: string;
|
|
15
|
+
clientId?: string;
|
|
16
|
+
}
|
|
17
|
+
interface OidcVaultSession {
|
|
18
|
+
sessionId: string;
|
|
19
|
+
subject: string;
|
|
20
|
+
providerSessionId?: string;
|
|
21
|
+
provider?: OidcVaultProviderMetadata;
|
|
22
|
+
refreshToken: string;
|
|
23
|
+
idToken: string;
|
|
24
|
+
accessToken?: string;
|
|
25
|
+
scope?: string;
|
|
26
|
+
expiresAt?: number;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
updatedAt: number;
|
|
29
|
+
user?: OidcVaultUserProfile;
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
interface AuthorizationTransactionInput {
|
|
33
|
+
state: string;
|
|
34
|
+
nonce: string;
|
|
35
|
+
pkceVerifier: string;
|
|
36
|
+
codeChallenge: string;
|
|
37
|
+
returnTo?: string;
|
|
38
|
+
createdAt: number;
|
|
39
|
+
expiresAt: number;
|
|
40
|
+
metadata?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
type AuthorizationTransaction = AuthorizationTransactionInput;
|
|
43
|
+
interface ExchangeCodeRecordInput {
|
|
44
|
+
code: string;
|
|
45
|
+
sessionId: string;
|
|
46
|
+
returnTo?: string;
|
|
47
|
+
createdAt: number;
|
|
48
|
+
expiresAt: number;
|
|
49
|
+
}
|
|
50
|
+
type ExchangeCodeRecord = ExchangeCodeRecordInput;
|
|
51
|
+
interface OidcVaultSessionInput extends Omit<OidcVaultSession, 'createdAt' | 'updatedAt'> {
|
|
52
|
+
createdAt?: number;
|
|
53
|
+
updatedAt?: number;
|
|
54
|
+
}
|
|
55
|
+
interface RotateSessionInput {
|
|
56
|
+
sessionId: string;
|
|
57
|
+
nextSession: OidcVaultSession;
|
|
58
|
+
}
|
|
59
|
+
interface DeleteSessionsBySubjectInput {
|
|
60
|
+
subject: string;
|
|
61
|
+
issuer?: string;
|
|
62
|
+
clientId?: string;
|
|
63
|
+
}
|
|
64
|
+
interface DeleteSessionsByProviderSessionIdInput {
|
|
65
|
+
providerSessionId: string;
|
|
66
|
+
issuer?: string;
|
|
67
|
+
clientId?: string;
|
|
68
|
+
}
|
|
69
|
+
declare class OidcVaultStoreConflictError extends Error {
|
|
70
|
+
constructor(message?: string);
|
|
71
|
+
}
|
|
72
|
+
interface OidcVaultStoreProvider {
|
|
73
|
+
createAuthorizationTransaction(input: AuthorizationTransactionInput): Promise<void>;
|
|
74
|
+
consumeAuthorizationTransaction(state: string): Promise<AuthorizationTransaction | null>;
|
|
75
|
+
createExchangeCode(input: ExchangeCodeRecordInput): Promise<void>;
|
|
76
|
+
consumeExchangeCode(code: string): Promise<ExchangeCodeRecord | null>;
|
|
77
|
+
createSession(input: OidcVaultSessionInput): Promise<OidcVaultSession>;
|
|
78
|
+
getSession(sessionId: string): Promise<OidcVaultSession | null>;
|
|
79
|
+
rotateSession(input: RotateSessionInput): Promise<OidcVaultSession>;
|
|
80
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
81
|
+
deleteSessionsBySubject(input: string | DeleteSessionsBySubjectInput): Promise<number>;
|
|
82
|
+
deleteSessionsByProviderSessionId(input: string | DeleteSessionsByProviderSessionIdInput): Promise<number>;
|
|
83
|
+
}
|
|
84
|
+
interface OidcVaultHookContext {
|
|
85
|
+
route: OidcVaultRouteName;
|
|
86
|
+
req: Request;
|
|
87
|
+
res: Response;
|
|
88
|
+
session?: OidcVaultSession;
|
|
89
|
+
metadata?: Record<string, unknown>;
|
|
90
|
+
}
|
|
91
|
+
interface OidcVaultErrorContext extends OidcVaultHookContext {
|
|
92
|
+
error: unknown;
|
|
93
|
+
}
|
|
94
|
+
interface OidcVaultHooks {
|
|
95
|
+
onLoginStart?(context: OidcVaultHookContext): void | Promise<void>;
|
|
96
|
+
onAuthorizationUrl?(context: OidcVaultHookContext): void | Promise<void>;
|
|
97
|
+
onCallbackTokens?(context: OidcVaultHookContext): void | Promise<void>;
|
|
98
|
+
onUserInfo?(context: OidcVaultHookContext): void | Promise<void>;
|
|
99
|
+
onBeforeSessionCreate?(context: OidcVaultHookContext): void | Promise<void>;
|
|
100
|
+
onSessionCreated?(context: OidcVaultHookContext): void | Promise<void>;
|
|
101
|
+
onSessionRefreshed?(context: OidcVaultHookContext): void | Promise<void>;
|
|
102
|
+
onBeforeLogout?(context: OidcVaultHookContext): void | Promise<void>;
|
|
103
|
+
onLogout?(context: OidcVaultHookContext): void | Promise<void>;
|
|
104
|
+
onError?(context: OidcVaultErrorContext): void | Promise<void>;
|
|
105
|
+
}
|
|
106
|
+
interface IssueTokenInput {
|
|
107
|
+
session: OidcVaultSession;
|
|
108
|
+
req: Request;
|
|
109
|
+
res: Response;
|
|
110
|
+
}
|
|
111
|
+
interface OidcVaultTokenIssueResult {
|
|
112
|
+
accessToken: string;
|
|
113
|
+
expiresIn: number;
|
|
114
|
+
tokenType?: 'Bearer';
|
|
115
|
+
}
|
|
116
|
+
interface OidcVaultTokenIssuer {
|
|
117
|
+
issue(input: IssueTokenInput): Promise<OidcVaultTokenIssueResult>;
|
|
118
|
+
}
|
|
119
|
+
interface OidcVaultAccessTokenValidationResult {
|
|
120
|
+
subject: string;
|
|
121
|
+
sessionId?: string;
|
|
122
|
+
scope?: string;
|
|
123
|
+
claims?: Record<string, unknown>;
|
|
124
|
+
}
|
|
125
|
+
interface OidcVaultAuthContext extends OidcVaultAccessTokenValidationResult {
|
|
126
|
+
token: string;
|
|
127
|
+
}
|
|
128
|
+
interface OidcVaultAccessTokenValidator {
|
|
129
|
+
validate(token: string): Promise<OidcVaultAccessTokenValidationResult>;
|
|
130
|
+
}
|
|
131
|
+
interface OidcVaultAccessTokenMiddlewareOptions {
|
|
132
|
+
validator: OidcVaultAccessTokenValidator;
|
|
133
|
+
onAuthContext?(input: {
|
|
134
|
+
req: Request;
|
|
135
|
+
res: Response;
|
|
136
|
+
auth: OidcVaultAuthContext;
|
|
137
|
+
}): void | Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
interface OidcVaultAuthenticatedRequest extends Request {
|
|
140
|
+
auth?: OidcVaultAuthContext;
|
|
141
|
+
}
|
|
142
|
+
interface OidcVaultJwtAccessTokenValidatorOptions {
|
|
143
|
+
key: CryptoKey | KeyObject | JWK | Uint8Array;
|
|
144
|
+
issuer?: string;
|
|
145
|
+
audience?: string | string[];
|
|
146
|
+
algorithms?: string[];
|
|
147
|
+
mapClaims?(claims: Record<string, unknown>): OidcVaultAccessTokenValidationResult;
|
|
148
|
+
}
|
|
149
|
+
declare module 'express' {
|
|
150
|
+
interface Request {
|
|
151
|
+
auth?: OidcVaultAuthContext;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
interface OidcVaultConfig {
|
|
155
|
+
issuer?: string;
|
|
156
|
+
authorizationEndpoint?: string;
|
|
157
|
+
tokenEndpoint?: string;
|
|
158
|
+
userInfoEndpoint?: string;
|
|
159
|
+
jwksUri?: string;
|
|
160
|
+
endSessionEndpoint?: string;
|
|
161
|
+
clientId?: string;
|
|
162
|
+
clientSecret?: string;
|
|
163
|
+
scopes?: string;
|
|
164
|
+
}
|
|
165
|
+
interface OidcVaultLogoutResult {
|
|
166
|
+
loggedOut: true;
|
|
167
|
+
upstreamLogoutUrl?: string;
|
|
168
|
+
}
|
|
169
|
+
interface OidcVaultBackchannelLogoutResult {
|
|
170
|
+
loggedOut: true;
|
|
171
|
+
revokedSessions: number;
|
|
172
|
+
}
|
|
173
|
+
interface OidcVaultExchangeResult extends Partial<OidcVaultTokenIssueResult> {
|
|
174
|
+
sessionId?: string;
|
|
175
|
+
user?: OidcVaultUserProfile;
|
|
176
|
+
}
|
|
177
|
+
type OidcVaultSessionTransport = 'body' | 'cookie';
|
|
178
|
+
type OidcVaultCookieDeploymentMode = 'same-origin' | 'same-site' | 'cross-site';
|
|
179
|
+
type OidcVaultCookieSameSite = 'lax' | 'strict' | 'none';
|
|
180
|
+
interface OidcVaultCookieOptions {
|
|
181
|
+
name?: string;
|
|
182
|
+
deploymentMode?: OidcVaultCookieDeploymentMode;
|
|
183
|
+
sameSite?: OidcVaultCookieSameSite;
|
|
184
|
+
secure?: boolean;
|
|
185
|
+
domain?: string;
|
|
186
|
+
path?: string;
|
|
187
|
+
httpOnly?: boolean;
|
|
188
|
+
}
|
|
189
|
+
interface OidcVaultOptions {
|
|
190
|
+
basePath?: string;
|
|
191
|
+
storeProvider: OidcVaultStoreProvider;
|
|
192
|
+
config?: OidcVaultConfig;
|
|
193
|
+
hooks?: OidcVaultHooks;
|
|
194
|
+
tokenIssuer?: OidcVaultTokenIssuer;
|
|
195
|
+
frontendRedirectUri?: string;
|
|
196
|
+
postLogoutRedirectUri?: string;
|
|
197
|
+
fetchUserInfo?: boolean;
|
|
198
|
+
authorizationTransactionTtlMs?: number;
|
|
199
|
+
exchangeCodeTtlMs?: number;
|
|
200
|
+
sessionTransport?: OidcVaultSessionTransport;
|
|
201
|
+
cookie?: OidcVaultCookieOptions;
|
|
202
|
+
trustedOrigins?: string[];
|
|
203
|
+
now?: () => number;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
declare const DEFAULT_OIDC_SCOPES = "openid email profile";
|
|
207
|
+
type OidcVaultConfigMode = 'issuer' | 'manual';
|
|
208
|
+
interface OidcVaultResolvedConfig extends Omit<OidcVaultConfig, 'scopes'> {
|
|
209
|
+
mode: OidcVaultConfigMode;
|
|
210
|
+
scopes: string;
|
|
211
|
+
}
|
|
212
|
+
interface OidcVaultEnv {
|
|
213
|
+
OIDC_ISSUER?: string;
|
|
214
|
+
OIDC_AUTHORIZATION_ENDPOINT?: string;
|
|
215
|
+
OIDC_TOKEN_ENDPOINT?: string;
|
|
216
|
+
OIDC_USERINFO_ENDPOINT?: string;
|
|
217
|
+
OIDC_JWKS_URI?: string;
|
|
218
|
+
OIDC_END_SESSION_ENDPOINT?: string;
|
|
219
|
+
OIDC_CLIENT_ID?: string;
|
|
220
|
+
OIDC_CLIENT_SECRET?: string;
|
|
221
|
+
OIDC_SCOPES?: string;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Resolve OIDC configuration from application input. If an issuer URL is
|
|
225
|
+
* present, explicit endpoint fields are ignored and discovery mode wins.
|
|
226
|
+
*/
|
|
227
|
+
declare function resolveOidcVaultConfig(config?: OidcVaultConfig): OidcVaultResolvedConfig;
|
|
228
|
+
/**
|
|
229
|
+
* Resolve OIDC configuration from the documented environment variables.
|
|
230
|
+
*/
|
|
231
|
+
declare function resolveOidcVaultConfigFromEnv(env?: OidcVaultEnv): OidcVaultResolvedConfig;
|
|
232
|
+
|
|
233
|
+
declare const DEFAULT_OIDC_VAULT_BASE_PATH = "/auth/oidc";
|
|
234
|
+
declare const DEFAULT_AUTHORIZATION_TRANSACTION_TTL_MS: number;
|
|
235
|
+
declare const DEFAULT_EXCHANGE_CODE_TTL_MS: number;
|
|
236
|
+
declare const DEFAULT_SESSION_COOKIE_NAME = "oidc_vault_session";
|
|
237
|
+
declare const OIDC_VAULT_ROUTE_PATHS: Record<OidcVaultRouteName, string>;
|
|
238
|
+
/**
|
|
239
|
+
* Normalize the mounted base path for the OIDC router.
|
|
240
|
+
*/
|
|
241
|
+
declare function normalizeOidcVaultBasePath(value?: string): string;
|
|
242
|
+
/**
|
|
243
|
+
* Create a JWT-based access-token validator for use with
|
|
244
|
+
* `createOidcVaultAccessTokenMiddleware(...)`.
|
|
245
|
+
*/
|
|
246
|
+
declare function createOidcVaultJwtAccessTokenValidator(options: OidcVaultJwtAccessTokenValidatorOptions): {
|
|
247
|
+
validate(token: string): Promise<OidcVaultAccessTokenValidationResult>;
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* Create bearer-token validation middleware for app-issued access tokens.
|
|
251
|
+
*/
|
|
252
|
+
declare function createOidcVaultAccessTokenMiddleware(options: OidcVaultAccessTokenMiddlewareOptions): RequestHandler;
|
|
253
|
+
/**
|
|
254
|
+
* Create the core OIDC vault middleware.
|
|
255
|
+
*/
|
|
256
|
+
declare function createOidcVaultMiddleware(options: OidcVaultOptions): Router;
|
|
257
|
+
|
|
258
|
+
export { type AuthorizationTransaction, type AuthorizationTransactionInput, DEFAULT_AUTHORIZATION_TRANSACTION_TTL_MS, DEFAULT_EXCHANGE_CODE_TTL_MS, DEFAULT_OIDC_SCOPES, DEFAULT_OIDC_VAULT_BASE_PATH, DEFAULT_SESSION_COOKIE_NAME, type DeleteSessionsByProviderSessionIdInput, type DeleteSessionsBySubjectInput, type ExchangeCodeRecord, type ExchangeCodeRecordInput, type IssueTokenInput, OIDC_VAULT_ROUTE_PATHS, type OidcVaultAccessTokenMiddlewareOptions, type OidcVaultAccessTokenValidationResult, type OidcVaultAccessTokenValidator, type OidcVaultAuthContext, type OidcVaultAuthenticatedRequest, type OidcVaultBackchannelLogoutResult, type OidcVaultConfig, type OidcVaultConfigMode, type OidcVaultCookieDeploymentMode, type OidcVaultCookieOptions, type OidcVaultCookieSameSite, type OidcVaultEnv, type OidcVaultErrorContext, type OidcVaultExchangeResult, type OidcVaultHookContext, type OidcVaultHooks, type OidcVaultJwtAccessTokenValidatorOptions, type OidcVaultLogoutResult, type OidcVaultOptions, type OidcVaultProviderMetadata, type OidcVaultResolvedConfig, type OidcVaultRouteName, type OidcVaultSession, type OidcVaultSessionInput, type OidcVaultSessionTransport, OidcVaultStoreConflictError, type OidcVaultStoreProvider, type OidcVaultTokenIssueResult, type OidcVaultTokenIssuer, type OidcVaultUserProfile, type RotateSessionInput, createOidcVaultAccessTokenMiddleware, createOidcVaultJwtAccessTokenValidator, createOidcVaultMiddleware, normalizeOidcVaultBasePath, resolveOidcVaultConfig, resolveOidcVaultConfigFromEnv };
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { Request, Response, RequestHandler, Router } from 'express';
|
|
2
|
+
import { KeyObject } from 'node:crypto';
|
|
3
|
+
import { JWK } from 'jose';
|
|
4
|
+
|
|
5
|
+
type OidcVaultRouteName = 'login' | 'callback' | 'exchange' | 'refresh' | 'logout' | 'backchannel-logout';
|
|
6
|
+
interface OidcVaultUserProfile {
|
|
7
|
+
sub: string;
|
|
8
|
+
email?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
preferredUsername?: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
interface OidcVaultProviderMetadata {
|
|
14
|
+
issuer?: string;
|
|
15
|
+
clientId?: string;
|
|
16
|
+
}
|
|
17
|
+
interface OidcVaultSession {
|
|
18
|
+
sessionId: string;
|
|
19
|
+
subject: string;
|
|
20
|
+
providerSessionId?: string;
|
|
21
|
+
provider?: OidcVaultProviderMetadata;
|
|
22
|
+
refreshToken: string;
|
|
23
|
+
idToken: string;
|
|
24
|
+
accessToken?: string;
|
|
25
|
+
scope?: string;
|
|
26
|
+
expiresAt?: number;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
updatedAt: number;
|
|
29
|
+
user?: OidcVaultUserProfile;
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
interface AuthorizationTransactionInput {
|
|
33
|
+
state: string;
|
|
34
|
+
nonce: string;
|
|
35
|
+
pkceVerifier: string;
|
|
36
|
+
codeChallenge: string;
|
|
37
|
+
returnTo?: string;
|
|
38
|
+
createdAt: number;
|
|
39
|
+
expiresAt: number;
|
|
40
|
+
metadata?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
type AuthorizationTransaction = AuthorizationTransactionInput;
|
|
43
|
+
interface ExchangeCodeRecordInput {
|
|
44
|
+
code: string;
|
|
45
|
+
sessionId: string;
|
|
46
|
+
returnTo?: string;
|
|
47
|
+
createdAt: number;
|
|
48
|
+
expiresAt: number;
|
|
49
|
+
}
|
|
50
|
+
type ExchangeCodeRecord = ExchangeCodeRecordInput;
|
|
51
|
+
interface OidcVaultSessionInput extends Omit<OidcVaultSession, 'createdAt' | 'updatedAt'> {
|
|
52
|
+
createdAt?: number;
|
|
53
|
+
updatedAt?: number;
|
|
54
|
+
}
|
|
55
|
+
interface RotateSessionInput {
|
|
56
|
+
sessionId: string;
|
|
57
|
+
nextSession: OidcVaultSession;
|
|
58
|
+
}
|
|
59
|
+
interface DeleteSessionsBySubjectInput {
|
|
60
|
+
subject: string;
|
|
61
|
+
issuer?: string;
|
|
62
|
+
clientId?: string;
|
|
63
|
+
}
|
|
64
|
+
interface DeleteSessionsByProviderSessionIdInput {
|
|
65
|
+
providerSessionId: string;
|
|
66
|
+
issuer?: string;
|
|
67
|
+
clientId?: string;
|
|
68
|
+
}
|
|
69
|
+
declare class OidcVaultStoreConflictError extends Error {
|
|
70
|
+
constructor(message?: string);
|
|
71
|
+
}
|
|
72
|
+
interface OidcVaultStoreProvider {
|
|
73
|
+
createAuthorizationTransaction(input: AuthorizationTransactionInput): Promise<void>;
|
|
74
|
+
consumeAuthorizationTransaction(state: string): Promise<AuthorizationTransaction | null>;
|
|
75
|
+
createExchangeCode(input: ExchangeCodeRecordInput): Promise<void>;
|
|
76
|
+
consumeExchangeCode(code: string): Promise<ExchangeCodeRecord | null>;
|
|
77
|
+
createSession(input: OidcVaultSessionInput): Promise<OidcVaultSession>;
|
|
78
|
+
getSession(sessionId: string): Promise<OidcVaultSession | null>;
|
|
79
|
+
rotateSession(input: RotateSessionInput): Promise<OidcVaultSession>;
|
|
80
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
81
|
+
deleteSessionsBySubject(input: string | DeleteSessionsBySubjectInput): Promise<number>;
|
|
82
|
+
deleteSessionsByProviderSessionId(input: string | DeleteSessionsByProviderSessionIdInput): Promise<number>;
|
|
83
|
+
}
|
|
84
|
+
interface OidcVaultHookContext {
|
|
85
|
+
route: OidcVaultRouteName;
|
|
86
|
+
req: Request;
|
|
87
|
+
res: Response;
|
|
88
|
+
session?: OidcVaultSession;
|
|
89
|
+
metadata?: Record<string, unknown>;
|
|
90
|
+
}
|
|
91
|
+
interface OidcVaultErrorContext extends OidcVaultHookContext {
|
|
92
|
+
error: unknown;
|
|
93
|
+
}
|
|
94
|
+
interface OidcVaultHooks {
|
|
95
|
+
onLoginStart?(context: OidcVaultHookContext): void | Promise<void>;
|
|
96
|
+
onAuthorizationUrl?(context: OidcVaultHookContext): void | Promise<void>;
|
|
97
|
+
onCallbackTokens?(context: OidcVaultHookContext): void | Promise<void>;
|
|
98
|
+
onUserInfo?(context: OidcVaultHookContext): void | Promise<void>;
|
|
99
|
+
onBeforeSessionCreate?(context: OidcVaultHookContext): void | Promise<void>;
|
|
100
|
+
onSessionCreated?(context: OidcVaultHookContext): void | Promise<void>;
|
|
101
|
+
onSessionRefreshed?(context: OidcVaultHookContext): void | Promise<void>;
|
|
102
|
+
onBeforeLogout?(context: OidcVaultHookContext): void | Promise<void>;
|
|
103
|
+
onLogout?(context: OidcVaultHookContext): void | Promise<void>;
|
|
104
|
+
onError?(context: OidcVaultErrorContext): void | Promise<void>;
|
|
105
|
+
}
|
|
106
|
+
interface IssueTokenInput {
|
|
107
|
+
session: OidcVaultSession;
|
|
108
|
+
req: Request;
|
|
109
|
+
res: Response;
|
|
110
|
+
}
|
|
111
|
+
interface OidcVaultTokenIssueResult {
|
|
112
|
+
accessToken: string;
|
|
113
|
+
expiresIn: number;
|
|
114
|
+
tokenType?: 'Bearer';
|
|
115
|
+
}
|
|
116
|
+
interface OidcVaultTokenIssuer {
|
|
117
|
+
issue(input: IssueTokenInput): Promise<OidcVaultTokenIssueResult>;
|
|
118
|
+
}
|
|
119
|
+
interface OidcVaultAccessTokenValidationResult {
|
|
120
|
+
subject: string;
|
|
121
|
+
sessionId?: string;
|
|
122
|
+
scope?: string;
|
|
123
|
+
claims?: Record<string, unknown>;
|
|
124
|
+
}
|
|
125
|
+
interface OidcVaultAuthContext extends OidcVaultAccessTokenValidationResult {
|
|
126
|
+
token: string;
|
|
127
|
+
}
|
|
128
|
+
interface OidcVaultAccessTokenValidator {
|
|
129
|
+
validate(token: string): Promise<OidcVaultAccessTokenValidationResult>;
|
|
130
|
+
}
|
|
131
|
+
interface OidcVaultAccessTokenMiddlewareOptions {
|
|
132
|
+
validator: OidcVaultAccessTokenValidator;
|
|
133
|
+
onAuthContext?(input: {
|
|
134
|
+
req: Request;
|
|
135
|
+
res: Response;
|
|
136
|
+
auth: OidcVaultAuthContext;
|
|
137
|
+
}): void | Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
interface OidcVaultAuthenticatedRequest extends Request {
|
|
140
|
+
auth?: OidcVaultAuthContext;
|
|
141
|
+
}
|
|
142
|
+
interface OidcVaultJwtAccessTokenValidatorOptions {
|
|
143
|
+
key: CryptoKey | KeyObject | JWK | Uint8Array;
|
|
144
|
+
issuer?: string;
|
|
145
|
+
audience?: string | string[];
|
|
146
|
+
algorithms?: string[];
|
|
147
|
+
mapClaims?(claims: Record<string, unknown>): OidcVaultAccessTokenValidationResult;
|
|
148
|
+
}
|
|
149
|
+
declare module 'express' {
|
|
150
|
+
interface Request {
|
|
151
|
+
auth?: OidcVaultAuthContext;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
interface OidcVaultConfig {
|
|
155
|
+
issuer?: string;
|
|
156
|
+
authorizationEndpoint?: string;
|
|
157
|
+
tokenEndpoint?: string;
|
|
158
|
+
userInfoEndpoint?: string;
|
|
159
|
+
jwksUri?: string;
|
|
160
|
+
endSessionEndpoint?: string;
|
|
161
|
+
clientId?: string;
|
|
162
|
+
clientSecret?: string;
|
|
163
|
+
scopes?: string;
|
|
164
|
+
}
|
|
165
|
+
interface OidcVaultLogoutResult {
|
|
166
|
+
loggedOut: true;
|
|
167
|
+
upstreamLogoutUrl?: string;
|
|
168
|
+
}
|
|
169
|
+
interface OidcVaultBackchannelLogoutResult {
|
|
170
|
+
loggedOut: true;
|
|
171
|
+
revokedSessions: number;
|
|
172
|
+
}
|
|
173
|
+
interface OidcVaultExchangeResult extends Partial<OidcVaultTokenIssueResult> {
|
|
174
|
+
sessionId?: string;
|
|
175
|
+
user?: OidcVaultUserProfile;
|
|
176
|
+
}
|
|
177
|
+
type OidcVaultSessionTransport = 'body' | 'cookie';
|
|
178
|
+
type OidcVaultCookieDeploymentMode = 'same-origin' | 'same-site' | 'cross-site';
|
|
179
|
+
type OidcVaultCookieSameSite = 'lax' | 'strict' | 'none';
|
|
180
|
+
interface OidcVaultCookieOptions {
|
|
181
|
+
name?: string;
|
|
182
|
+
deploymentMode?: OidcVaultCookieDeploymentMode;
|
|
183
|
+
sameSite?: OidcVaultCookieSameSite;
|
|
184
|
+
secure?: boolean;
|
|
185
|
+
domain?: string;
|
|
186
|
+
path?: string;
|
|
187
|
+
httpOnly?: boolean;
|
|
188
|
+
}
|
|
189
|
+
interface OidcVaultOptions {
|
|
190
|
+
basePath?: string;
|
|
191
|
+
storeProvider: OidcVaultStoreProvider;
|
|
192
|
+
config?: OidcVaultConfig;
|
|
193
|
+
hooks?: OidcVaultHooks;
|
|
194
|
+
tokenIssuer?: OidcVaultTokenIssuer;
|
|
195
|
+
frontendRedirectUri?: string;
|
|
196
|
+
postLogoutRedirectUri?: string;
|
|
197
|
+
fetchUserInfo?: boolean;
|
|
198
|
+
authorizationTransactionTtlMs?: number;
|
|
199
|
+
exchangeCodeTtlMs?: number;
|
|
200
|
+
sessionTransport?: OidcVaultSessionTransport;
|
|
201
|
+
cookie?: OidcVaultCookieOptions;
|
|
202
|
+
trustedOrigins?: string[];
|
|
203
|
+
now?: () => number;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
declare const DEFAULT_OIDC_SCOPES = "openid email profile";
|
|
207
|
+
type OidcVaultConfigMode = 'issuer' | 'manual';
|
|
208
|
+
interface OidcVaultResolvedConfig extends Omit<OidcVaultConfig, 'scopes'> {
|
|
209
|
+
mode: OidcVaultConfigMode;
|
|
210
|
+
scopes: string;
|
|
211
|
+
}
|
|
212
|
+
interface OidcVaultEnv {
|
|
213
|
+
OIDC_ISSUER?: string;
|
|
214
|
+
OIDC_AUTHORIZATION_ENDPOINT?: string;
|
|
215
|
+
OIDC_TOKEN_ENDPOINT?: string;
|
|
216
|
+
OIDC_USERINFO_ENDPOINT?: string;
|
|
217
|
+
OIDC_JWKS_URI?: string;
|
|
218
|
+
OIDC_END_SESSION_ENDPOINT?: string;
|
|
219
|
+
OIDC_CLIENT_ID?: string;
|
|
220
|
+
OIDC_CLIENT_SECRET?: string;
|
|
221
|
+
OIDC_SCOPES?: string;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Resolve OIDC configuration from application input. If an issuer URL is
|
|
225
|
+
* present, explicit endpoint fields are ignored and discovery mode wins.
|
|
226
|
+
*/
|
|
227
|
+
declare function resolveOidcVaultConfig(config?: OidcVaultConfig): OidcVaultResolvedConfig;
|
|
228
|
+
/**
|
|
229
|
+
* Resolve OIDC configuration from the documented environment variables.
|
|
230
|
+
*/
|
|
231
|
+
declare function resolveOidcVaultConfigFromEnv(env?: OidcVaultEnv): OidcVaultResolvedConfig;
|
|
232
|
+
|
|
233
|
+
declare const DEFAULT_OIDC_VAULT_BASE_PATH = "/auth/oidc";
|
|
234
|
+
declare const DEFAULT_AUTHORIZATION_TRANSACTION_TTL_MS: number;
|
|
235
|
+
declare const DEFAULT_EXCHANGE_CODE_TTL_MS: number;
|
|
236
|
+
declare const DEFAULT_SESSION_COOKIE_NAME = "oidc_vault_session";
|
|
237
|
+
declare const OIDC_VAULT_ROUTE_PATHS: Record<OidcVaultRouteName, string>;
|
|
238
|
+
/**
|
|
239
|
+
* Normalize the mounted base path for the OIDC router.
|
|
240
|
+
*/
|
|
241
|
+
declare function normalizeOidcVaultBasePath(value?: string): string;
|
|
242
|
+
/**
|
|
243
|
+
* Create a JWT-based access-token validator for use with
|
|
244
|
+
* `createOidcVaultAccessTokenMiddleware(...)`.
|
|
245
|
+
*/
|
|
246
|
+
declare function createOidcVaultJwtAccessTokenValidator(options: OidcVaultJwtAccessTokenValidatorOptions): {
|
|
247
|
+
validate(token: string): Promise<OidcVaultAccessTokenValidationResult>;
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* Create bearer-token validation middleware for app-issued access tokens.
|
|
251
|
+
*/
|
|
252
|
+
declare function createOidcVaultAccessTokenMiddleware(options: OidcVaultAccessTokenMiddlewareOptions): RequestHandler;
|
|
253
|
+
/**
|
|
254
|
+
* Create the core OIDC vault middleware.
|
|
255
|
+
*/
|
|
256
|
+
declare function createOidcVaultMiddleware(options: OidcVaultOptions): Router;
|
|
257
|
+
|
|
258
|
+
export { type AuthorizationTransaction, type AuthorizationTransactionInput, DEFAULT_AUTHORIZATION_TRANSACTION_TTL_MS, DEFAULT_EXCHANGE_CODE_TTL_MS, DEFAULT_OIDC_SCOPES, DEFAULT_OIDC_VAULT_BASE_PATH, DEFAULT_SESSION_COOKIE_NAME, type DeleteSessionsByProviderSessionIdInput, type DeleteSessionsBySubjectInput, type ExchangeCodeRecord, type ExchangeCodeRecordInput, type IssueTokenInput, OIDC_VAULT_ROUTE_PATHS, type OidcVaultAccessTokenMiddlewareOptions, type OidcVaultAccessTokenValidationResult, type OidcVaultAccessTokenValidator, type OidcVaultAuthContext, type OidcVaultAuthenticatedRequest, type OidcVaultBackchannelLogoutResult, type OidcVaultConfig, type OidcVaultConfigMode, type OidcVaultCookieDeploymentMode, type OidcVaultCookieOptions, type OidcVaultCookieSameSite, type OidcVaultEnv, type OidcVaultErrorContext, type OidcVaultExchangeResult, type OidcVaultHookContext, type OidcVaultHooks, type OidcVaultJwtAccessTokenValidatorOptions, type OidcVaultLogoutResult, type OidcVaultOptions, type OidcVaultProviderMetadata, type OidcVaultResolvedConfig, type OidcVaultRouteName, type OidcVaultSession, type OidcVaultSessionInput, type OidcVaultSessionTransport, OidcVaultStoreConflictError, type OidcVaultStoreProvider, type OidcVaultTokenIssueResult, type OidcVaultTokenIssuer, type OidcVaultUserProfile, type RotateSessionInput, createOidcVaultAccessTokenMiddleware, createOidcVaultJwtAccessTokenValidator, createOidcVaultMiddleware, normalizeOidcVaultBasePath, resolveOidcVaultConfig, resolveOidcVaultConfigFromEnv };
|