UNPKG

elysia-oauth2

Version:

Elysia plugin for OAuth 2.0 Authorization Flow with more than 48 providers

74 lines (70 loc) 4.1 kB
import * as elysia_types from 'elysia/types'; import * as elysia from 'elysia'; import { Elysia } from 'elysia'; import * as arctic from 'arctic'; export * from 'arctic'; import { ElysiaCookie } from 'elysia/cookies'; declare const notProviders: ["generateCodeVerifier", "generateState", "decodeIdToken", "OAuth2RequestError", "ArcticFetchError", "OAuth2Tokens", "CodeChallengeMethod", "UnexpectedErrorResponseBodyError", "UnexpectedResponseError", "OAuth2Client"]; type Providers = Exclude<keyof typeof arctic, (typeof notProviders)[number]>; type RefreshableProvidersMap<P extends Providers = Providers> = { [K in P]: GetProvider<K> extends { refreshAccessToken: Function; } ? K : never; }; type RefreshableProviders<P extends Providers = Providers> = Extract<keyof RefreshableProvidersMap<P>, { [K in keyof RefreshableProvidersMap<P>]: RefreshableProvidersMap<P>[K] extends never ? never : K; }[keyof RefreshableProvidersMap<P>]>; type RevokableProvidersMap<P extends Providers> = { [K in P]: GetProvider<K> extends { revokeToken: Function; } ? K : never; }; type RevokableProviders<P extends Providers = Providers> = Extract<keyof RevokableProvidersMap<P>, { [K in keyof RevokableProvidersMap<P>]: RevokableProvidersMap<P>[K] extends never ? never : K; }[keyof RevokableProvidersMap<P>]>; type GetProvider<Provider extends Providers> = InstanceType<(typeof arctic)[Provider]>; type GetProviderRedirectOptions<Provider extends Providers> = Parameters<GetProvider<Provider>["validateAuthorizationCode"]>["length"] extends 2 | 3 ? Shift<Shift<Parameters<GetProvider<Provider>["createAuthorizationURL"]>>> : Shift<Parameters<GetProvider<Provider>["createAuthorizationURL"]>>; type GetProviderAuthorizeOptions<Provider extends Providers> = Parameters<GetProvider<Provider>["validateAuthorizationCode"]>["length"] extends 2 ? Shift<Shift<Parameters<GetProvider<Provider>["validateAuthorizationCode"]>>> : Shift<Parameters<GetProvider<Provider>["validateAuthorizationCode"]>>; type Shift<T extends any[]> = ((...t: T) => void) extends (h: any, ...r: infer R) => void ? R : never; type ElysiaOauth2ProvidersOptions = { [K in Providers]?: ConstructorParameters<(typeof arctic)[K]>; }; interface ElysiaOauth2Options { cookie?: Omit<Partial<ElysiaCookie>, "value">; } declare function oauth2<ProvidersOptions extends ElysiaOauth2ProvidersOptions>(providersCredentials: ProvidersOptions, options?: ElysiaOauth2Options): Elysia<"", { decorator: {}; store: {}; derive: {}; resolve: {}; }, { typebox: {}; error: { OAUTH2_REQUEST_ERROR: arctic.OAuth2RequestError; }; }, { schema: {}; standaloneSchema: {}; macro: {}; macroFn: {}; parser: {}; }, {}, { derive: { readonly oauth2: { readonly createURL: <Provider extends keyof ProvidersOptions>(provider: Provider, ...options: GetProviderRedirectOptions<Provider>) => URL; readonly redirect: <Provider extends keyof ProvidersOptions>(provider: Provider, ...options: GetProviderRedirectOptions<Provider>) => Promise<Response>; readonly authorize: <Provider extends keyof ProvidersOptions>(provider: Provider, ...options: GetProviderAuthorizeOptions<Provider>) => Promise<arctic.OAuth2Tokens>; readonly refresh: <Provider extends RefreshableProviders<keyof ProvidersOptions>>(provider: Provider, ...options: Parameters<GetProvider<Provider>["refreshAccessToken"]>) => Promise<arctic.OAuth2Tokens>; readonly revoke: <Provider extends RevokableProviders<keyof ProvidersOptions>>(provider: Provider, ...options: Parameters<GetProvider<Provider>["revokeToken"]>) => Promise<Awaited<ReturnType<GetProvider<Provider>["revokeToken"]>>>; }; }; resolve: {}; schema: elysia.MergeSchema<{}, {}, "">; standaloneSchema: elysia_types.PrettifySchema<{}>; }, { derive: {}; resolve: {}; schema: {}; standaloneSchema: {}; }>; export { type ElysiaOauth2Options, type ElysiaOauth2ProvidersOptions, type GetProvider, type Providers, type RefreshableProviders, oauth2 };