@ledgerhq/types-live
Ledger Live main types.
API
Table of Contents
TokenAccount
A token belongs to an Account and share the parent account address
Type: {type: "TokenAccount"
, id: string, parentId: string, token: TokenCurrency, balance: BigNumber, spendableBalance: BigNumber, compoundBalance: BigNumber?, creationDate: Date, operationsCount: number, operations: Array<Operation>, pendingOperations: Array<Operation>, starred: boolean, balanceHistoryCache: BalanceHistoryCache, swapHistory: Array<SwapOperation>, approvals: Array<{sender: string, value: string}>?}
Properties
ChildAccount
A child account belongs to an Account but has its own address
Type: {type: "ChildAccount"
, id: string, name: string, starred: boolean, parentId: string, currency: CryptoCurrency, address: string, balance: BigNumber, creationDate: Date, operationsCount: number, operations: Array<Operation>, pendingOperations: Array<Operation>, balanceHistoryCache: BalanceHistoryCache, swapHistory: Array<SwapOperation>}
Properties
Address
Type: {address: string, derivationPath: string}
Properties
Account
Account type is the main level account of a blockchain currency.
Each family maybe need an extra field, to solve this, you can have some subtyping like this:
export type BitcoinAccount = Account & { bitcoinResources: BitcoinResources }
and all parts where we would need it, we would need to cast,
const bitcoinAccount = account as BitcoinAccount;
and that BitcoinAccount type would be part of a coin integration family specific indeed.
Type: {type: "Account"
, id: string, seedIdentifier: string, xpub: string?, derivationMode: DerivationMode, index: number, freshAddress: string, freshAddressPath: string, freshAddresses: Array<Address>, name: string, starred: boolean, used: boolean, balance: BigNumber, spendableBalance: BigNumber, creationDate: Date, blockHeight: number, currency: CryptoCurrency, unit: Unit, operationsCount: number, operations: Array<Operation>, pendingOperations: Array<Operation>, lastSyncDate: Date, endpointConfig: (string | null | undefined)?, subAccounts: Array<SubAccount>?, balanceHistoryCache: BalanceHistoryCache, swapHistory: Array<SwapOperation>, syncHash: string?, nfts: Array<ProtoNFT>?}
Properties
SubAccount
super type that is either a token or a child account
Type: (TokenAccount | ChildAccount)
AccountLike
One of the Account type
Type: (Account | SubAccount)
AccountLikeArray
An array of AccountLikes
Type: (Array<AccountLike> | Array<TokenAccount> | Array<ChildAccount> | Array<Account>)
TokenAccountRaw
Type: {type: "TokenAccountRaw"
, id: string, starred: boolean?, parentId: string, tokenId: string, creationDate: string?, operationsCount: number?, operations: Array<OperationRaw>, pendingOperations: Array<OperationRaw>, balance: string, spendableBalance: string?, compoundBalance: string?, balanceHistoryCache: BalanceHistoryCache?, swapHistory: Array<SwapOperationRaw>?, approvals: Array<{sender: string, value: string}>?}
Properties
ChildAccountRaw
Type: {type: "ChildAccountRaw"
, id: string, name: string, starred: boolean?, parentId: string, currencyId: string, address: string, creationDate: string?, operationsCount: number?, operations: Array<OperationRaw>, pendingOperations: Array<OperationRaw>, balance: string, balanceHistoryCache: BalanceHistoryCache?, swapHistory: Array<SwapOperationRaw>?}
Properties
AccountRaw
Type: {id: string, seedIdentifier: string, xpub: string?, derivationMode: DerivationMode, index: number, freshAddress: string, freshAddressPath: string, freshAddresses: Array<Address>, name: string, starred: boolean?, used: boolean?, balance: string, spendableBalance: string?, blockHeight: number, creationDate: string?, operationsCount: number?, currencyId: string, operations: Array<OperationRaw>, pendingOperations: Array<OperationRaw>, unitMagnitude: number, lastSyncDate: string, endpointConfig: (string | null | undefined)?, subAccounts: Array<SubAccountRaw>?, balanceHistoryCache: BalanceHistoryCache?, swapHistory: Array<SwapOperationRaw>?, syncHash: string?, nfts: Array<ProtoNFTRaw>?}
Properties
SubAccountRaw
Type: (TokenAccountRaw | ChildAccountRaw)
AccountRawLike
Type: (AccountRaw | SubAccountRaw)
AccountIdParams
Type: {type: string, version: string, currencyId: string, xpubOrAddress: string, derivationMode: DerivationMode}
Properties
ScanAccountEventRaw
More events will come in the future
Type: {type: "discovered"
, account: AccountRaw}
Properties
DeviceId
Unique identifier of a device. It will depend on the underlying implementation.
Type: string
PreloadStrategy
Type: Partial<{preloadMaxAge: number}>
BroadcastArg0
Type: {account: Account, signedOperation: SignedOperation}
Properties
SignOperationArg0
Type: {account: Account, transaction: T, deviceId: DeviceId}
Properties
SignOperationFnSignature
Type: function (arg0: SignOperationArg0<T>): Observable<SignOperationEvent>
CurrencyBridge
Abstraction related to a currency
AccountBridge
Abstraction related to an account
CurrenciesData
Type: {FIXME_ignoreAccountFields: Array<string>?, FIXME_ignoreOperationFields: Array<string>?, FIXME_ignorePreloadFields: Array<string>?, mockDeviceOptions: any?, scanAccounts: Array<{name: string, apdus: string, unstableAccounts: boolean?, test: function (expect: ExpectFn, scanned: Array<Account>, bridge: CurrencyBridge): any?}>?, accounts: Array<{implementations: Array<string>?, raw: AccountRaw, FIXME_tests: Array<(string | RegExp)>?, transactions: Array<{name: string, transaction: (T | function (arg0: T, arg1: Account, arg2: AccountBridge<T>): T), expectedStatus: (Partial<TransactionStatusCommon> | function (arg0: Account, arg1: T, arg2: TransactionStatusCommon): Partial<TransactionStatusCommon>)?, test: function (arg0: ExpectFn, arg1: T, arg2: TransactionStatusCommon, arg3: AccountBridge<T>): any?, apdus: string?, testSignedOperation: function (arg0: ExpectFn, arg1: SignedOperation, arg2: Account, arg3: T, arg4: TransactionStatusCommon, arg5: AccountBridge<T>): any?}>?, test: function (arg0: ExpectFn, arg1: Account, arg2: AccountBridge<T>): any?}>?, test: function (arg0: ExpectFn, arg1: CurrencyBridge): any?}
Properties
FIXME_ignoreAccountFields
Array<string>?FIXME_ignoreOperationFields
Array<string>?FIXME_ignorePreloadFields
Array<string>?mockDeviceOptions
any?scanAccounts
Array<{name: string, apdus: string, unstableAccounts: boolean?, test: function (expect: ExpectFn, scanned: Array<Account>, bridge: CurrencyBridge): any?}>?accounts
Array<{implementations: Array<string>?, raw: AccountRaw, FIXME_tests: Array<(string | RegExp)>?, transactions: Array<{name: string, transaction: (T | function (arg0: T, arg1: Account, arg2: AccountBridge<T>): T), expectedStatus: (Partial<TransactionStatusCommon> | function (arg0: Account, arg1: T, arg2: TransactionStatusCommon): Partial<TransactionStatusCommon>)?, test: function (arg0: ExpectFn, arg1: T, arg2: TransactionStatusCommon, arg3: AccountBridge<T>): any?, apdus: string?, testSignedOperation: function (arg0: ExpectFn, arg1: SignedOperation, arg2: Account, arg3: T, arg4: TransactionStatusCommon, arg5: AccountBridge<T>): any?}>?, test: function (arg0: ExpectFn, arg1: Account, arg2: AccountBridge<T>): any?}>?test
function (arg0: ExpectFn, arg1: CurrencyBridge): any?
DatasetTest
Type: {implementations: Array<string>, currencies: (Record<CryptoCurrencyIds, CurrenciesData<T>> | Record<string, never>)}
Properties
DerivationMode
DerivationMode is a string identifier of a specific derivation scheme in a list defined in live-common derivation.ts
Type: string
FeatureId
Add others with union (e.g. "learn" | "market" | "foo")
Type: ("learn"
| "pushNotifications"
| "llmUsbFirmwareUpdate"
| "ratings"
| "counterValue"
| "buyDeviceFromLive"
| "ptxSmartRouting"
| string)
Feature
We use objects instead of direct booleans for potential future improvements
like feature versioning etc
Type: {enabled: boolean, languages_whitelisted: [string]?, languages_blacklisted: [string]?, params: any?}
Properties
enabled
If false, the feature is disabled (for every languages regardless of the languages_whitelisted option)
Type: boolean
languages_whitelisted
You can optionnally use one of the two following options (languages_whitelisted and languages_blacklisted) (Only implemented on mobile for now)
Type: [string]
languages_whitelisted
List of languages for which the feature is enabled (it will be disabled by default for all of the others)
Type: [string]
languages_blacklisted
List of languages for which the feature is disabled
Type: [string]
params
Additional params
Type: any
DefaultFeatures
Type: any
LedgerScriptParams
Type: {firmware: string, firmwareKey: string, delete: string?, deleteKey: string?, targetId: (string | number)?, hash: string, perso: string}
Properties
DeviceInfo
Type: {mcuVersion: string, version: string, majMin: string, targetId: (string | number), isBootloader: boolean, isRecoveryMode: boolean?, isOSU: boolean, providerName: (string | null | undefined), managerAllowed: boolean, pinValidated: boolean, seVersion: string?, mcuBlVersion: string?, mcuTargetId: number?, seTargetId: number?, onboarded: boolean?, hasDevFirmware: boolean?}
Properties
DeviceModelInfo
Type: {modelId: DeviceModelId, deviceInfo: DeviceInfo, apps: Array<{name: string, version: string}>}
Properties
DeviceVersion
Type: {id: Id, name: string, display_name: string, target_id: string, description: string, device: Id, providers: Array<Id>, mcu_versions: Array<Id>, se_firmware_final_versions: Array<Id>, osu_versions: Array<Id>, application_versions: Array<Id>, date_creation: string, date_last_modified: string}
Properties
McuVersion
Type: {id: Id, mcu: Id, name: string, description: (string | null | undefined), providers: Array<Id>, from_bootloader_version: string, device_versions: Array<Id>, se_firmware_final_versions: Array<Id>, date_creation: string, date_last_modified: string}
Properties
SeedPhraseType
FirmwareInfo
Type: {isBootloader: boolean, rawVersion: string, targetId: number, seVersion: string?, mcuVersion: string, mcuBlVersion: string?, mcuTargetId: number?, seTargetId: number?, flags: Buffer}
Properties
OsuFirmware
Type: any
FinalFirmware
Type: any
FirmwareUpdateContext
Type: {osu: OsuFirmware, final: FinalFirmware, shouldFlashMCU: boolean}
Properties
ApplicationVersion
Type: {id: Id, name: string, version: string, app: Id, description: (string | null | undefined), display_name: string, icon: string, notes: (string | null | undefined), perso: string, hash: string, firmware: string, firmware_key: string, delete: string, delete_key: string, device_versions: Array<Id>, se_firmware_final_versions: Array<Id>, providers: Array<Id>, date_creation: string, date_last_modified: string, type: AppType?, bytes: (number | null | undefined), warning: (string | null | undefined), currency: CryptoCurrency?}
Properties
Application
Type: {id: Id, name: string, description: (string | null | undefined), application_versions: Array<ApplicationVersion>, providers: Array<Id>, category: Id, publisher: (Id | null | undefined), date_creation: string, date_last_modified: string, currencyId: (string | null | undefined), authorName: (string | null | undefined), supportURL: (string | null | undefined), contactURL: (string | null | undefined), sourceURL: (string | null | undefined), compatibleWalletsJSON: (string | null | undefined)}
Properties
AppType
App
App is higher level on top of Application and ApplicationVersion
with all fields Live needs and in normalized form (but still serializable)
Type: {id: Id, name: string, displayName: string, version: string, currencyId: (string | null | undefined), description: (string | null | undefined), dateModified: string, icon: string, authorName: (string | null | undefined), supportURL: (string | null | undefined), contactURL: (string | null | undefined), sourceURL: (string | null | undefined), compatibleWallets: Array<{name: string, url: (string | null | undefined)}>, hash: string, perso: string, firmware: string, firmware_key: string, delete: string, delete_key: string, dependencies: Array<string>, bytes: (number | null | undefined), warning: (string | null | undefined), indexOfMarketCap: number, isDevTools: boolean, type: AppType}
Properties
Category
Type: {id: Id, name: string, description: (string | null | undefined), providers: Array<Id>, applications: Array<Id>, date_creation: string, date_last_modified: string}
Properties
SocketEvent
Type: ({type: "bulk-progress"
, progress: number, index: number, total: number} | {type: "result"
, payload: any} | {type: "warning"
, message: string} | {type: "device-permission-requested"
, wording: string} | {type: "device-permission-granted"
} | {type: "exchange-before"
, nonce: number, apdu: Buffer} | {type: "exchange"
, nonce: number, apdu: Buffer, data: Buffer, status: number} | {type: "opened"
} | {type: "closed"
})
NFTStandard
Type: ("ERC721"
| "ERC1155"
)
NFTMediaSize
Type: ("preview"
| "big"
| "original"
)
NFTMedias
Type: Record<NFTMediaSize, {uri: string, mediaType: string}>
NFTMetadata
Type: {tokenName: (string | null), nftName: (string | null), medias: NFTMedias, description: (string | null), properties: Array<Record<("key"
| "value"
), string>>, links: Record<NFTMetadataLinksProviders, string>}
Properties
NFTCollectionMetadata
Type: {tokenName: (string | null)}
Properties
ProtoNFT
Type: {id: string, tokenId: string, amount: BigNumber, contract: string, standard: NFTStandard, currencyId: CryptoCurrencyIds, metadata: NFTMetadata?}
Properties
ProtoNFTRaw
Type: any
NFT
Type: any
NFTMetadataLinksProviders
Type: ("opensea"
| "rarible"
| "explorer"
)
NFTMetadataResponse
Type: {status: (200
| 404
| 500
), result: ({contract: string, tokenId: string, tokenName: (string | null), nftName: (string | null), medias: NFTMedias, description: (string | null), properties: Array<Record<("key"
| "value"
), string>>, links: Record<NFTMetadataLinksProviders, string>} | null)?}
Properties
NFTCollectionMetadataResponse
Type: {status: (200
| 404
| 500
), result: ({contract: string, tokenName: (string | null)} | null)?}
Properties
status
(200
| 404
| 500
)result
({contract: string, tokenName: (string | null)} | null)?
FloorPrice
Type: {ticker: string, value: number}
Properties
OperationType
Type: ("IN"
| "OUT"
| "NONE"
| "CREATE"
| "REVEAL"
| "DELEGATE"
| "UNDELEGATE"
| "REDELEGATE"
| "REWARD"
| "FEES"
| "FREEZE"
| "UNFREEZE"
| "VOTE"
| "REWARD_PAYOUT"
| "BOND"
| "UNBOND"
| "WITHDRAW_UNBONDED"
| "SET_CONTROLLER"
| "SLASH"
| "NOMINATE"
| "CHILL"
| "SUPPLY"
| "REDEEM"
| "APPROVE"
| "OPT_IN"
| "OPT_OUT"
| "NFT_IN"
| "NFT_OUT"
)
Operation
Type: {id: string, hash: string, type: OperationType, value: BigNumber, fee: BigNumber, senders: Array<string>, recipients: Array<string>, blockHeight: (number | null | undefined), blockHash: (string | null | undefined), transactionSequenceNumber: number?, accountId: string, standard: (NFTStandard | string)?, operator: string?, contract: string?, tokenId: string?, date: Date, extra: Record<string, any>, hasFailed: boolean?, subOperations: Array<Operation>?, internalOperations: Array<Operation>?, nftOperations: Array<Operation>?}
Properties
OperationRaw
Type: {id: string, hash: string, type: OperationType, value: string, fee: string, senders: Array<string>, recipients: Array<string>, blockHeight: (number | null | undefined), blockHash: (string | null | undefined), transactionSequenceNumber: number?, accountId: string, hasFailed: boolean?, standard: (NFTStandard | string)?, operator: string?, contract: string?, tokenId: string?, date: string, extra: Record<string, any>, subOperations: Array<OperationRaw>?, internalOperations: Array<OperationRaw>?, nftOperations: Array<OperationRaw>?}
Properties
DailyOperationsSection
Type: {day: Date, data: Array<Operation>}
Properties
DailyOperations
Type: {sections: Array<DailyOperationsSection>, completed: boolean}
Properties
A pagination config holds the user's pagination state
this is a state that usually should leave during the app lifecycle, but is not persisted
it drives the number of operations to poll in accounts
when a user paginate more, the number should accordingly be incremented
The UI should manage scrolling ahead of time (e.g. if 30 ops is displayed and UI have pages of 20 ops, the UI can already request to poll 70 ops so it have 2 pages in advance)
The UI must always do max() to keep the increasing the counter and not going back to lower value: that optim the sync to not recompute things too much
Type: {operationsPerAccountId: Record<string, number>?, operations: number?}
Properties
SyncConfig
Type: {paginationConfig: PaginationConfig, withoutSynchronize: boolean?, blacklistedTokenIds: Array<string>?}
Properties
BalanceHistoryData
Type: {date: Date, value: number}
Properties
BalanceHistory
Type: Array<BalanceHistoryData>
BalanceHistoryRaw
Type: Array<[string, string]>
BalanceHistoryWithCountervalue
Type: Array<any>
ValueChange
Type: {percentage: (number | null | undefined), value: number}
Properties
AccountPortfolio
Type: {history: BalanceHistoryWithCountervalue, countervalueAvailable: boolean, countervalueReceiveSum: number, countervalueSendSum: number, cryptoChange: ValueChange, countervalueChange: ValueChange}
Properties
CurrencyPortfolio
Type: {history: BalanceHistoryWithCountervalue, countervalueAvailable: boolean, histories: Array<BalanceHistoryWithCountervalue>, accounts: AccountLikeArray, cryptoChange: ValueChange, range: PortfolioRange, countervalueChange: ValueChange}
Properties
Portfolio
Type: {balanceHistory: BalanceHistory, balanceAvailable: boolean, availableAccounts: Array<AccountLike>, unavailableCurrencies: Array<(CryptoCurrency | TokenCurrency)>, accounts: Array<AccountLike>, range: PortfolioRange, histories: Array<BalanceHistoryWithCountervalue>, countervalueReceiveSum: number, countervalueSendSum: number, countervalueChange: ValueChange}
Properties
PortfolioRangeConfig
Type: {count: number?, granularityId: GranularityId, startOf: function (arg0: Date): Date, increment: number}
Properties
PortfolioRange
Type: ("all"
| "year"
| "month"
| "week"
| "day"
)
AssetsDistribution
Type: {isAvailable: boolean, list: Array<{currency: (CryptoCurrency | TokenCurrency), distribution: number, amount: number, countervalue: number}>, showFirst: number, sum: number}
Properties
SwapOperation
Type: {provider: string, swapId: string, status: string, receiverAccountId: string, tokenId: string?, operationId: string, fromAmount: BigNumber, toAmount: BigNumber}
Properties
SwapOperationRaw
Type: {provider: string, swapId: string, status: string, receiverAccountId: string, tokenId: string?, operationId: string, fromAmount: string, toAmount: string}
Properties
SignedOperation
Type: {operation: Operation, signature: string, signatureRaw: Record<string, any>?, expirationDate: (Date | null | undefined)}
Properties
SignedOperationRaw
Type: {operation: OperationRaw, signature: string, signatureRaw: Record<string, any>?, expirationDate: (string | null | undefined)}
Properties
SignOperationEvent
Type: ({type: "device-streaming"
, progress: number, index: number, total: number} | {type: "device-signature-requested"
} | {type: "device-signature-granted"
} | {type: "signed"
, signedOperation: SignedOperation})
SignOperationEventRaw
Type: ({type: "device-streaming"
, progress: number, index: number, total: number} | {type: "device-signature-requested"
} | {type: "device-signature-granted"
} | {type: "signed"
, signedOperation: SignedOperationRaw})
TransactionCommon
Transaction is a generic object that holds all state for all transactions
there are generic fields and coin specific fields. That's why almost all fields are optionals
Type: {amount: BigNumber, recipient: string, useAllAmount: boolean?, subAccountId: (string | null | undefined)?, feesStrategy: ("slow"
| "medium"
| "fast"
| "custom"
| null)?}
Properties
amount
BigNumberrecipient
stringuseAllAmount
boolean?subAccountId
(string | null | undefined)?feesStrategy
("slow"
| "medium"
| "fast"
| "custom"
| null)?
TransactionCommonRaw
Type: {amount: string, recipient: string, useAllAmount: boolean?, subAccountId: (string | null | undefined)?, feesStrategy: ("slow"
| "medium"
| "fast"
| "custom"
| null)?}
Properties
FeeStrategy
User can have 3 differents choice for their fee
Most of the time mid is low * 1.25 and high is low * 1.5
They are some exception as eth that got his own meter
Type: {amount: BigNumber, displayedAmount: BigNumber?, label: string, unit: Unit?}
Properties
amount
BigNumberdisplayedAmount
BigNumber?label
stringunit
Unit?
TransactionStatusCommon
TransactionStatus is a view of Transaction with general info to be used on the UI and status info.
Type: {errors: Record<string, Error>, warnings: Record<string, Error>, estimatedFees: BigNumber, amount: BigNumber, totalSpent: BigNumber, recipientIsReadOnly: boolean?}
Properties
errors
Record<string, Error>warnings
Record<string, Error>estimatedFees
BigNumberamount
BigNumbertotalSpent
BigNumberrecipientIsReadOnly
boolean?
TransactionStatusCommonRaw
Type: {errors: Record<string, string>, warnings: Record<string, string>, estimatedFees: string, amount: string, totalSpent: string, useAllAmount: boolean?, recipientIsReadOnly: boolean?}
Properties