export interface IFBLoginRes { accessToken: string; /** iOS Limited Login JWT; never use as a Graph API access token. */ authenticationToken?: string; tokenType?: "access" | "authentication"; nonce?: string; isCancel: boolean; status?: string; reason?: string; } export type IFBEventValue = string | number; export type IFBEventParams = Record; export interface IFBShareOptions { url: string; hashtag?: string; quote?: string; } export interface IFBShareRes { success: boolean; isCancel: boolean; postId?: string; reason?: string; } export abstract class FacebookImpl { private _isInitialized = false; public get isInitialized() { return this._isInitialized; } abstract init(): void; protected onInited() { this._isInitialized = true; } async login(): Promise { const res = await this.onLogin(); return res; } protected abstract onLogin(): Promise; abstract logOut(): Promise; abstract share(options: IFBShareOptions): Promise; abstract logEvent( eventName: string, parameters?: IFBEventParams, valueToSum?: number, ): Promise; abstract logPurchase( amount: number, currency: string, parameters?: IFBEventParams, ): Promise; abstract flushEvents(): Promise; }