@dynamic-labs/aptos 4.38.0 → 4.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/_virtual/_tslib.cjs +36 -0
- package/_virtual/_tslib.js +32 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +5 -3
- package/src/connectors/AptosWalletConnector/AptosWalletConnector.cjs +208 -0
- package/src/connectors/AptosWalletConnector/AptosWalletConnector.d.ts +71 -0
- package/src/connectors/AptosWalletConnector/AptosWalletConnector.js +204 -0
- package/src/connectors/AptosWalletConnector/index.d.ts +1 -0
- package/src/consts/index.cjs +19 -0
- package/src/consts/index.js +15 -0
- package/src/index.cjs +19 -5
- package/src/index.d.ts +9 -0
- package/src/index.js +11 -5
- package/src/types.d.ts +13 -114
- package/src/utils/assertProvider/assertProvider.cjs +36 -0
- package/src/utils/assertProvider/assertProvider.d.ts +6 -5
- package/src/utils/assertProvider/assertProvider.js +32 -0
- package/src/utils/getWalletStandardWallets/getWalletStandardWallets.cjs +49 -0
- package/src/utils/getWalletStandardWallets/getWalletStandardWallets.js +45 -0
- package/src/utils/invokeWalletMethod/invokeWalletMethod.cjs +61 -0
- package/src/utils/invokeWalletMethod/invokeWalletMethod.d.ts +6 -7
- package/src/utils/invokeWalletMethod/invokeWalletMethod.js +57 -0
- package/src/utils/isWalletWithRequiredFeatureSet/isWalletWithRequiredFeatureSet.cjs +10 -0
- package/src/utils/isWalletWithRequiredFeatureSet/isWalletWithRequiredFeatureSet.js +6 -0
- package/src/utils/parseConnectionResult/parseConnectionResult.cjs +40 -0
- package/src/utils/parseConnectionResult/parseConnectionResult.d.ts +7 -10
- package/src/utils/parseConnectionResult/parseConnectionResult.js +36 -0
- package/src/utils/parseTransactionResponse/parseTransactionResponse.cjs +53 -0
- package/src/utils/parseTransactionResponse/parseTransactionResponse.d.ts +3 -3
- package/src/utils/parseTransactionResponse/parseTransactionResponse.js +49 -0
- package/src/wallet/AptosWallet.cjs +138 -0
- package/src/wallet/AptosWallet.d.ts +76 -0
- package/src/wallet/AptosWallet.js +134 -0
- package/src/wallet/index.d.ts +1 -0
- package/src/connectors/index.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
|
|
2
|
+
## [4.39.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.38.0...v4.39.0) (2025-10-17)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* add crypto.com as an onramp option in deposit ([#9580](https://github.com/dynamic-labs/dynamic-auth/issues/9580)) ([4988acc](https://github.com/dynamic-labs/dynamic-auth/commit/4988accfeafa5556297ad6e9873073e30c504c7f)), closes [#3](https://github.com/dynamic-labs/dynamic-auth/issues/3)
|
|
8
|
+
* add sui non-native token sending thru dynamic widget ([#9715](https://github.com/dynamic-labs/dynamic-auth/issues/9715)) ([9d9ea3b](https://github.com/dynamic-labs/dynamic-auth/commit/9d9ea3b233706766516b89d725a52d63cceb01f6))
|
|
9
|
+
|
|
2
10
|
## [4.38.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.37.2...v4.38.0) (2025-10-14)
|
|
3
11
|
|
|
4
12
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
/******************************************************************************
|
|
7
|
+
Copyright (c) Microsoft Corporation.
|
|
8
|
+
|
|
9
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
10
|
+
purpose with or without fee is hereby granted.
|
|
11
|
+
|
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
13
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
14
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
15
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
16
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
17
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
18
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
19
|
+
***************************************************************************** */
|
|
20
|
+
|
|
21
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
22
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
32
|
+
var e = new Error(message);
|
|
33
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.__awaiter = __awaiter;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
/******************************************************************************
|
|
3
|
+
Copyright (c) Microsoft Corporation.
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
9
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
10
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
11
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
12
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
+
***************************************************************************** */
|
|
16
|
+
|
|
17
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
28
|
+
var e = new Error(message);
|
|
29
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { __awaiter };
|
package/package.cjs
CHANGED
package/package.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/aptos",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.39.0",
|
|
4
4
|
"description": "A React SDK for implementing wallet web3 authentication and authorization to your website.",
|
|
5
5
|
"author": "Dynamic Labs, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -20,9 +20,11 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@aptos-labs/ts-sdk": "5.1.1",
|
|
22
22
|
"@aptos-labs/wallet-standard": "0.5.2",
|
|
23
|
-
"@dynamic-labs/assert-package-version": "4.
|
|
23
|
+
"@dynamic-labs/assert-package-version": "4.39.0",
|
|
24
24
|
"@wallet-standard/core": "1.1.1",
|
|
25
|
-
"@dynamic-labs/
|
|
25
|
+
"@dynamic-labs/logger": "4.39.0",
|
|
26
|
+
"@dynamic-labs/utils": "4.39.0",
|
|
27
|
+
"@dynamic-labs/wallet-connector-core": "4.39.0"
|
|
26
28
|
},
|
|
27
29
|
"peerDependencies": {}
|
|
28
30
|
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../../_virtual/_tslib.cjs');
|
|
7
|
+
var tsSdk = require('@aptos-labs/ts-sdk');
|
|
8
|
+
var logger = require('@dynamic-labs/logger');
|
|
9
|
+
var utils = require('@dynamic-labs/utils');
|
|
10
|
+
var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
|
|
11
|
+
var assertProvider = require('../../utils/assertProvider/assertProvider.cjs');
|
|
12
|
+
var invokeWalletMethod = require('../../utils/invokeWalletMethod/invokeWalletMethod.cjs');
|
|
13
|
+
var parseConnectionResult = require('../../utils/parseConnectionResult/parseConnectionResult.cjs');
|
|
14
|
+
var parseTransactionResponse = require('../../utils/parseTransactionResponse/parseTransactionResponse.cjs');
|
|
15
|
+
var AptosWallet = require('../../wallet/AptosWallet.cjs');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Abstract base class for all Aptos wallet connectors.
|
|
19
|
+
*
|
|
20
|
+
* This class provides the common functionality needed by all AIP-62 compliant
|
|
21
|
+
* Aptos wallet implementations. It handles connection management, network switching,
|
|
22
|
+
* and transaction operations using the wallet-standard exclusively.
|
|
23
|
+
*/
|
|
24
|
+
class AptosWalletConnector extends walletConnectorCore.WalletConnectorBase {
|
|
25
|
+
constructor(name, opts) {
|
|
26
|
+
super({ metadata: opts.metadata, walletBook: opts.walletBook });
|
|
27
|
+
this.name = 'Aptos';
|
|
28
|
+
this.ChainWallet = AptosWallet.AptosWallet;
|
|
29
|
+
this.connectedChain = 'APTOS';
|
|
30
|
+
this.supportedChains = ['APTOS'];
|
|
31
|
+
this.switchNetworkOnlyFromWallet = true;
|
|
32
|
+
/** Connection state */
|
|
33
|
+
this.isConnecting = false;
|
|
34
|
+
this.name = name;
|
|
35
|
+
this.logger = new logger.Logger(this.name);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Connects to the Aptos wallet.
|
|
39
|
+
*/
|
|
40
|
+
connect() {
|
|
41
|
+
return _tslib.__awaiter(this, arguments, void 0, function* ({ silent } = {}) {
|
|
42
|
+
if (this.account || this.isConnecting)
|
|
43
|
+
return;
|
|
44
|
+
this.isConnecting = true;
|
|
45
|
+
this.logger.debug('[connect] Attempting to connect');
|
|
46
|
+
try {
|
|
47
|
+
const provider = this.getProvider();
|
|
48
|
+
assertProvider.assertProvider(provider);
|
|
49
|
+
const result = yield invokeWalletMethod.invokeWalletMethod(provider, 'aptos:connect', 'connect');
|
|
50
|
+
this.account = parseConnectionResult.parseConnectionResult(result);
|
|
51
|
+
this.logger.debug('[connect] Connected successfully');
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
this.logger.error('[connect] Connection failed:', error);
|
|
55
|
+
if (!silent) {
|
|
56
|
+
throw new utils.DynamicError('Failed to connect to Aptos wallet');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
this.isConnecting = false;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Disconnects from the wallet.
|
|
66
|
+
*/
|
|
67
|
+
disconnect() {
|
|
68
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
this.logger.debug('[disconnect] Disconnecting');
|
|
70
|
+
const provider = this.getProvider();
|
|
71
|
+
if (!provider)
|
|
72
|
+
return;
|
|
73
|
+
try {
|
|
74
|
+
yield invokeWalletMethod.invokeWalletMethod(provider, 'aptos:disconnect', 'disconnect');
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// Some wallets may not support disconnect - that's okay
|
|
78
|
+
this.logger.debug('[disconnect] Disconnect not supported or failed:', error);
|
|
79
|
+
}
|
|
80
|
+
this.account = undefined;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Gets the current account information.
|
|
85
|
+
*/
|
|
86
|
+
getAccountInfo() {
|
|
87
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
return this.account;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Signs a transaction.
|
|
93
|
+
*/
|
|
94
|
+
signTransaction(transaction, asFeePayer) {
|
|
95
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
const provider = this.getProvider();
|
|
97
|
+
assertProvider.assertProvider(provider);
|
|
98
|
+
return invokeWalletMethod.invokeWalletMethod(provider, 'aptos:signTransaction', 'signTransaction', transaction, asFeePayer);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Signs an Aptos message.
|
|
103
|
+
*/
|
|
104
|
+
signAptosMessage(input) {
|
|
105
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
const provider = this.getProvider();
|
|
107
|
+
assertProvider.assertProvider(provider);
|
|
108
|
+
return invokeWalletMethod.invokeWalletMethod(provider, 'aptos:signMessage', 'signMessage', input);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Signs and submits a transaction.
|
|
113
|
+
*/
|
|
114
|
+
signAndSubmitTransaction(transaction) {
|
|
115
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
const provider = this.getProvider();
|
|
117
|
+
assertProvider.assertProvider(provider);
|
|
118
|
+
// Try direct signAndSubmit method first
|
|
119
|
+
try {
|
|
120
|
+
const response = yield invokeWalletMethod.invokeWalletMethod(provider, 'aptos:signAndSubmitTransaction', 'signAndSubmitTransaction', transaction);
|
|
121
|
+
return parseTransactionResponse.parseTransactionResponse(response);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
// If signAndSubmit not available, fall back to sign + submit
|
|
125
|
+
}
|
|
126
|
+
// Fallback: sign then submit separately
|
|
127
|
+
const signedTx = yield this.signTransaction(transaction);
|
|
128
|
+
const authenticator = 'args' in signedTx ? signedTx.args : signedTx;
|
|
129
|
+
return this.submitTransaction(authenticator);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Submits a signed transaction.
|
|
134
|
+
*/
|
|
135
|
+
submitTransaction(signedTransaction) {
|
|
136
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
const provider = this.getProvider();
|
|
138
|
+
assertProvider.assertProvider(provider);
|
|
139
|
+
return invokeWalletMethod.invokeWalletMethod(provider, 'aptos:submitTransaction', 'submitTransaction', signedTransaction);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Gets the current network information.
|
|
144
|
+
*/
|
|
145
|
+
getNetworkInfo() {
|
|
146
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
const provider = this.getProvider();
|
|
148
|
+
assertProvider.assertProvider(provider);
|
|
149
|
+
try {
|
|
150
|
+
// Try the network method first
|
|
151
|
+
return yield invokeWalletMethod.invokeWalletMethod(provider, 'aptos:network', 'network');
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
// Fallback to getNetwork method
|
|
155
|
+
try {
|
|
156
|
+
return yield invokeWalletMethod.invokeWalletMethod(provider, 'aptos:getNetwork', 'getNetwork');
|
|
157
|
+
}
|
|
158
|
+
catch (error2) {
|
|
159
|
+
this.logger.debug('[getNetworkInfo] Network info not available:', error2);
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Gets the Aptos client instance configured for the current network.
|
|
167
|
+
*/
|
|
168
|
+
getAptosClient() {
|
|
169
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
170
|
+
var _a;
|
|
171
|
+
try {
|
|
172
|
+
// Get current network from wallet
|
|
173
|
+
const networkInfo = yield this.getNetworkInfo();
|
|
174
|
+
let network = tsSdk.Network.MAINNET; // Default fallback
|
|
175
|
+
if (networkInfo) {
|
|
176
|
+
// Map network info to Aptos SDK network
|
|
177
|
+
switch ((_a = networkInfo.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) {
|
|
178
|
+
case 'mainnet':
|
|
179
|
+
network = tsSdk.Network.MAINNET;
|
|
180
|
+
break;
|
|
181
|
+
case 'testnet':
|
|
182
|
+
network = tsSdk.Network.TESTNET;
|
|
183
|
+
break;
|
|
184
|
+
case 'devnet':
|
|
185
|
+
network = tsSdk.Network.DEVNET;
|
|
186
|
+
break;
|
|
187
|
+
default:
|
|
188
|
+
// If we have a custom URL, use it
|
|
189
|
+
if (networkInfo.url) {
|
|
190
|
+
const config = new tsSdk.AptosConfig({ fullnode: networkInfo.url });
|
|
191
|
+
return new tsSdk.Aptos(config);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const config = new tsSdk.AptosConfig({ network });
|
|
196
|
+
return new tsSdk.Aptos(config);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
// If network detection fails, fallback to mainnet
|
|
200
|
+
this.logger.debug('[getAptosClient] Network detection failed, using mainnet:', error);
|
|
201
|
+
const config = new tsSdk.AptosConfig({ network: tsSdk.Network.MAINNET });
|
|
202
|
+
return new tsSdk.Aptos(config);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
exports.AptosWalletConnector = AptosWalletConnector;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { AccountAuthenticator, AnyRawTransaction } from '@aptos-labs/ts-sdk';
|
|
2
|
+
import { Aptos } from '@aptos-labs/ts-sdk';
|
|
3
|
+
import type { AccountInfo, AptosSignMessageInput, AptosSignMessageOutput, NetworkInfo, UserResponse } from '@aptos-labs/wallet-standard';
|
|
4
|
+
import { Logger } from '@dynamic-labs/logger';
|
|
5
|
+
import { type Chain, WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
|
|
6
|
+
import type { AptosWalletConnectorProps, IAptosProvider } from '../../types';
|
|
7
|
+
import { AptosWallet } from '../../wallet/AptosWallet';
|
|
8
|
+
/**
|
|
9
|
+
* Abstract base class for all Aptos wallet connectors.
|
|
10
|
+
*
|
|
11
|
+
* This class provides the common functionality needed by all AIP-62 compliant
|
|
12
|
+
* Aptos wallet implementations. It handles connection management, network switching,
|
|
13
|
+
* and transaction operations using the wallet-standard exclusively.
|
|
14
|
+
*/
|
|
15
|
+
export declare abstract class AptosWalletConnector extends WalletConnectorBase<typeof AptosWallet> {
|
|
16
|
+
name: string;
|
|
17
|
+
ChainWallet: typeof AptosWallet;
|
|
18
|
+
connectedChain: Chain;
|
|
19
|
+
supportedChains: Chain[];
|
|
20
|
+
switchNetworkOnlyFromWallet: boolean;
|
|
21
|
+
/** Current account information */
|
|
22
|
+
protected account: AccountInfo | undefined;
|
|
23
|
+
/** Logger instance */
|
|
24
|
+
logger: Logger;
|
|
25
|
+
/** Connection state */
|
|
26
|
+
protected isConnecting: boolean;
|
|
27
|
+
constructor(name: string, opts: AptosWalletConnectorProps);
|
|
28
|
+
/**
|
|
29
|
+
* Abstract method to get the wallet provider.
|
|
30
|
+
* Must be implemented by concrete connector classes.
|
|
31
|
+
*/
|
|
32
|
+
abstract getProvider(): IAptosProvider | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Connects to the Aptos wallet.
|
|
35
|
+
*/
|
|
36
|
+
connect({ silent }?: {
|
|
37
|
+
silent?: boolean;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Disconnects from the wallet.
|
|
41
|
+
*/
|
|
42
|
+
disconnect(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Gets the current account information.
|
|
45
|
+
*/
|
|
46
|
+
getAccountInfo(): Promise<AccountInfo | undefined>;
|
|
47
|
+
/**
|
|
48
|
+
* Signs a transaction.
|
|
49
|
+
*/
|
|
50
|
+
signTransaction(transaction: AnyRawTransaction, asFeePayer?: boolean): Promise<UserResponse<AccountAuthenticator> | AccountAuthenticator>;
|
|
51
|
+
/**
|
|
52
|
+
* Signs an Aptos message.
|
|
53
|
+
*/
|
|
54
|
+
signAptosMessage(input: AptosSignMessageInput): Promise<UserResponse<AptosSignMessageOutput> | AptosSignMessageOutput>;
|
|
55
|
+
/**
|
|
56
|
+
* Signs and submits a transaction.
|
|
57
|
+
*/
|
|
58
|
+
signAndSubmitTransaction(transaction: AnyRawTransaction): Promise<string>;
|
|
59
|
+
/**
|
|
60
|
+
* Submits a signed transaction.
|
|
61
|
+
*/
|
|
62
|
+
submitTransaction(signedTransaction: AccountAuthenticator): Promise<string>;
|
|
63
|
+
/**
|
|
64
|
+
* Gets the current network information.
|
|
65
|
+
*/
|
|
66
|
+
getNetworkInfo(): Promise<NetworkInfo | undefined>;
|
|
67
|
+
/**
|
|
68
|
+
* Gets the Aptos client instance configured for the current network.
|
|
69
|
+
*/
|
|
70
|
+
getAptosClient(): Promise<Aptos | undefined>;
|
|
71
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __awaiter } from '../../../_virtual/_tslib.js';
|
|
3
|
+
import { Network, AptosConfig, Aptos } from '@aptos-labs/ts-sdk';
|
|
4
|
+
import { Logger } from '@dynamic-labs/logger';
|
|
5
|
+
import { DynamicError } from '@dynamic-labs/utils';
|
|
6
|
+
import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
|
|
7
|
+
import { assertProvider } from '../../utils/assertProvider/assertProvider.js';
|
|
8
|
+
import { invokeWalletMethod } from '../../utils/invokeWalletMethod/invokeWalletMethod.js';
|
|
9
|
+
import { parseConnectionResult } from '../../utils/parseConnectionResult/parseConnectionResult.js';
|
|
10
|
+
import { parseTransactionResponse } from '../../utils/parseTransactionResponse/parseTransactionResponse.js';
|
|
11
|
+
import { AptosWallet } from '../../wallet/AptosWallet.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Abstract base class for all Aptos wallet connectors.
|
|
15
|
+
*
|
|
16
|
+
* This class provides the common functionality needed by all AIP-62 compliant
|
|
17
|
+
* Aptos wallet implementations. It handles connection management, network switching,
|
|
18
|
+
* and transaction operations using the wallet-standard exclusively.
|
|
19
|
+
*/
|
|
20
|
+
class AptosWalletConnector extends WalletConnectorBase {
|
|
21
|
+
constructor(name, opts) {
|
|
22
|
+
super({ metadata: opts.metadata, walletBook: opts.walletBook });
|
|
23
|
+
this.name = 'Aptos';
|
|
24
|
+
this.ChainWallet = AptosWallet;
|
|
25
|
+
this.connectedChain = 'APTOS';
|
|
26
|
+
this.supportedChains = ['APTOS'];
|
|
27
|
+
this.switchNetworkOnlyFromWallet = true;
|
|
28
|
+
/** Connection state */
|
|
29
|
+
this.isConnecting = false;
|
|
30
|
+
this.name = name;
|
|
31
|
+
this.logger = new Logger(this.name);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Connects to the Aptos wallet.
|
|
35
|
+
*/
|
|
36
|
+
connect() {
|
|
37
|
+
return __awaiter(this, arguments, void 0, function* ({ silent } = {}) {
|
|
38
|
+
if (this.account || this.isConnecting)
|
|
39
|
+
return;
|
|
40
|
+
this.isConnecting = true;
|
|
41
|
+
this.logger.debug('[connect] Attempting to connect');
|
|
42
|
+
try {
|
|
43
|
+
const provider = this.getProvider();
|
|
44
|
+
assertProvider(provider);
|
|
45
|
+
const result = yield invokeWalletMethod(provider, 'aptos:connect', 'connect');
|
|
46
|
+
this.account = parseConnectionResult(result);
|
|
47
|
+
this.logger.debug('[connect] Connected successfully');
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.logger.error('[connect] Connection failed:', error);
|
|
51
|
+
if (!silent) {
|
|
52
|
+
throw new DynamicError('Failed to connect to Aptos wallet');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
this.isConnecting = false;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Disconnects from the wallet.
|
|
62
|
+
*/
|
|
63
|
+
disconnect() {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
+
this.logger.debug('[disconnect] Disconnecting');
|
|
66
|
+
const provider = this.getProvider();
|
|
67
|
+
if (!provider)
|
|
68
|
+
return;
|
|
69
|
+
try {
|
|
70
|
+
yield invokeWalletMethod(provider, 'aptos:disconnect', 'disconnect');
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
// Some wallets may not support disconnect - that's okay
|
|
74
|
+
this.logger.debug('[disconnect] Disconnect not supported or failed:', error);
|
|
75
|
+
}
|
|
76
|
+
this.account = undefined;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Gets the current account information.
|
|
81
|
+
*/
|
|
82
|
+
getAccountInfo() {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
return this.account;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Signs a transaction.
|
|
89
|
+
*/
|
|
90
|
+
signTransaction(transaction, asFeePayer) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
const provider = this.getProvider();
|
|
93
|
+
assertProvider(provider);
|
|
94
|
+
return invokeWalletMethod(provider, 'aptos:signTransaction', 'signTransaction', transaction, asFeePayer);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Signs an Aptos message.
|
|
99
|
+
*/
|
|
100
|
+
signAptosMessage(input) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
const provider = this.getProvider();
|
|
103
|
+
assertProvider(provider);
|
|
104
|
+
return invokeWalletMethod(provider, 'aptos:signMessage', 'signMessage', input);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Signs and submits a transaction.
|
|
109
|
+
*/
|
|
110
|
+
signAndSubmitTransaction(transaction) {
|
|
111
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
112
|
+
const provider = this.getProvider();
|
|
113
|
+
assertProvider(provider);
|
|
114
|
+
// Try direct signAndSubmit method first
|
|
115
|
+
try {
|
|
116
|
+
const response = yield invokeWalletMethod(provider, 'aptos:signAndSubmitTransaction', 'signAndSubmitTransaction', transaction);
|
|
117
|
+
return parseTransactionResponse(response);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
// If signAndSubmit not available, fall back to sign + submit
|
|
121
|
+
}
|
|
122
|
+
// Fallback: sign then submit separately
|
|
123
|
+
const signedTx = yield this.signTransaction(transaction);
|
|
124
|
+
const authenticator = 'args' in signedTx ? signedTx.args : signedTx;
|
|
125
|
+
return this.submitTransaction(authenticator);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Submits a signed transaction.
|
|
130
|
+
*/
|
|
131
|
+
submitTransaction(signedTransaction) {
|
|
132
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
const provider = this.getProvider();
|
|
134
|
+
assertProvider(provider);
|
|
135
|
+
return invokeWalletMethod(provider, 'aptos:submitTransaction', 'submitTransaction', signedTransaction);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Gets the current network information.
|
|
140
|
+
*/
|
|
141
|
+
getNetworkInfo() {
|
|
142
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
143
|
+
const provider = this.getProvider();
|
|
144
|
+
assertProvider(provider);
|
|
145
|
+
try {
|
|
146
|
+
// Try the network method first
|
|
147
|
+
return yield invokeWalletMethod(provider, 'aptos:network', 'network');
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
// Fallback to getNetwork method
|
|
151
|
+
try {
|
|
152
|
+
return yield invokeWalletMethod(provider, 'aptos:getNetwork', 'getNetwork');
|
|
153
|
+
}
|
|
154
|
+
catch (error2) {
|
|
155
|
+
this.logger.debug('[getNetworkInfo] Network info not available:', error2);
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Gets the Aptos client instance configured for the current network.
|
|
163
|
+
*/
|
|
164
|
+
getAptosClient() {
|
|
165
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
166
|
+
var _a;
|
|
167
|
+
try {
|
|
168
|
+
// Get current network from wallet
|
|
169
|
+
const networkInfo = yield this.getNetworkInfo();
|
|
170
|
+
let network = Network.MAINNET; // Default fallback
|
|
171
|
+
if (networkInfo) {
|
|
172
|
+
// Map network info to Aptos SDK network
|
|
173
|
+
switch ((_a = networkInfo.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) {
|
|
174
|
+
case 'mainnet':
|
|
175
|
+
network = Network.MAINNET;
|
|
176
|
+
break;
|
|
177
|
+
case 'testnet':
|
|
178
|
+
network = Network.TESTNET;
|
|
179
|
+
break;
|
|
180
|
+
case 'devnet':
|
|
181
|
+
network = Network.DEVNET;
|
|
182
|
+
break;
|
|
183
|
+
default:
|
|
184
|
+
// If we have a custom URL, use it
|
|
185
|
+
if (networkInfo.url) {
|
|
186
|
+
const config = new AptosConfig({ fullnode: networkInfo.url });
|
|
187
|
+
return new Aptos(config);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const config = new AptosConfig({ network });
|
|
192
|
+
return new Aptos(config);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
// If network detection fails, fallback to mainnet
|
|
196
|
+
this.logger.debug('[getAptosClient] Network detection failed, using mainnet:', error);
|
|
197
|
+
const config = new AptosConfig({ network: Network.MAINNET });
|
|
198
|
+
return new Aptos(config);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export { AptosWalletConnector };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AptosWalletConnector } from './AptosWalletConnector';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
// These features are absolutely required for wallets to function in the Aptos ecosystem.
|
|
7
|
+
// Eventually, as wallets have more consistent support of features, we may want to extend this list.
|
|
8
|
+
const REQUIRED_FEATURES = [
|
|
9
|
+
'aptos:account',
|
|
10
|
+
'aptos:connect',
|
|
11
|
+
'aptos:disconnect',
|
|
12
|
+
'aptos:network',
|
|
13
|
+
'aptos:onAccountChange',
|
|
14
|
+
'aptos:onNetworkChange',
|
|
15
|
+
'aptos:signMessage',
|
|
16
|
+
'aptos:signTransaction',
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
exports.REQUIRED_FEATURES = REQUIRED_FEATURES;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
// These features are absolutely required for wallets to function in the Aptos ecosystem.
|
|
3
|
+
// Eventually, as wallets have more consistent support of features, we may want to extend this list.
|
|
4
|
+
const REQUIRED_FEATURES = [
|
|
5
|
+
'aptos:account',
|
|
6
|
+
'aptos:connect',
|
|
7
|
+
'aptos:disconnect',
|
|
8
|
+
'aptos:network',
|
|
9
|
+
'aptos:onAccountChange',
|
|
10
|
+
'aptos:onNetworkChange',
|
|
11
|
+
'aptos:signMessage',
|
|
12
|
+
'aptos:signTransaction',
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
export { REQUIRED_FEATURES };
|