You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.5 KiB
163 lines
5.5 KiB
3 years ago
|
import {
|
||
|
DecoderOptions,
|
||
|
JwtHeader,
|
||
|
KeyFetcher,
|
||
|
SignerCallback,
|
||
|
SignerOptions,
|
||
|
VerifierCallback,
|
||
|
VerifierOptions
|
||
|
} from 'fast-jwt'
|
||
|
import * as fastify from 'fastify'
|
||
|
|
||
|
/**
|
||
|
* for declaration merging
|
||
|
* @example
|
||
|
* ```
|
||
|
* declare module 'fastify-jwt' {
|
||
|
* interface FastifyJWT {
|
||
|
* payload: { name: string; email: string }
|
||
|
* }
|
||
|
* }
|
||
|
* ```
|
||
|
* @example
|
||
|
* ```
|
||
|
* // With `formatUser`.
|
||
|
* declare module 'fastify-jwt' {
|
||
|
* interface FastifyJWT {
|
||
|
* payload: { Name: string; e_mail: string }
|
||
|
* user: { name: string; email: string }
|
||
|
* }
|
||
|
* }
|
||
|
* ```
|
||
|
*/
|
||
|
export interface FastifyJWT {
|
||
|
// payload: ...
|
||
|
// user: ...
|
||
|
}
|
||
|
|
||
|
export type SignPayloadType = FastifyJWT extends { payload: infer T }
|
||
|
? T extends string | object | Buffer
|
||
|
? T
|
||
|
: string | object | Buffer
|
||
|
: string | object | Buffer
|
||
|
|
||
|
export type UserType = FastifyJWT extends { user: infer T }
|
||
|
? T
|
||
|
: SignPayloadType
|
||
|
|
||
|
export type TokenOrHeader = JwtHeader | { header: JwtHeader; payload: any }
|
||
|
|
||
|
export type Secret = string | Buffer | KeyFetcher
|
||
|
| ((request: fastify.FastifyRequest, tokenOrHeader: TokenOrHeader, cb: (e: Error | null, secret: string | Buffer | undefined) => void) => void)
|
||
|
| ((request: fastify.FastifyRequest, tokenOrHeader: TokenOrHeader) => Promise<string | Buffer>)
|
||
|
|
||
|
export type VerifyPayloadType = object | string
|
||
|
export type DecodePayloadType = object | string
|
||
|
|
||
|
export interface DecodeCallback<Decoded extends DecodePayloadType> {
|
||
|
(err: Error, decoded: Decoded): void
|
||
|
}
|
||
|
|
||
|
export interface SignOptions extends Omit<SignerOptions, "expiresIn" | "notBefore"> {
|
||
|
expiresIn: number | string;
|
||
|
notBefore: number | string;
|
||
|
}
|
||
|
|
||
|
export interface VerifyOptions extends Omit<VerifierOptions, "maxAge"> {
|
||
|
maxAge: number | string;
|
||
|
}
|
||
|
|
||
|
export interface FastifyJWTOptions {
|
||
|
secret: Secret | { public: Secret; private: Secret }
|
||
|
decode?: Partial<DecoderOptions>
|
||
|
sign?: Partial<SignOptions>
|
||
|
verify?: Partial<VerifyOptions> & { extractToken?: (request: fastify.FastifyRequest) => string | void }
|
||
|
cookie?: {
|
||
|
cookieName: string,
|
||
|
signed: boolean
|
||
|
}
|
||
|
messages?: {
|
||
|
badRequestErrorMessage?: string
|
||
|
badCookieRequestErrorMessage?: string
|
||
|
noAuthorizationInHeaderMessage?: string
|
||
|
noAuthorizationInCookieMessage?: string
|
||
|
authorizationTokenExpiredMessage?: string
|
||
|
authorizationTokenInvalid?: ((err: Error) => string) | string
|
||
|
authorizationTokenUntrusted?: string
|
||
|
}
|
||
|
trusted?: (request: fastify.FastifyRequest, decodedToken: { [k: string]: any }) => boolean | Promise<boolean> | SignPayloadType | Promise<SignPayloadType>
|
||
|
formatUser?: (payload: SignPayloadType) => UserType,
|
||
|
jwtDecode?: boolean | string
|
||
|
namespace?: string
|
||
|
jwtVerify?: string
|
||
|
jwtSign?: string
|
||
|
}
|
||
|
|
||
|
export interface JWT {
|
||
|
options: {
|
||
|
decode: Partial<DecoderOptions>
|
||
|
sign: Partial<SignOptions>
|
||
|
verify: Partial<VerifyOptions>
|
||
|
}
|
||
|
cookie?: {
|
||
|
cookieName: string,
|
||
|
signed: boolean
|
||
|
}
|
||
|
|
||
|
sign(payload: SignPayloadType, options?: Partial<SignOptions>): string
|
||
|
sign(payload: SignPayloadType, callback: SignerCallback): void
|
||
|
sign(payload: SignPayloadType, options: Partial<SignOptions>, callback: SignerCallback): void
|
||
|
|
||
|
verify<Decoded extends VerifyPayloadType>(token: string, options?: Partial<VerifyOptions>): Decoded
|
||
|
verify<Decoded extends VerifyPayloadType>(token: string, callback: VerifierCallback): void
|
||
|
verify<Decoded extends VerifyPayloadType>(token: string, options: Partial<VerifyOptions>, callback: VerifierCallback): void
|
||
|
|
||
|
decode<Decoded extends DecodePayloadType>(token: string, options?: Partial<DecoderOptions>): null | Decoded
|
||
|
}
|
||
|
|
||
|
export type { JwtHeader } from 'fast-jwt'
|
||
|
|
||
|
export const fastifyJwt: fastify.FastifyPluginCallback<FastifyJWTOptions>
|
||
|
|
||
|
export default fastifyJwt
|
||
|
|
||
|
export interface FastifyJwtSignOptions {
|
||
|
sign?: Partial<SignOptions>
|
||
|
}
|
||
|
|
||
|
export interface FastifyJwtVerifyOptions {
|
||
|
decode: Partial<DecoderOptions>
|
||
|
verify: Partial<VerifyOptions>
|
||
|
}
|
||
|
|
||
|
export interface FastifyJwtDecodeOptions {
|
||
|
decode: Partial<DecoderOptions>
|
||
|
verify: Partial<VerifyOptions>
|
||
|
}
|
||
|
|
||
|
declare module 'fastify' {
|
||
|
interface FastifyInstance {
|
||
|
jwt: JWT
|
||
|
}
|
||
|
|
||
|
interface FastifyReply {
|
||
|
jwtSign(payload: SignPayloadType, options?: FastifyJwtSignOptions): Promise<string>
|
||
|
jwtSign(payload: SignPayloadType, callback: SignerCallback): void
|
||
|
jwtSign(payload: SignPayloadType, options: FastifyJwtSignOptions, callback: SignerCallback): void
|
||
|
jwtSign(payload: SignPayloadType, options?: Partial<SignOptions>): Promise<string>
|
||
|
jwtSign(payload: SignPayloadType, options: Partial<SignOptions>, callback: SignerCallback): void
|
||
|
}
|
||
|
|
||
|
interface FastifyRequest {
|
||
|
jwtVerify<Decoded extends VerifyPayloadType>(options?: FastifyJwtVerifyOptions): Promise<Decoded>
|
||
|
jwtVerify<Decoded extends VerifyPayloadType>(callback: VerifierCallback): void
|
||
|
jwtVerify<Decoded extends VerifyPayloadType>(options: FastifyJwtVerifyOptions, callback: VerifierCallback): void
|
||
|
jwtVerify<Decoded extends VerifyPayloadType>(options?: Partial<VerifyOptions>): Promise<Decoded>
|
||
|
jwtVerify<Decoded extends VerifyPayloadType>(options: Partial<VerifyOptions>, callback: VerifierCallback): void
|
||
|
jwtDecode<Decoded extends DecodePayloadType>(options?: FastifyJwtDecodeOptions): Promise<Decoded>
|
||
|
jwtDecode<Decoded extends DecodePayloadType>(callback: DecodeCallback<Decoded>): void
|
||
|
jwtDecode<Decoded extends DecodePayloadType>(options: FastifyJwtDecodeOptions, callback: DecodeCallback<Decoded>): void
|
||
|
user: UserType
|
||
|
}
|
||
|
}
|