Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | 1x 1x 1x 1x 1x 1x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 1x 1x | import {APIClient, FetchProvider, NameType, PermissionLevel} from '@wharfkit/antelope' import type {ChainDefinition, Fetch} from '@wharfkit/common' import {SigningRequestEncodingOptions} from '@wharfkit/signing-request' import zlib from 'pako' import {UserInterface} from './ui' import {WalletPluginConfig, WalletPluginMetadata} from './wallet' export enum LoginHookTypes { beforeLogin = 'beforeLogin', afterLogin = 'afterLogin', } export type LoginHook = (context: LoginContext) => Promise<void> export interface LoginHooks { afterLogin: LoginHook[] beforeLogin: LoginHook[] } /** * Options for creating a new context for a [[Kit.login]] call. */ export interface LoginContextOptions { appName?: NameType // client: APIClient chain?: ChainDefinition chains?: ChainDefinition[] fetch: Fetch loginPlugins?: AbstractLoginPlugin[] permissionLevel?: PermissionLevel walletPlugins?: UserInterfaceWalletPlugin[] ui: UserInterface } export interface UserInterfaceRequirements { requiresChainSelect: boolean requiresPermissionSelect: boolean requiresPermissionEntry: boolean requiresWalletSelect: boolean } export interface UserInterfaceWalletPlugin { config: WalletPluginConfig metadata: WalletPluginMetadata } /** * Temporary context created for the duration of a [[Kit.login]] call. * * This context is used to store the state of the login request and * provide a way for plugins to add hooks into the process. */ export class LoginContext { appName?: string // client: APIClient chain?: ChainDefinition chains: ChainDefinition[] = [] fetch: Fetch hooks: LoginHooks = { afterLogin: [], beforeLogin: [], } permissionLevel?: PermissionLevel ui: UserInterface uiRequirements: UserInterfaceRequirements = { requiresChainSelect: true, requiresPermissionSelect: true, requiresPermissionEntry: false, requiresWalletSelect: true, } walletPlugins: UserInterfaceWalletPlugin[] = [] constructor(options: LoginContextOptions) { this.appName = String(options.appName) // this.client = options.client Eif (options.chains) { this.chains = options.chains } Iif (options.chain) { this.chain = options.chain } this.fetch = options.fetch this.permissionLevel = options.permissionLevel this.walletPlugins = options.walletPlugins || [] this.ui = options.ui options.loginPlugins?.forEach((plugin: AbstractLoginPlugin) => { plugin.register(this) }) } addHook(t: LoginHookTypes, hook: LoginHook) { this.hooks[t].push(hook) } getClient(chain: ChainDefinition): APIClient { return new APIClient({provider: new FetchProvider(chain.url, {fetch: this.fetch})}) } get esrOptions(): SigningRequestEncodingOptions { return { zlib, } } } /** * Payload accepted by the [[Kit.login]] method. */ export interface LoginPlugin { register: (context: LoginContext) => void } /** * Abstract class for [[Kit.login]] plugins to extend. */ export abstract class AbstractLoginPlugin implements LoginPlugin { abstract register(context: LoginContext): void } export class BaseLoginPlugin extends AbstractLoginPlugin { register() { // console.log('Register hooks via context.addHook') } } |