@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.
@@ -1,21 +1,42 @@
1
1
  import { Nip07A } from "@ckb-ccc/nip07/advanced";
2
- export interface BitcoinProvider {
3
- connect(): Promise<{
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
- selectedAccount: {
17
- address: string;
18
- publicKey: string;
19
- } | null;
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;AAEjD,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC,CAAC;IAEH,kBAAkB,IAAI,OAAO,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,GAAG,IAAI,CAAC,CAAC;IAEV,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,QAAQ;IACpD,eAAe,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChE"}
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, Client } from "@ckb-ccc/core";
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
- replaceClient(client: Client): Promise<boolean>;
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,EAAE,MAAM,eAAe,CAAC;AAC5C,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,gBAAgB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAQzE;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAIzC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrD;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAMvE"}
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
- return (await this.assertConnection()).address;
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
- return ccc.hexFrom((await this.assertConnection()).publicKey);
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
- await this.provider.connect();
84
+ if (this.provider.connect) {
85
+ await this.provider.connect();
86
+ return;
87
+ }
88
+ await this.provider.requestAccounts();
78
89
  }
79
- async replaceClient(client) {
80
- const res = await super.replaceClient(client);
81
- this.provider; // Check if the network is valid
82
- return res;
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
- return (await this.provider.getSelectedAccount()) !== null;
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.
@@ -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;aAG5B,QAAQ,EAAE,aAAa;gBADvC,MAAM,EAAE,GAAG,CAAC,MAAM,EACF,QAAQ,EAAE,aAAa;IAKnC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInD,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAQrC,cAAc,CAClB,KAAK,EAAE,GAAG,CAAC,UAAU,GACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAI9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
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"}
@@ -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.provider.selectedAccount) {
17
- throw new Error("Not connected");
14
+ if (!this.publicKeyCache) {
15
+ this.publicKeyCache = this.provider.getPublicKey();
18
16
  }
19
- return ccc.hexFrom(this.provider.selectedAccount.publicKey);
17
+ return ccc.hexFrom(await this.publicKeyCache);
20
18
  }
21
19
  async signNostrEvent(event) {
22
- return this.provider.signEvent(event);
20
+ return this.provider.signEvent({
21
+ ...event,
22
+ pubkey: await this.publicKeyCache,
23
+ });
23
24
  }
24
25
  async connect() {
25
- await this.provider.getPublicKey();
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 this.provider.selectedAccount !== null;
41
+ return true;
29
42
  }
30
43
  }
@@ -1,21 +1,42 @@
1
1
  import { Nip07A } from "@ckb-ccc/nip07/advanced";
2
- export interface BitcoinProvider {
3
- connect(): Promise<{
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
- selectedAccount: {
17
- address: string;
18
- publicKey: string;
19
- } | null;
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;AAEjD,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC,CAAC;IAEH,kBAAkB,IAAI,OAAO,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,GAAG,IAAI,CAAC,CAAC;IAEV,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,QAAQ;IACpD,eAAe,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChE"}
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, Client } from "@ckb-ccc/core";
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
- replaceClient(client: Client): Promise<boolean>;
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,EAAE,MAAM,eAAe,CAAC;AAC5C,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,gBAAgB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAQzE;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAIzC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrD;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAMvE"}
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
- return (await this.assertConnection()).address;
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
- return core_1.ccc.hexFrom((await this.assertConnection()).publicKey);
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
- await this.provider.connect();
87
+ if (this.provider.connect) {
88
+ await this.provider.connect();
89
+ return;
90
+ }
91
+ await this.provider.requestAccounts();
81
92
  }
82
- async replaceClient(client) {
83
- const res = await super.replaceClient(client);
84
- this.provider; // Check if the network is valid
85
- return res;
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
- return (await this.provider.getSelectedAccount()) !== null;
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;aAG5B,QAAQ,EAAE,aAAa;gBADvC,MAAM,EAAE,GAAG,CAAC,MAAM,EACF,QAAQ,EAAE,aAAa;IAKnC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInD,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAQrC,cAAc,CAClB,KAAK,EAAE,GAAG,CAAC,UAAU,GACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAI9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
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.provider.selectedAccount) {
20
- throw new Error("Not connected");
17
+ if (!this.publicKeyCache) {
18
+ this.publicKeyCache = this.provider.getPublicKey();
21
19
  }
22
- return core_1.ccc.hexFrom(this.provider.selectedAccount.publicKey);
20
+ return core_1.ccc.hexFrom(await this.publicKeyCache);
23
21
  }
24
22
  async signNostrEvent(event) {
25
- return this.provider.signEvent(event);
23
+ return this.provider.signEvent({
24
+ ...event,
25
+ pubkey: await this.publicKeyCache,
26
+ });
26
27
  }
27
28
  async connect() {
28
- await this.provider.getPublicKey();
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 this.provider.selectedAccount !== null;
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.9-alpha.2",
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.9-alpha.1",
46
- "@ckb-ccc/nip07": "0.0.9-alpha.1"
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": "82537aa73662759387f4b127220a02ce48717270"
49
+ "gitHead": "8a4c789419f5e12e1f230cead213c59373834a1a"
49
50
  }
@@ -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
- selectedAccount: { address: string; publicKey: string } | null;
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, Client } from "@ckb-ccc/core";
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
- return (await this.assertConnection()).address;
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
- return ccc.hexFrom((await this.assertConnection()).publicKey);
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
- await this.provider.connect();
103
+ if (this.provider.connect) {
104
+ await this.provider.connect();
105
+ return;
106
+ }
107
+ await this.provider.requestAccounts();
96
108
  }
97
109
 
98
- async replaceClient(client: Client): Promise<boolean> {
99
- const res = await super.replaceClient(client);
100
- this.provider; // Check if the network is valid
101
- return res;
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
- return (await this.provider.getSelectedAccount()) !== null;
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
  /**
@@ -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.provider.selectedAccount) {
23
- throw new Error("Not connected");
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(event);
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.getPublicKey();
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 this.provider.selectedAccount !== null;
55
+ return true;
41
56
  }
42
57
  }