diff --git a/src/address/index.ts b/src/address/index.ts
index b27ab5a..120f400 100644
--- a/src/address/index.ts
+++ b/src/address/index.ts
@@ -1,13 +1,15 @@
import { createUnsecuredToken, Json } from 'jsontokens';
+import { getDefaultProvider } from '../provider';
import { GetAddressOptions } from './types';
export const getAddress = async (options: GetAddressOptions) => {
- const { message, network, purposes } = options.payload;
- const provider = window.BitcoinProvider;
+ const { getProvider = getDefaultProvider } = options;
+ const provider = await getProvider();
if (!provider) {
throw new Error('No Bitcoin Wallet installed');
}
- if(!purposes) {
+ const { message, network, purposes } = options.payload;
+ if (!purposes) {
throw new Error('Address purposes are required');
}
try {
diff --git a/src/address/types.ts b/src/address/types.ts
index 6d8f29e..5b04b44 100644
--- a/src/address/types.ts
+++ b/src/address/types.ts
@@ -1,4 +1,4 @@
-import { BitcoinNetwork } from '../provider';
+import { BitcoinNetwork, GetBitcoinProviderFunc } from '../provider';
export enum AddressPurposes {
PAYMENT = 'payment',
@@ -23,10 +23,11 @@ export interface Address {
}
export interface GetAddressResponse {
- addresses: Array
+ addresses: Array;
}
export interface GetAddressOptions {
+ getProvider?: GetBitcoinProviderFunc;
onFinish: (response: GetAddressResponse) => void;
onCancel: () => void;
payload: GetAddressPayload;
diff --git a/src/call/index.ts b/src/call/index.ts
index 7eccca2..1000381 100644
--- a/src/call/index.ts
+++ b/src/call/index.ts
@@ -1,5 +1,5 @@
import { createUnsecuredToken, Json } from 'jsontokens';
-import { BitcoinNetwork } from '../provider';
+import { BitcoinNetwork, GetBitcoinProviderFunc, getDefaultProvider } from '../provider';
export interface CallWalletPayload {
method: string;
@@ -8,6 +8,7 @@ export interface CallWalletPayload {
}
export interface CallWalletOptions {
+ getProvider?: GetBitcoinProviderFunc;
onFinish: (response: Record) => void;
onCancel: () => void;
payload: CallWalletPayload;
@@ -19,12 +20,13 @@ export enum CallMethod {
}
export const callWalletPopup = async (options: CallWalletOptions) => {
- const provider = window.BitcoinProvider;
- const { method } = options.payload;
+ const { getProvider = getDefaultProvider } = options;
+ const provider = await getProvider();
if (!provider) {
throw new Error('No Bitcoin Wallet installed');
}
- if(!method) {
+ const { method } = options.payload;
+ if (!method) {
throw new Error('A wallet method is required');
}
const request = createUnsecuredToken(options.payload as unknown as Json);
diff --git a/src/provider/index.ts b/src/provider/index.ts
index 4767531..a141054 100644
--- a/src/provider/index.ts
+++ b/src/provider/index.ts
@@ -19,3 +19,9 @@ declare global {
BitcoinProvider?: BitcoinProvider;
}
}
+
+export type GetBitcoinProviderFunc = () => Promise;
+
+export async function getDefaultProvider(): Promise {
+ return window.BitcoinProvider;
+}
diff --git a/src/signatures/index.ts b/src/signatures/index.ts
index df7b221..cba4c7a 100644
--- a/src/signatures/index.ts
+++ b/src/signatures/index.ts
@@ -1,21 +1,23 @@
import { createUnsecuredToken, Json } from 'jsontokens';
+import { getDefaultProvider } from '../provider';
import { SignMessageOptions } from './types';
export const signMessage = async (options: SignMessageOptions) => {
- const {address, message} = options.payload;
- const provider = window.BitcoinProvider;
+ const { getProvider = getDefaultProvider } = options;
+ const provider = await getProvider();
if (!provider) {
throw new Error('No Bitcoin Wallet installed');
}
- if(!address) {
- throw new Error("An Address is required to sign a message");
+ const { address, message } = options.payload;
+ if (!address) {
+ throw new Error('An Address is required to sign a message');
}
if (!message) {
throw new Error('you need to provide a message to be signed');
}
try {
const request = createUnsecuredToken(options.payload as unknown as Json);
- const response = await provider.signMessage(request);
+ const response = await provider.signMessage(request);
options.onFinish?.(response);
} catch (error) {
console.error('[Connect] Error during Signing request', error);
diff --git a/src/signatures/types.ts b/src/signatures/types.ts
index d992197..67d1424 100644
--- a/src/signatures/types.ts
+++ b/src/signatures/types.ts
@@ -1,4 +1,4 @@
-import { BitcoinNetwork } from '../provider';
+import { BitcoinNetwork, GetBitcoinProviderFunc } from '../provider';
export interface SignMessagePayload {
address: string;
@@ -7,6 +7,7 @@ export interface SignMessagePayload {
}
export interface SignMessageOptions {
+ getProvider?: GetBitcoinProviderFunc;
onFinish: (response: string) => void;
onCancel: () => void;
payload: SignMessagePayload;
diff --git a/src/transactions/sendBtcTransaction.ts b/src/transactions/sendBtcTransaction.ts
index cf90c8a..ad5fa98 100644
--- a/src/transactions/sendBtcTransaction.ts
+++ b/src/transactions/sendBtcTransaction.ts
@@ -1,40 +1,39 @@
import { createUnsecuredToken, Json } from 'jsontokens';
-import { BitcoinNetwork } from '../provider';
+import { BitcoinNetwork, GetBitcoinProviderFunc, getDefaultProvider } from '../provider';
export interface SendBtcTransactionPayload {
network: BitcoinNetwork;
amountSats: string;
- recipientAddress: string
+ recipientAddress: string;
message?: string;
}
export interface SendBtcTransactionOptions {
- payload: SendBtcTransactionPayload;
+ getProvider?: GetBitcoinProviderFunc;
onFinish: (response: string) => void;
onCancel: () => void;
+ payload: SendBtcTransactionPayload;
}
-
export const sendBtcTransaction = async (options: SendBtcTransactionOptions) => {
- const { amountSats, recipientAddress } = options.payload;
- const provider = window.BitcoinProvider;
-
+ const { getProvider = getDefaultProvider } = options;
+ const provider = await getProvider();
if (!provider) {
throw new Error('No Bitcoin Wallet installed');
}
+ const { amountSats, recipientAddress } = options.payload;
if (!amountSats) {
throw new Error('a value for amount to be transferred is required');
}
if (!recipientAddress) {
throw new Error('the recipient address is required');
}
- try {
- const request = createUnsecuredToken(options.payload as unknown as Json);
- const addressResponse = await provider.sendBtcTransaction(request);
- options.onFinish?.(addressResponse);
- } catch (error) {
- console.error('[Connect] Error during send btc request', error);
- options.onCancel?.();
- }
+ try {
+ const request = createUnsecuredToken(options.payload as unknown as Json);
+ const addressResponse = await provider.sendBtcTransaction(request);
+ options.onFinish?.(addressResponse);
+ } catch (error) {
+ console.error('[Connect] Error during send btc request', error);
+ options.onCancel?.();
+ }
};
-
diff --git a/src/transactions/signTransaction.ts b/src/transactions/signTransaction.ts
index 3606985..7f47f91 100644
--- a/src/transactions/signTransaction.ts
+++ b/src/transactions/signTransaction.ts
@@ -1,14 +1,12 @@
import { createUnsecuredToken, Json } from 'jsontokens';
-import { BitcoinNetwork } from '../provider';
-
+import { BitcoinNetwork, GetBitcoinProviderFunc, getDefaultProvider } from '../provider';
export interface InputToSign {
- address: string,
- signingIndexes: Array,
- sigHash?: number,
+ address: string;
+ signingIndexes: Array;
+ sigHash?: number;
}
-
export interface SignTransactionPayload {
network: BitcoinNetwork;
message: string;
@@ -18,9 +16,10 @@ export interface SignTransactionPayload {
}
export interface SignTransactionOptions {
- payload: SignTransactionPayload;
+ getProvider?: GetBitcoinProviderFunc;
onFinish: (response: any) => void;
onCancel: () => void;
+ payload: SignTransactionPayload;
}
export interface SignTransactionResponse {
@@ -28,26 +27,25 @@ export interface SignTransactionResponse {
txId?: string;
}
-
export const signTransaction = async (options: SignTransactionOptions) => {
- const { psbtBase64, inputsToSign } = options.payload;
- const provider = window.BitcoinProvider;
+ const { getProvider = getDefaultProvider } = options;
+ const provider = await getProvider();
if (!provider) {
throw new Error('No Bitcoin Wallet installed');
}
+ const { psbtBase64, inputsToSign } = options.payload;
if (!psbtBase64) {
throw new Error('a value for psbtBase64 representing the tx hash is required');
}
if (!inputsToSign) {
throw new Error('an array specifying the inputs to be signed by the wallet is required');
}
- try {
- const request = createUnsecuredToken(options.payload as unknown as Json);
- const addressResponse = await provider.signTransaction(request);
- options.onFinish?.(addressResponse);
- } catch (error) {
- console.error('[Connect] Error during signPsbt request', error);
- options.onCancel?.();
- }
+ try {
+ const request = createUnsecuredToken(options.payload as unknown as Json);
+ const addressResponse = await provider.signTransaction(request);
+ options.onFinish?.(addressResponse);
+ } catch (error) {
+ console.error('[Connect] Error during signPsbt request', error);
+ options.onCancel?.();
+ }
};
-