UNPKG

@breeztech/react-native-breez-sdk

Version:

React Native Breez SDK

1,146 lines (962 loc) 27.4 kB
import { NativeModules, Platform, EmitterSubscription, NativeEventEmitter } from "react-native" const LINKING_ERROR = `The package 'react-native-breez-sdk' doesn't seem to be linked. Make sure: \n\n` + Platform.select({ ios: "- You have run 'pod install'\n", default: "" }) + "- You rebuilt the app after installing the package\n" + "- You are not using Expo managed workflow\n" const BreezSDK = NativeModules.RNBreezSDK ? NativeModules.RNBreezSDK : new Proxy( {}, { get() { throw new Error(LINKING_ERROR) } } ) const BreezSDKEmitter = new NativeEventEmitter(BreezSDK) export interface AesSuccessActionDataDecrypted { description: string plaintext: string } export interface BackupFailedData { error: string } export interface BackupStatus { backedUp: boolean lastBackupTime?: number } export interface BitcoinAddressData { address: string network: Network amountSat?: number label?: string message?: string } export interface BuyBitcoinRequest { provider: BuyBitcoinProvider openingFeeParams?: OpeningFeeParams redirectUrl?: string } export interface BuyBitcoinResponse { url: string openingFeeParams?: OpeningFeeParams } export interface CheckMessageRequest { message: string pubkey: string signature: string } export interface CheckMessageResponse { isValid: boolean } export interface ClosedChannelPaymentDetails { state: ChannelState fundingTxid: string shortChannelId?: string closingTxid?: string } export interface Config { breezserver: string chainnotifierUrl: string mempoolspaceUrl?: string workingDir: string network: Network paymentTimeoutSec: number defaultLspId?: string apiKey?: string maxfeePercent: number exemptfeeMsat: number nodeConfig: NodeConfig } export interface ConfigureNodeRequest { closeToAddress?: string } export interface ConnectRequest { config: Config seed: number[] restoreOnly?: boolean } export interface CurrencyInfo { name: string fractionSize: number spacing?: number symbol?: SymbolType uniqSymbol?: SymbolType localizedName: LocalizedName[] localeOverrides: LocaleOverrides[] } export interface FiatCurrency { id: string info: CurrencyInfo } export interface GreenlightCredentials { developerKey: number[] developerCert: number[] } export interface GreenlightDeviceCredentials { device: number[] } export interface GreenlightNodeConfig { partnerCredentials?: GreenlightCredentials inviteCode?: string } export interface InvoicePaidDetails { paymentHash: string bolt11: string payment?: Payment } export interface LnInvoice { bolt11: string network: Network payeePubkey: string paymentHash: string description?: string descriptionHash?: string amountMsat?: number timestamp: number expiry: number routingHints: RouteHint[] paymentSecret: number[] minFinalCltvExpiryDelta: number } export interface ListPaymentsRequest { filters?: PaymentTypeFilter[] metadataFilters?: MetadataFilter[] fromTimestamp?: number toTimestamp?: number includeFailures?: boolean offset?: number limit?: number } export interface ListSwapsRequest { status?: SwapStatus[] fromTimestamp?: number toTimestamp?: number offset?: number limit?: number } export interface LnPaymentDetails { paymentHash: string label: string destinationPubkey: string paymentPreimage: string keysend: boolean bolt11: string openChannelBolt11?: string lnurlSuccessAction?: SuccessActionProcessed lnurlPayDomain?: string lnurlPayComment?: string lnurlMetadata?: string lnAddress?: string lnurlWithdrawEndpoint?: string swapInfo?: SwapInfo reverseSwapInfo?: ReverseSwapInfo pendingExpirationBlock?: number } export interface LnUrlAuthRequestData { k1: string domain: string url: string action?: string } export interface LnUrlErrorData { reason: string } export interface LnUrlPayErrorData { paymentHash: string reason: string } export interface LnUrlPayRequest { data: LnUrlPayRequestData amountMsat: number useTrampoline: boolean comment?: string paymentLabel?: string validateSuccessActionUrl?: boolean } export interface LnUrlPayRequestData { callback: string minSendable: number maxSendable: number metadataStr: string commentAllowed: number domain: string allowsNostr: boolean nostrPubkey?: string lnAddress?: string } export interface LnUrlPaySuccessData { successAction?: SuccessActionProcessed payment: Payment } export interface LnUrlWithdrawRequest { data: LnUrlWithdrawRequestData amountMsat: number description?: string } export interface LnUrlWithdrawRequestData { callback: string k1: string defaultDescription: string minWithdrawable: number maxWithdrawable: number } export interface LnUrlWithdrawSuccessData { invoice: LnInvoice } export interface LocaleOverrides { locale: string spacing?: number symbol: SymbolType } export interface LocalizedName { locale: string name: string } export interface LogEntry { line: string level: string } export interface LspInformation { id: string name: string widgetUrl: string pubkey: string host: string baseFeeMsat: number feeRate: number timeLockDelta: number minHtlcMsat: number lspPubkey: number[] openingFeeParamsList: OpeningFeeParamsMenu } export interface MessageSuccessActionData { message: string } export interface MetadataFilter { jsonPath: string jsonValue: string } export interface MetadataItem { key: string value: string } export interface NodeState { id: string blockHeight: number channelsBalanceMsat: number onchainBalanceMsat: number pendingOnchainBalanceMsat: number utxos: UnspentTransactionOutput[] maxPayableMsat: number maxReceivableMsat: number maxSinglePaymentAmountMsat: number maxChanReserveMsats: number connectedPeers: string[] maxReceivableSinglePaymentAmountMsat: number totalInboundLiquidityMsats: number } export interface OnchainPaymentLimitsResponse { minSat: number maxSat: number maxPayableSat: number } export interface OpenChannelFeeRequest { amountMsat?: number expiry?: number } export interface OpenChannelFeeResponse { feeMsat?: number feeParams: OpeningFeeParams } export interface OpeningFeeParams { minMsat: number proportional: number validUntil: string maxIdleTime: number maxClientToSelfDelay: number promise: string } export interface OpeningFeeParamsMenu { values: OpeningFeeParams[] } export interface PayOnchainRequest { recipientAddress: string prepareRes: PrepareOnchainPaymentResponse } export interface PayOnchainResponse { reverseSwapInfo: ReverseSwapInfo } export interface Payment { id: string paymentType: PaymentType paymentTime: number amountMsat: number feeMsat: number status: PaymentStatus error?: string description?: string details: PaymentDetails metadata?: string } export interface PaymentFailedData { error: string nodeId: string invoice?: LnInvoice label?: string } export interface PrepareOnchainPaymentRequest { amountSat: number amountType: SwapAmountType claimTxFeerate: number } export interface PrepareOnchainPaymentResponse { feesHash: string feesPercentage: number feesLockup: number feesClaim: number senderAmountSat: number recipientAmountSat: number totalFees: number } export interface PrepareRedeemOnchainFundsRequest { toAddress: string satPerVbyte: number } export interface PrepareRedeemOnchainFundsResponse { txWeight: number txFeeSat: number } export interface PrepareRefundRequest { swapAddress: string toAddress: string satPerVbyte: number unilateral?: boolean } export interface PrepareRefundResponse { refundTxWeight: number refundTxFeeSat: number } export interface Rate { coin: string value: number } export interface ReceiveOnchainRequest { openingFeeParams?: OpeningFeeParams } export interface ReceivePaymentRequest { amountMsat: number description: string preimage?: number[] openingFeeParams?: OpeningFeeParams useDescriptionHash?: boolean expiry?: number cltv?: number } export interface ReceivePaymentResponse { lnInvoice: LnInvoice openingFeeParams?: OpeningFeeParams openingFeeMsat?: number } export interface RecommendedFees { fastestFee: number halfHourFee: number hourFee: number economyFee: number minimumFee: number } export interface RedeemOnchainFundsRequest { toAddress: string satPerVbyte: number } export interface RedeemOnchainFundsResponse { txid: number[] } export interface RefundRequest { swapAddress: string toAddress: string satPerVbyte: number unilateral?: boolean } export interface RefundResponse { refundTxId: string } export interface ReportPaymentFailureDetails { paymentHash: string comment?: string } export interface ReverseSwapFeesRequest { sendAmountSat?: number claimTxFeerate?: number } export interface ReverseSwapInfo { id: string claimPubkey: string lockupTxid?: string claimTxid?: string onchainAmountSat: number status: ReverseSwapStatus } export interface ReverseSwapPairInfo { min: number max: number feesHash: string feesPercentage: number feesLockup: number feesClaim: number totalFees?: number } export interface RouteHint { hops: RouteHintHop[] } export interface RouteHintHop { srcNodeId: string shortChannelId: string feesBaseMsat: number feesProportionalMillionths: number cltvExpiryDelta: number htlcMinimumMsat?: number htlcMaximumMsat?: number } export interface SendPaymentRequest { bolt11: string useTrampoline: boolean amountMsat?: number label?: string } export interface SendPaymentResponse { payment: Payment } export interface SendSpontaneousPaymentRequest { nodeId: string amountMsat: number extraTlvs?: TlvEntry[] label?: string } export interface ServiceHealthCheckResponse { status: HealthCheckStatus } export interface SignMessageRequest { message: string } export interface SignMessageResponse { signature: string } export interface StaticBackupRequest { workingDir: string } export interface StaticBackupResponse { backup?: string[] } export interface SwapInfo { bitcoinAddress: string createdAt: number lockHeight: number paymentHash: number[] preimage: number[] privateKey: number[] publicKey: number[] swapperPublicKey: number[] script: number[] bolt11?: string paidMsat: number unconfirmedSats: number confirmedSats: number totalIncomingTxs: number status: SwapStatus refundTxIds: string[] unconfirmedTxIds: string[] confirmedTxIds: string[] minAllowedDeposit: number maxAllowedDeposit: number maxSwapperPayable: number lastRedeemError?: string channelOpeningFees?: OpeningFeeParams confirmedAt?: number } export interface SymbolType { grapheme?: string template?: string rtl?: boolean position?: number } export interface TlvEntry { fieldNumber: number value: number[] } export interface UnspentTransactionOutput { txid: number[] outnum: number amountMillisatoshi: number address: string reserved: boolean } export interface UrlSuccessActionData { description: string url: string matchesCallbackDomain: boolean } export enum AesSuccessActionDataResultVariant { DECRYPTED = "decrypted", ERROR_STATUS = "errorStatus" } export type AesSuccessActionDataResult = { type: AesSuccessActionDataResultVariant.DECRYPTED, data: AesSuccessActionDataDecrypted } | { type: AesSuccessActionDataResultVariant.ERROR_STATUS, reason: string } export enum BreezEventVariant { NEW_BLOCK = "newBlock", INVOICE_PAID = "invoicePaid", SYNCED = "synced", PAYMENT_SUCCEED = "paymentSucceed", PAYMENT_FAILED = "paymentFailed", BACKUP_STARTED = "backupStarted", BACKUP_SUCCEEDED = "backupSucceeded", BACKUP_FAILED = "backupFailed", REVERSE_SWAP_UPDATED = "reverseSwapUpdated", SWAP_UPDATED = "swapUpdated" } export type BreezEvent = { type: BreezEventVariant.NEW_BLOCK, block: number } | { type: BreezEventVariant.INVOICE_PAID, details: InvoicePaidDetails } | { type: BreezEventVariant.SYNCED } | { type: BreezEventVariant.PAYMENT_SUCCEED, details: Payment } | { type: BreezEventVariant.PAYMENT_FAILED, details: PaymentFailedData } | { type: BreezEventVariant.BACKUP_STARTED } | { type: BreezEventVariant.BACKUP_SUCCEEDED } | { type: BreezEventVariant.BACKUP_FAILED, details: BackupFailedData } | { type: BreezEventVariant.REVERSE_SWAP_UPDATED, details: ReverseSwapInfo } | { type: BreezEventVariant.SWAP_UPDATED, details: SwapInfo } export enum BuyBitcoinProvider { MOONPAY = "moonpay" } export enum ChannelState { PENDING_OPEN = "pendingOpen", OPENED = "opened", PENDING_CLOSE = "pendingClose", CLOSED = "closed" } export enum EnvironmentType { PRODUCTION = "production", STAGING = "staging", REGTEST = "regtest" } export enum FeeratePreset { REGULAR = "regular", ECONOMY = "economy", PRIORITY = "priority" } export enum HealthCheckStatus { OPERATIONAL = "operational", MAINTENANCE = "maintenance", SERVICE_DISRUPTION = "serviceDisruption" } export enum InputTypeVariant { BITCOIN_ADDRESS = "bitcoinAddress", BOLT11 = "bolt11", NODE_ID = "nodeId", URL = "url", LN_URL_PAY = "lnUrlPay", LN_URL_WITHDRAW = "lnUrlWithdraw", LN_URL_AUTH = "lnUrlAuth", LN_URL_ERROR = "lnUrlError" } export type InputType = { type: InputTypeVariant.BITCOIN_ADDRESS, address: BitcoinAddressData } | { type: InputTypeVariant.BOLT11, invoice: LnInvoice } | { type: InputTypeVariant.NODE_ID, nodeId: string } | { type: InputTypeVariant.URL, url: string } | { type: InputTypeVariant.LN_URL_PAY, data: LnUrlPayRequestData bip353Address?: string } | { type: InputTypeVariant.LN_URL_WITHDRAW, data: LnUrlWithdrawRequestData } | { type: InputTypeVariant.LN_URL_AUTH, data: LnUrlAuthRequestData } | { type: InputTypeVariant.LN_URL_ERROR, data: LnUrlErrorData } export enum LnUrlCallbackStatusVariant { OK = "ok", ERROR_STATUS = "errorStatus" } export type LnUrlCallbackStatus = { type: LnUrlCallbackStatusVariant.OK } | { type: LnUrlCallbackStatusVariant.ERROR_STATUS, data: LnUrlErrorData } export enum LnUrlPayResultVariant { ENDPOINT_SUCCESS = "endpointSuccess", ENDPOINT_ERROR = "endpointError", PAY_ERROR = "payError" } export type LnUrlPayResult = { type: LnUrlPayResultVariant.ENDPOINT_SUCCESS, data: LnUrlPaySuccessData } | { type: LnUrlPayResultVariant.ENDPOINT_ERROR, data: LnUrlErrorData } | { type: LnUrlPayResultVariant.PAY_ERROR, data: LnUrlPayErrorData } export enum LnUrlWithdrawResultVariant { OK = "ok", TIMEOUT = "timeout", ERROR_STATUS = "errorStatus" } export type LnUrlWithdrawResult = { type: LnUrlWithdrawResultVariant.OK, data: LnUrlWithdrawSuccessData } | { type: LnUrlWithdrawResultVariant.TIMEOUT, data: LnUrlWithdrawSuccessData } | { type: LnUrlWithdrawResultVariant.ERROR_STATUS, data: LnUrlErrorData } export enum Network { BITCOIN = "bitcoin", TESTNET = "testnet", SIGNET = "signet", REGTEST = "regtest" } export enum NodeConfigVariant { GREENLIGHT = "greenlight" } export interface NodeConfig { type: NodeConfigVariant.GREENLIGHT, config: GreenlightNodeConfig } export enum NodeCredentialsVariant { GREENLIGHT = "greenlight" } export interface NodeCredentials { type: NodeCredentialsVariant.GREENLIGHT, credentials: GreenlightDeviceCredentials } export enum PaymentDetailsVariant { LN = "ln", CLOSED_CHANNEL = "closedChannel" } export type PaymentDetails = { type: PaymentDetailsVariant.LN, data: LnPaymentDetails } | { type: PaymentDetailsVariant.CLOSED_CHANNEL, data: ClosedChannelPaymentDetails } export enum PaymentStatus { PENDING = "pending", COMPLETE = "complete", FAILED = "failed" } export enum PaymentType { SENT = "sent", RECEIVED = "received", CLOSED_CHANNEL = "closedChannel" } export enum PaymentTypeFilter { SENT = "sent", RECEIVED = "received", CLOSED_CHANNEL = "closedChannel" } export enum ReportIssueRequestVariant { PAYMENT_FAILURE = "paymentFailure" } export interface ReportIssueRequest { type: ReportIssueRequestVariant.PAYMENT_FAILURE, data: ReportPaymentFailureDetails } export enum ReverseSwapStatus { INITIAL = "initial", IN_PROGRESS = "inProgress", CANCELLED = "cancelled", COMPLETED_SEEN = "completedSeen", COMPLETED_CONFIRMED = "completedConfirmed" } export enum SuccessActionProcessedVariant { AES = "aes", MESSAGE = "message", URL = "url" } export type SuccessActionProcessed = { type: SuccessActionProcessedVariant.AES, result: AesSuccessActionDataResult } | { type: SuccessActionProcessedVariant.MESSAGE, data: MessageSuccessActionData } | { type: SuccessActionProcessedVariant.URL, data: UrlSuccessActionData } export enum SwapAmountType { SEND = "send", RECEIVE = "receive" } export enum SwapStatus { INITIAL = "initial", WAITING_CONFIRMATION = "waitingConfirmation", REDEEMABLE = "redeemable", REDEEMED = "redeemed", REFUNDABLE = "refundable", COMPLETED = "completed" } export type EventListener = (breezEvent: BreezEvent) => void export type LogStream = (logEntry: LogEntry) => void export const connect = async (req: ConnectRequest, listener: EventListener): Promise<EmitterSubscription> => { const subscription = BreezSDKEmitter.addListener("breezSdkEvent", listener) await BreezSDK.connect(req) return subscription } export const setLogStream = async (logStream: LogStream): Promise<EmitterSubscription> => { const subscription = BreezSDKEmitter.addListener("breezSdkLog", logStream) try { await BreezSDK.setLogStream() } catch {} return subscription } export const parseInvoice = async (invoice: string): Promise<LnInvoice> => { const response = await BreezSDK.parseInvoice(invoice) return response } export const parseInput = async (s: string): Promise<InputType> => { const response = await BreezSDK.parseInput(s) return response } export const mnemonicToSeed = async (phrase: string): Promise<number[]> => { const response = await BreezSDK.mnemonicToSeed(phrase) return response } export const defaultConfig = async (envType: EnvironmentType, apiKey: string, nodeConfig: NodeConfig): Promise<Config> => { const response = await BreezSDK.defaultConfig(envType, apiKey, nodeConfig) return response } export const staticBackup = async (req: StaticBackupRequest): Promise<StaticBackupResponse> => { const response = await BreezSDK.staticBackup(req) return response } export const serviceHealthCheck = async (apiKey: string): Promise<ServiceHealthCheckResponse> => { const response = await BreezSDK.serviceHealthCheck(apiKey) return response } export const disconnect = async (): Promise<void> => { await BreezSDK.disconnect() } export const configureNode = async (req: ConfigureNodeRequest): Promise<void> => { await BreezSDK.configureNode(req) } export const sendPayment = async (req: SendPaymentRequest): Promise<SendPaymentResponse> => { const response = await BreezSDK.sendPayment(req) return response } export const sendSpontaneousPayment = async (req: SendSpontaneousPaymentRequest): Promise<SendPaymentResponse> => { const response = await BreezSDK.sendSpontaneousPayment(req) return response } export const receivePayment = async (req: ReceivePaymentRequest): Promise<ReceivePaymentResponse> => { const response = await BreezSDK.receivePayment(req) return response } export const payLnurl = async (req: LnUrlPayRequest): Promise<LnUrlPayResult> => { const response = await BreezSDK.payLnurl(req) return response } export const withdrawLnurl = async (request: LnUrlWithdrawRequest): Promise<LnUrlWithdrawResult> => { const response = await BreezSDK.withdrawLnurl(request) return response } export const lnurlAuth = async (reqData: LnUrlAuthRequestData): Promise<LnUrlCallbackStatus> => { const response = await BreezSDK.lnurlAuth(reqData) return response } export const reportIssue = async (req: ReportIssueRequest): Promise<void> => { await BreezSDK.reportIssue(req) } export const nodeCredentials = async (): Promise<NodeCredentials | null> => { const response = await BreezSDK.nodeCredentials() return response } export const nodeInfo = async (): Promise<NodeState> => { const response = await BreezSDK.nodeInfo() return response } export const signMessage = async (req: SignMessageRequest): Promise<SignMessageResponse> => { const response = await BreezSDK.signMessage(req) return response } export const checkMessage = async (req: CheckMessageRequest): Promise<CheckMessageResponse> => { const response = await BreezSDK.checkMessage(req) return response } export const backupStatus = async (): Promise<BackupStatus> => { const response = await BreezSDK.backupStatus() return response } export const backup = async (): Promise<void> => { await BreezSDK.backup() } export const listPayments = async (req: ListPaymentsRequest): Promise<Payment[]> => { const response = await BreezSDK.listPayments(req) return response } export const paymentByHash = async (hash: string): Promise<Payment | null> => { const response = await BreezSDK.paymentByHash(hash) return response } export const setPaymentMetadata = async (hash: string, metadata: string): Promise<void> => { await BreezSDK.setPaymentMetadata(hash, metadata) } export const redeemOnchainFunds = async (req: RedeemOnchainFundsRequest): Promise<RedeemOnchainFundsResponse> => { const response = await BreezSDK.redeemOnchainFunds(req) return response } export const fetchFiatRates = async (): Promise<Rate[]> => { const response = await BreezSDK.fetchFiatRates() return response } export const listFiatCurrencies = async (): Promise<FiatCurrency[]> => { const response = await BreezSDK.listFiatCurrencies() return response } export const listLsps = async (): Promise<LspInformation[]> => { const response = await BreezSDK.listLsps() return response } export const connectLsp = async (lspId: string): Promise<void> => { await BreezSDK.connectLsp(lspId) } export const fetchLspInfo = async (lspId: string): Promise<LspInformation | null> => { const response = await BreezSDK.fetchLspInfo(lspId) return response } export const openChannelFee = async (req: OpenChannelFeeRequest): Promise<OpenChannelFeeResponse> => { const response = await BreezSDK.openChannelFee(req) return response } export const lspId = async (): Promise<string | null> => { const response = await BreezSDK.lspId() return response } export const lspInfo = async (): Promise<LspInformation> => { const response = await BreezSDK.lspInfo() return response } export const closeLspChannels = async (): Promise<void> => { await BreezSDK.closeLspChannels() } export const registerWebhook = async (webhookUrl: string): Promise<void> => { await BreezSDK.registerWebhook(webhookUrl) } export const unregisterWebhook = async (webhookUrl: string): Promise<void> => { await BreezSDK.unregisterWebhook(webhookUrl) } export const receiveOnchain = async (req: ReceiveOnchainRequest): Promise<SwapInfo> => { const response = await BreezSDK.receiveOnchain(req) return response } export const inProgressSwap = async (): Promise<SwapInfo | null> => { const response = await BreezSDK.inProgressSwap() return response } export const rescanSwaps = async (): Promise<void> => { await BreezSDK.rescanSwaps() } export const redeemSwap = async (swapAddress: string): Promise<void> => { await BreezSDK.redeemSwap(swapAddress) } export const listRefundables = async (): Promise<SwapInfo[]> => { const response = await BreezSDK.listRefundables() return response } export const prepareRefund = async (req: PrepareRefundRequest): Promise<PrepareRefundResponse> => { const response = await BreezSDK.prepareRefund(req) return response } export const refund = async (req: RefundRequest): Promise<RefundResponse> => { const response = await BreezSDK.refund(req) return response } export const listSwaps = async (req: ListSwapsRequest): Promise<SwapInfo[]> => { const response = await BreezSDK.listSwaps(req) return response } export const fetchReverseSwapFees = async (req: ReverseSwapFeesRequest): Promise<ReverseSwapPairInfo> => { const response = await BreezSDK.fetchReverseSwapFees(req) return response } export const onchainPaymentLimits = async (): Promise<OnchainPaymentLimitsResponse> => { const response = await BreezSDK.onchainPaymentLimits() return response } export const prepareOnchainPayment = async (req: PrepareOnchainPaymentRequest): Promise<PrepareOnchainPaymentResponse> => { const response = await BreezSDK.prepareOnchainPayment(req) return response } export const inProgressOnchainPayments = async (): Promise<ReverseSwapInfo[]> => { const response = await BreezSDK.inProgressOnchainPayments() return response } export const claimReverseSwap = async (lockupAddress: string): Promise<void> => { await BreezSDK.claimReverseSwap(lockupAddress) } export const payOnchain = async (req: PayOnchainRequest): Promise<PayOnchainResponse> => { const response = await BreezSDK.payOnchain(req) return response } export const executeDevCommand = async (command: string): Promise<string> => { const response = await BreezSDK.executeDevCommand(command) return response } export const generateDiagnosticData = async (): Promise<string> => { const response = await BreezSDK.generateDiagnosticData() return response } export const sync = async (): Promise<void> => { await BreezSDK.sync() } export const recommendedFees = async (): Promise<RecommendedFees> => { const response = await BreezSDK.recommendedFees() return response } export const buyBitcoin = async (req: BuyBitcoinRequest): Promise<BuyBitcoinResponse> => { const response = await BreezSDK.buyBitcoin(req) return response } export const prepareRedeemOnchainFunds = async (req: PrepareRedeemOnchainFundsRequest): Promise<PrepareRedeemOnchainFundsResponse> => { const response = await BreezSDK.prepareRedeemOnchainFunds(req) return response }