import { ExchangeTypes, PartnerKeyInfo } from "@ledgerhq/hw-app-exchange"; import { getSwapProvider, getAvailableProviders } from "./swap"; import { getSellProvider } from "./sell"; import { getFundProvider } from "./fund"; import { getEnv } from "@ledgerhq/live-env"; export { getSwapProvider, getAvailableProviders }; export type ExchangeProviderNameAndSignature = { name: string; publicKey: { curve: "secp256k1" | "secp256r1"; data: Buffer; }; version?: number; signature: Buffer; }; export function convertToAppExchangePartnerKey( provider: ExchangeProviderNameAndSignature, ): PartnerKeyInfo { return { name: provider.name, curve: provider.publicKey.curve, publicKey: provider.publicKey.data, }; } export const getProviderConfig = async ( exchangeType: ExchangeTypes, provider: string, ): Promise => { if (getEnv("MOCK_EXCHANGE_TEST_CONFIG") && testProvider) { return testProvider; } const ledgerSignatureEnv = getEnv("MOCK_EXCHANGE_TEST_CONFIG") ? "test" : "prod"; const partnerSignatureEnv = getEnv("MOCK_EXCHANGE_TEST_PARTNER") ? "test" : "prod"; switch (exchangeType) { case ExchangeTypes.Fund: case ExchangeTypes.FundNg: return getFundProvider(provider.toLowerCase()); case ExchangeTypes.Sell: case ExchangeTypes.SellNg: return await getSellProvider({ providerId: provider.toLowerCase(), ledgerSignatureEnv, partnerSignatureEnv, }); default: throw new Error(`Unknown partner ${provider} type`); } }; let testProvider: ExchangeProviderNameAndSignature | undefined; type TestProvider = { name: string; publicKey: { curve: "secp256k1" | "secp256r1"; data: string; }; service: { appVersion: number; name: "swap" | "sell" | "fund"; }; signature: string; }; export function setTestProviderInfo(provider: string) { const { name, publicKey, signature, service } = JSON.parse(provider) as TestProvider; testProvider = { name, publicKey: { curve: publicKey.curve, data: Buffer.from(publicKey.data, "hex"), }, signature: Buffer.from(signature, "hex"), version: service.appVersion, }; } export function getTestProviderInfo(): ExchangeProviderNameAndSignature | undefined { return testProvider; } export function removeTestProviderInfo(): ExchangeProviderNameAndSignature | undefined { return (testProvider = undefined); }