@manahippo/aptos-wallet-adapter 1.0.3 → 1.0.6

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 (62) hide show
  1. package/README.md +2 -0
  2. package/dist/WalletAdapters/BaseAdapter.d.ts +6 -6
  3. package/dist/WalletAdapters/BaseAdapter.d.ts.map +1 -1
  4. package/dist/WalletAdapters/BitkeepWallet.d.ts +1 -1
  5. package/dist/WalletAdapters/BitkeepWallet.d.ts.map +1 -1
  6. package/dist/WalletAdapters/BloctoWallet.d.ts +1 -1
  7. package/dist/WalletAdapters/BloctoWallet.d.ts.map +1 -1
  8. package/dist/WalletAdapters/BloctoWallet.js +2 -2
  9. package/dist/WalletAdapters/BloctoWallet.js.map +1 -1
  10. package/dist/WalletAdapters/CloverWallet.d.ts +57 -0
  11. package/dist/WalletAdapters/CloverWallet.d.ts.map +1 -0
  12. package/dist/WalletAdapters/CloverWallet.js +213 -0
  13. package/dist/WalletAdapters/CloverWallet.js.map +1 -0
  14. package/dist/WalletAdapters/Coin98Wallet.d.ts +1 -1
  15. package/dist/WalletAdapters/Coin98Wallet.d.ts.map +1 -1
  16. package/dist/WalletAdapters/FoxWallet.d.ts +1 -1
  17. package/dist/WalletAdapters/FoxWallet.d.ts.map +1 -1
  18. package/dist/WalletAdapters/MsafeWallet.d.ts +0 -38
  19. package/dist/WalletAdapters/MsafeWallet.d.ts.map +1 -1
  20. package/dist/WalletAdapters/MsafeWallet.js +226 -224
  21. package/dist/WalletAdapters/MsafeWallet.js.map +1 -1
  22. package/dist/WalletAdapters/NightlyWallet.js +8 -8
  23. package/dist/WalletAdapters/NightlyWallet.js.map +1 -1
  24. package/dist/WalletAdapters/ONTOWallet.d.ts +1 -1
  25. package/dist/WalletAdapters/ONTOWallet.d.ts.map +1 -1
  26. package/dist/WalletAdapters/OpenBlockWallet.d.ts +56 -0
  27. package/dist/WalletAdapters/OpenBlockWallet.d.ts.map +1 -0
  28. package/dist/WalletAdapters/OpenBlockWallet.js +243 -0
  29. package/dist/WalletAdapters/OpenBlockWallet.js.map +1 -0
  30. package/dist/WalletAdapters/PetraWallet.d.ts +1 -1
  31. package/dist/WalletAdapters/PetraWallet.d.ts.map +1 -1
  32. package/dist/WalletAdapters/PetraWallet.js +1 -1
  33. package/dist/WalletAdapters/PetraWallet.js.map +1 -1
  34. package/dist/WalletAdapters/PontemWallet.d.ts.map +1 -1
  35. package/dist/WalletAdapters/PontemWallet.js +8 -7
  36. package/dist/WalletAdapters/PontemWallet.js.map +1 -1
  37. package/dist/WalletAdapters/RiseWallet.d.ts +11 -3
  38. package/dist/WalletAdapters/RiseWallet.d.ts.map +1 -1
  39. package/dist/WalletAdapters/RiseWallet.js +40 -16
  40. package/dist/WalletAdapters/RiseWallet.js.map +1 -1
  41. package/dist/WalletAdapters/SpacecyWallet.d.ts +79 -0
  42. package/dist/WalletAdapters/SpacecyWallet.d.ts.map +1 -0
  43. package/dist/WalletAdapters/SpacecyWallet.js +258 -0
  44. package/dist/WalletAdapters/SpacecyWallet.js.map +1 -0
  45. package/dist/WalletAdapters/index.d.ts +3 -1
  46. package/dist/WalletAdapters/index.d.ts.map +1 -1
  47. package/dist/WalletAdapters/index.js +4 -1
  48. package/dist/WalletAdapters/index.js.map +1 -1
  49. package/dist/WalletProviders/WalletProvider.d.ts.map +1 -1
  50. package/dist/WalletProviders/WalletProvider.js +6 -7
  51. package/dist/WalletProviders/WalletProvider.js.map +1 -1
  52. package/package.json +3 -3
  53. package/src/WalletAdapters/BloctoWallet.ts +3 -4
  54. package/src/WalletAdapters/CloverWallet.ts +274 -0
  55. package/src/WalletAdapters/MsafeWallet.ts +261 -261
  56. package/src/WalletAdapters/OpenBlockWallet.ts +293 -0
  57. package/src/WalletAdapters/PetraWallet.ts +1 -1
  58. package/src/WalletAdapters/PontemWallet.ts +14 -11
  59. package/src/WalletAdapters/RiseWallet.ts +52 -17
  60. package/src/WalletAdapters/SpacecyWallet.ts +350 -0
  61. package/src/WalletAdapters/index.ts +4 -1
  62. package/src/WalletProviders/WalletProvider.tsx +5 -6
