@circle-fin/w3s-pw-web-sdk
Version:
Javascript/Typescript SDK for Circle Programmable Wallets
771 lines (770 loc) • 20.2 kB
TypeScript
import type { FirebaseOptions } from 'firebase/app';
/**
* ChallengeType.
*/
export declare 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 declare enum ChallengeStatus {
COMPLETE = "COMPLETE",
EXPIRED = "EXPIRED",
FAILED = "FAILED",
IN_PROGRESS = "IN_PROGRESS",
PENDING = "PENDING"
}
/**
* Security question type.
*/
export declare enum QuestionType {
DATE = "DATE",
TEXT = "TEXT"
}
/**
* Error code.
*/
export declare 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
}
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 declare 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;
}
export interface Challenge {
/**
* Challenge ID.
*/
challengeId: string;
/**
* Social login user secret.
*/
userSecret?: string;
}
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;
}
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 {
naviClose?: string;
naviBack?: string;
securityIntroMain?: string;
dropdownArrow?: string;
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;
}