Matthieu Sieben 371e04aad2
Account management page (#3659)
---------

Co-authored-by: Eric Bailey <git@esb.lol>
2025-04-15 17:15:27 +02:00

54 lines
1.8 KiB
TypeScript

import type { IncomingMessage, ServerResponse } from 'node:http'
import { asHandler, combineMiddlewares } from './lib/http/middleware.js'
import { Handler } from './lib/http/types.js'
import { OAuthProvider } from './oauth-provider.js'
import { assetsMiddleware } from './router/assets/assets.js'
import { createAccountPageMiddleware } from './router/create-account-page-middleware.js'
import { createApiMiddleware } from './router/create-api-middleware.js'
import { createAuthorizationPageMiddleware } from './router/create-authorization-page-middleware.js'
import { createOAuthMiddleware } from './router/create-oauth-middleware.js'
import { ErrorHandler } from './router/error-handler.js'
import { MiddlewareOptions } from './router/middleware-options.js'
// Export all the types exposed
export type {
ErrorHandler,
Handler,
IncomingMessage,
MiddlewareOptions,
ServerResponse,
}
/**
* @returns An http request handler that can be used with node's http server
* or as a middleware with express / connect.
*/
export function oauthMiddleware<
Req extends IncomingMessage = IncomingMessage,
Res extends ServerResponse = ServerResponse,
>(
server: OAuthProvider,
{ ...options }: MiddlewareOptions<Req, Res> = {},
): Handler<void, Req, Res> {
const { onError } = options
// options is shallow cloned so it's fine to mutate it
options.onError =
process.env['NODE_ENV'] === 'development'
? (req, res, err, msg) => {
console.error(`OAuthProvider error (${msg}):`, err)
return onError?.(req, res, err, msg)
}
: onError
return asHandler(
combineMiddlewares([
assetsMiddleware,
createOAuthMiddleware(server, options),
createApiMiddleware(server, options),
createAuthorizationPageMiddleware(server, options),
createAccountPageMiddleware(server, options),
]),
)
}