@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
89 lines (79 loc) • 2.46 kB
text/typescript
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<ExchangeProviderNameAndSignature> => {
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);
}