@oko-wallet/oko-sdk-core
Version:
581 lines (559 loc) • 17.2 kB
TypeScript
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 };