@ledgerhq/coin-icon
Version:
Ledger Icon Coin integration
79 lines (69 loc) • 2.44 kB
text/typescript
import getAddressWrapper from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
import {
getSerializedAddressParameters,
updateTransaction,
makeAccountBridgeReceive,
makeScanAccounts,
makeSync,
} from "@ledgerhq/coin-framework/bridge/jsHelpers";
import { SignerContext } from "@ledgerhq/coin-framework/signer";
import { CoinConfig } from "@ledgerhq/coin-framework/config";
import type { AccountBridge, CurrencyBridge } from "@ledgerhq/types-live";
import resolver from "../hw-getAddress";
import { initAccount } from "../initAccount";
import { broadcast } from "../broadcast";
import { createTransaction } from "../createTransaction";
import { estimateMaxSpendable } from "../estimateMaxSpendable";
import { getTransactionStatus } from "../getTransactionStatus";
import { prepareTransaction } from "../prepareTransaction";
import { buildSignOperation } from "../signOperation";
import { getAccountShape } from "../synchronization";
import { assignFromAccountRaw, assignToAccountRaw } from "../serialization";
import type { Transaction } from "../types/index";
import { IconSigner } from "../signer";
import { IconCoinConfig, setCoinConfig } from "../config";
export function buildCurrencyBridge(signerContext: SignerContext<IconSigner>): CurrencyBridge {
const getAddress = resolver(signerContext);
const scanAccounts = makeScanAccounts({
getAccountShape,
getAddressFn: getAddress,
});
return {
preload: async () => Promise.resolve({}),
hydrate: () => {},
scanAccounts,
};
}
export function buildAccountBridge(
signerContext: SignerContext<IconSigner>,
): AccountBridge<Transaction> {
const getAddress = resolver(signerContext);
const receive = makeAccountBridgeReceive(getAddressWrapper(getAddress));
const signOperation = buildSignOperation(signerContext);
const sync = makeSync({ getAccountShape });
return {
createTransaction,
updateTransaction,
prepareTransaction,
getTransactionStatus,
sync,
receive,
assignToAccountRaw,
assignFromAccountRaw,
initAccount,
signOperation,
broadcast,
estimateMaxSpendable,
getSerializedAddressParameters,
};
}
export function createBridges(
signerContext: SignerContext<IconSigner>,
coinConfig: CoinConfig<IconCoinConfig>,
) {
setCoinConfig(coinConfig);
return {
currencyBridge: buildCurrencyBridge(signerContext),
accountBridge: buildAccountBridge(signerContext),
};
}