@ledgerhq/coin-hedera
Version:
Ledger Hedera Coin integration
83 lines (73 loc) • 2.77 kB
text/typescript
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),
};
}