UNPKG

@circle-fin/w3s-pw-web-sdk

Version:

Javascript/Typescript SDK for Circle Programmable Wallets

878 lines (817 loc) 19.7 kB
// Copyright (c) 2023, Circle Technologies, LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import type { FirebaseOptions } from 'firebase/app' // Enums /** * ChallengeType. */ export enum ChallengeType { INITIALIZE = 'INITIALIZE', SET_PIN = 'SET_PIN', CHANGE_PIN = 'CHANGE_PIN', RESTORE_PIN = 'RESTORE_PIN', SET_SECURITY_QUESTIONS = 'SET_SECURITY_QUESTIONS', CREATE_WALLET = 'CREATE_WALLET', CREATE_TRANSACTION = 'CREATE_TRANSACTION', ACCELERATE_TRANSACTION = 'ACCELERATE_TRANSACTION', CANCEL_TRANSACTION = 'CANCEL_TRANSACTION', SIGN_MESSAGE = 'SIGN_MESSAGE', SIGN_TYPEDDATA = 'SIGN_TYPEDDATA', SIGN_TRANSACTION = 'SIGN_TRANSACTION', UNKNOWN = 'UNKNOWN', } /** * ChallengeStatus. */ export enum ChallengeStatus { COMPLETE = 'COMPLETE', EXPIRED = 'EXPIRED', FAILED = 'FAILED', IN_PROGRESS = 'IN_PROGRESS', PENDING = 'PENDING', } /** * Security question type. */ export enum QuestionType { DATE = 'DATE', TEXT = 'TEXT', } /** * Error code. */ export enum ErrorCode { unknown = -1, success = 0, apiParameterMissing = 1, apiParameterInvalid = 2, forbidden = 3, unauthorized = 4, retry = 9, customerSuspended = 10, pending = 11, invalidSession = 12, invalidPartnerId = 13, invalidMessage = 14, invalidPhone = 15, userAlreadyExisted = 155101, userNotFound = 155102, userTokenNotFound = 155103, userTokenExpired = 155104, invalidUserToken = 155105, userWasInitialized = 155106, userHasSetPin = 155107, userHasSetSecurityQuestion = 155108, userWasDisabled = 155109, userDoesNotSetPinYet = 155110, userDoesNotSetSecurityQuestionYet = 155111, incorrectUserPin = 155112, incorrectDeviceId = 155113, incorrectAppId = 155114, incorrectSecurityAnswers = 155115, invalidChallengeId = 155116, invalidApproveContent = 155117, invalidEncryptionKey = 155118, userPinLocked = 155119, securityAnswersLocked = 155120, userOTPTokenExpiredError = 155130, userOTPTokenInvalidError = 155131, userOTPNotFoundError = 155132, userOTPInvalidError = 155133, userOTPNotMatchError = 155134, userEmailInvalidError = 155135, userEmailMismatchError = 155136, deviceIDInvalidError = 155137, emailSendingFailedError = 155138, socialLoginTokenExpiredError = 155139, socialLoginProviderAppIDNotMatchError = 155140, userOTPIsLockedError = 155141, userOTPSendCountsOverLimitError = 155142, deviceTokenExpiredError = 155143, deviceTokenInvalidError = 155144, deviceTokenNotFoundError = 155145, notEnoughFunds = 155201, notEnoughBalance = 155202, exceedWithdrawLimit = 155203, minimumFundsRequired = 155204, invalidTransactionFee = 155205, rejectedOnAmlScreening = 155206, tagRequired = 155207, gasLimitTooLow = 155208, transactionDataNotEncodedProperly = 155209, fullNodeReturnedError = 155210, walletSetupRequired = 155211, lowerThenMinimumAccountBalance = 155212, rejectedByBlockchain = 155213, droppedAsPartOfReorg = 155214, operationNotSupport = 155215, amountBelowMinimum = 155216, wrongNftTokenIdNumber = 155217, invalidDestinationAddress = 155218, tokenWalletChainMismatch = 155219, wrongAmountsNumber = 155220, walletIsFrozen = 155501, maxWalletLimitReached = 155502, walletSetIdMutuallyExclusive = 155503, metadataUnmatched = 155504, userCanceled = 155701, launchUiFailed = 155702, pinCodeNotMatched = 155703, insecurePinCode = 155704, hintsMatchAnswers = 155705, networkError = 155706, userSecretMissing = 155717, invalidUserTokenFormat = 155718, userTokenMismatch = 155719, walletIdNotFound = 156001, tokenIdNotFound = 156002, transactionIdNotFound = 156003, entityCredentialNotFound = 156004, walletSetIdNotFound = 156005, } // Settings and Authentication export interface AppSettings { /** * Application ID. You can get the application ID from the W3S console. */ appId: string } export interface Authentication { /** * User token. */ userToken: string /** * Encryption key. This key is used to encrypt the user token. */ encryptionKey: string } /** * Social Login Provider. */ export enum SocialLoginProvider { APPLE = 'Apple', FACEBOOK = 'Facebook', GOOGLE = 'Google', } /** * Login configurations, including Google, Facebook, and Apple. */ export interface LoginConfigs { google?: | { /** * Google client ID. */ clientId: string /** * Google redirect URI. */ redirectUri: string /** * Google prompt for account selection. */ selectAccountPrompt?: boolean } | undefined facebook?: | { /** * Facebook app ID. */ appId: string /** * Facebook redirect URI. */ redirectUri: string } | undefined /** * We use firebase for Apple login. You can provide the firebase configuration here. */ apple?: FirebaseOptions | undefined deviceToken: string deviceEncryptionKey: string otpToken?: string } /** * Configuration settings for the SDK. */ export interface Configs { /** * Application settings. */ appSettings: AppSettings /** * Authentication settings. */ authentication?: Authentication /** * Login configurations. */ loginConfigs?: LoginConfigs } // Challenge Related export interface Challenge { /** * Challenge ID. */ challengeId: string /** * Social login user secret. */ userSecret?: string } // Device Information export interface DeviceInfo { /** * SDK type. */ model: string /** * SDK version. */ version: string } /** * Base challenge result interface. Holds the challenge type and status. */ export interface ChallengeResult { /** * Challenge type. */ type: ChallengeType /** * Challenge status. */ status: ChallengeStatus } /** * Result for sign message and sign typed-data challenges. */ export interface SignMessageResult extends ChallengeResult { /** * Challenge type. */ type: ChallengeType.SIGN_MESSAGE | ChallengeType.SIGN_TYPEDDATA data?: { /** * Signature. */ signature: string } } /** * Result for sign transaction challenge. */ export interface SignTransactionResult extends ChallengeResult { /** * Challenge type. */ type: ChallengeType.SIGN_TRANSACTION data?: { /** * Signature. */ signature: string /** * Transaction hash. */ txHash: string /** * Signed transaction. */ signedTransaction: string /** * The `v` field of the elliptic curve signature. It is used to calculate the public key. */ v?: string /** * The `r` field of the elliptic curve signature. It is part of the actual signature along with the `s` field. */ r?: string /** * The `s` field of the elliptic curve signature. It is part of the actual signature along with the `r` field. */ s?: string } } /** * Result for oauth login. */ export interface OAuthInfo { provider: SocialLoginProvider scope?: string[] socialUserUUID?: string socialUserInfo?: { email?: string name?: string phone?: string } } /** * Social login result. */ export interface SocialLoginResult { userToken: string encryptionKey: string refreshToken: string oAuthInfo: OAuthInfo } /** * Email login result. */ export interface EmailLoginResult extends Omit<SocialLoginResult, 'oAuthInfo'> {} export interface SecurityQuestion { /** * Custom security question. */ question: string /** * Question type. */ type: QuestionType } // Error and Events export interface Error { /** * Internal error code. You can look up the error code in the error code table in the documentation. */ code?: ErrorCode /** * Error message. */ message: string } export type ChallengeCompleteCallback = ( error: Error | undefined, result: | ChallengeResult | SignMessageResult | SignTransactionResult | undefined, ) => Promise<void> | void export type LoginCompleteCallback = ( error: Error | undefined, result: SocialLoginResult | EmailLoginResult | undefined, ) => Promise<void> | void export interface PostMessageEvent extends MessageEvent { data: { onFrameReady?: boolean onComplete?: boolean onForgotPin?: boolean onLearnMore?: boolean onResendOtpEmail?: boolean onError?: boolean onClose?: boolean showUi?: boolean onSocialLoginVerified?: { error: Error | undefined result: SocialLoginResult | undefined } onEmailLoginVerified?: { error: Error | undefined result: EmailLoginResult | undefined } deviceId?: string error?: Error result?: ChallengeResult | SignMessageResult | SignTransactionResult } } export interface Common { continue?: string showPin?: string hidePin?: string confirm?: string sign?: string retry?: string } export interface ConfirmPincode { headline?: string headline2?: string subhead?: string } export interface EnterPincode { headline?: string headline2?: string subhead?: string forgotPin?: string } export interface NewPincode { headline?: string headline2?: string subhead?: string } export interface RecoverPincode { headline?: string headline2?: string subhead?: string answerInputHeader?: string answerInputPlaceholder?: string } export interface SecurityConfirm { title?: string headline?: string inputHeadline?: string inputPlaceholder?: string inputMatch?: string } export interface SecurityIntros { headline?: string headline2?: string description?: string link?: string } export interface SecurityQuestions { title?: string questionHeader?: string questionPlaceholder?: string requiredMark?: string answerHeader?: string answerPlaceholder?: string answerHintHeader?: string answerHintPlaceholder?: string } export interface SecuritySummary { title?: string question?: string } export interface SocialEmailConfirm { title?: string headline?: string } export interface TransactionRequest { title?: string subtitle?: string mainCurrency?: { amount?: string | number symbol?: string } exchangeValue?: { amount?: string | number symbol?: string } fromLabel?: string from?: string toLabel?: string to?: string[] networkFeeLabel?: string networkFeeTip?: string networkFee?: string exchangeNetworkFee?: string totalLabel?: string total?: string[] exchangeTotalValue?: string rawTxDescription?: string rawTx?: string } export interface ContractInteraction { title?: string subtitle?: string mainCurrency?: { amount?: string | number symbol?: string } exchangeValue?: { amount?: string | number symbol?: string } fromLabel?: string from?: string contractAddressLabel?: string contractInfo?: string[] networkFeeLabel?: string networkFeeTip?: string networkFee?: string exchangeNetworkFee?: string totalLabel?: string total?: string[] exchangeTotalValue?: string dataDetails?: { dataDetailsLabel?: string callData?: { callDataLabel?: string data?: string } abiInfo?: { functionNameLabel?: string functionName?: string parametersLabel?: string parameters?: string[] } } } export interface SignatureRequest { title?: string contractName?: string contractUrl?: string subtitle?: string descriptionLabel?: string description?: string } export interface EmailOtp { title?: string subtitle?: string resendHint?: string resend?: string } export interface Localizations { common?: Common confirmInitPincode?: ConfirmPincode confirmNewPincode?: ConfirmPincode enterPincode?: EnterPincode initPincode?: NewPincode newPincode?: NewPincode recoverPincode?: RecoverPincode securityConfirm?: SecurityConfirm securityIntros?: SecurityIntros securityQuestions?: SecurityQuestions securitySummary?: SecuritySummary socialEmailConfirm?: SocialEmailConfirm transactionRequest?: TransactionRequest contractInteraction?: ContractInteraction signatureRequest?: SignatureRequest emailOtp?: EmailOtp } export interface ThemeColor { /** * Modal backdrop color, e.g. '#000000'. */ backdrop?: string /** * Modal backdrop opacity, e.g. 0.5. */ backdropOpacity?: number /** * Divider border color, e.g. '#808080' or 'grey'. */ divider?: string /** * Modal background color, e.g. '#FFFFFF' or 'white'. */ bg?: string /** * Success text color, e.g. '#008000' or 'green'. */ success?: string /** * Error text color, e.g. '#FF0000' or 'red'. */ error?: string /** * Primary color, e.g. '#000000' or 'black'. */ textMain?: string /** * Secondary color, e.g. '#000000' or 'black'. */ textMain2?: string /** * Primary auxiliary color, e.g. '#000000' or 'black'. */ textAuxiliary?: string /** * Secondary auxiliary color, e.g. '#000000' or 'black'. */ textAuxiliary2?: string /** * Summary text color, e.g. '#000000' or 'black'. */ textSummary?: string /** * Summary highlight text color, e.g. '#000000' or 'black'. */ textSummaryHighlight?: string /** * Text input placeholder color, e.g. '#808080' or 'grey'. */ textPlaceholder?: string /** * Text color for contraction interaction collapsible toggle label text, e.g. '#000000' or 'black'. */ textDetailToggle?: string /** * Text color for interactive text, e.g. '#000000' or 'black'. */ textInteractive?: string /** * Container background color for interactive text, e.g. '#FFFFFF' or 'white'. */ interactiveBg?: string /** * Text color for tooltip content text, e.g. '#000000' or 'black'. */ tooltipText?: string /** * Background color for tooltip content, e.g. '#FFFFFF' or 'white'. */ tooltipBg?: string /** * Fill color for pincode input dot, e.g. '#FFFFFF' or 'white'. */ pinDotBase?: string /** * Stroke color for pincode input dot, e.g. '#000000' or 'black'. */ pinDotBaseBorder?: string /** * Fill color for inputted pincode input dot, e.g. '#0000ff' or 'blue'. */ pinDotActivated?: string /** * Text color for entered pincode input, e.g. `'#000000'` or `'black'`. */ enteredPinText?: string /** * Text color for text input, e.g. '#000000' or 'black'. */ inputText?: string /** * Outline color for text input on focused, e.g. '#0000ff' or 'blue'. */ inputBorderFocused?: string /** * Outline color for text input when error, e.g. '#FF0000' or 'red'. */ inputBorderFocusedError?: string /** * Background color for text input, e.g. '#FFFFFF' or 'white'. */ inputBg?: string /** * Background color for disabled text input, e.g. '#FFFFFF' or 'white'. */ inputBgDisabled?: string /** * Background color for dropdown, e.g. '#FFFFFF' or 'white'. */ dropdownBg?: string /** * Outline color for dropdown is open, e.g. '#0000ff' or 'blue'. */ dropdownBorderIsOpen?: string /** * Outline color for dropdown when error, e.g. '#FF0000' or 'red'. */ dropdownBorderError?: string /** * Text color for primary button, e.g. '#FFFFFF' or 'white'. */ mainBtnText?: string /** * Text color for disabled primary button, e.g. '#FFFFFF' or 'white'. */ mainBtnTextDisabled?: string /** * Text color for primary button on hover, e.g. '#FFFFFF' or 'white'. */ mainBtnTextOnHover?: string /** * Background color for primary button, e.g. '#000000' or 'black'. */ mainBtnBg?: string /** * Background color for primary button on hover, e.g. '#000000' or 'black'. */ mainBtnBgOnHover?: string /** * Background color for disabled primary button, e.g. '#000000' or 'black'. */ mainBtnBgDisabled?: string /** * Text color for secondary button, e.g. '#000000' or 'black'. */ secondBtnText?: string /** * Text color for disabled secondary button, e.g. '#000000' or 'black'. */ secondBtnTextDisabled?: string /** * Text color for secondary button on hover, e.g. '#000000' or 'black'. */ secondBtnTextOnHover?: string /** * Outline color for secondary button, e.g. '#000000' or 'black'. */ secondBtnBorder?: string /** * Outline color for secondary button on hover, e.g. '#000000' or 'black'. */ secondBtnBorderOnHover?: string /** * Background color for secondary button on hover, e.g. '#FFFFFF' or 'white'. */ secondBtnBgOnHover?: string /** * Outline color for disabled secondary button, e.g. '#FFFFFF' or 'white'. */ secondBtnBorderDisabled?: string /** * Text color for plain text button, e.g. '#000000' or 'black'. */ plainBtnText?: string /** * Text color for disabled plain text button, e.g. '#000000' or 'black'. */ plainBtnTextDisabled?: string /** * Text color for plain text button on hover, e.g. '#000000' or 'black'. */ plainBtnTextOnHover?: string /** * Background color for plain text button, e.g. '#FFFFFF' or 'white'. */ plainBtnBg?: string /** * Background color for plain text button on hover, e.g. '#FFFFFF' or 'white'. */ plainBtnBgOnHover?: string /** * Text color for recover pincode hint title, e.g. '#FFFFFF' or 'white'. */ recoverPinHintTitle?: string /** * Background color for recover pincode hint title, e.g. '#FFFFFF' or 'white'. */ recoverPinHintTitleBg?: string /** * Text color for recover pincode hint, e.g. '#FFFFFF' or 'white'. */ recoverPinHint?: string /** * Background color for linear-gradient text, e.g. ['#B090F5', '#1AA3FF']. */ titleGradients?: string[] } export interface Resources { /* * Close icon for the navigation bar. */ naviClose?: string /* * Back icon for the navigation bar. */ naviBack?: string /* * Security intros image url for the security intros page. */ securityIntroMain?: string /* * Arrow icon for the dropdown and collapsible section. */ dropdownArrow?: string /* * Selected item icon for the dropdown. */ selectCheckMark?: string /** * Security confirm image url for the security confirm page. */ securityConfirmMain?: string /** * Error icon for form validation. */ errorInfo?: string /** * Token icon for the transaction request page. */ transactionTokenIcon?: string /** * DApp icon for customization for the sign message page. */ dAppIcon?: string /** * Tooltip icon for customization. */ tipIcon?: string /** * Email icon for customization. */ emailIcon?: string /** * Font-family for customization. * E.g. \{ name: 'Edu TAS Beginner', url: 'https://fonts.googleapis.com/css2?family=Edu+TAS+Beginner:wght@400;500;600;700&display=swap' \}. */ fontFamily?: { name?: string url?: string } } export interface CustomLinks { /** * External link for the learn more button link. */ learnMoreUrl?: string }