@manahippo/aptos-wallet-adapter 0.2.0 → 0.3.1

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.
Files changed (84) hide show
  1. package/README.md +21 -19
  2. package/dist/WalletAdapters/AptosWallet.d.ts +18 -7
  3. package/dist/WalletAdapters/AptosWallet.d.ts.map +1 -1
  4. package/dist/WalletAdapters/AptosWallet.js +47 -32
  5. package/dist/WalletAdapters/AptosWallet.js.map +1 -1
  6. package/dist/WalletAdapters/BaseAdapter.d.ts +10 -6
  7. package/dist/WalletAdapters/BaseAdapter.d.ts.map +1 -1
  8. package/dist/WalletAdapters/BaseAdapter.js.map +1 -1
  9. package/dist/WalletAdapters/FewchaWallet.d.ts +7 -4
  10. package/dist/WalletAdapters/FewchaWallet.d.ts.map +1 -1
  11. package/dist/WalletAdapters/FewchaWallet.js +90 -88
  12. package/dist/WalletAdapters/FewchaWallet.js.map +1 -1
  13. package/dist/WalletAdapters/HippoExtensionWallet.d.ts +8 -4
  14. package/dist/WalletAdapters/HippoExtensionWallet.d.ts.map +1 -1
  15. package/dist/WalletAdapters/HippoExtensionWallet.js +27 -5
  16. package/dist/WalletAdapters/HippoExtensionWallet.js.map +1 -1
  17. package/dist/WalletAdapters/HippoWallet.d.ts +7 -4
  18. package/dist/WalletAdapters/HippoWallet.d.ts.map +1 -1
  19. package/dist/WalletAdapters/HippoWallet.js +28 -2
  20. package/dist/WalletAdapters/HippoWallet.js.map +1 -1
  21. package/dist/WalletAdapters/MartianWallet.d.ts +11 -6
  22. package/dist/WalletAdapters/MartianWallet.d.ts.map +1 -1
  23. package/dist/WalletAdapters/MartianWallet.js +51 -35
  24. package/dist/WalletAdapters/MartianWallet.js.map +1 -1
  25. package/dist/WalletAdapters/NightlyWallet.d.ts +1 -41
  26. package/dist/WalletAdapters/NightlyWallet.d.ts.map +1 -1
  27. package/dist/WalletAdapters/NightlyWallet.js +232 -198
  28. package/dist/WalletAdapters/NightlyWallet.js.map +1 -1
  29. package/dist/WalletAdapters/PontemWallet.d.ts +57 -0
  30. package/dist/WalletAdapters/PontemWallet.d.ts.map +1 -0
  31. package/dist/WalletAdapters/PontemWallet.js +182 -0
  32. package/dist/WalletAdapters/PontemWallet.js.map +1 -0
  33. package/dist/WalletAdapters/SpikaWallet.d.ts +46 -0
  34. package/dist/WalletAdapters/SpikaWallet.d.ts.map +1 -0
  35. package/dist/WalletAdapters/{MultiMaskWallet.js → SpikaWallet.js} +72 -83
  36. package/dist/WalletAdapters/SpikaWallet.js.map +1 -0
  37. package/dist/WalletAdapters/index.d.ts +2 -2
  38. package/dist/WalletAdapters/index.d.ts.map +1 -1
  39. package/dist/WalletAdapters/index.js +3 -2
  40. package/dist/WalletAdapters/index.js.map +1 -1
  41. package/dist/WalletProviders/WalletProvider.d.ts +0 -1
  42. package/dist/WalletProviders/WalletProvider.d.ts.map +1 -1
  43. package/dist/WalletProviders/WalletProvider.js +10 -7
  44. package/dist/WalletProviders/WalletProvider.js.map +1 -1
  45. package/dist/WalletProviders/useWallet.d.ts +5 -3
  46. package/dist/WalletProviders/useWallet.d.ts.map +1 -1
  47. package/dist/WalletProviders/useWallet.js +1 -1
  48. package/dist/WalletProviders/useWallet.js.map +1 -1
  49. package/dist/config/aptosConstants.d.ts +2 -2
  50. package/dist/config/aptosConstants.d.ts.map +1 -1
  51. package/dist/config/aptosConstants.js +1 -1
  52. package/dist/config/aptosConstants.js.map +1 -1
  53. package/dist/hooks/useLocalStorage.d.ts.map +1 -1
  54. package/dist/hooks/useLocalStorage.js +9 -4
  55. package/dist/hooks/useLocalStorage.js.map +1 -1
  56. package/dist/hooks/useSSR.d.ts +4 -0
  57. package/dist/hooks/useSSR.d.ts.map +1 -0
  58. package/dist/hooks/useSSR.js +17 -0
  59. package/dist/hooks/useSSR.js.map +1 -0
  60. package/dist/utilities/util.d.ts +8 -0
  61. package/dist/utilities/util.d.ts.map +1 -0
  62. package/dist/utilities/util.js +14 -0
  63. package/dist/utilities/util.js.map +1 -0
  64. package/package.json +10 -10
  65. package/src/WalletAdapters/AptosWallet.ts +63 -37
  66. package/src/WalletAdapters/BaseAdapter.ts +14 -16
  67. package/src/WalletAdapters/FewchaWallet.ts +97 -81
  68. package/src/WalletAdapters/HippoExtensionWallet.ts +32 -9
  69. package/src/WalletAdapters/HippoWallet.ts +35 -7
  70. package/src/WalletAdapters/MartianWallet.ts +57 -42
  71. package/src/WalletAdapters/NightlyWallet.ts +230 -229
  72. package/src/WalletAdapters/PontemWallet.ts +250 -0
  73. package/src/WalletAdapters/SpikaWallet.ts +229 -0
  74. package/src/WalletAdapters/index.ts +3 -2
  75. package/src/WalletProviders/WalletProvider.tsx +12 -10
  76. package/src/WalletProviders/useWallet.ts +7 -14
  77. package/src/config/aptosConstants.ts +1 -1
  78. package/src/hooks/useLocalStorage.ts +9 -4
  79. package/src/hooks/useSSR.ts +15 -0
  80. package/src/utilities/util.ts +11 -0
  81. package/dist/WalletAdapters/MultiMaskWallet.d.ts +0 -39
  82. package/dist/WalletAdapters/MultiMaskWallet.d.ts.map +0 -1
  83. package/dist/WalletAdapters/MultiMaskWallet.js.map +0 -1
  84. package/src/WalletAdapters/MultiMaskWallet.ts +0 -245
