UNPKG

@saumon-brule/ft.js

Version:

Aims to provide a usefull and easy way to use the 42 school's API.

141 lines (124 loc) 4.2 kB
import { IncomingMessage, ServerResponse } from 'node:http'; import EventEmitter from 'events'; type OAuth2ClientConfig = { uid: string; secret: string; redirectURI: string; }; declare class AppCredentials { private _tokenData; oauthConfig: OAuth2ClientConfig; private _refreshPromise; constructor(oauthConfig: OAuth2ClientConfig); private get _data(); get token(): string; get type(): string; get expiresIn(): number; get createdAt(): number; get scope(): string; get secretValidUntil(): number; get expiresAt(): number; requestNewToken(): Promise<void>; get isValid(): boolean; ensureTokenValidity(): Promise<void>; getAccessToken(): Promise<string>; } declare class AppCredentialsManager { protected _appCredentialsList: AppCredentials[]; protected _activeAppTokenIndex: number; constructor(configs: OAuth2ClientConfig[]); protected get _current(): AppCredentials; protected _shift(offset?: number): void; get credentials(): AppCredentials; get oauthConfig(): OAuth2ClientConfig; get token(): string; get isValid(): boolean; ensureTokenValidity(): Promise<void>; getAccessToken(): Promise<string>; requestNewToken(): Promise<void>; requestNewTokens(): Promise<void[]>; getCredentialByUid(uid: string): AppCredentials | undefined; } type UserTokenData = { access_token: string; token_type: string; expires_in: number; refresh_token: string; scope: string; created_at: number; secret_valid_until: number; }; declare class UserCredential { private _tokenData; oauthConfig: OAuth2ClientConfig; private _refreshPromise; constructor(tokenDataInit: UserTokenData, oauthConfig: OAuth2ClientConfig); private get _data(); get token(): string; get refreshToken(): string; get type(): string; get expiresIn(): number; get createdAt(): number; get scope(): string; get secretValidUntil(): number; get expiresAt(): number; requestNewToken(): Promise<void>; get isValid(): boolean; ensureTokenValidity(): Promise<void>; getAccessToken(): Promise<string>; } type KnownRoute = "/v2/me"; type UnknownRoute = string & { __brand?: "unknown"; }; type ApiRoute = KnownRoute | UnknownRoute; type Method = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "CONNECT" | "TRACE"; declare class FtHttpClient { protected _createFetchInit(method: Method, options: RequestInit): Promise<RequestInit>; get(route: ApiRoute, options?: RequestInit): Promise<Response>; post(route: ApiRoute, options: RequestInit): Promise<Response>; } declare class UserHttpClient extends FtHttpClient { user: User; constructor(user: User); protected _createFetchInit(method: Method, options: RequestInit): Promise<RequestInit>; } declare class User { id: number; ftApp: FtApp; credentials: UserCredential; httpClient: UserHttpClient; private constructor(); static create(ftApp: FtApp, userTokenData: UserTokenData, oauthConfig: OAuth2ClientConfig): Promise<User>; } declare class UserManager { users: User[]; ftApp: FtApp; constructor(ftApp: FtApp); getUserById(id: number): User | undefined; registerUser(userTokenData: UserTokenData, oauthConfig: OAuth2ClientConfig): Promise<User>; authenticate(): (_: IncomingMessage, res: ServerResponse) => void; callback({ successPage, errorPage }?: { successPage?: string; errorPage?: string; }): (req: IncomingMessage, res: ServerResponse, next?: any) => Promise<any>; } type FtEvent = { userAdd: [User]; }; declare class AppHttpClient extends FtHttpClient { ftApp: FtApp; constructor(ftApp: FtApp); protected _createFetchInit(method: Method, options: RequestInit): Promise<RequestInit>; } declare class FtApp { credentialsManager: AppCredentialsManager; userManager: UserManager; httpClient: AppHttpClient; events: EventEmitter<FtEvent>; constructor(configs: OAuth2ClientConfig[]); } declare class AuthenticatedRequest extends IncomingMessage { user?: User; } export { AuthenticatedRequest, FtApp };