@ckb-ccc/okx 0.0.9-alpha.2 → 0.0.10-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advancedBarrel.d.ts +29 -8
- package/dist/advancedBarrel.d.ts.map +1 -1
- package/dist/btc/index.d.ts +2 -10
- package/dist/btc/index.d.ts.map +1 -1
- package/dist/btc/index.js +52 -19
- package/dist/nostr/index.d.ts +2 -1
- package/dist/nostr/index.d.ts.map +1 -1
- package/dist/nostr/index.js +22 -9
- package/dist.commonjs/advancedBarrel.d.ts +29 -8
- package/dist.commonjs/advancedBarrel.d.ts.map +1 -1
- package/dist.commonjs/btc/index.d.ts +2 -10
- package/dist.commonjs/btc/index.d.ts.map +1 -1
- package/dist.commonjs/btc/index.js +52 -19
- package/dist.commonjs/nostr/index.d.ts +2 -1
- package/dist.commonjs/nostr/index.d.ts.map +1 -1
- package/dist.commonjs/nostr/index.js +22 -9
- package/package.json +5 -4
- package/src/advancedBarrel.ts +35 -6
- package/src/btc/index.ts +57 -21
- package/src/nostr/index.ts +26 -11
package/dist/advancedBarrel.d.ts
CHANGED
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
import { Nip07A } from "@ckb-ccc/nip07/advanced";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { UniSatA } from "@ckb-ccc/uni-sat/advanced";
|
|
3
|
+
export interface BitcoinProvider extends UniSatA.Provider {
|
|
4
|
+
connect?(): Promise<{
|
|
4
5
|
address: string;
|
|
5
6
|
publicKey: string;
|
|
6
7
|
compressedPublicKey: string;
|
|
7
8
|
}>;
|
|
8
|
-
getSelectedAccount(): Promise<{
|
|
9
|
+
getSelectedAccount?(): Promise<{
|
|
9
10
|
address: string;
|
|
10
11
|
publicKey: string;
|
|
11
12
|
compressedPublicKey: string;
|
|
12
13
|
} | null>;
|
|
13
|
-
signMessage(msg: string, type: "ecdsa" | "bip322-simple"): Promise<string>;
|
|
14
14
|
}
|
|
15
15
|
export interface NostrProvider extends Nip07A.Provider {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
connect?(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Adds an event listener to the provider.
|
|
19
|
+
*/
|
|
20
|
+
on: NostrOnMethod;
|
|
21
|
+
/**
|
|
22
|
+
* Removes an event listener from the provider.
|
|
23
|
+
* @param eventName - The name of the event to remove the listener from.
|
|
24
|
+
* @param listener - The listener function to remove.
|
|
25
|
+
* @returns The provider instance.
|
|
26
|
+
*/
|
|
27
|
+
removeListener(eventName: string, listener: (...args: unknown[]) => unknown): NostrProvider;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Interface representing a method to add event listeners to the provider.
|
|
31
|
+
* @interface
|
|
32
|
+
*/
|
|
33
|
+
export interface NostrOnMethod {
|
|
34
|
+
/**
|
|
35
|
+
* Adds an event listener to the provider.
|
|
36
|
+
* @param eventName - The name of the event.
|
|
37
|
+
* @param listener - The listener function.
|
|
38
|
+
* @returns The provider instance.
|
|
39
|
+
*/
|
|
40
|
+
(eventName: string, listener: (...args: unknown[]) => unknown): Promise<void>;
|
|
20
41
|
}
|
|
21
42
|
//# sourceMappingURL=advancedBarrel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advancedBarrel.d.ts","sourceRoot":"","sources":["../src/advancedBarrel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"advancedBarrel.d.ts","sourceRoot":"","sources":["../src/advancedBarrel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,MAAM,WAAW,eAAgB,SAAQ,OAAO,CAAC,QAAQ;IACvD,OAAO,CAAC,IAAI,OAAO,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC,CAAC;IAEH,kBAAkB,CAAC,IAAI,OAAO,CAAC;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,GAAG,IAAI,CAAC,CAAC;CACX;AAED,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,QAAQ;IACpD,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;OAEG;IACH,EAAE,EAAE,aAAa,CAAC;IAElB;;;;;OAKG;IACH,cAAc,CACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GACxC,aAAa,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E"}
|
package/dist/btc/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ccc
|
|
1
|
+
import { ccc } from "@ckb-ccc/core";
|
|
2
2
|
import { BitcoinProvider } from "../advancedBarrel";
|
|
3
3
|
/**
|
|
4
4
|
* Class representing a Bitcoin signer that extends SignerBtc from @ckb-ccc/core.
|
|
@@ -16,14 +16,6 @@ export declare class BitcoinSigner extends ccc.SignerBtc {
|
|
|
16
16
|
*/
|
|
17
17
|
constructor(client: ccc.Client, providers: Record<string, BitcoinProvider>, preferredNetworks?: ccc.NetworkPreference[]);
|
|
18
18
|
get provider(): BitcoinProvider;
|
|
19
|
-
/**
|
|
20
|
-
* Get account info if the signer is connected.
|
|
21
|
-
* @returns Account information
|
|
22
|
-
*/
|
|
23
|
-
assertConnection(): Promise<{
|
|
24
|
-
address: string;
|
|
25
|
-
publicKey: string;
|
|
26
|
-
}>;
|
|
27
19
|
/**
|
|
28
20
|
* Gets the Bitcoin account address.
|
|
29
21
|
* @returns {Promise<string>} A promise that resolves to the Bitcoin account address.
|
|
@@ -39,7 +31,7 @@ export declare class BitcoinSigner extends ccc.SignerBtc {
|
|
|
39
31
|
* @returns {Promise<void>} A promise that resolves when the connection is established.
|
|
40
32
|
*/
|
|
41
33
|
connect(): Promise<void>;
|
|
42
|
-
|
|
34
|
+
onReplaced(listener: () => void): () => void;
|
|
43
35
|
/**
|
|
44
36
|
* Checks if the signer is connected.
|
|
45
37
|
* @returns {Promise<boolean>} A promise that resolves to true if connected, false otherwise.
|
package/dist/btc/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/btc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/btc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,GAAG,CAAC,SAAS;aAU5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAVpC,OAAO,CAAC,OAAO,CAAgB;IAE/B;;;;OAIG;gBAED,MAAM,EAAE,GAAG,CAAC,MAAM,EACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACzC,iBAAiB,GAAE,GAAG,CAAC,iBAAiB,EAWxD;IAKH,IAAI,QAAQ,IAAI,eAAe,CAwB9B;IAED;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAgBtC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAYzC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAe5C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBrC;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAMvE"}
|
package/dist/btc/index.js
CHANGED
|
@@ -44,49 +44,82 @@ export class BitcoinSigner extends ccc.SignerBtc {
|
|
|
44
44
|
}
|
|
45
45
|
return provider;
|
|
46
46
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Get account info if the signer is connected.
|
|
49
|
-
* @returns Account information
|
|
50
|
-
*/
|
|
51
|
-
async assertConnection() {
|
|
52
|
-
const account = await this.provider.getSelectedAccount();
|
|
53
|
-
if (!account) {
|
|
54
|
-
throw Error("Not connected");
|
|
55
|
-
}
|
|
56
|
-
return account;
|
|
57
|
-
}
|
|
58
47
|
/**
|
|
59
48
|
* Gets the Bitcoin account address.
|
|
60
49
|
* @returns {Promise<string>} A promise that resolves to the Bitcoin account address.
|
|
61
50
|
*/
|
|
62
51
|
async getBtcAccount() {
|
|
63
|
-
|
|
52
|
+
if (this.provider.getSelectedAccount) {
|
|
53
|
+
const account = await this.provider.getSelectedAccount();
|
|
54
|
+
if (!account) {
|
|
55
|
+
throw Error("Not connected");
|
|
56
|
+
}
|
|
57
|
+
return account.address;
|
|
58
|
+
}
|
|
59
|
+
const address = (await this.provider.getAccounts())[0];
|
|
60
|
+
if (!address) {
|
|
61
|
+
throw Error("Not connected");
|
|
62
|
+
}
|
|
63
|
+
return address;
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
66
|
* Gets the Bitcoin public key.
|
|
67
67
|
* @returns {Promise<ccc.Hex>} A promise that resolves to the Bitcoin public key.
|
|
68
68
|
*/
|
|
69
69
|
async getBtcPublicKey() {
|
|
70
|
-
|
|
70
|
+
if (this.provider.getSelectedAccount) {
|
|
71
|
+
const account = await this.provider.getSelectedAccount();
|
|
72
|
+
if (!account) {
|
|
73
|
+
throw Error("Not connected");
|
|
74
|
+
}
|
|
75
|
+
return ccc.hexFrom(account.publicKey);
|
|
76
|
+
}
|
|
77
|
+
return ccc.hexFrom(await this.provider.getPublicKey());
|
|
71
78
|
}
|
|
72
79
|
/**
|
|
73
80
|
* Connects to the provider by requesting accounts.
|
|
74
81
|
* @returns {Promise<void>} A promise that resolves when the connection is established.
|
|
75
82
|
*/
|
|
76
83
|
async connect() {
|
|
77
|
-
|
|
84
|
+
if (this.provider.connect) {
|
|
85
|
+
await this.provider.connect();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
await this.provider.requestAccounts();
|
|
78
89
|
}
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
onReplaced(listener) {
|
|
91
|
+
const stop = [];
|
|
92
|
+
const replacer = async () => {
|
|
93
|
+
listener();
|
|
94
|
+
stop[0]?.();
|
|
95
|
+
};
|
|
96
|
+
stop.push(() => {
|
|
97
|
+
this.provider.removeListener("accountChanged", replacer);
|
|
98
|
+
});
|
|
99
|
+
this.provider.on("accountChanged", replacer);
|
|
100
|
+
return stop[0];
|
|
83
101
|
}
|
|
84
102
|
/**
|
|
85
103
|
* Checks if the signer is connected.
|
|
86
104
|
* @returns {Promise<boolean>} A promise that resolves to true if connected, false otherwise.
|
|
87
105
|
*/
|
|
88
106
|
async isConnected() {
|
|
89
|
-
|
|
107
|
+
try {
|
|
108
|
+
this.provider;
|
|
109
|
+
}
|
|
110
|
+
catch (_) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
if (this.provider.getSelectedAccount) {
|
|
114
|
+
if ((await this.provider.getSelectedAccount()) === null) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else if ((await this.provider.getAccounts()).length === 0) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
await this.connect();
|
|
122
|
+
return true;
|
|
90
123
|
}
|
|
91
124
|
/**
|
|
92
125
|
* Signs a raw message with the Bitcoin account.
|
package/dist/nostr/index.d.ts
CHANGED
|
@@ -7,11 +7,12 @@ import { NostrProvider } from "../advancedBarrel";
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class NostrSigner extends ccc.SignerNostr {
|
|
9
9
|
readonly provider: NostrProvider;
|
|
10
|
+
private publicKeyCache?;
|
|
10
11
|
constructor(client: ccc.Client, provider: NostrProvider);
|
|
11
|
-
replaceClient(client: ccc.Client): Promise<boolean>;
|
|
12
12
|
getNostrPublicKey(): Promise<ccc.Hex>;
|
|
13
13
|
signNostrEvent(event: ccc.NostrEvent): Promise<Required<ccc.NostrEvent>>;
|
|
14
14
|
connect(): Promise<void>;
|
|
15
|
+
onReplaced(listener: () => void): () => void;
|
|
15
16
|
isConnected(): Promise<boolean>;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nostr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,GAAG,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nostr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,GAAG,CAAC,WAAW;aAK5B,QAAQ,EAAE,aAAa;IAJzC,OAAO,CAAC,cAAc,CAAC,CAA8B;gBAGnD,MAAM,EAAE,GAAG,CAAC,MAAM,EACF,QAAQ,EAAE,aAAa;IAKnC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAOrC,cAAc,CAClB,KAAK,EAAE,GAAG,CAAC,UAAU,GACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAO9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAetC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
|
package/dist/nostr/index.js
CHANGED
|
@@ -8,23 +8,36 @@ export class NostrSigner extends ccc.SignerNostr {
|
|
|
8
8
|
constructor(client, provider) {
|
|
9
9
|
super(client);
|
|
10
10
|
this.provider = provider;
|
|
11
|
-
|
|
12
|
-
async replaceClient(client) {
|
|
13
|
-
return super.replaceClient(client);
|
|
11
|
+
this.publicKeyCache = undefined;
|
|
14
12
|
}
|
|
15
13
|
async getNostrPublicKey() {
|
|
16
|
-
if (!this.
|
|
17
|
-
|
|
14
|
+
if (!this.publicKeyCache) {
|
|
15
|
+
this.publicKeyCache = this.provider.getPublicKey();
|
|
18
16
|
}
|
|
19
|
-
return ccc.hexFrom(this.
|
|
17
|
+
return ccc.hexFrom(await this.publicKeyCache);
|
|
20
18
|
}
|
|
21
19
|
async signNostrEvent(event) {
|
|
22
|
-
return this.provider.signEvent(
|
|
20
|
+
return this.provider.signEvent({
|
|
21
|
+
...event,
|
|
22
|
+
pubkey: await this.publicKeyCache,
|
|
23
|
+
});
|
|
23
24
|
}
|
|
24
25
|
async connect() {
|
|
25
|
-
await this.provider.
|
|
26
|
+
await this.provider.connect?.(); // Help extension to switch network
|
|
27
|
+
}
|
|
28
|
+
onReplaced(listener) {
|
|
29
|
+
const stop = [];
|
|
30
|
+
const replacer = async () => {
|
|
31
|
+
listener();
|
|
32
|
+
stop[0]?.();
|
|
33
|
+
};
|
|
34
|
+
stop.push(() => {
|
|
35
|
+
this.provider.removeListener("accountChanged", replacer);
|
|
36
|
+
});
|
|
37
|
+
this.provider.on("accountChanged", replacer);
|
|
38
|
+
return stop[0];
|
|
26
39
|
}
|
|
27
40
|
async isConnected() {
|
|
28
|
-
return
|
|
41
|
+
return true;
|
|
29
42
|
}
|
|
30
43
|
}
|
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
import { Nip07A } from "@ckb-ccc/nip07/advanced";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { UniSatA } from "@ckb-ccc/uni-sat/advanced";
|
|
3
|
+
export interface BitcoinProvider extends UniSatA.Provider {
|
|
4
|
+
connect?(): Promise<{
|
|
4
5
|
address: string;
|
|
5
6
|
publicKey: string;
|
|
6
7
|
compressedPublicKey: string;
|
|
7
8
|
}>;
|
|
8
|
-
getSelectedAccount(): Promise<{
|
|
9
|
+
getSelectedAccount?(): Promise<{
|
|
9
10
|
address: string;
|
|
10
11
|
publicKey: string;
|
|
11
12
|
compressedPublicKey: string;
|
|
12
13
|
} | null>;
|
|
13
|
-
signMessage(msg: string, type: "ecdsa" | "bip322-simple"): Promise<string>;
|
|
14
14
|
}
|
|
15
15
|
export interface NostrProvider extends Nip07A.Provider {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
connect?(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Adds an event listener to the provider.
|
|
19
|
+
*/
|
|
20
|
+
on: NostrOnMethod;
|
|
21
|
+
/**
|
|
22
|
+
* Removes an event listener from the provider.
|
|
23
|
+
* @param eventName - The name of the event to remove the listener from.
|
|
24
|
+
* @param listener - The listener function to remove.
|
|
25
|
+
* @returns The provider instance.
|
|
26
|
+
*/
|
|
27
|
+
removeListener(eventName: string, listener: (...args: unknown[]) => unknown): NostrProvider;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Interface representing a method to add event listeners to the provider.
|
|
31
|
+
* @interface
|
|
32
|
+
*/
|
|
33
|
+
export interface NostrOnMethod {
|
|
34
|
+
/**
|
|
35
|
+
* Adds an event listener to the provider.
|
|
36
|
+
* @param eventName - The name of the event.
|
|
37
|
+
* @param listener - The listener function.
|
|
38
|
+
* @returns The provider instance.
|
|
39
|
+
*/
|
|
40
|
+
(eventName: string, listener: (...args: unknown[]) => unknown): Promise<void>;
|
|
20
41
|
}
|
|
21
42
|
//# sourceMappingURL=advancedBarrel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advancedBarrel.d.ts","sourceRoot":"","sources":["../src/advancedBarrel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"advancedBarrel.d.ts","sourceRoot":"","sources":["../src/advancedBarrel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,MAAM,WAAW,eAAgB,SAAQ,OAAO,CAAC,QAAQ;IACvD,OAAO,CAAC,IAAI,OAAO,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC,CAAC;IAEH,kBAAkB,CAAC,IAAI,OAAO,CAAC;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,GAAG,IAAI,CAAC,CAAC;CACX;AAED,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,QAAQ;IACpD,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;OAEG;IACH,EAAE,EAAE,aAAa,CAAC;IAElB;;;;;OAKG;IACH,cAAc,CACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GACxC,aAAa,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ccc
|
|
1
|
+
import { ccc } from "@ckb-ccc/core";
|
|
2
2
|
import { BitcoinProvider } from "../advancedBarrel";
|
|
3
3
|
/**
|
|
4
4
|
* Class representing a Bitcoin signer that extends SignerBtc from @ckb-ccc/core.
|
|
@@ -16,14 +16,6 @@ export declare class BitcoinSigner extends ccc.SignerBtc {
|
|
|
16
16
|
*/
|
|
17
17
|
constructor(client: ccc.Client, providers: Record<string, BitcoinProvider>, preferredNetworks?: ccc.NetworkPreference[]);
|
|
18
18
|
get provider(): BitcoinProvider;
|
|
19
|
-
/**
|
|
20
|
-
* Get account info if the signer is connected.
|
|
21
|
-
* @returns Account information
|
|
22
|
-
*/
|
|
23
|
-
assertConnection(): Promise<{
|
|
24
|
-
address: string;
|
|
25
|
-
publicKey: string;
|
|
26
|
-
}>;
|
|
27
19
|
/**
|
|
28
20
|
* Gets the Bitcoin account address.
|
|
29
21
|
* @returns {Promise<string>} A promise that resolves to the Bitcoin account address.
|
|
@@ -39,7 +31,7 @@ export declare class BitcoinSigner extends ccc.SignerBtc {
|
|
|
39
31
|
* @returns {Promise<void>} A promise that resolves when the connection is established.
|
|
40
32
|
*/
|
|
41
33
|
connect(): Promise<void>;
|
|
42
|
-
|
|
34
|
+
onReplaced(listener: () => void): () => void;
|
|
43
35
|
/**
|
|
44
36
|
* Checks if the signer is connected.
|
|
45
37
|
* @returns {Promise<boolean>} A promise that resolves to true if connected, false otherwise.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/btc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/btc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,GAAG,CAAC,SAAS;aAU5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAVpC,OAAO,CAAC,OAAO,CAAgB;IAE/B;;;;OAIG;gBAED,MAAM,EAAE,GAAG,CAAC,MAAM,EACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACzC,iBAAiB,GAAE,GAAG,CAAC,iBAAiB,EAWxD;IAKH,IAAI,QAAQ,IAAI,eAAe,CAwB9B;IAED;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAgBtC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAYzC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAe5C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBrC;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAMvE"}
|
|
@@ -47,49 +47,82 @@ class BitcoinSigner extends core_1.ccc.SignerBtc {
|
|
|
47
47
|
}
|
|
48
48
|
return provider;
|
|
49
49
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Get account info if the signer is connected.
|
|
52
|
-
* @returns Account information
|
|
53
|
-
*/
|
|
54
|
-
async assertConnection() {
|
|
55
|
-
const account = await this.provider.getSelectedAccount();
|
|
56
|
-
if (!account) {
|
|
57
|
-
throw Error("Not connected");
|
|
58
|
-
}
|
|
59
|
-
return account;
|
|
60
|
-
}
|
|
61
50
|
/**
|
|
62
51
|
* Gets the Bitcoin account address.
|
|
63
52
|
* @returns {Promise<string>} A promise that resolves to the Bitcoin account address.
|
|
64
53
|
*/
|
|
65
54
|
async getBtcAccount() {
|
|
66
|
-
|
|
55
|
+
if (this.provider.getSelectedAccount) {
|
|
56
|
+
const account = await this.provider.getSelectedAccount();
|
|
57
|
+
if (!account) {
|
|
58
|
+
throw Error("Not connected");
|
|
59
|
+
}
|
|
60
|
+
return account.address;
|
|
61
|
+
}
|
|
62
|
+
const address = (await this.provider.getAccounts())[0];
|
|
63
|
+
if (!address) {
|
|
64
|
+
throw Error("Not connected");
|
|
65
|
+
}
|
|
66
|
+
return address;
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
69
|
* Gets the Bitcoin public key.
|
|
70
70
|
* @returns {Promise<ccc.Hex>} A promise that resolves to the Bitcoin public key.
|
|
71
71
|
*/
|
|
72
72
|
async getBtcPublicKey() {
|
|
73
|
-
|
|
73
|
+
if (this.provider.getSelectedAccount) {
|
|
74
|
+
const account = await this.provider.getSelectedAccount();
|
|
75
|
+
if (!account) {
|
|
76
|
+
throw Error("Not connected");
|
|
77
|
+
}
|
|
78
|
+
return core_1.ccc.hexFrom(account.publicKey);
|
|
79
|
+
}
|
|
80
|
+
return core_1.ccc.hexFrom(await this.provider.getPublicKey());
|
|
74
81
|
}
|
|
75
82
|
/**
|
|
76
83
|
* Connects to the provider by requesting accounts.
|
|
77
84
|
* @returns {Promise<void>} A promise that resolves when the connection is established.
|
|
78
85
|
*/
|
|
79
86
|
async connect() {
|
|
80
|
-
|
|
87
|
+
if (this.provider.connect) {
|
|
88
|
+
await this.provider.connect();
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
await this.provider.requestAccounts();
|
|
81
92
|
}
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
93
|
+
onReplaced(listener) {
|
|
94
|
+
const stop = [];
|
|
95
|
+
const replacer = async () => {
|
|
96
|
+
listener();
|
|
97
|
+
stop[0]?.();
|
|
98
|
+
};
|
|
99
|
+
stop.push(() => {
|
|
100
|
+
this.provider.removeListener("accountChanged", replacer);
|
|
101
|
+
});
|
|
102
|
+
this.provider.on("accountChanged", replacer);
|
|
103
|
+
return stop[0];
|
|
86
104
|
}
|
|
87
105
|
/**
|
|
88
106
|
* Checks if the signer is connected.
|
|
89
107
|
* @returns {Promise<boolean>} A promise that resolves to true if connected, false otherwise.
|
|
90
108
|
*/
|
|
91
109
|
async isConnected() {
|
|
92
|
-
|
|
110
|
+
try {
|
|
111
|
+
this.provider;
|
|
112
|
+
}
|
|
113
|
+
catch (_) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
if (this.provider.getSelectedAccount) {
|
|
117
|
+
if ((await this.provider.getSelectedAccount()) === null) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if ((await this.provider.getAccounts()).length === 0) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
await this.connect();
|
|
125
|
+
return true;
|
|
93
126
|
}
|
|
94
127
|
/**
|
|
95
128
|
* Signs a raw message with the Bitcoin account.
|
|
@@ -7,11 +7,12 @@ import { NostrProvider } from "../advancedBarrel";
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class NostrSigner extends ccc.SignerNostr {
|
|
9
9
|
readonly provider: NostrProvider;
|
|
10
|
+
private publicKeyCache?;
|
|
10
11
|
constructor(client: ccc.Client, provider: NostrProvider);
|
|
11
|
-
replaceClient(client: ccc.Client): Promise<boolean>;
|
|
12
12
|
getNostrPublicKey(): Promise<ccc.Hex>;
|
|
13
13
|
signNostrEvent(event: ccc.NostrEvent): Promise<Required<ccc.NostrEvent>>;
|
|
14
14
|
connect(): Promise<void>;
|
|
15
|
+
onReplaced(listener: () => void): () => void;
|
|
15
16
|
isConnected(): Promise<boolean>;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nostr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,GAAG,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nostr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,GAAG,CAAC,WAAW;aAK5B,QAAQ,EAAE,aAAa;IAJzC,OAAO,CAAC,cAAc,CAAC,CAA8B;gBAGnD,MAAM,EAAE,GAAG,CAAC,MAAM,EACF,QAAQ,EAAE,aAAa;IAKnC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAOrC,cAAc,CAClB,KAAK,EAAE,GAAG,CAAC,UAAU,GACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAO9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAetC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
|
|
@@ -11,24 +11,37 @@ class NostrSigner extends core_1.ccc.SignerNostr {
|
|
|
11
11
|
constructor(client, provider) {
|
|
12
12
|
super(client);
|
|
13
13
|
this.provider = provider;
|
|
14
|
-
|
|
15
|
-
async replaceClient(client) {
|
|
16
|
-
return super.replaceClient(client);
|
|
14
|
+
this.publicKeyCache = undefined;
|
|
17
15
|
}
|
|
18
16
|
async getNostrPublicKey() {
|
|
19
|
-
if (!this.
|
|
20
|
-
|
|
17
|
+
if (!this.publicKeyCache) {
|
|
18
|
+
this.publicKeyCache = this.provider.getPublicKey();
|
|
21
19
|
}
|
|
22
|
-
return core_1.ccc.hexFrom(this.
|
|
20
|
+
return core_1.ccc.hexFrom(await this.publicKeyCache);
|
|
23
21
|
}
|
|
24
22
|
async signNostrEvent(event) {
|
|
25
|
-
return this.provider.signEvent(
|
|
23
|
+
return this.provider.signEvent({
|
|
24
|
+
...event,
|
|
25
|
+
pubkey: await this.publicKeyCache,
|
|
26
|
+
});
|
|
26
27
|
}
|
|
27
28
|
async connect() {
|
|
28
|
-
await this.provider.
|
|
29
|
+
await this.provider.connect?.(); // Help extension to switch network
|
|
30
|
+
}
|
|
31
|
+
onReplaced(listener) {
|
|
32
|
+
const stop = [];
|
|
33
|
+
const replacer = async () => {
|
|
34
|
+
listener();
|
|
35
|
+
stop[0]?.();
|
|
36
|
+
};
|
|
37
|
+
stop.push(() => {
|
|
38
|
+
this.provider.removeListener("accountChanged", replacer);
|
|
39
|
+
});
|
|
40
|
+
this.provider.on("accountChanged", replacer);
|
|
41
|
+
return stop[0];
|
|
29
42
|
}
|
|
30
43
|
async isConnected() {
|
|
31
|
-
return
|
|
44
|
+
return true;
|
|
32
45
|
}
|
|
33
46
|
}
|
|
34
47
|
exports.NostrSigner = NostrSigner;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ckb-ccc/okx",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10-alpha.0",
|
|
4
4
|
"description": "CCC - CKBer's Codebase. Common Chains Connector's support for OKX",
|
|
5
5
|
"author": "Hanssen0 <hanssen0@hanssen0.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,8 +42,9 @@
|
|
|
42
42
|
"access": "public"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@ckb-ccc/core": "0.0.
|
|
46
|
-
"@ckb-ccc/nip07": "0.0.
|
|
45
|
+
"@ckb-ccc/core": "0.0.10-alpha.0",
|
|
46
|
+
"@ckb-ccc/nip07": "0.0.10-alpha.0",
|
|
47
|
+
"@ckb-ccc/uni-sat": "0.0.10-alpha.0"
|
|
47
48
|
},
|
|
48
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "8a4c789419f5e12e1f230cead213c59373834a1a"
|
|
49
50
|
}
|
package/src/advancedBarrel.ts
CHANGED
|
@@ -1,21 +1,50 @@
|
|
|
1
1
|
import { Nip07A } from "@ckb-ccc/nip07/advanced";
|
|
2
|
+
import { UniSatA } from "@ckb-ccc/uni-sat/advanced";
|
|
2
3
|
|
|
3
|
-
export interface BitcoinProvider {
|
|
4
|
-
connect(): Promise<{
|
|
4
|
+
export interface BitcoinProvider extends UniSatA.Provider {
|
|
5
|
+
connect?(): Promise<{
|
|
5
6
|
address: string;
|
|
6
7
|
publicKey: string;
|
|
7
8
|
compressedPublicKey: string;
|
|
8
9
|
}>;
|
|
9
10
|
|
|
10
|
-
getSelectedAccount(): Promise<{
|
|
11
|
+
getSelectedAccount?(): Promise<{
|
|
11
12
|
address: string;
|
|
12
13
|
publicKey: string;
|
|
13
14
|
compressedPublicKey: string;
|
|
14
15
|
} | null>;
|
|
15
|
-
|
|
16
|
-
signMessage(msg: string, type: "ecdsa" | "bip322-simple"): Promise<string>;
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
export interface NostrProvider extends Nip07A.Provider {
|
|
20
|
-
|
|
19
|
+
connect?(): Promise<void>;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Adds an event listener to the provider.
|
|
23
|
+
*/
|
|
24
|
+
on: NostrOnMethod;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Removes an event listener from the provider.
|
|
28
|
+
* @param eventName - The name of the event to remove the listener from.
|
|
29
|
+
* @param listener - The listener function to remove.
|
|
30
|
+
* @returns The provider instance.
|
|
31
|
+
*/
|
|
32
|
+
removeListener(
|
|
33
|
+
eventName: string,
|
|
34
|
+
listener: (...args: unknown[]) => unknown,
|
|
35
|
+
): NostrProvider;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Interface representing a method to add event listeners to the provider.
|
|
40
|
+
* @interface
|
|
41
|
+
*/
|
|
42
|
+
export interface NostrOnMethod {
|
|
43
|
+
/**
|
|
44
|
+
* Adds an event listener to the provider.
|
|
45
|
+
* @param eventName - The name of the event.
|
|
46
|
+
* @param listener - The listener function.
|
|
47
|
+
* @returns The provider instance.
|
|
48
|
+
*/
|
|
49
|
+
(eventName: string, listener: (...args: unknown[]) => unknown): Promise<void>;
|
|
21
50
|
}
|
package/src/btc/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ccc
|
|
1
|
+
import { ccc } from "@ckb-ccc/core";
|
|
2
2
|
import { BitcoinProvider } from "../advancedBarrel";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -59,24 +59,24 @@ export class BitcoinSigner extends ccc.SignerBtc {
|
|
|
59
59
|
return provider;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
/**
|
|
63
|
-
* Get account info if the signer is connected.
|
|
64
|
-
* @returns Account information
|
|
65
|
-
*/
|
|
66
|
-
async assertConnection(): Promise<{ address: string; publicKey: string }> {
|
|
67
|
-
const account = await this.provider.getSelectedAccount();
|
|
68
|
-
if (!account) {
|
|
69
|
-
throw Error("Not connected");
|
|
70
|
-
}
|
|
71
|
-
return account;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
62
|
/**
|
|
75
63
|
* Gets the Bitcoin account address.
|
|
76
64
|
* @returns {Promise<string>} A promise that resolves to the Bitcoin account address.
|
|
77
65
|
*/
|
|
78
66
|
async getBtcAccount(): Promise<string> {
|
|
79
|
-
|
|
67
|
+
if (this.provider.getSelectedAccount) {
|
|
68
|
+
const account = await this.provider.getSelectedAccount();
|
|
69
|
+
if (!account) {
|
|
70
|
+
throw Error("Not connected");
|
|
71
|
+
}
|
|
72
|
+
return account.address;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const address = (await this.provider.getAccounts())[0];
|
|
76
|
+
if (!address) {
|
|
77
|
+
throw Error("Not connected");
|
|
78
|
+
}
|
|
79
|
+
return address;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
/**
|
|
@@ -84,7 +84,15 @@ export class BitcoinSigner extends ccc.SignerBtc {
|
|
|
84
84
|
* @returns {Promise<ccc.Hex>} A promise that resolves to the Bitcoin public key.
|
|
85
85
|
*/
|
|
86
86
|
async getBtcPublicKey(): Promise<ccc.Hex> {
|
|
87
|
-
|
|
87
|
+
if (this.provider.getSelectedAccount) {
|
|
88
|
+
const account = await this.provider.getSelectedAccount();
|
|
89
|
+
if (!account) {
|
|
90
|
+
throw Error("Not connected");
|
|
91
|
+
}
|
|
92
|
+
return ccc.hexFrom(account.publicKey);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return ccc.hexFrom(await this.provider.getPublicKey());
|
|
88
96
|
}
|
|
89
97
|
|
|
90
98
|
/**
|
|
@@ -92,13 +100,26 @@ export class BitcoinSigner extends ccc.SignerBtc {
|
|
|
92
100
|
* @returns {Promise<void>} A promise that resolves when the connection is established.
|
|
93
101
|
*/
|
|
94
102
|
async connect(): Promise<void> {
|
|
95
|
-
|
|
103
|
+
if (this.provider.connect) {
|
|
104
|
+
await this.provider.connect();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
await this.provider.requestAccounts();
|
|
96
108
|
}
|
|
97
109
|
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
110
|
+
onReplaced(listener: () => void): () => void {
|
|
111
|
+
const stop: (() => void)[] = [];
|
|
112
|
+
const replacer = async () => {
|
|
113
|
+
listener();
|
|
114
|
+
stop[0]?.();
|
|
115
|
+
};
|
|
116
|
+
stop.push(() => {
|
|
117
|
+
this.provider.removeListener("accountChanged", replacer);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
this.provider.on("accountChanged", replacer);
|
|
121
|
+
|
|
122
|
+
return stop[0];
|
|
102
123
|
}
|
|
103
124
|
|
|
104
125
|
/**
|
|
@@ -106,7 +127,22 @@ export class BitcoinSigner extends ccc.SignerBtc {
|
|
|
106
127
|
* @returns {Promise<boolean>} A promise that resolves to true if connected, false otherwise.
|
|
107
128
|
*/
|
|
108
129
|
async isConnected(): Promise<boolean> {
|
|
109
|
-
|
|
130
|
+
try {
|
|
131
|
+
this.provider;
|
|
132
|
+
} catch (_) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (this.provider.getSelectedAccount) {
|
|
137
|
+
if ((await this.provider.getSelectedAccount()) === null) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
} else if ((await this.provider.getAccounts()).length === 0) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
await this.connect();
|
|
145
|
+
return true;
|
|
110
146
|
}
|
|
111
147
|
|
|
112
148
|
/**
|
package/src/nostr/index.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { NostrProvider } from "../advancedBarrel";
|
|
|
7
7
|
* @extends {ccc.SignerBtc}
|
|
8
8
|
*/
|
|
9
9
|
export class NostrSigner extends ccc.SignerNostr {
|
|
10
|
+
private publicKeyCache?: Promise<string> = undefined;
|
|
11
|
+
|
|
10
12
|
constructor(
|
|
11
13
|
client: ccc.Client,
|
|
12
14
|
public readonly provider: NostrProvider,
|
|
@@ -14,29 +16,42 @@ export class NostrSigner extends ccc.SignerNostr {
|
|
|
14
16
|
super(client);
|
|
15
17
|
}
|
|
16
18
|
|
|
17
|
-
async replaceClient(client: ccc.Client): Promise<boolean> {
|
|
18
|
-
return super.replaceClient(client);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
19
|
async getNostrPublicKey(): Promise<ccc.Hex> {
|
|
22
|
-
if (!this.
|
|
23
|
-
|
|
20
|
+
if (!this.publicKeyCache) {
|
|
21
|
+
this.publicKeyCache = this.provider.getPublicKey();
|
|
24
22
|
}
|
|
25
|
-
|
|
26
|
-
return ccc.hexFrom(this.provider.selectedAccount.publicKey);
|
|
23
|
+
return ccc.hexFrom(await this.publicKeyCache);
|
|
27
24
|
}
|
|
28
25
|
|
|
29
26
|
async signNostrEvent(
|
|
30
27
|
event: ccc.NostrEvent,
|
|
31
28
|
): Promise<Required<ccc.NostrEvent>> {
|
|
32
|
-
return this.provider.signEvent(
|
|
29
|
+
return this.provider.signEvent({
|
|
30
|
+
...event,
|
|
31
|
+
pubkey: await this.publicKeyCache,
|
|
32
|
+
});
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
async connect(): Promise<void> {
|
|
36
|
-
await this.provider.
|
|
36
|
+
await this.provider.connect?.(); // Help extension to switch network
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
onReplaced(listener: () => void): () => void {
|
|
40
|
+
const stop: (() => void)[] = [];
|
|
41
|
+
const replacer = async () => {
|
|
42
|
+
listener();
|
|
43
|
+
stop[0]?.();
|
|
44
|
+
};
|
|
45
|
+
stop.push(() => {
|
|
46
|
+
this.provider.removeListener("accountChanged", replacer);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
this.provider.on("accountChanged", replacer);
|
|
50
|
+
|
|
51
|
+
return stop[0];
|
|
37
52
|
}
|
|
38
53
|
|
|
39
54
|
async isConnected(): Promise<boolean> {
|
|
40
|
-
return
|
|
55
|
+
return true;
|
|
41
56
|
}
|
|
42
57
|
}
|