@@ -0,0 +1,350 @@
1
+
2
+
3
+ import { MaybeHexString, Types } from 'aptos';
4
+ import {
5
+ WalletAccountChangeError,
6
+ WalletDisconnectionError,
7
+ WalletGetNetworkError,
8
+ WalletNetworkChangeError,
9
+ WalletNotConnectedError,
10
+ WalletNotReadyError,
11
+ WalletSignAndSubmitMessageError,
12
+ WalletSignMessageError,
13
+ WalletSignTransactionError
14
+ } from '../WalletProviders/errors';
15
+ import {
16
+ AccountKeys,
17
+ BaseWalletAdapter,
18
+ NetworkInfo,
19
+ scopePollingDetectionStrategy,
20
+ SignMessagePayload,
21
+ SignMessageResponse,
22
+ WalletAdapterNetwork,
23
+ WalletName,
24
+ WalletReadyState
25
+ } from './BaseAdapter';
26
+ interface ConnectSpacecyAccount {
27
+ address: MaybeHexString;
28
+ method: string;
29
+ publicKey: MaybeHexString;
30
+ status: number;
31
+ }
32
+
33
+ interface SpacecyAccount {
34
+ address: MaybeHexString;
35
+ publicKey?: MaybeHexString;
36
+ authKey?: MaybeHexString;
37
+ isConnected: boolean;
38
+ }
39
+ export interface ISpacecyWallet {
40
+ checkIsConnectedAndAccount: () => Promise<{ isConnected: boolean, accountWallet: MaybeHexString }>;
41
+ connect: () => Promise<ConnectSpacecyAccount>;
42
+ account(): Promise<MaybeHexString>;
43
+ publicKey(): Promise<MaybeHexString>;
44
+ signAndSubmitTransaction(
45
+ transaction: Types.TransactionPayload,
46
+ options?: any
47
+ ): Promise<{
48
+ status: number;
49
+ data: Types.HexEncodedBytes;
50
+ method: 'signAndSubmitTransaction';
51
+ }>;
52
+ isConnected(): Promise<boolean>;
53
+ signTransaction(transaction: Types.TransactionPayload, options?: any): Promise<{
54
+ status: number;
55
+ data: Uint8Array;
56
+ method: 'signTransaction';
57
+ }>
58
+ signMessage(message: SignMessagePayload): Promise<{
59
+ status: number;
60
+ data: SignMessageResponse;
61
+ method: 'signMessage';
62
+ }>;
63
+ generateTransaction(sender: MaybeHexString, payload: any, options?: any): Promise<any>;
64
+ disconnect(): Promise<void>;
65
+ chainId(): Promise<void>;
66
+ network(): Promise<NetworkInfo>;
67
+ onAccountChange(listener: (address: string | undefined) => void): Promise<void>;
68
+ onNetworkChange(listener: (network: NetworkInfo) => void): Promise<void>;
69
+ }
70
+
71
+
72
+
73
+ interface SpacecyWindow extends Window {
74
+ spacecy?: ISpacecyWallet;
75
+ }
76
+
77
+ declare const window: SpacecyWindow;
78
+
79
+ const SpacecyWalletName = 'Spacecy' as WalletName<'Spacecy'>;
80
+
81
+ export interface SpacecyWalletAdapterConfig {
82
+ provider?: ISpacecyWallet;
83
+ // network?: WalletAdapterNetwork;
84
+ timeout?: number;
85
+ }
86
+
87
+ export class SpacecyWalletAdapter extends BaseWalletAdapter {
88
+ name = SpacecyWalletName;
89
+
90
+ url = 'https://chrome.google.com/webstore/detail/spacecy-wallet/mkchoaaiifodcflmbaphdgeidocajadp?hl=en-US';
91
+
92
+ icon = 'https://spacecywallet.com/favicon.ico';
93
+
94
+ protected _provider: ISpacecyWallet | undefined;
95
+
96
+ protected _network: WalletAdapterNetwork | undefined;
97
+
98
+ protected _chainId: string | undefined;
99
+
100
+ protected _api: string | undefined;
101
+
102
+ protected _timeout: number;
103
+
104
+ protected _readyState: WalletReadyState =
105
+ typeof window === 'undefined' || typeof document === 'undefined'
106
+ ? WalletReadyState.Unsupported
107
+ : WalletReadyState.NotDetected;
108
+
109
+ protected _connecting: boolean;
110
+
111
+ protected _wallet: SpacecyAccount | null;
112
+
113
+ constructor({
114
+ // provider,
115
+ // network = WalletAdapterNetwork.Testnet,
116
+ timeout = 10000
117
+ }: SpacecyWalletAdapterConfig = {}) {
118
+ super();
119
+
120
+ this._provider = typeof window !== 'undefined' ? window.spacecy : undefined;
121
+ this._network = undefined;
122
+ this._timeout = timeout;
123
+ this._connecting = false;
124
+ this._wallet = null;
125
+
126
+ if (typeof window !== 'undefined' && this._readyState !== WalletReadyState.Unsupported) {
127
+ scopePollingDetectionStrategy(() => {
128
+ if (window.spacecy) {
129
+ this._readyState = WalletReadyState.Installed;
130
+ this.emit('readyStateChange', this._readyState);
131
+ return true;
132
+ }
133
+ return false;
134
+ });
135
+ }
136
+ }
137
+
138
+ get publicAccount(): AccountKeys {
139
+ return {
140
+ publicKey: this._wallet?.publicKey || null,
141
+ address: this._wallet?.address || null,
142
+ authKey: this._wallet?.authKey || null
143
+ };
144
+ }
145
+
146
+ get network(): NetworkInfo {
147
+ return {
148
+ name: this._network,
149
+ api: this._api,
150
+ chainId: this._chainId
151
+ };
152
+ }
153
+
154
+ get connecting(): boolean {
155
+ return this._connecting;
156
+ }
157
+
158
+ get connected(): boolean {
159
+ return !!this._wallet?.isConnected;
160
+ }
161
+
162
+ get readyState(): WalletReadyState {
163
+ return this._readyState;
164
+ }
165
+
166
+ async connect(): Promise<void> {
167
+ try {
168
+ if (this.connected || this.connecting) return;
169
+ if (
170
+ !(
171
+ this._readyState === WalletReadyState.Loadable ||
172
+ this._readyState === WalletReadyState.Installed
173
+ )
174
+ )
175
+ throw new WalletNotReadyError();
176
+ this._connecting = true;
177
+ const provider = this._provider || window.spacecy;
178
+ const response: any = await provider?.connect()
179
+
180
+
181
+
182
+
183
+ if (!response) {
184
+ throw new WalletNotConnectedError('No connect response');
185
+ }
186
+ const walletAccount = response.data.address;
187
+ const publicKey = response.data.publicKey;
188
+ if (walletAccount) {
189
+ this._wallet = {
190
+ address: walletAccount,
191
+ publicKey,
192
+ isConnected: true
193
+ };
194
+
195
+ try {
196
+ const networkInfo: any = await provider?.chainId();
197
+ if (networkInfo) {
198
+ this._network = networkInfo.data.networkName;
199
+ this._chainId = networkInfo.data.chainId;
200
+ this._api = networkInfo.data.rpcProvider
201
+ }
202
+ } catch (error: any) {
203
+ const errMsg = error.message;
204
+ this.emit('error', new WalletGetNetworkError(errMsg));
205
+ throw error;
206
+ }
207
+ }
208
+
209
+
210
+ this.emit('connect', this._wallet?.address || '');
211
+ } catch (error: any) {
212
+ this.emit('error', new Error('User has rejected the connection'));
213
+ throw error;
214
+ } finally {
215
+ this._connecting = false;
216
+ }
217
+ }
218
+
219
+ async disconnect(): Promise<void> {
220
+ const wallet = this._wallet;
221
+ const provider = this._provider || window.spacecy;
222
+ if (wallet) {
223
+ this._wallet = null;
224
+ try {
225
+ await provider?.disconnect();
226
+ } catch (error: any) {
227
+ this.emit('error', new WalletDisconnectionError(error?.message, error));
228
+ }
229
+ }
230
+ this.emit('disconnect');
231
+ }
232
+
233
+ async signTransaction(
234
+ transactionPyld: Types.TransactionPayload,
235
+ options?: any
236
+ ): Promise<Uint8Array> {
237
+ try {
238
+ const wallet = this._wallet;
239
+ const provider = this._provider || window.spacecy;
240
+ if (!wallet || !provider) throw new WalletNotConnectedError();
241
+ const tx = await provider.generateTransaction(wallet.address || '', transactionPyld, options);
242
+ if (!tx) throw new Error('Cannot generate transaction');
243
+ const response = await provider?.signTransaction(tx.data);
244
+ if (!response) {
245
+ throw new Error('No response');
246
+ }
247
+ return response.data;
248
+ } catch (error: any) {
249
+ this.emit('error', new WalletSignTransactionError(error));
250
+ throw error;
251
+ }
252
+ }
253
+ async signAndSubmitTransaction(
254
+ transactionPyld: Types.TransactionPayload,
255
+ options?: any
256
+ ): Promise<{ hash: Types.HexEncodedBytes }> {
257
+ try {
258
+ const wallet = this._wallet;
259
+ const provider = this._provider || window.spacecy;
260
+ if (!wallet || !provider) throw new WalletNotConnectedError();
261
+ const response = await provider?.signAndSubmitTransaction(transactionPyld, options);
262
+
263
+
264
+ if (!response || response.status != 200) {
265
+ throw new Error('No response');
266
+ }
267
+ return { hash: response.data };
268
+ } catch (error: any) {
269
+ this.emit('error', new WalletSignAndSubmitMessageError(error.message));
270
+ throw error;
271
+ }
272
+ }
273
+
274
+
275
+ async signMessage(msgPayload: SignMessagePayload): Promise<SignMessageResponse> {
276
+ try {
277
+ const wallet = this._wallet;
278
+ const provider = this._provider || window.spacecy;
279
+ if (!wallet || !provider) throw new WalletNotConnectedError();
280
+ if (typeof msgPayload !== 'object' || !msgPayload.nonce) {
281
+ throw new WalletSignMessageError('Invalid signMessage Payload');
282
+ }
283
+ const response = await provider?.signMessage(msgPayload);
284
+ if (response.status == 200) {
285
+ return response.data;
286
+ } else {
287
+ throw new Error('Sign Message failed');
288
+ }
289
+ } catch (error: any) {
290
+ const errMsg = error.message;
291
+ this.emit('error', new WalletSignMessageError(errMsg));
292
+ throw error;
293
+ }
294
+ }
295
+
296
+ async onAccountChange(): Promise<void> {
297
+ try {
298
+ const wallet = this._wallet;
299
+ const provider = this._provider || window.spacecy;
300
+ if (!wallet || !provider) throw new WalletNotConnectedError();
301
+ const handleAccountChange = async (newAccount: any) => {
302
+ // disconnect wallet if newAccount is undefined
303
+ if (newAccount.data == 'no account') {
304
+ if (this.connected) {
305
+ await this.disconnect();
306
+ }
307
+ return;
308
+ }
309
+ if (newAccount.data == "") {
310
+ this._wallet = { publicKey: "", address: "", authKey: "", isConnected: false }
311
+ }
312
+ // const newPublicKey = await provider?.publicKey();
313
+ if (this._wallet != null) {
314
+ this._wallet = {
315
+ ...this._wallet,
316
+ address: newAccount.data == 'no account' ? undefined : newAccount.data,
317
+ publicKey: undefined
318
+ };
319
+ }
320
+ this.emit('accountChange', newAccount);
321
+ };
322
+ await provider?.onAccountChange(handleAccountChange);
323
+ } catch (error: any) {
324
+ const errMsg = error.message;
325
+ this.emit('error', new WalletAccountChangeError(errMsg));
326
+ throw error;
327
+ }
328
+ }
329
+
330
+ async onNetworkChange(): Promise<void> {
331
+ try {
332
+ const wallet = this._wallet;
333
+ const provider = this._provider || window.spacecy;
334
+ if (!wallet || !provider) throw new WalletNotConnectedError();
335
+ const handleNetworkChange = (network: any) => {
336
+ this._network = network.data.networkName;
337
+ this._api = network.data.rpcProvider
338
+ this._chainId = network.data.chainId;
339
+ if (this._network) {
340
+ this.emit('networkChange', this._network);
341
+ }
342
+ };
343
+ await provider?.onNetworkChange(handleNetworkChange);
344
+ } catch (error: any) {
345
+ const errMsg = error.message;
346
+ this.emit('error', new WalletNetworkChangeError(errMsg));
347
+ throw error;
348
+ }
349
+ }
350
+ }
@@ -18,4 +18,7 @@ export * from './BloctoWallet';
18
18
  export * from './Coin98Wallet';
