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
						
					
					
				| 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
 | |
|   }
 | |
| }
 |