UNPKG

@oko-wallet/oko-sdk-core

Version:
581 lines (559 loc) 17.2 kB
import { Result } from '@oko-wallet/stdlib-js'; import { FeeCurrency, AppCurrency, Bech32Config, BIP44, EVMInfo, KeplrSignOptions, ChainInfo } from '@keplr-wallet/types'; import { StdSignDoc, StdSignature } from '@cosmjs/amino'; import { RpcTransactionRequest, SignableMessage, Hex } from 'viem'; import { Bytes32 } from '@oko-wallet/bytes'; type EventType = { type: string; [key: string]: any; }; type EventHandlerType = { type: string; handler: (payload: any) => void; }; type EventEmitError = { type: "handle_error"; error: string; } | { type: "handler_not_found"; event_type: string; }; declare class EventEmitter3<E extends EventType, H extends EventHandlerType> { listeners: { [K in E["type"]]?: H["handler"][]; }; constructor(); on<T extends E["type"]>(handlerDef: H): void; emit<T extends E["type"]>(event: E): Result<void, EventEmitError>; off<T extends E["type"]>(handlerDef: H): void; } interface AccountsChangedPayload { email: string | null; publicKey: string | null; } type OkoWalletCoreEvent2 = { type: "CORE__accountsChanged"; email: string | null; publicKey: string | null; } | { type: "CORE__chainChanged"; }; type OkoWalletCoreEventHandler2 = { type: "CORE__accountsChanged"; handler: (payload: AccountsChangedPayload) => void; } | { type: "CORE__chainChanged"; handler: (payload: void) => void; }; interface SignDoc { bodyBytes: Uint8Array; authInfoBytes: Uint8Array; chainId: string; accountNumber: bigint; } type ChainInfoForAttachedModal = { readonly chain_id: string; readonly chain_name: string; readonly chain_symbol_image_url?: string; readonly rpc_url: string; readonly rest_url?: string; readonly block_explorer_url?: string; readonly fee_currencies?: FeeCurrency[]; readonly currencies?: AppCurrency[]; readonly bech32_config?: Bech32Config; readonly bip44?: BIP44; readonly features?: string[]; readonly evm?: EVMInfo; }; type MakeSigError = { type: "api_key_not_found"; } | { type: "key_share_not_combined"; } | { type: "wallet_not_found"; } | { type: "jwt_not_found"; } | MakeSignOutputError; type MakeSignOutputError = RunTriplesError | RunSignError | RunPresignError; type RunTriplesError = { type: "aborted"; } | { type: "triples_fail"; error: any; }; type RunSignError = { type: "aborted"; } | { type: "sign_fail"; error: any; }; type RunPresignError = { type: "aborted"; } | { type: "presign_fail"; error: any; }; type MakeCosmosSigData = CosmosTxSigData | CosmosArbitrarySigData; interface MakeCosmosSigModalResult { chain_type: "cosmos"; sig_result: MakeCosmosSigResult; } interface CosmosTxSigData { chain_type: "cosmos"; sign_type: "tx"; payload: CosmosTxSignPayload; } interface CosmosArbitrarySigData { chain_type: "cosmos"; sign_type: "arbitrary"; payload: CosmosArbitrarySignPayload; } type CosmosTxSignPayload = CosmosTxSignDirectPayload | CosmosTxSignAminoPayload; interface CosmosTxSignDirectPayload { origin: string; chain_info: ChainInfoForAttachedModal; signer: string; signDoc: SignDoc; signOptions?: KeplrSignOptions; } interface CosmosTxSignAminoPayload { origin: string; chain_info: ChainInfoForAttachedModal; signer: string; signDoc: StdSignDoc; signOptions?: KeplrSignOptions; } type CosmosArbitrarySignPayload = { chain_info: ChainInfoForAttachedModal; signer: string; data: string | Uint8Array; signDoc: StdSignDoc; origin: string; }; type MakeCosmosSigResult = { signature: StdSignature; signed: StdSignDoc | SignDoc; }; type MakeCosmosSigError = { type: "unknown_error"; error: any; } | { type: "sign_doc_parse_fail"; error: any; } | { type: "sign_doc_extract_fail"; error: any; } | MakeSigError; interface MakeEthSigModalResult { chain_type: "eth"; sig_result: MakeEthereumSigResult; } type MakeEthereumSigData = MakeTxSignSigData | MakeArbitrarySigData | MakeEIP712SigData; interface MakeTxSignSigData { chain_type: "eth"; sign_type: "tx"; payload: EthereumTxSignPayload; } interface MakeArbitrarySigData { chain_type: "eth"; sign_type: "arbitrary"; payload: EthereumArbitrarySignPayload; } interface MakeEIP712SigData { chain_type: "eth"; sign_type: "eip712"; payload: EthereumEip712SignPayload; } type MakeEthereumSigResult = EthereumTxSignResult; type EthereumTxSignResult = { type: "signed_transaction"; signedTransaction: Hex; } | { type: "signature"; signature: Hex; }; type EthereumTxSignPayload = { origin: string; chain_info: ChainInfoForAttachedModal; signer: string; data: { transaction: RpcTransactionRequest; }; }; type EthereumArbitrarySignPayload = { origin: string; chain_info: ChainInfoForAttachedModal; signer: string; data: { message: SignableMessage; }; }; type EthereumEip712SignPayload = { origin: string; chain_info: ChainInfoForAttachedModal; signer: string; data: { version: "4"; serialized_typed_data: string; }; }; type MakeEthSigError = { type: "unknown_error"; error: any; } | { type: "not_signable_tx"; } | { type: "chain_not_supported"; data: { chain_id: string; chain_name: string; chain_symbol_image_url?: string; }; } | MakeSigError; type MakeSigModalPayload = { modal_type: "cosmos/make_signature"; modal_id: string; data: MakeCosmosSigData; } | { modal_type: "eth/make_signature"; modal_id: string; data: MakeEthereumSigData; }; type MakeSigModalApproveAckPayload = { modal_type: "cosmos/make_signature"; modal_id: string; type: "approve"; data: MakeCosmosSigModalResult; } | { modal_type: "eth/make_signature"; modal_id: string; type: "approve"; data: MakeEthSigModalResult; }; type MakeSigModalRejectAckPayload = { modal_type: "eth/make_signature"; modal_id: string; type: "reject"; } | { modal_type: "cosmos/make_signature"; modal_id: string; type: "reject"; }; type MakeSigModalErrorAckPayload = { modal_type: "eth/make_signature"; modal_id: string; type: "error"; error: MakeEthSigError; } | { modal_type: "cosmos/make_signature"; modal_id: string; type: "error"; error: MakeCosmosSigError; }; interface OtherModalPayload { modal_type: "other"; modal_id: string; data: {}; } type OtherModalApproveAckPayload = { modal_type: "other"; modal_id: string; type: "approve"; data: any; }; type OtherModalRejectAckPayload = { modal_type: "other"; modal_id: string; type: "reject"; }; type OtherModalErrorAckPayload = { modal_type: "other"; modal_id: string; type: "error"; error: OtherModalError; }; type OtherModalError = { type: "unknown_error"; error: any; } | { type: "data_null"; original_modal_type: string; }; type OpenModalPayload = MakeSigModalPayload | OtherModalPayload; type OpenModalAckPayload = MakeSigModalApproveAckPayload | MakeSigModalRejectAckPayload | MakeSigModalErrorAckPayload | OtherModalApproveAckPayload | OtherModalRejectAckPayload | OtherModalErrorAckPayload; type InitPayload = { email: string | null; public_key: string | null; }; type OAuthSignInError = { type: "origin_not_registered"; } | { type: "key_share_combine_fail"; error: string; } | { type: "check_user_request_fail"; error: string; } | { type: "sign_in_request_fail"; error: string; } | { type: "nonce_missing"; } | { type: "active_nodes_below_threshold"; } | { type: "reshare_fail"; error: string; } | { type: "invalid_msg_type"; msg_type: string; } | { type: "vendor_token_verification_failed"; } | { type: "api_key_missing"; } | { type: "insufficient_shares"; } | { type: "unknown"; error: string; }; type OAuthProvider = "google" | "auth0"; type OAuthState = { apiKey: string; targetOrigin: string; provider?: OAuthProvider; }; declare enum RedirectUriSearchParamsKey { STATE = "state" } interface OAuthPayload { access_token: string; id_token: string; api_key: string; target_origin: string; auth_type: OAuthProvider; } type OkoWalletMsgGetPublicKey = { target: "oko_attached"; msg_type: "get_public_key"; payload: null; }; type OkoWalletMsgGetPublicKeyAck = { target: "oko_sdk"; msg_type: "get_public_key_ack"; payload: Result<string, string>; }; type OkoWalletMsgSetOAuthNonce = { target: "oko_attached"; msg_type: "set_oauth_nonce"; payload: string; }; type OkoWalletMsgSetOAuthNonceAck = { target: "oko_sdk"; msg_type: "set_oauth_nonce_ack"; payload: Result<null, string>; }; type OkoWalletMsgOAuthSignInUpdate = { target: "oko_sdk"; msg_type: "oauth_sign_in_update"; payload: Result<null, OAuthSignInError>; }; type OkoWalletMsgOAuthSignInUpdateAck = { target: "oko_attached"; msg_type: "oauth_sign_in_update_ack"; payload: null; }; type OkoWalletMsgAuth0EmailSendCode = { target: "oko_attached"; msg_type: "auth0_email_send_code"; payload: { email: string; }; }; type OkoWalletMsgAuth0EmailSendCodeAck = { target: "oko_sdk"; msg_type: "auth0_email_send_code_ack"; payload: Result<null, string>; }; type OkoWalletMsgAuth0EmailVerify = { target: "oko_attached"; msg_type: "auth0_email_verify"; payload: { email: string; code: string; }; }; type OkoWalletMsgAuth0EmailVerifyAck = { target: "oko_sdk"; msg_type: "auth0_email_verify_ack"; payload: Result<null, string>; }; type OkoWalletMsgOAuthInfoPass = { target: "oko_attached"; msg_type: "oauth_info_pass"; payload: OAuthPayload; }; type OkoWalletMsgOAuthInfoPassAck = { target: "oko_attached_popup"; msg_type: "oauth_info_pass_ack"; payload: null; }; type OkoWalletMsgSignOut = { target: "oko_attached"; msg_type: "sign_out"; payload: null; }; type OkoWalletMsgSignOutAck = { target: "oko_sdk"; msg_type: "sign_out_ack"; payload: Result<null, string>; }; type OkoWalletMsgOpenModal = { target: "oko_attached"; msg_type: "open_modal"; payload: OpenModalPayload; }; type OkoWalletMsgOpenModalAck = { target: "oko_sdk"; msg_type: "open_modal_ack"; payload: OpenModalAckPayload; }; type OkoWalletMsgHideModal = { target: "oko_attached"; msg_type: "hide_modal"; payload: null; }; type OkoWalletMsgHideModalAck = { target: "oko_sdk"; msg_type: "hide_modal_ack"; payload: Result<null, string>; }; type OkoWalletMsgInit = { target: "oko_sdk"; msg_type: "init"; payload: Result<InitPayload, string>; }; type OkoWalletMsgInitAck = { target: "oko_attached"; msg_type: "init_ack"; payload: Result<null, string>; }; type OkoWalletMsgGetEmail = { target: "oko_attached"; msg_type: "get_email"; payload: null; }; type OkoWalletMsgGetEmailAck = { target: "oko_sdk"; msg_type: "get_email_ack"; payload: Result<string, string>; }; type OkoWalletMsgGetCosmosChainInfo = { target: "oko_attached"; msg_type: "get_cosmos_chain_info"; payload: { chain_id: string | null; }; }; type OkoWalletMsgGetCosmosChainInfoAck = { target: "oko_sdk"; msg_type: "get_cosmos_chain_info_ack"; payload: Result<ChainInfo[], string>; }; type OkoWalletMsgGetEthChainInfo = { target: "oko_attached"; msg_type: "get_eth_chain_info"; payload: { chain_id: string | null; }; }; type OkoWalletMsgGetEthChainInfoAck = { target: "oko_sdk"; msg_type: "get_eth_chain_info_ack"; payload: Result<ChainInfo[], string>; }; type OkoWalletMsgImportPrivateKey = { target: "oko_attached"; msg_type: "import_private_key"; payload: OAuthPayload; }; type OkoWalletMsgImportPrivateKeyAck = { target: "oko_sdk"; msg_type: "import_private_key_ack"; payload: Result<Bytes32, string>; }; type OkoWalletMsg = OkoWalletMsgInit | OkoWalletMsgInitAck | OkoWalletMsgGetPublicKey | OkoWalletMsgGetPublicKeyAck | OkoWalletMsgSetOAuthNonce | OkoWalletMsgSetOAuthNonceAck | OkoWalletMsgOAuthSignInUpdate | OkoWalletMsgOAuthSignInUpdateAck | OkoWalletMsgAuth0EmailSendCode | OkoWalletMsgAuth0EmailSendCodeAck | OkoWalletMsgAuth0EmailVerify | OkoWalletMsgAuth0EmailVerifyAck | OkoWalletMsgOAuthInfoPass | OkoWalletMsgOAuthInfoPassAck | OkoWalletMsgSignOut | OkoWalletMsgSignOutAck | OkoWalletMsgOpenModal | OkoWalletMsgOpenModalAck | OkoWalletMsgHideModal | OkoWalletMsgHideModalAck | OkoWalletMsgGetEmail | OkoWalletMsgGetEmailAck | OkoWalletMsgGetCosmosChainInfo | OkoWalletMsgGetCosmosChainInfoAck | OkoWalletMsgGetEthChainInfo | OkoWalletMsgGetEthChainInfoAck | OkoWalletMsgImportPrivateKey | OkoWalletMsgImportPrivateKeyAck | { target: "oko_sdk"; msg_type: "unknown_msg_type"; payload: string | null; }; type OkoWalletInitError = { type: "is_locked"; } | { type: "not_in_browser"; } | { type: "host_origin_empty"; } | { type: "sdk_endpoint_invalid_url"; } | { type: "iframe_setup_fail"; msg: string; } | { type: "unknown_error"; msg: string; }; type OpenModalError = { type: "timeout"; } | { type: "invalid_ack_type"; received: string; } | { type: "unknown_error"; error: any; }; interface OkoWalletStaticInterface { new (apiKey: string, iframe: HTMLIFrameElement, sdkEndpoint: string): void; init: (args: OkoWalletInitArgs) => Result<OkoWalletInterface, OkoWalletInitError>; } interface OkoWalletInterface { state: OkoWalletState; apiKey: string; iframe: HTMLIFrameElement; sdkEndpoint: string; eventEmitter: EventEmitter3<OkoWalletCoreEvent2, OkoWalletCoreEventHandler2>; origin: string; waitUntilInitialized: Promise<Result<OkoWalletState, string>>; openModal: (msg: OkoWalletMsgOpenModal) => Promise<Result<OpenModalAckPayload, OpenModalError>>; closeModal: () => void; sendMsgToIframe: (msg: OkoWalletMsg) => Promise<OkoWalletMsg>; signIn: (type: "google") => Promise<void>; signOut: () => Promise<void>; getPublicKey: () => Promise<string | null>; getEmail: () => Promise<string | null>; startEmailSignIn: (email: string) => Promise<void>; completeEmailSignIn: (email: string, code: string) => Promise<void>; on: (handlerDef: OkoWalletCoreEventHandler2) => void; } interface OkoWalletInitArgs { api_key: string; sdk_endpoint?: string; } interface OkoWalletState { email: string | null; publicKey: string | null; } interface FullSignature { big_r: string; s: string; } interface SignOutput { sig: FullSignature; is_high: boolean; } type MakeSignaturePayload = { msg: Uint8Array; }; declare const OkoWallet: OkoWalletStaticInterface; declare const OKO_IFRAME_ID = "oko-attached"; declare function setUpIframeElement(url: URL): Result<HTMLIFrameElement, string>; export { EventEmitter3, OKO_IFRAME_ID, OkoWallet, RedirectUriSearchParamsKey, setUpIframeElement }; export type { AccountsChangedPayload, ChainInfoForAttachedModal, CosmosArbitrarySigData, CosmosArbitrarySignPayload, CosmosTxSigData, CosmosTxSignAminoPayload, CosmosTxSignDirectPayload, CosmosTxSignPayload, EthereumArbitrarySignPayload, EthereumEip712SignPayload, EthereumTxSignPayload, EthereumTxSignResult, EventEmitError, EventHandlerType, EventType, FullSignature, InitPayload, MakeArbitrarySigData, MakeCosmosSigData, MakeCosmosSigError, MakeCosmosSigModalResult, MakeCosmosSigResult, MakeEIP712SigData, MakeEthSigError, MakeEthSigModalResult, MakeEthereumSigData, MakeEthereumSigResult, MakeSigError, MakeSigModalApproveAckPayload, MakeSigModalErrorAckPayload, MakeSigModalPayload, MakeSigModalRejectAckPayload, MakeSignOutputError, MakeSignaturePayload, MakeTxSignSigData, OAuthPayload, OAuthProvider, OAuthSignInError, OAuthState, OkoWalletCoreEvent2, OkoWalletCoreEventHandler2, OkoWalletInitArgs, OkoWalletInitError, OkoWalletInterface, OkoWalletMsg, OkoWalletMsgAuth0EmailSendCode, OkoWalletMsgAuth0EmailSendCodeAck, OkoWalletMsgAuth0EmailVerify, OkoWalletMsgAuth0EmailVerifyAck, OkoWalletMsgGetCosmosChainInfo, OkoWalletMsgGetCosmosChainInfoAck, OkoWalletMsgGetEmail, OkoWalletMsgGetEmailAck, OkoWalletMsgGetEthChainInfo, OkoWalletMsgGetEthChainInfoAck, OkoWalletMsgGetPublicKey, OkoWalletMsgGetPublicKeyAck, OkoWalletMsgHideModal, OkoWalletMsgHideModalAck, OkoWalletMsgImportPrivateKey, OkoWalletMsgImportPrivateKeyAck, OkoWalletMsgInit, OkoWalletMsgInitAck, OkoWalletMsgOAuthInfoPass, OkoWalletMsgOAuthInfoPassAck, OkoWalletMsgOAuthSignInUpdate, OkoWalletMsgOAuthSignInUpdateAck, OkoWalletMsgOpenModal, OkoWalletMsgOpenModalAck, OkoWalletMsgSetOAuthNonce, OkoWalletMsgSetOAuthNonceAck, OkoWalletMsgSignOut, OkoWalletMsgSignOutAck, OkoWalletState, OkoWalletStaticInterface, OpenModalAckPayload, OpenModalError, OpenModalPayload, OtherModalApproveAckPayload, OtherModalError, OtherModalErrorAckPayload, OtherModalPayload, OtherModalRejectAckPayload, RunPresignError, RunSignError, RunTriplesError, SignDoc, SignOutput };