@@ -0,0 +1,250 @@
1
+ import { MaybeHexString } from 'aptos';
2
+ import {
3
+ TransactionPayload,
4
+ SubmitTransactionRequest,
5
+ HexEncodedBytes
6
+ } from 'aptos/dist/generated';
7
+ import {
8
+ WalletDisconnectionError,
9
+ WalletNotConnectedError,
10
+ WalletNotReadyError,
11
+ WalletSignAndSubmitMessageError,
12
+ WalletSignMessageError,
13
+ WalletSignTransactionError
14
+ } from '../WalletProviders/errors';
15
+ import {
16
+ AccountKeys,
17
+ BaseWalletAdapter,
18
+ scopePollingDetectionStrategy,
19
+ WalletName,
20
+ WalletReadyState
21
+ } from './BaseAdapter';
22
+
23
+ interface ConnectPontemAccount {
24
+ address: MaybeHexString;
25
+ method: string;
26
+ publicKey: MaybeHexString;
27
+ status: number;
28
+ }
29
+
30
+ interface PontemAccount {
31
+ address: MaybeHexString;
32
+ publicKey?: MaybeHexString;
33
+ authKey?: MaybeHexString;
34
+ isConnected: boolean;
35
+ }
36
+ interface IPontemWallet {
37
+ connect: () => Promise<ConnectPontemAccount>;
38
+ account(): Promise<MaybeHexString>;
39
+ generateTransaction(sender: MaybeHexString, payload: any): Promise<any>;
40
+ signAndSubmit(
41
+ transaction: TransactionPayload,
42
+ options?: any
43
+ ): Promise<{
44
+ success: boolean;
45
+ result: {
46
+ hash: HexEncodedBytes;
47
+ };
48
+ }>;
49
+ // signTransaction(transaction: TransactionPayload): Promise<HexEncodedBytes>;
50
+ signMessage(message: string): Promise<string>;
51
+ disconnect(): Promise<void>;
52
+ }
53
+
54
+ interface PontemWindow extends Window {
55
+ pontem?: IPontemWallet;
56
+ }
57
+
58
+ declare const window: PontemWindow;
59
+
60
+ export const PontemWalletName = 'Pontem' as WalletName<'Pontem'>;
61
+
62
+ export interface PontemWalletAdapterConfig {
63
+ provider?: IPontemWallet;
64
+ // network?: WalletAdapterNetwork;
65
+ timeout?: number;
66
+ }
67
+
68
+ export class PontemWalletAdapter extends BaseWalletAdapter {
69
+ name = PontemWalletName;
70
+
71
+ url = 'https://chrome.google.com/webstore/detail/pontem-wallet/phkbamefinggmakgklpkljjmgibohnba';
72
+
73
+ icon =
74
+ 'https://www.gitbook.com/cdn-cgi/image/width=20,height=20,fit=contain,dpr=2,format=auto/https%3A%2F%2F736486047-files.gitbook.io%2F~%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fspaces%252F-MVVJKmKQGx983dZy_jr%252Favatar-1619180126965.png%3Fgeneration%3D1619180127194239%26alt%3Dmedia';
75
+
76
+ protected _provider: IPontemWallet | undefined;
77
+
78
+ // protected _network: WalletAdapterNetwork;
79
+ protected _timeout: number;
80
+
81
+ protected _readyState: WalletReadyState =
82
+ typeof window === 'undefined' || typeof document === 'undefined'
83
+ ? WalletReadyState.Unsupported
84
+ : WalletReadyState.NotDetected;
85
+
86
+ protected _connecting: boolean;
87
+
88
+ protected _wallet: PontemAccount | null;
89
+
90
+ constructor({
91
+ // provider,
92
+ // network = WalletAdapterNetwork.Mainnet,
93
+ timeout = 10000
94
+ }: PontemWalletAdapterConfig = {}) {
95
+ super();
96
+
97
+ this._provider = typeof window !== 'undefined' ? window.pontem : undefined;
98
+ // this._network = network;
99
+ this._timeout = timeout;
100
+ this._connecting = false;
101
+ this._wallet = null;
102
+
103
+ if (typeof window !== 'undefined' && this._readyState !== WalletReadyState.Unsupported) {
104
+ scopePollingDetectionStrategy(() => {
105
+ if (this._provider) {
106
+ this._readyState = WalletReadyState.Installed;
107
+ this.emit('readyStateChange', this._readyState);
108
+ return true;
109
+ }
110
+ return false;
111
+ });
112
+ }
113
+ }
114
+
115
+ get publicAccount(): AccountKeys {
116
+ return {
117
+ publicKey: this._wallet?.publicKey || null,
118
+ address: this._wallet?.address || null,
119
+ authKey: this._wallet?.authKey || null
120
+ };
121
+ }
122
+
123
+ get connecting(): boolean {
124
+ return this._connecting;
125
+ }
126
+
127
+ get connected(): boolean {
128
+ return !!this._wallet?.isConnected;
129
+ }
130
+
131
+ get readyState(): WalletReadyState {
132
+ return this._readyState;
133
+ }
134
+
135
+ async connect(): Promise<void> {
136
+ try {
137
+ if (this.connected || this.connecting) return;
138
+ if (
139
+ !(
140
+ this._readyState === WalletReadyState.Loadable ||
141
+ this._readyState === WalletReadyState.Installed
142
+ )
143
+ )
144
+ throw new WalletNotReadyError();
145
+ this._connecting = true;
146
+
147
+ const provider = this._provider || window.pontem;
148
+ // const isConnected = await provider?.isConnected();
149
+ // if (isConnected) {
150
+ // await provider?.disconnect();
151
+ // }
152
+ const response = await provider?.connect();
153
+
154
+ if (!response) {
155
+ throw new WalletNotConnectedError('No connect response');
156
+ }
157
+
158
+ const walletAccount = await provider?.account();
159
+ if (walletAccount) {
160
+ this._wallet = {
161
+ address: walletAccount,
162
+ isConnected: true
163
+ };
164
+ }
165
+ this.emit('connect', this._wallet?.address || '');
166
+ } catch (error: any) {
167
+ this.emit('error', new Error('User has rejected the connection'));
168
+ throw error;
169
+ } finally {
170
+ this._connecting = false;
171
+ }
172
+ }
173
+
174
+ async disconnect(): Promise<void> {
175
+ const wallet = this._wallet;
176
+ const provider = this._provider;
177
+ if (wallet) {
178
+ this._wallet = null;
179
+
180
+ try {
181
+ await provider?.disconnect();
182
+ } catch (error: any) {
183
+ this.emit('error', new WalletDisconnectionError(error?.message, error));
184
+ }
185
+ }
186
+
187
+ this.emit('disconnect');
188
+ }
189
+
190
+ async signTransaction(): Promise<SubmitTransactionRequest> {
191
+ try {
192
+ // const wallet = this._wallet;
193
+ // const provider = this._provider || window.pontem;
194
+ // if (!wallet || !provider) throw new WalletNotConnectedError();
195
+ // const tx = await provider.generateTransaction(
196
+ // wallet.address || '',
197
+ // payloadV1ToV0(transactionPyld)
198
+ // );
199
+ // if (!tx) throw new WalletSignTransactionError('Cannot generate transaction');
200
+ // const response = await provider?.signTransaction(tx);
201
+
202
+ // if (!response) {
203
+ // throw new WalletSignTransactionError('No response');
204
+ // }
205
+ // const result = { hash: response } as any;
206
+ return {} as SubmitTransactionRequest;
207
+ } catch (error: any) {
208
+ this.emit('error', new WalletSignTransactionError(error));
209
+ throw error;
210
+ }
211
+ }
212
+
213
+ async signAndSubmitTransaction(
214
+ transactionPyld: TransactionPayload,
215
+ options?: any
216
+ ): Promise<{ hash: HexEncodedBytes }> {
217
+ try {
218
+ const wallet = this._wallet;
219
+ const provider = this._provider || window.pontem;
220
+ if (!wallet || !provider) throw new WalletNotConnectedError();
221
+ const response = await provider?.signAndSubmit(transactionPyld, options);
222
+
223
+ if (!response || !response.success) {
224
+ throw new Error('No response');
225
+ }
226
+ return { hash: response.result.hash };
227
+ } catch (error: any) {
228
+ this.emit('error', new WalletSignAndSubmitMessageError(error.error.message));
229
+ throw error;
230
+ }
231
+ }
232
+
233
+ async signMessage(message: string): Promise<string> {
234
+ try {
235
+ const wallet = this._wallet;
236
+ const provider = this._provider || window.pontem;
237
+ if (!wallet || !provider) throw new WalletNotConnectedError();
238
+ const response = await provider?.signMessage(message);
239
+ if (response) {
240
+ return response;
241
+ } else {
242
+ throw new Error('Sign Message failed');
243
+ }
244
+ } catch (error: any) {
245
+ const errMsg = error.message;
246
+ this.emit('error', new WalletSignMessageError(errMsg));
247
+ throw error;
248
+ }
249
+ }
250
+ }
@@ -0,0 +1,229 @@
1
+ import {
2
+ HexEncodedBytes,
3
+ SubmitTransactionRequest,
4
+ TransactionPayload
5
+ } from 'aptos/dist/generated';
6
+ import {
7
+ WalletDisconnectionError,
8
+ WalletNotConnectedError,
9
+ WalletNotReadyError,
10
+ WalletSignAndSubmitMessageError,
11
+ WalletSignMessageError,
12
+ WalletSignTransactionError
13
+ } from '../WalletProviders/errors';
14
+ import {
15
+ AccountKeys,
16
+ BaseWalletAdapter,
17
+ scopePollingDetectionStrategy,
18
+ WalletName,
19
+ WalletReadyState
20
+ } from './BaseAdapter';
21
+
22
+ interface ISpikaWallet {
23
+ connect: () => Promise<{ publicKey: string; account: string; authKey: string }>;
24
+ account: () => Promise<string>;
25
+ isConnected: () => Promise<boolean>;
26
+ signAndSubmitTransaction(transaction: any): Promise<{ hash: HexEncodedBytes }>;
27
+ signTransaction(transaction: any): Promise<SubmitTransactionRequest>;
28
+ signMessage(message: string): Promise<string>;
29
+ disconnect(): Promise<void>;
30
+ }
31
+
32
+ interface SpikaWindow extends Window {
33
+ spika?: ISpikaWallet;
34
+ }
35
+
36
+ declare const window: SpikaWindow;
37
+
38
+ export const SpikaWalletName = 'Spika' as WalletName<'Spika'>;
39
+
40
+ export interface SpikaWalletAdapterConfig {
41
+ provider?: ISpikaWallet;
42
+ // network?: WalletAdapterNetwork;
43
+ timeout?: number;
44
+ }
45
+
46
+ export class SpikaWalletAdapter extends BaseWalletAdapter {
47
+ name = SpikaWalletName;
48
+
49
+ url = 'https://chrome.google.com/webstore/detail/spika/fadkojdgchhfkdkklllhcphknohbmjmb';
50
+
51
+ icon = 'https://pbs.twimg.com/profile_images/1562544739181887488/vSqEIeyh_400x400.png';
52
+
53
+ protected _provider: ISpikaWallet | undefined;
54
+
55
+ // protected _network: WalletAdapterNetwork;
56
+ protected _timeout: number;
57
+
58
+ protected _readyState: WalletReadyState =
59
+ typeof window === 'undefined' || typeof document === 'undefined'
60
+ ? WalletReadyState.Unsupported
61
+ : WalletReadyState.NotDetected;
62
+
63
+ protected _connecting: boolean;
64
+
65
+ protected _wallet: any | null;
66
+
67
+ constructor({
68
+ // provider,
69
+ // network = WalletAdapterNetwork.Mainnet,
70
+ timeout = 10000
71
+ }: SpikaWalletAdapterConfig = {}) {
72
+ super();
73
+
74
+ this._provider = typeof window !== 'undefined' ? window.spika : undefined;
75
+ // this._network = network;
76
+ this._timeout = timeout;
77
+ this._connecting = false;
78
+ this._wallet = null;
79
+
80
+ if (typeof window !== 'undefined' && this._readyState !== WalletReadyState.Unsupported) {
81
+ scopePollingDetectionStrategy(() => {
82
+ if (window.spika) {
83
+ this._readyState = WalletReadyState.Installed;
84
+ this.emit('readyStateChange', this._readyState);
85
+ return true;
86
+ }
87
+ return false;
88
+ });
89
+ }
90
+ }
91
+
92
+ get publicAccount(): AccountKeys {
93
+ return {
94
+ publicKey: this._wallet?.publicKey || null,
95
+ address: this._wallet?.address || null,
96
+ authKey: this._wallet?.authKey || null
97
+ };
98
+ }
99
+
100
+ get connecting(): boolean {
101
+ return this._connecting;
102
+ }
103
+
104
+ get connected(): boolean {
105
+ return !!this._wallet?.isConnected;
106
+ }
107
+
108
+ get readyState(): WalletReadyState {
109
+ return this._readyState;
110
+ }
111
+
112
+ async connect(): Promise<void> {
113
+ try {
114
+ if (this.connected || this.connecting) {
115
+ return;
116
+ }
117
+
118
+ if (
119
+ !(
120
+ this._readyState === WalletReadyState.Loadable ||
121
+ this._readyState === WalletReadyState.Installed
122
+ )
123
+ )
124
+ throw new WalletNotReadyError();
125
+ this._connecting = true;
126
+
127
+ const provider = this._provider || window.spika;
128
+ const isConnected = await this._provider?.isConnected();
129
+ if (isConnected === true) {
130
+ await provider?.disconnect();
131
+ }
132
+
133
+ const response = await provider?.connect();
134
+ if (response?.publicKey !== undefined) {
135
+ this._wallet = {
136
+ publicKey: response?.publicKey,
137
+ address: response?.account,
138
+ authKey: response?.authKey,
139
+ isConnected: true
140
+ };
141
+ } else {
142
+ this._wallet = {
143
+ isConnected: false
144
+ };
145
+ }
146
+
147
+ this.emit('connect', this._wallet.publicKey);
148
+ } catch (error: any) {
149
+ this.emit('error', error);
150
+ throw error;
151
+ } finally {
152
+ this._connecting = false;
153
+ }
154
+ }
155
+
156
+ async disconnect(): Promise<void> {
157
+ const wallet = this._wallet;
158
+ if (wallet) {
159
+ this._wallet = null;
160
+
161
+ try {
162
+ const provider = this._provider || window.spika;
163
+ await provider?.disconnect();
164
+ } catch (error: any) {
165
+ this.emit('error', new WalletDisconnectionError(error?.message, error));
166
+ }
167
+ }
168
+
169
+ this.emit('disconnect');
170
+ }
171
+
172
+ async signTransaction(transaction: TransactionPayload): Promise<SubmitTransactionRequest> {
173
+ try {
174
+ const wallet = this._wallet;
175
+ const provider = this._provider || window.spika;
176
+ if (!wallet || !provider) throw new WalletNotConnectedError();
177
+
178
+ const response = await provider?.signTransaction(transaction);
179
+ if (response) {
180
+ return response;
181
+ } else {
182
+ throw new Error('Sign Transaction failed');
183
+ }
184
+ } catch (error: any) {
185
+ const errMsg = error.message;
186
+ this.emit('error', new WalletSignTransactionError(errMsg));
187
+ throw error;
188
+ }
189
+ }
190
+
191
+ async signAndSubmitTransaction(
192
+ transaction: TransactionPayload
193
+ ): Promise<{ hash: HexEncodedBytes }> {
194
+ try {
195
+ const wallet = this._wallet;
196
+ const provider = this._provider || window.spika;
197
+ if (!wallet || !provider) throw new WalletNotConnectedError();
198
+
199
+ const response = await provider?.signAndSubmitTransaction(transaction);
200
+ if (response) {
201
+ return response;
202
+ } else {
203
+ throw new Error('Transaction failed');
204
+ }
205
+ } catch (error: any) {
206
+ const errMsg = error.message;
207
+ this.emit('error', new WalletSignAndSubmitMessageError(errMsg));
208
+ throw error;
209
+ }
210
+ }
211
+
212
+ async signMessage(message: string): Promise<string> {
213
+ try {
214
+ const wallet = this._wallet;
215
+ const provider = this._provider || window.spika;
216
+ if (!wallet || !provider) throw new WalletNotConnectedError();
217
+ const response = await provider?.signMessage(message);
218
+ if (response) {
219
+ return response;
220
+ } else {
221
+ throw new Error('Sign Message failed');
222
+ }
223
+ } catch (error: any) {
224
+ const errMsg = error.message;
225
+ this.emit('error', new WalletSignMessageError(errMsg));
226
+ throw error;
227
+ }
228
+ }
229
+ }
@@ -3,6 +3,7 @@ export * from './BaseAdapter';
3
3
  export * from './HippoExtensionWallet';
