Skip to content

Commit 1b11c8c

Browse files
authored
Merge pull request #7 from secretkeylabs/feat/message-signing-request
Feat/message signing request
2 parents d728461 + 3cd5ee5 commit 1b11c8c

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ export * from './src/address/index';
22
export * from './src/provider';
33
export * from './src/call';
44
export * from './src/transactions/signTransaction';
5+
export * from './src/signatures';

src/provider/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import { SignTransactionResponse } from '../transactions/signTransaction';
22
import { GetAddressResponse } from '../address';
33

44
export interface BitcoinNetwork {
5-
type: string;
6-
address: string;
5+
type: 'Mainnet' | 'Testnet';
6+
address?: string;
77
}
88

99
export interface BitcoinProvider {
1010
connect: (request: string) => Promise<GetAddressResponse>;
1111
call: (request: string) => Promise<Record<string, any>>;
1212
signTransaction: (request: string) => Promise<SignTransactionResponse>;
13+
signMessage: (request: string) => Promise<string>
1314
}
1415

1516
declare global {

src/signatures/index.ts

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { createUnsecuredToken, Json } from 'jsontokens';
2+
import { SignMessageOptions } from './types';
3+
4+
export const signMessage = async (options: SignMessageOptions) => {
5+
const {address, message} = options.payload;
6+
const provider = window.BitcoinProvider;
7+
if (!provider) {
8+
throw new Error('No Bitcoin Wallet installed');
9+
}
10+
if(!address) {
11+
throw new Error("An Address is required to sign a message");
12+
}
13+
if (!message) {
14+
throw new Error('you need to provide a message to be signed');
15+
}
16+
try {
17+
const request = createUnsecuredToken(options.payload as unknown as Json);
18+
const response = await provider.signMessage(request);
19+
options.onFinish?.(response);
20+
} catch (error) {
21+
console.error('[Connect] Error during Signing request', error);
22+
options.onCancel?.();
23+
}
24+
};
25+
26+
export * from './types';

src/signatures/types.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { BitcoinNetwork } from '../provider';
2+
3+
export interface SignMessagePayload {
4+
address: string;
5+
message: string;
6+
network: BitcoinNetwork;
7+
}
8+
9+
export interface SignMessageOptions {
10+
onFinish: (response: string) => void;
11+
onCancel: () => void;
12+
payload: SignMessagePayload;
13+
}

0 commit comments

Comments
 (0)