@manahippo/aptos-wallet-adapter 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. package/README.md +4 -2
  2. package/dist/WalletAdapters/AptosSnap.d.ts +15 -9
  3. package/dist/WalletAdapters/AptosSnap.d.ts.map +1 -1
  4. package/dist/WalletAdapters/AptosSnap.js +41 -2
  5. package/dist/WalletAdapters/AptosSnap.js.map +1 -1
  6. package/dist/WalletAdapters/BaseAdapter.d.ts +25 -8
  7. package/dist/WalletAdapters/BaseAdapter.d.ts.map +1 -1
  8. package/dist/WalletAdapters/BaseAdapter.js +7 -1
  9. package/dist/WalletAdapters/BaseAdapter.js.map +1 -1
  10. package/dist/WalletAdapters/FewchaWallet.d.ts +11 -5
  11. package/dist/WalletAdapters/FewchaWallet.d.ts.map +1 -1
  12. package/dist/WalletAdapters/FewchaWallet.js +54 -3
  13. package/dist/WalletAdapters/FewchaWallet.js.map +1 -1
  14. package/dist/WalletAdapters/FletchWallet.d.ts +11 -5
  15. package/dist/WalletAdapters/FletchWallet.d.ts.map +1 -1
  16. package/dist/WalletAdapters/FletchWallet.js +41 -2
  17. package/dist/WalletAdapters/FletchWallet.js.map +1 -1
  18. package/dist/WalletAdapters/HippoExtensionWallet.d.ts +11 -6
  19. package/dist/WalletAdapters/HippoExtensionWallet.d.ts.map +1 -1
  20. package/dist/WalletAdapters/HippoExtensionWallet.js +41 -2
  21. package/dist/WalletAdapters/HippoExtensionWallet.js.map +1 -1
  22. package/dist/WalletAdapters/HippoWallet.d.ts +11 -6
  23. package/dist/WalletAdapters/HippoWallet.d.ts.map +1 -1
  24. package/dist/WalletAdapters/HippoWallet.js +33 -2
  25. package/dist/WalletAdapters/HippoWallet.js.map +1 -1
  26. package/dist/WalletAdapters/HyperPayWallet.d.ts +13 -8
  27. package/dist/WalletAdapters/HyperPayWallet.d.ts.map +1 -1
  28. package/dist/WalletAdapters/HyperPayWallet.js +39 -0
  29. package/dist/WalletAdapters/HyperPayWallet.js.map +1 -1
  30. package/dist/WalletAdapters/MartianWallet.d.ts +19 -8
  31. package/dist/WalletAdapters/MartianWallet.d.ts.map +1 -1
  32. package/dist/WalletAdapters/MartianWallet.js +63 -2
  33. package/dist/WalletAdapters/MartianWallet.js.map +1 -1
  34. package/dist/WalletAdapters/NightlyWallet.d.ts +7 -1
  35. package/dist/WalletAdapters/NightlyWallet.d.ts.map +1 -1
  36. package/dist/WalletAdapters/NightlyWallet.js +41 -2
  37. package/dist/WalletAdapters/NightlyWallet.js.map +1 -1
  38. package/dist/WalletAdapters/PetraWallet.d.ts +25 -11
  39. package/dist/WalletAdapters/PetraWallet.d.ts.map +1 -1
  40. package/dist/WalletAdapters/PetraWallet.js +66 -2
  41. package/dist/WalletAdapters/PetraWallet.js.map +1 -1
  42. package/dist/WalletAdapters/PontemWallet.d.ts +17 -9
  43. package/dist/WalletAdapters/PontemWallet.d.ts.map +1 -1
  44. package/dist/WalletAdapters/PontemWallet.js +65 -2
  45. package/dist/WalletAdapters/PontemWallet.js.map +1 -1
  46. package/dist/WalletAdapters/RiseWallet.d.ts +12 -7
  47. package/dist/WalletAdapters/RiseWallet.d.ts.map +1 -1
  48. package/dist/WalletAdapters/RiseWallet.js +41 -2
  49. package/dist/WalletAdapters/RiseWallet.js.map +1 -1
  50. package/dist/WalletAdapters/SpikaWallet.d.ts +12 -6
  51. package/dist/WalletAdapters/SpikaWallet.d.ts.map +1 -1
  52. package/dist/WalletAdapters/SpikaWallet.js +41 -2
  53. package/dist/WalletAdapters/SpikaWallet.js.map +1 -1
  54. package/dist/WalletProviders/WalletProvider.d.ts.map +1 -1
  55. package/dist/WalletProviders/WalletProvider.js +45 -6
  56. package/dist/WalletProviders/WalletProvider.js.map +1 -1
  57. package/dist/WalletProviders/errors.d.ts +9 -0
  58. package/dist/WalletProviders/errors.d.ts.map +1 -1
  59. package/dist/WalletProviders/errors.js +22 -1
  60. package/dist/WalletProviders/errors.js.map +1 -1
  61. package/dist/WalletProviders/useWallet.d.ts +6 -5
  62. package/dist/WalletProviders/useWallet.d.ts.map +1 -1
  63. package/dist/WalletProviders/useWallet.js.map +1 -1
  64. package/dist/utilities/util.d.ts +2 -2
  65. package/dist/utilities/util.d.ts.map +1 -1
  66. package/dist/utilities/util.js.map +1 -1
  67. package/package.json +2 -2
  68. package/src/WalletAdapters/AptosSnap.ts +58 -20
  69. package/src/WalletAdapters/BaseAdapter.ts +29 -8
  70. package/src/WalletAdapters/FewchaWallet.ts +72 -10
  71. package/src/WalletAdapters/FletchWallet.ts +226 -182
  72. package/src/WalletAdapters/HippoExtensionWallet.ts +50 -8
  73. package/src/WalletAdapters/HippoWallet.ts +51 -10
  74. package/src/WalletAdapters/HyperPayWallet.ts +53 -8
  75. package/src/WalletAdapters/MartianWallet.ts +86 -10
  76. package/src/WalletAdapters/NightlyWallet.ts +46 -3
  77. package/src/WalletAdapters/PetraWallet.ts +91 -11
  78. package/src/WalletAdapters/PontemWallet.ts +87 -11
  79. package/src/WalletAdapters/RiseWallet.ts +51 -9
  80. package/src/WalletAdapters/SpikaWallet.ts +54 -8
  81. package/src/WalletProviders/WalletProvider.tsx +57 -8
  82. package/src/WalletProviders/errors.ts +11 -0
  83. package/src/WalletProviders/useWallet.ts +6 -4
  84. package/src/utilities/util.ts +3 -3
