UNPKG

@ledgerhq/coin-hedera

Version:
83 lines (73 loc) 2.77 kB
import type { CoinConfig } from "@ledgerhq/coin-module-framework/config"; import getAddressWrapper from "@ledgerhq/ledger-wallet-framework/bridge/getAddressWrapper"; import { getSerializedAddressParameters, makeScanAccounts, makeSync, updateTransaction, } from "@ledgerhq/ledger-wallet-framework/bridge/jsHelpers"; import type { SignerContext } from "@ledgerhq/ledger-wallet-framework/signer"; import type { AccountBridge, CurrencyBridge } from "@ledgerhq/types-live"; import hederaCoinConfig, { type HederaCoinConfig } from "../config"; import { getPreloadStrategy, hydrate, preload } from "../preload"; import resolver from "../signer/index"; import type { Transaction, TransactionStatus, HederaSigner, HederaAccount } from "../types"; import { broadcast } from "./broadcast"; import { createTransaction } from "./createTransaction"; import { estimateMaxSpendable } from "./estimateMaxSpendable"; import { getTransactionStatus } from "./getTransactionStatus"; import { prepareTransaction } from "./prepareTransaction"; import { receive } from "./receive"; import { assignFromAccountRaw, assignToAccountRaw } from "./serialization"; import { buildSignOperation } from "./signOperation"; import { getAccountShape, buildIterateResult, postSync } from "./synchronisation"; import { validateAddress } from "./validateAddress"; function buildCurrencyBridge(signerContext: SignerContext<HederaSigner>): CurrencyBridge { const getAddress = resolver(signerContext); const scanAccounts = makeScanAccounts({ getAccountShape, buildIterateResult, getAddressFn: getAddressWrapper(getAddress), }); return { preload, hydrate, getPreloadStrategy, scanAccounts, }; } const sync = makeSync({ getAccountShape, postSync, shouldMergeOps: false }); function buildAccountBridge( signerContext: SignerContext<HederaSigner>, ): AccountBridge<Transaction, HederaAccount, TransactionStatus> { const getAddress = resolver(signerContext); const signOperation = buildSignOperation(signerContext); return { estimateMaxSpendable, createTransaction, updateTransaction, getTransactionStatus, prepareTransaction, assignToAccountRaw, assignFromAccountRaw, sync, receive: receive(getAddressWrapper(getAddress)), signOperation, signRawOperation: () => { throw new Error("signRawOperation is not supported"); }, broadcast, getSerializedAddressParameters, validateAddress, }; } export function createBridges( signerContext: SignerContext<HederaSigner>, coinConfig: CoinConfig<HederaCoinConfig>, ) { hederaCoinConfig.setCoinConfig(coinConfig); return { currencyBridge: buildCurrencyBridge(signerContext), accountBridge: buildAccountBridge(signerContext), }; }