19
19
  export * from './SafePalWallet';
20
20
  export * from './FoxWallet';
21
- export * from './MsafeWallet';
21
+ // export * from './MsafeWallet';
22
+ export * from './OpenBlockWallet';
23
+ export * from './CloverWallet';
24
+ export * from './SpacecyWallet';
@@ -58,7 +58,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
58
58
  const readyState = adapter?.readyState || WalletReadyState.Unsupported;
59
59
  const [connecting, setConnecting] = useState(false);
60
60
  const [disconnecting, setDisconnecting] = useState(false);
61
- const isConnecting = useRef(false);
61
+ // const isConnecting = useRef(false);
62
62
  const isDisconnecting = useRef(false);
63
63
  const isUnloading = useRef(false);
64
64
 
@@ -226,7 +226,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
226
226
  // Connect the adapter to the wallet
227
227
  const connect = useCallback(
228
228
  async (walletName?) => {
229
- if (isConnecting.current || isDisconnecting.current || connected || !walletName) return;
229
+ if (isDisconnecting.current || connected || !walletName) return;
230
230
  let walletToConnect = initialState;
231
231
  if (!adapter || walletName !== adapter?.name) {
232
232
  const selectedWallet = wallets.find((wAdapter) => wAdapter.adapter.name === walletName);
@@ -266,7 +266,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
266
266
 
267
267
  throw handleError(new WalletNotReadyError('Wallet Not Ready'));
268
268
  }
269
- isConnecting.current = true;
269
+ // isConnecting.current = true;
270
270
  setConnecting(true);
271
271
  try {
272
272
  const timeout = timeoutPromise(TIMEOUT * 1000);
@@ -282,7 +282,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
282
282
  }
283
283
  } finally {
284
284
  setConnecting(false);
285
- isConnecting.current = false;
285
+ // isConnecting.current = false;
286
286
  }
287
287
  },
288
288
  [connected, adapter, handleError, wallets, setName, wallet, account, network]
@@ -291,7 +291,6 @@ export const WalletProvider: FC<WalletProviderProps> = ({
291
291
  // If autoConnect is enabled, try to connect when the adapter changes and is ready
292
292
  useEffect(() => {
293
293
  if (
294
- isConnecting.current ||
295
294
  connected ||
296
295
  !autoConnect ||
297
296
  !name ||
@@ -300,7 +299,7 @@ export const WalletProvider: FC<WalletProviderProps> = ({
300
299
  )
301
300
  return;
302
301
  connect(name);
303
- }, [isConnecting, connected, autoConnect, name, connect, adapter, readyState]);
302
+ }, [connected, autoConnect, name, connect, adapter, readyState]);
304
303
 
305
304
  // Disconnect the adapter from the wallet
306
305
  const disconnect = useCallback(async () => {