@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
text/typescript
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 };