@@ -1,7 +1,9 @@
1
- import { MaybeHexString } from 'aptos';
2
- import { TransactionPayload, HexEncodedBytes } from 'aptos/src/generated';
1
+ import { MaybeHexString, Types } from 'aptos';
3
2
  import {
3
+ WalletAccountChangeError,
4
4
  WalletDisconnectionError,
5
+ WalletGetNetworkError,
6
+ WalletNetworkChangeError,
5
7
  WalletNotConnectedError,
6
8
  WalletNotReadyError,
7
9
  WalletSignAndSubmitMessageError,
@@ -11,9 +13,11 @@ import {
11
13
  import {
12
14
  AccountKeys,
13
15
  BaseWalletAdapter,
16
+ NetworkInfo,
14
17
  scopePollingDetectionStrategy,
15
18
  SignMessagePayload,
16
19
  SignMessageResponse,
20
+ WalletAdapterNetwork,
17
21
  WalletName,
18
22
  WalletReadyState
19
23
  } from './BaseAdapter';
@@ -37,21 +41,24 @@ interface IPontemWallet {
37
41
  publicKey(): Promise<MaybeHexString>;
38
42
  generateTransaction(sender: MaybeHexString, payload: any): Promise<any>;
39
43
  signAndSubmit(
40
- transaction: TransactionPayload,
44
+ transaction: Types.TransactionPayload,
41
45
  options?: any
42
46
  ): Promise<{
43
47
  success: boolean;
44
48
  result: {
45
- hash: HexEncodedBytes;
49
+ hash: Types.HexEncodedBytes;
46
50
  };
47
51
  }>;
48
52
  isConnected(): Promise<boolean>;
49
- signTransaction(transaction: TransactionPayload, options?: any): Promise<Uint8Array>;
53
+ signTransaction(transaction: Types.TransactionPayload, options?: any): Promise<Uint8Array>;
50
54
  signMessage(message: SignMessagePayload): Promise<{
51
55
  success: boolean;
52
56
  result: SignMessageResponse;
53
57
  }>;
54
58
  disconnect(): Promise<void>;
59
+ network(): Promise<NetworkInfo>;
60
+ onChangeAccount(listener: (address: string) => void): Promise<void>;
61
+ onChangeNetwork(listener: (network: NetworkInfo) => void): Promise<void>;
55
62
  }
56
63
 
57
64
  interface PontemWindow extends Window {
@@ -78,7 +85,12 @@ export class PontemWalletAdapter extends BaseWalletAdapter {
78
85
 
79
86
  protected _provider: IPontemWallet | undefined;
80
87
 
81
- // protected _network: WalletAdapterNetwork;
88
+ protected _network: WalletAdapterNetwork;
89
+
90
+ protected _chainId: string;
91
+
92
+ protected _api: string;
93
+
82
94
  protected _timeout: number;
83
95
 
84
96
  protected _readyState: WalletReadyState =
@@ -92,13 +104,13 @@ export class PontemWalletAdapter extends BaseWalletAdapter {
92
104
 
93
105
  constructor({
94
106
  // provider,
95
- // network = WalletAdapterNetwork.Mainnet,
107
+ // network = WalletAdapterNetwork.Testnet,
96
108
  timeout = 10000
97
109
  }: PontemWalletAdapterConfig = {}) {
98
110
  super();
99
111
 
100
112
  this._provider = typeof window !== 'undefined' ? window.pontem : undefined;
101
- // this._network = network;
113
+ this._network = undefined;
102
114
  this._timeout = timeout;
103
115
  this._connecting = false;
104
116
  this._wallet = null;
@@ -123,6 +135,14 @@ export class PontemWalletAdapter extends BaseWalletAdapter {
123
135
  };
124
136
  }
125
137
 
138
+ get network(): NetworkInfo {
139
+ return {
140
+ name: this._network,
141
+ api: this._api,
142
+ chainId: this._chainId
143
+ };
144
+ }
145
+
126
146
  get connecting(): boolean {
127
147
  return this._connecting;
128
148
  }
@@ -166,7 +186,19 @@ export class PontemWalletAdapter extends BaseWalletAdapter {
166
186
  publicKey,
167
187
  isConnected: true
168
188
  };
189
+
190
+ try {
191
+ const networkInfo = await provider?.network();
192
+ this._network = networkInfo.name;
193
+ this._chainId = networkInfo.chainId;
194
+ this._api = networkInfo.api;
195
+ } catch (error: any) {
196
+ const errMsg = error.message;
197
+ this.emit('error', new WalletGetNetworkError(errMsg));
198
+ throw error;
199
+ }
169
200
  }
201
+
170
202
  this.emit('connect', this._wallet?.address || '');
171
203
  } catch (error: any) {
172
204
  this.emit('error', new Error('User has rejected the connection'));
@@ -192,7 +224,10 @@ export class PontemWalletAdapter extends BaseWalletAdapter {
192
224
  this.emit('disconnect');
193
225
  }
194
226
 
195
- async signTransaction(transactionPyld: TransactionPayload, options?: any): Promise<Uint8Array> {
227
+ async signTransaction(
228
+ transactionPyld: Types.TransactionPayload,
229
+ options?: any
230
+ ): Promise<Uint8Array> {
196
231
  try {
197
232
  const wallet = this._wallet;
198
233
  const provider = this._provider || window.pontem;
@@ -207,9 +242,9 @@ export class PontemWalletAdapter extends BaseWalletAdapter {
207
242
  }
208
243
 
209
244
  async signAndSubmitTransaction(
210
- transactionPyld: TransactionPayload,
245
+ transactionPyld: Types.TransactionPayload,
211
246
  options?: any
212
- ): Promise<{ hash: HexEncodedBytes }> {
247
+ ): Promise<{ hash: Types.HexEncodedBytes }> {
213
248
  try {
214
249
  const wallet = this._wallet;
215
250
  const provider = this._provider || window.pontem;
@@ -243,4 +278,45 @@ export class PontemWalletAdapter extends BaseWalletAdapter {
243
278
  throw error;
244
279
  }
245
280
  }
281
+
282
+ async onAccountChange(): Promise<void> {
283
+ try {
284
+ const wallet = this._wallet;
285
+ const provider = this._provider || window.pontem;
286
+ if (!wallet || !provider) throw new WalletNotConnectedError();
287
+ const handleAccountChange = async (newAccount: string) => {
288
+ console.log('account Changed >>>', newAccount);
289
+ this._wallet = {
290
+ ...this._wallet,
291
+ address: newAccount || this._wallet?.address
292
+ };
293
+ this.emit('accountChange', newAccount);
294
+ };
295
+ await provider?.onChangeAccount(handleAccountChange);
296
+ } catch (error: any) {
297
+ const errMsg = error.message;
298
+ this.emit('error', new WalletAccountChangeError(errMsg));
299
+ throw error;
300
+ }
301
+ }
302
+
303
+ async onNetworkChange(): Promise<void> {
304
+ try {
305
+ const wallet = this._wallet;
306
+ const provider = this._provider || window.pontem;
307
+ if (!wallet || !provider) throw new WalletNotConnectedError();
308
+ const handleNetworkChange = async (network: NetworkInfo) => {
309
+ console.log('network Changed >>>', network);
310
+ this._network = network.name;
311
+ this._api = network.api;
312
+ this._chainId = network.chainId;
313
+ this.emit('networkChange', this._network);
314
+ };
315
+ await provider?.onChangeNetwork(handleNetworkChange);
316
+ } catch (error: any) {
317
+ const errMsg = error.message;
318
+ this.emit('error', new WalletNetworkChangeError(errMsg));
319
+ throw error;
320
+ }
321
+ }
246
322
  }
@@ -1,6 +1,8 @@
1
- import { HexEncodedBytes, TransactionPayload } from 'aptos/src/generated';
1
+ import { MaybeHexString, Types } from 'aptos';
2
2
  import {
3
+ WalletAccountChangeError,
3
4
  WalletDisconnectionError,
5
+ WalletNetworkChangeError,
4
6
  WalletNotConnectedError,
5
7
  WalletNotReadyError,
6
8
  WalletSignMessageError,
@@ -9,13 +11,14 @@ import {
9
11
  import {
10
12
  AccountKeys,
11
13
  BaseWalletAdapter,
14
+ NetworkInfo,
12
15
  scopePollingDetectionStrategy,
13
16
  SignMessagePayload,
14
17
  SignMessageResponse,
18
+ WalletAdapterNetwork,
15
19
  WalletName,
16
20
  WalletReadyState
17
21
  } from './BaseAdapter';
18
- import { MaybeHexString } from 'aptos';
19
22
 
20
23
  interface RiseAccount {
21
24
  address: MaybeHexString;
@@ -28,7 +31,7 @@ interface IRiseWallet {
28
31
  connect: () => Promise<{ address: string }>;
29
32
  account(): Promise<RiseAccount>;
30
33
  isConnected: () => Promise<boolean>;
31
- signAndSubmitTransaction(transaction: any): Promise<{ hash: HexEncodedBytes }>;
34
+ signAndSubmitTransaction(transaction: any): Promise<{ hash: Types.HexEncodedBytes }>;
32
35
  signTransaction(transaction: any, options?: any): Promise<Uint8Array>;
33
36
  signMessage(message: SignMessagePayload): Promise<SignMessageResponse>;
34
37
  disconnect(): Promise<void>;
@@ -57,7 +60,12 @@ export class RiseWalletAdapter extends BaseWalletAdapter {
57
60
 
58
61
  protected _provider: IRiseWallet | undefined;
59
62
 
60
- // protected _network: WalletAdapterNetwork;
63
+ protected _network: WalletAdapterNetwork;
64
+
65
+ protected _chainId: string;
66
+
67
+ protected _api: string;
68
+
61
69
  protected _timeout: number;
62
70
 
63
71
  protected _readyState: WalletReadyState =
@@ -71,13 +79,13 @@ export class RiseWalletAdapter extends BaseWalletAdapter {
71
79
 
72
80
  constructor({
73
81
  // provider,
74
- // network = WalletAdapterNetwork.Mainnet,
82
+ // network = WalletAdapterNetwork.Testnet,
75
83
  timeout = 10000
76
84
  }: RiseWalletAdapterConfig = {}) {
77
85
  super();
78
86
 
79
87
  this._provider = typeof window !== 'undefined' ? window.rise : undefined;
80
- // this._network = network;
88
+ this._network = undefined;
81
89
  this._timeout = timeout;
82
90
  this._connecting = false;
83
91
  this._wallet = null;
@@ -102,6 +110,14 @@ export class RiseWalletAdapter extends BaseWalletAdapter {
102
110
  };
103
111
  }
104
112
 
113
+ get network(): NetworkInfo {
114
+ return {
115
+ name: this._network,
116
+ api: this._api,
117
+ chainId: this._chainId
118
+ };
119
+ }
120
+
105
121
  get connecting(): boolean {
106
122
  return this._connecting;
107
123
  }
@@ -175,7 +191,7 @@ export class RiseWalletAdapter extends BaseWalletAdapter {
175
191
  this.emit('disconnect');
176
192
  }
177
193
 
178
- async signTransaction(transaction: TransactionPayload): Promise<Uint8Array> {
194
+ async signTransaction(transaction: Types.TransactionPayload): Promise<Uint8Array> {
179
195
  try {
180
196
  const wallet = this._wallet;
181
197
  const provider = this._provider || window.rise;
@@ -195,8 +211,8 @@ export class RiseWalletAdapter extends BaseWalletAdapter {
195
211
  }
196
212
 
197
213
  async signAndSubmitTransaction(
198
- transaction: TransactionPayload
199
- ): Promise<{ hash: HexEncodedBytes }> {
214
+ transaction: Types.TransactionPayload
215
+ ): Promise<{ hash: Types.HexEncodedBytes }> {
200
216
  try {
201
217
  const wallet = this._wallet;
202
218
  const provider = this._provider || window.rise;
@@ -235,4 +251,30 @@ export class RiseWalletAdapter extends BaseWalletAdapter {
235
251
  throw error;
236
252
  }
237
253
  }
254
+
255
+ async onAccountChange(): Promise<void> {
256
+ try {
257
+ const wallet = this._wallet;
258
+ const provider = this._provider || window.rise;
259
+ if (!wallet || !provider) throw new WalletNotConnectedError();
260
+ //To be implemented
261
+ } catch (error: any) {
262
+ const errMsg = error.message;
263
+ this.emit('error', new WalletAccountChangeError(errMsg));
264
+ throw error;
265
+ }
266
+ }
267
+
268
+ async onNetworkChange(): Promise<void> {
269
+ try {
270
+ const wallet = this._wallet;
271
+ const provider = this._provider || window.rise;
272
+ if (!wallet || !provider) throw new WalletNotConnectedError();
273
+ //To be implemented
274
+ } catch (error: any) {
275
+ const errMsg = error.message;
276
+ this.emit('error', new WalletNetworkChangeError(errMsg));
277
+ throw error;
278
+ }
279
+ }
238
280
  }
@@ -1,6 +1,8 @@
1
- import { HexEncodedBytes, TransactionPayload } from 'aptos/src/generated';
1
+ import { Types } from 'aptos';
2
2
  import {
3
+ WalletAccountChangeError,
3
4
  WalletDisconnectionError,
5
+ WalletNetworkChangeError,
4
6
  WalletNotConnectedError,
5
7
  WalletNotReadyError,
6
8
  WalletSignAndSubmitMessageError,
@@ -10,7 +12,9 @@ import {
10
12
  import {
11
13
  AccountKeys,
12
14
  BaseWalletAdapter,
15
+ NetworkInfo,
13
16
  scopePollingDetectionStrategy,
17
+ WalletAdapterNetwork,
14
18
  WalletName,
15
19
  WalletReadyState
16
20
  } from './BaseAdapter';
@@ -19,7 +23,10 @@ interface ISpikaWallet {
19
23
  connect: () => Promise<{ publicKey: string; account: string; authKey: string }>;
20
24
  account: () => Promise<string>;
21
25
  isConnected: () => Promise<boolean>;
22
- signAndSubmitTransaction(transaction: any, options?: any): Promise<{ hash: HexEncodedBytes }>;
26
+ signAndSubmitTransaction(
27
+ transaction: any,
28
+ options?: any
29
+ ): Promise<{ hash: Types.HexEncodedBytes }>;
23
30
  signTransaction(transaction: any, options?: any): Promise<Uint8Array>;
24
31
  signMessage(message: string): Promise<string>;
25
32
  disconnect(): Promise<void>;
@@ -48,7 +55,12 @@ export class SpikaWalletAdapter extends BaseWalletAdapter {
48
55
 
49
56
  protected _provider: ISpikaWallet | undefined;
50
57
 
51
- // protected _network: WalletAdapterNetwork;
58
+ protected _network: WalletAdapterNetwork;
59
+
60
+ protected _chainId: string;
61
+
62
+ protected _api: string;
63
+
52
64
  protected _timeout: number;
53
65
 
54
66
  protected _readyState: WalletReadyState =
@@ -62,13 +74,13 @@ export class SpikaWalletAdapter extends BaseWalletAdapter {
62
74
 
63
75
  constructor({
64
76
  // provider,
65
- // network = WalletAdapterNetwork.Mainnet,
77
+ // network = WalletAdapterNetwork.Testnet,
66
78
  timeout = 10000
67
79
  }: SpikaWalletAdapterConfig = {}) {
68
80
  super();
69
81
 
70
82
  this._provider = typeof window !== 'undefined' ? window.spika : undefined;
71
- // this._network = network;
83
+ this._network = undefined;
72
84
  this._timeout = timeout;
73
85
  this._connecting = false;
74
86
  this._wallet = null;
@@ -93,6 +105,14 @@ export class SpikaWalletAdapter extends BaseWalletAdapter {
93
105
  };
94
106
  }
95
107
 
108
+ get network(): NetworkInfo {
109
+ return {
110
+ name: this._network,
111
+ api: this._api,
112
+ chainId: this._chainId
113
+ };
114
+ }
115
+
96
116
  get connecting(): boolean {
97
117
  return this._connecting;
98
118
  }
@@ -166,7 +186,7 @@ export class SpikaWalletAdapter extends BaseWalletAdapter {
166
186
  this.emit('disconnect');
167
187
  }
168
188
 
169
- async signTransaction(transaction: TransactionPayload, options?: any): Promise<Uint8Array> {
189
+ async signTransaction(transaction: Types.TransactionPayload, options?: any): Promise<Uint8Array> {
170
190
  try {
171
191
  const wallet = this._wallet;
172
192
  const provider = this._provider || window.spika;
@@ -186,9 +206,9 @@ export class SpikaWalletAdapter extends BaseWalletAdapter {
186
206
  }
187
207
 
188
208
  async signAndSubmitTransaction(
189
- transaction: TransactionPayload,
209
+ transaction: Types.TransactionPayload,
190
210
  options?: any
191
- ): Promise<{ hash: HexEncodedBytes }> {
211
+ ): Promise<{ hash: Types.HexEncodedBytes }> {
192
212
  try {
193
213
  const wallet = this._wallet;
194
214
  const provider = this._provider || window.spika;
@@ -224,4 +244,30 @@ export class SpikaWalletAdapter extends BaseWalletAdapter {
224
244
  throw error;
225
245
  }
226
246
  }
247
+
248
+ async onAccountChange(): Promise<void> {
249
+ try {
250
+ const wallet = this._wallet;
251
+ const provider = this._provider || window.spika;
252
+ if (!wallet || !provider) throw new WalletNotConnectedError();
253
+ //To be implemented
254
+ } catch (error: any) {
255
+ const errMsg = error.message;
256
+ this.emit('error', new WalletAccountChangeError(errMsg));
257
+ throw error;
258
+ }
259
+ }
260
+
261
+ async onNetworkChange(): Promise<void> {
262
+ try {
263
+ const wallet = this._wallet;
264
+ const provider = this._provider || window.spika;
265
+ if (!wallet || !provider) throw new WalletNotConnectedError();
266
+ //To be implemented
267
+ } catch (error: any) {
268
+ const errMsg = error.message;
269
+ this.emit('error', new WalletNetworkChangeError(errMsg));
270
+ throw error;
271
+ }
272
+ }
227
273
  }
@@ -1,5 +1,5 @@
1
1
  import { FC, ReactNode, useCallback, useEffect, useRef, useState } from 'react';
2
- import { TransactionPayload } from 'aptos/src/generated';
2
+ import { Types } from 'aptos';
3
3
  import {
4
4
  WalletError,
5
5
  WalletNotConnectedError,
@@ -9,6 +9,7 @@ import {
9
9
  import { useLocalStorage } from '../hooks/useLocalStorage';
10
10
  import {
11
11
  AccountKeys,
12
+ NetworkInfo,
12
13
  SignMessagePayload,
13
14
  WalletAdapter,
14
15
  WalletName,
@@ -29,11 +30,13 @@ const initialState: {
29
30
  adapter: WalletAdapter | null;
30
31
  account: AccountKeys | null;
31
32
  connected: boolean;
33
+ network: NetworkInfo | null;
32
34
  } = {
33
35
  wallet: null,
34
36
  adapter: null,
35
37
  account: null,
36
- connected: false
38
+ connected: false,
39
+ network: null
37
40
  };
38
41
 
39
42
  export const WalletProvider: FC<WalletProviderProps> = ({
@@ -44,7 +47,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
44
47
  localStorageKey = 'walletName'
45
48
  }) => {
46
49
  const [name, setName] = useLocalStorage<WalletName | null>(localStorageKey, null);
47
- const [{ wallet, adapter, account, connected }, setState] = useState(initialState);
50
+ const [{ wallet, adapter, account, connected, network }, setState] = useState(initialState);
48
51
  const readyState = adapter?.readyState || WalletReadyState.Unsupported;
49
52
  const [connecting, setConnecting] = useState(false);
50
53
  const [disconnecting, setDisconnecting] = useState(false);
@@ -110,7 +113,8 @@ export const WalletProvider: FC<WalletProviderProps> = ({
110
113
  wallet: selectedWallet,
111
114
  adapter: selectedWallet.adapter,
112
115
  connected: selectedWallet.adapter.connected,
113
- account: selectedWallet.adapter.publicAccount
116
+ account: selectedWallet.adapter.publicAccount,
117
+ network: selectedWallet.adapter.network
114
118
  });
115
119
  } else {
116
120
  setState(initialState);
@@ -137,6 +141,31 @@ export const WalletProvider: FC<WalletProviderProps> = ({
137
141
  return {
138
142
  ...state,
139
143
  connected: adapter.connected,
144
+ account: adapter.publicAccount,
145
+ network: adapter.network
146
+ };
147
+ });
148
+ }, [adapter]);
149
+
150
+ // Handle the adapter's network event
151
+ const handleNetworkChange = useCallback(() => {
152
+ if (!adapter) return;
153
+ console.log('adapter: handleNetworkChange', adapter.network);
154
+ setState((state) => {
155
+ return {
156
+ ...state,
157
+ network: adapter.network
158
+ };
159
+ });
160
+ }, [adapter]);
161
+
162
+ // Handle the adapter's account event
163
+ const handleAccountChange = useCallback(() => {
164
+ if (!adapter) return;
165
+ console.log('adapter: handleAccountChange', adapter.publicAccount);
166
+ setState((state) => {
167
+ return {
168
+ ...state,
140
169
  account: adapter.publicAccount
141
170
  };
142
171
  });
@@ -158,19 +187,38 @@ export const WalletProvider: FC<WalletProviderProps> = ({
158
187
  [isUnloading, onError]
159
188
  );
160
189
 
190
+ // Listen on the adapter's network/account changes
191
+ useEffect(() => {
192
+ if (adapter && connected) {
193
+ adapter.onAccountChange();
194
+ adapter.onNetworkChange();
195
+ }
196
+ }, [adapter, connected]);
197
+
161
198
  // Setup and teardown event listeners when the adapter changes
162
199
  useEffect(() => {
163
200
  if (adapter) {
164
201
  adapter.on('connect', handleConnect);
202
+ adapter.on('networkChange', handleNetworkChange);
203
+ adapter.on('accountChange', handleAccountChange);
165
204
  adapter.on('disconnect', handleDisconnect);
166
205
  adapter.on('error', handleError);
167
206
  return () => {
168
207
  adapter.off('connect', handleConnect);
208
+ adapter.off('networkChange', handleNetworkChange);
209
+ adapter.off('accountChange', handleAccountChange);
169
210
  adapter.off('disconnect', handleDisconnect);
170
211
  adapter.off('error', handleError);
171
212
  };
172
213
  }
173
- }, [adapter, handleConnect, handleDisconnect, handleError]);
214
+ }, [
215
+ adapter,
216
+ handleAccountChange,
217
+ handleConnect,
218
+ handleDisconnect,
219
+ handleError,
220
+ handleNetworkChange
221
+ ]);
174
222
 
175
223
  // When the adapter changes, disconnect the old one
176
224
  useEffect(() => {
@@ -265,7 +313,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
265
313
 
266
314
  // Send a transaction using the provided connection
267
315
  const signAndSubmitTransaction = useCallback(
268
- async (transaction: TransactionPayload, option?: any) => {
316
+ async (transaction: Types.TransactionPayload, option?: any) => {
269
317
  if (!adapter) throw handleError(new WalletNotSelectedError());
270
318
  if (!connected) throw handleError(new WalletNotConnectedError());
271
319
  const response = await adapter.signAndSubmitTransaction(transaction, option);
@@ -275,7 +323,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
275
323
  );
276
324
 
277
325
  const signTransaction = useCallback(
278
- async (transaction: TransactionPayload, option?: any) => {
326
+ async (transaction: Types.TransactionPayload, option?: any) => {
279
327
  if (!adapter) throw handleError(new WalletNotSelectedError());
280
328
  if (!connected) throw handleError(new WalletNotConnectedError());
281
329
  return adapter.signTransaction(transaction, option);
@@ -307,7 +355,8 @@ export const WalletProvider: FC<WalletProviderProps> = ({
307
355
  disconnect,
308
356
  signAndSubmitTransaction,
309
357
  signTransaction,
310
- signMessage
358
+ signMessage,
359
+ network
311
360
  }}>
312
361
  {children}
313
362
  </WalletContext.Provider>
@@ -39,6 +39,17 @@ export class WalletDisconnectionError extends WalletError {
39
39
  export class WalletAccountError extends WalletError {
40
40
  name = 'WalletAccountError';
41
41
  }
42
+ export class WalletGetNetworkError extends WalletError {
43
+ name = 'WalletGetNetworkError';
44
+ }
45
+
46
+ export class WalletAccountChangeError extends WalletError {
47
+ name = 'WalletAccountChangeError';
48
+ }
49
+
50
+ export class WalletNetworkChangeError extends WalletError {
51
+ name = 'WalletNetworkChangeError';
52
+ }
42
53
 
43
54
  export class WalletPublicKeyError extends WalletError {
44
55
  name = 'WalletPublicKeyError';
@@ -1,7 +1,8 @@
1
- import { TransactionPayload, HexEncodedBytes } from 'aptos/src/generated';
1
+ import { Types } from 'aptos';
2
2
  import { createContext, useContext } from 'react';
3
3
  import {
4
4
  AccountKeys,
5
+ NetworkInfo,
5
6
  SignMessagePayload,
6
7
  SignMessageResponse,
7
8
  WalletAdapter,
@@ -22,14 +23,15 @@ export interface WalletContextState {
22
23
  connecting: boolean;
23
24
  connected: boolean;
24
25
  disconnecting: boolean;
26
+ network: NetworkInfo;
25
27
  select(walletName: WalletName): void;
26
28
  connect(): Promise<void>;
27
29
  disconnect(): Promise<void>;
28
30
  signAndSubmitTransaction(
29
- transaction: TransactionPayload,
31
+ transaction: Types.TransactionPayload,
30
32
  options?: any
31
- ): Promise<{ hash: HexEncodedBytes }>;
32
- signTransaction(transaction: TransactionPayload, options?: any): Promise<Uint8Array>;
33
+ ): Promise<{ hash: Types.HexEncodedBytes }>;
34
+ signTransaction(transaction: Types.TransactionPayload, options?: any): Promise<Uint8Array>;
33
35
  signMessage(
34
36
  message: string | SignMessagePayload | Uint8Array
35
37
  ): Promise<SignMessageResponse | string>;
@@ -1,7 +1,7 @@
1
- import { TransactionPayload, TransactionPayload_EntryFunctionPayload } from 'aptos/src/generated';
1
+ import { Types } from 'aptos';
2
2
 
3
- export const payloadV1ToV0 = (payload: TransactionPayload) => {
4
- const v1 = payload as TransactionPayload_EntryFunctionPayload;
3
+ export const payloadV1ToV0 = (payload: Types.TransactionPayload) => {
4
+ const v1 = payload as Types.TransactionPayload_EntryFunctionPayload;
5
5
  return {
6
6
  type: 'script_function_payload',
7
7
  function: v1.function,