4
4
  export * from './HippoWallet';
5
5
  export * from './MartianWallet';
6
- export * from './MultiMaskWallet';
7
6
  export * from './FewchaWallet';
8
- export * from './NightlyWallet';
7
+ export * from './PontemWallet';
8
+ // export * from './NightlyWallet';
9
+ export * from './SpikaWallet';
@@ -1,6 +1,6 @@
1
- import { TransactionPayload } from 'aptos/dist/api/data-contracts';
2
1
  import { useLocalStorage } from '../hooks/useLocalStorage';
3
2
  import { FC, ReactNode, useCallback, useEffect, useRef, useState } from 'react';
3
+ import { TransactionPayload } from 'aptos/dist/generated';
4
4
  import {
5
5
  WalletError,
6
6
  WalletNotConnectedError,
@@ -9,7 +9,6 @@ import {
9
9
  } from './errors';
10
10
  import {
11
11
  AccountKeys,
12
- PublicKey,
13
12
  WalletAdapter,
14
13
  WalletName,
15
14
  WalletReadyState
@@ -19,7 +18,6 @@ import { Wallet, WalletContext } from './useWallet';
19
18
  export interface WalletProviderProps {
20
19
  children: ReactNode;
21
20
  wallets: WalletAdapter[];
22
- autoConnect?: boolean;
23
21
  onError?: (error: WalletError) => void;
24
22
  localStorageKey?: string;
25
23
  }
@@ -39,7 +37,6 @@ const initialState: {
39
37
  export const WalletProvider: FC<WalletProviderProps> = ({
40
38
  children,
41
39
  wallets: adapters,
42
- autoConnect = false,
43
40
  onError,
44
41
  localStorageKey = 'walletName'
45
42
  }) => {
@@ -141,7 +138,6 @@ export const WalletProvider: FC<WalletProviderProps> = ({
141
138
  adapter.off('error', handleError);
142
139
  };
143
140
  }
144
- return () => null;
145
141
  }, [adapter, handleConnect, handleDisconnect, handleError]);
146
142
 
147
143
  // When the adapter changes, disconnect the old one
@@ -241,10 +237,18 @@ export const WalletProvider: FC<WalletProviderProps> = ({
241
237
  [adapter, handleError, connected]
242
238
  );
243
239
 
240
+ const signMessage = useCallback(
241
+ async (message: string) => {
242
+ if (!adapter) throw handleError(new WalletNotSelectedError());
243
+ if (!connected) throw handleError(new WalletNotConnectedError());
244
+ return adapter.signMessage(message);
245
+ },
246
+ [adapter, handleError, connected]
247
+ );
248
+
244
249
  return (
245
250
  <WalletContext.Provider
246
251
  value={{
247
- autoConnect,
248
252
  wallets,
249
253
  wallet,
250
254
  account,
@@ -255,10 +259,8 @@ export const WalletProvider: FC<WalletProviderProps> = ({
255
259
  connect,
256
260
  disconnect,
257
261
  signAndSubmitTransaction,
258
- // sendTransaction,
259
- signTransaction
260
- // signAllTransactions,
261
- // signMessage
262
+ signTransaction,
263
+ signMessage
262
264
  }}>
263
265
  {children}
264
266
  </WalletContext.Provider>
@@ -1,12 +1,11 @@
1
1
  import {
2
- PendingTransaction,
2
+ TransactionPayload,
3
3
  SubmitTransactionRequest,
4
- TransactionPayload
5
- } from 'aptos/dist/api/data-contracts';
4
+ HexEncodedBytes
5
+ } from 'aptos/dist/generated';
6
6
  import { createContext, useContext } from 'react';
7
7
  import {
8
8
  AccountKeys,
9
- PublicKey,
10
9
  WalletAdapter,
11
10
  WalletName,
12
11
  WalletReadyState
@@ -18,7 +17,7 @@ export interface Wallet {
18
17
  }
19
18
 
20
19
  export interface WalletContextState {
21
- autoConnect: boolean;
20
+ // autoConnect: boolean;
22
21
  wallets: Wallet[];
23
22
  wallet: Wallet | null;
24
23
  account: AccountKeys | null;
@@ -28,19 +27,13 @@ export interface WalletContextState {
28
27
  select(walletName: WalletName): void;
29
28
  connect(walletName: string): Promise<void>;
30
29
  disconnect(): Promise<void>;
31
- signAndSubmitTransaction(
32
- transaction: TransactionPayload
33
- // connection: Connection,
34
- // options?: SendTransactionOptions
35
- ): Promise<PendingTransaction>;
36
-
30
+ signAndSubmitTransaction(transaction: TransactionPayload): Promise<{ hash: HexEncodedBytes }>;
37
31
  signTransaction(transaction: TransactionPayload): Promise<SubmitTransactionRequest>;
38
- // signAllTransactions: SignerWalletAdapterProps['signAllTransactions'] | undefined;
39
- // signMessage: MessageSignerWalletAdapterProps['signMessage'] | undefined;
32
+ signMessage(message: string): Promise<string>;
40
33
  }
41
34
 
42
35
  const DEFAULT_CONTEXT = {
43
- autoConnect: false,
36
+ // autoConnect: false,
44
37
  connecting: false,
45
38
  connected: false,
46
39
  disconnecting: false
@@ -4,7 +4,7 @@ export const WEBWALLET_URL = 'https://hippo-wallet-test.web.app';
4
4
  // export const WEBWALLET_URL = 'http://localhost:3030';
5
5
 
6
6
  export const LOCAL_NODE_URL = 'http://127.0.0.1:8080';
7
- export const DEVNET_NODE_URL = 'https://fullnode.devnet.aptoslabs.com';
7
+ export const DEVNET_NODE_URL = 'https://fullnode.devnet.aptoslabs.com/v1';
8
8
  export const LOCAL_FAUCET_URL = 'http://127.0.0.1:8000';
9
9
  export const DEVNET_FAUCET_URL = 'https://faucet.devnet.aptoslabs.com';
10
10
 
@@ -1,15 +1,20 @@
1
1
  import { useCallback, useState } from 'react';
2
+ import { useSSR } from './useSSR';
2
3
 
3
4
  export const useLocalStorage = () => {
5
+ const { isClient } = useSSR();
4
6
  const useLocalStorageState = <T>(
5
7
  key: string,
6
8
  defaultState: T,
7
9
  session?: boolean
8
10
  ): [T, (T: any) => void] => {
9
- const storage = session ? sessionStorage : localStorage;
11
+ let storage: undefined | Storage;
12
+ if (isClient) {
13
+ storage = session ? sessionStorage : localStorage;
14
+ }
10
15
  const [state, setState] = useState(() => {
11
16
  try {
12
- let storedState = storage.getItem(key);
17
+ let storedState = storage?.getItem(key);
13
18
  if (storedState) {
14
19
  return JSON.parse(storedState || '');
15
20
  }
@@ -25,9 +30,9 @@ export const useLocalStorage = () => {
25
30
  (newState: any) => {
26
31
  setState(newState);
27
32
  if (newState === null) {
28
- storage.removeItem(key);
33
+ storage?.removeItem(key);
29
34
  } else {
30
- storage.setItem(key, JSON.stringify(newState));
35
+ storage?.setItem(key, JSON.stringify(newState));
31
36
  }
32
37
  },
33
38
  [key, storage]
@@ -0,0 +1,15 @@
1
+ import { useEffect, useState } from 'react';
2
+
3
+ export const useSSR = () => {
4
+ const [isClient, setIsClient] = useState(false);
5
+
6
+ useEffect(() => {
7
+ if (typeof window !== 'undefined') {
8
+ setIsClient(true);
9
+ }
10
+ }, []);
11
+
12
+ return {
13
+ isClient
14
+ };
15
+ };
@@ -0,0 +1,11 @@
1
+ import { TransactionPayload, TransactionPayload_EntryFunctionPayload } from 'aptos/dist/generated';
2
+
3
+ export const payloadV1ToV0 = (payload: TransactionPayload) => {
4
+ const v1 = payload as TransactionPayload_EntryFunctionPayload;
5
+ return {
6
+ type: 'script_function_payload',
7
+ function: v1.function,
8
+ type_arguments: v1.type_arguments,
9
+ arguments: v1.arguments
10
+ };
11
+ };