@dynamic-labs/embedded-wallet-solana 4.0.0-alpha.1 → 4.0.0-alpha.10

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 CHANGED
@@ -1,4 +1,120 @@
1
1
 
2
+ ## [4.0.0-alpha.10](https://github.com/dynamic-labs/dynamic-auth/compare/v4.0.0-alpha.9...v4.0.0-alpha.10) (2024-10-15)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * epicgames key name without dash ([#7119](https://github.com/dynamic-labs/dynamic-auth/issues/7119)) ([7388d6c](https://github.com/dynamic-labs/dynamic-auth/commit/7388d6cf98f6ee92e12003549dfd1ad81951119e))
8
+
9
+ ## [4.0.0-alpha.9](https://github.com/dynamic-labs/dynamic-auth/compare/v4.0.0-alpha.8...v4.0.0-alpha.9) (2024-10-11)
10
+
11
+
12
+ ### Features
13
+
14
+ * add support for fordefi wallet ([#7109](https://github.com/dynamic-labs/dynamic-auth/issues/7109)) ([1adb6b1](https://github.com/dynamic-labs/dynamic-auth/commit/1adb6b15b7f8e9156207ac7addf4368d27c1e371))
15
+ * support ability to define additional oauth scopes ([#7105](https://github.com/dynamic-labs/dynamic-auth/issues/7105)) ([b303203](https://github.com/dynamic-labs/dynamic-auth/commit/b303203e8041c0cbf5f8968df0d3cde04ed1b22a))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * add eip6963 for exodus evm ([#7094](https://github.com/dynamic-labs/dynamic-auth/issues/7094)) ([c1ec5ef](https://github.com/dynamic-labs/dynamic-auth/commit/c1ec5ef4b6a531c563be4b690aa5f2bd4e7e6a16))
21
+
22
+ ## [4.0.0-alpha.8](https://github.com/dynamic-labs/dynamic-auth/compare/v4.0.0-alpha.7...v4.0.0-alpha.8) (2024-10-07)
23
+
24
+
25
+ ### Features
26
+
27
+ * add support for dynamic event callbacks in rn ([#6997](https://github.com/dynamic-labs/dynamic-auth/issues/6997)) ([f9ac402](https://github.com/dynamic-labs/dynamic-auth/commit/f9ac40259d9168dfe69dafd5fd44478ba0e69505))
28
+ * add support for dynamic handlers in rn ([#7032](https://github.com/dynamic-labs/dynamic-auth/issues/7032)) ([f61f926](https://github.com/dynamic-labs/dynamic-auth/commit/f61f92666b6df8483dde2c47304fd4fb02690f7d))
29
+ * Support for multi-chain AA ([#6829](https://github.com/dynamic-labs/dynamic-auth/issues/6829)) ([b4a0c0a](https://github.com/dynamic-labs/dynamic-auth/commit/b4a0c0a4de48231a3748826600407c25abf6894d))
30
+
31
+
32
+ ### Bug Fixes
33
+
34
+ * persist isHardwareWalletEnabled on wallet connector ([#7025](https://github.com/dynamic-labs/dynamic-auth/issues/7025)) ([#7034](https://github.com/dynamic-labs/dynamic-auth/issues/7034)) ([4bfc301](https://github.com/dynamic-labs/dynamic-auth/commit/4bfc301d891f10db8c0bd31e5164c489a882c5c3))
35
+
36
+ ## [4.0.0-alpha.7](https://github.com/dynamic-labs/dynamic-auth/compare/v4.0.0-alpha.6...v4.0.0-alpha.7) (2024-10-03)
37
+
38
+
39
+ ### Features
40
+
41
+ * add account abstraction module to client ([#7002](https://github.com/dynamic-labs/dynamic-auth/issues/7002)) ([2f06975](https://github.com/dynamic-labs/dynamic-auth/commit/2f06975083dfa9d40537ef4a99b414eda1a68e01))
42
+ * add support for wallet events in rn ([#7061](https://github.com/dynamic-labs/dynamic-auth/issues/7061)) ([c7c4ce5](https://github.com/dynamic-labs/dynamic-auth/commit/c7c4ce51f27a2b84a1710c120d7006a00920c1e7))
43
+ * add zerodev extension for react native ([#7028](https://github.com/dynamic-labs/dynamic-auth/issues/7028)) ([858b8a8](https://github.com/dynamic-labs/dynamic-auth/commit/858b8a851cfa0cddc8e4559541b03992cf5ccdfc))
44
+
45
+
46
+ ### Bug Fixes
47
+
48
+ * do not modify sol tx blockhash as tx could have been signed already ([#7050](https://github.com/dynamic-labs/dynamic-auth/issues/7050)) ([770edb4](https://github.com/dynamic-labs/dynamic-auth/commit/770edb49ddc231b75fb45a9f6d563f22e5185df2))
49
+ * ensure the correct auth mode is used on social redirect ([#7047](https://github.com/dynamic-labs/dynamic-auth/issues/7047)) ([7c27172](https://github.com/dynamic-labs/dynamic-auth/commit/7c271721d5ddf19e3fd1bf56ddb1d49e0e2bca07))
50
+ * prevent react native message timeout before sdk is ready ([#7051](https://github.com/dynamic-labs/dynamic-auth/issues/7051)) ([6421237](https://github.com/dynamic-labs/dynamic-auth/commit/6421237d677d788b824d53432c1a75b9d571aa78))
51
+ * update version error text ([#7054](https://github.com/dynamic-labs/dynamic-auth/issues/7054)) ([713dacb](https://github.com/dynamic-labs/dynamic-auth/commit/713dacb79c2513323c2e6840d7418716011c2dcd))
52
+ * use project settings sdk network for send flow ([#7011](https://github.com/dynamic-labs/dynamic-auth/issues/7011)) ([983e796](https://github.com/dynamic-labs/dynamic-auth/commit/983e79632762f71ee0502c92057a32ea985ae19c))
53
+
54
+ ## [4.0.0-alpha.6](https://github.com/dynamic-labs/dynamic-auth/compare/v4.0.0-alpha.5...v4.0.0-alpha.6) (2024-10-01)
55
+
56
+
57
+ ### ⚠ BREAKING CHANGES
58
+
59
+ * remove support to magic ([#7033](https://github.com/dynamic-labs/dynamic-auth/issues/7033)) ([0fdc41f](https://github.com/dynamic-labs/dynamic-auth/commit/0fdc41f05f87b32f56b73db068f984f18bdf69a0))
60
+
61
+ ### Features
62
+
63
+ * global connectivity disconnect ([#7008](https://github.com/dynamic-labs/dynamic-auth/issues/7008)) ([80d705b](https://github.com/dynamic-labs/dynamic-auth/commit/80d705ba252aa3b01cbf4861507fed00e460215f))
64
+
65
+
66
+ ### Bug Fixes
67
+
68
+ * add popper context to send balance ([#7016](https://github.com/dynamic-labs/dynamic-auth/issues/7016)) ([73aa6f1](https://github.com/dynamic-labs/dynamic-auth/commit/73aa6f122afe0db660ebb654f3e018ae7bf445c5))
69
+ * add retry to useConnectWithOtp ([#7012](https://github.com/dynamic-labs/dynamic-auth/issues/7012)) ([d551d72](https://github.com/dynamic-labs/dynamic-auth/commit/d551d72a463f8a03964858b30ec174d41985a7b1))
70
+ * don't re-fetch wallet address on network change ([#7019](https://github.com/dynamic-labs/dynamic-auth/issues/7019)) ([4e7900c](https://github.com/dynamic-labs/dynamic-auth/commit/4e7900cc24b3abda736bc81466eda7512cf7fc61))
71
+ * fix sign message with solana wallet standard provider ([#7014](https://github.com/dynamic-labs/dynamic-auth/issues/7014)) ([ffaf972](https://github.com/dynamic-labs/dynamic-auth/commit/ffaf972e8b190b0b8cd0103e0ef67bfdee6c8f7c))
72
+ * update wallet reference when user switches wallet in connect-only ([#7030](https://github.com/dynamic-labs/dynamic-auth/issues/7030)) ([75d9aa6](https://github.com/dynamic-labs/dynamic-auth/commit/75d9aa66f63fc5536caeff12d8b860c0ba86106f))
73
+
74
+
75
+ ## [4.0.0-alpha.5](https://github.com/dynamic-labs/DynamicAuth/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2024-09-25)
76
+
77
+
78
+ ### Features
79
+
80
+ * add isInstalledOnBrowser prop to wallet options in useWalletOptions ([#6976](https://github.com/dynamic-labs/DynamicAuth/issues/6976)) ([0fda409](https://github.com/dynamic-labs/DynamicAuth/commit/0fda409b293c83d73869d791c3d38ac421dcdecb))
81
+
82
+
83
+ ### Bug Fixes
84
+
85
+ * **client:** return user profile when using sign in with external jwt ([#7004](https://github.com/dynamic-labs/DynamicAuth/issues/7004)) ([927cfb6](https://github.com/dynamic-labs/DynamicAuth/commit/927cfb69f3dd7f8b00e3f0f975277a84c99c830b))
86
+ * react-native-extension to include esm ([#6965](https://github.com/dynamic-labs/DynamicAuth/issues/6965)) ([336825b](https://github.com/dynamic-labs/DynamicAuth/commit/336825b50142002bbc67c6f8850bd63030bf384b))
87
+
88
+ ## [4.0.0-alpha.4](https://github.com/dynamic-labs/DynamicAuth/compare/v4.0.0-alpha.3...v4.0.0-alpha.4) (2024-09-23)
89
+
90
+
91
+ ### Bug Fixes
92
+
93
+ * issue where builtin stream module was a dependency ([#6968](https://github.com/dynamic-labs/DynamicAuth/issues/6968)) ([0661129](https://github.com/dynamic-labs/DynamicAuth/commit/0661129920ba70ebbcd4d17ee5aa988c51d1b477))
94
+ * update in memory secure storage ([#6955](https://github.com/dynamic-labs/DynamicAuth/issues/6955)) ([697fc20](https://github.com/dynamic-labs/DynamicAuth/commit/697fc20740b243fa31ecf06e8b2ed9d09932a544))
95
+
96
+ ## [4.0.0-alpha.3](https://github.com/dynamic-labs/DynamicAuth/compare/v4.0.0-alpha.2...v4.0.0-alpha.3) (2024-09-20)
97
+
98
+
99
+ ### Features
100
+
101
+ * developers provide global connectivity appkit project id ([#6941](https://github.com/dynamic-labs/DynamicAuth/issues/6941)) ([83760ea](https://github.com/dynamic-labs/DynamicAuth/commit/83760ea57591685b12caee945f173f6a7f9312d1))
102
+
103
+
104
+ ### Bug Fixes
105
+
106
+ * don't try to set up event listeners if wallet provider doesn't support it ([#6943](https://github.com/dynamic-labs/DynamicAuth/issues/6943)) ([439f1bb](https://github.com/dynamic-labs/DynamicAuth/commit/439f1bbb3c765959756cfc6eeb8429e4018e0379))
107
+ * dont verify all signatures for solana embedded multisig tx ([#6953](https://github.com/dynamic-labs/DynamicAuth/issues/6953)) ([7a7973e](https://github.com/dynamic-labs/DynamicAuth/commit/7a7973e05f0960421b348a55c6a00c9fd873b0b7))
108
+
109
+ ## [4.0.0-alpha.2](https://github.com/dynamic-labs/DynamicAuth/compare/v4.0.0-alpha.1...v4.0.0-alpha.2) (2024-09-18)
110
+
111
+
112
+ ### Features
113
+
114
+ * add iconVariant prop to DynamicBridgeWidget ([#6915](https://github.com/dynamic-labs/DynamicAuth/issues/6915)) ([8aa0f3d](https://github.com/dynamic-labs/DynamicAuth/commit/8aa0f3d8d8c41c7b5c4796106f611f208010cb6d))
115
+ * allow to create extra embedded wallets in react-native ([#6923](https://github.com/dynamic-labs/DynamicAuth/issues/6923)) ([ba22f7b](https://github.com/dynamic-labs/DynamicAuth/commit/ba22f7bcf41a444a4df0aff9b6aec257457e9402))
116
+ * **client:** add hide method for auth and userProfile ui modules ([#6928](https://github.com/dynamic-labs/DynamicAuth/issues/6928)) ([a11a4a5](https://github.com/dynamic-labs/DynamicAuth/commit/a11a4a5d6e25ce2a916ebd52f0b341020dc1a7e5))
117
+
2
118
  ## [4.0.0-alpha.1](https://github.com/dynamic-labs/DynamicAuth/compare/v4.0.0-alpha.0...v4.0.0-alpha.1) (2024-09-17)
3
119
 
4
120
 
package/package.cjs CHANGED
@@ -3,12 +3,12 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.0.0-alpha.1";
6
+ var version = "4.0.0-alpha.10";
7
7
  var dependencies = {
8
- "@dynamic-labs/sdk-api-core": "0.0.530",
9
- "@dynamic-labs/utils": "4.0.0-alpha.1",
10
- "@dynamic-labs/logger": "4.0.0-alpha.1",
11
- "@dynamic-labs/types": "4.0.0-alpha.1",
8
+ "@dynamic-labs/sdk-api-core": "0.0.545",
9
+ "@dynamic-labs/utils": "4.0.0-alpha.10",
10
+ "@dynamic-labs/logger": "4.0.0-alpha.10",
11
+ "@dynamic-labs/types": "4.0.0-alpha.10",
12
12
  eventemitter3: "5.0.1",
13
13
  "@solana/spl-token": "0.4.6",
14
14
  "@solana/web3.js": "1.92.1",
package/package.js CHANGED
@@ -1,10 +1,10 @@
1
1
  'use client'
2
- var version = "4.0.0-alpha.1";
2
+ var version = "4.0.0-alpha.10";
3
3
  var dependencies = {
4
- "@dynamic-labs/sdk-api-core": "0.0.530",
5
- "@dynamic-labs/utils": "4.0.0-alpha.1",
6
- "@dynamic-labs/logger": "4.0.0-alpha.1",
7
- "@dynamic-labs/types": "4.0.0-alpha.1",
4
+ "@dynamic-labs/sdk-api-core": "0.0.545",
5
+ "@dynamic-labs/utils": "4.0.0-alpha.10",
6
+ "@dynamic-labs/logger": "4.0.0-alpha.10",
7
+ "@dynamic-labs/types": "4.0.0-alpha.10",
8
8
  eventemitter3: "5.0.1",
9
9
  "@solana/spl-token": "0.4.6",
10
10
  "@solana/web3.js": "1.92.1",
package/package.json CHANGED
@@ -1,16 +1,7 @@
1
1
  {
2
2
  "name": "@dynamic-labs/embedded-wallet-solana",
3
- "version": "4.0.0-alpha.1",
4
- "repository": {
5
- "type": "git",
6
- "url": "git+https://github.com/dynamic-labs/dynamic-auth.git",
7
- "directory": "packages/embedded-wallet-solana"
8
- },
3
+ "version": "4.0.0-alpha.10",
9
4
  "description": "A React SDK for implementing wallet web3 authentication and authorization to your website.",
10
- "bugs": {
11
- "url": "https://github.com/dynamic-labs/DynamicAuth/issues"
12
- },
13
- "homepage": "https://github.com/dynamic-labs/DynamicAuth#readme",
14
5
  "author": "Dynamic Labs, Inc.",
15
6
  "license": "MIT",
16
7
  "main": "./src/index.cjs",
@@ -25,11 +16,12 @@
25
16
  },
26
17
  "./package.json": "./package.json"
27
18
  },
19
+ "homepage": "https://www.dynamic.xyz/",
28
20
  "dependencies": {
29
- "@dynamic-labs/sdk-api-core": "0.0.530",
30
- "@dynamic-labs/utils": "4.0.0-alpha.1",
31
- "@dynamic-labs/logger": "4.0.0-alpha.1",
32
- "@dynamic-labs/types": "4.0.0-alpha.1",
21
+ "@dynamic-labs/sdk-api-core": "0.0.545",
22
+ "@dynamic-labs/utils": "4.0.0-alpha.10",
23
+ "@dynamic-labs/logger": "4.0.0-alpha.10",
24
+ "@dynamic-labs/types": "4.0.0-alpha.10",
33
25
  "eventemitter3": "5.0.1",
34
26
  "@solana/spl-token": "0.4.6",
35
27
  "@solana/web3.js": "1.92.1",
@@ -37,12 +29,13 @@
37
29
  "@turnkey/iframe-stamper": "2.0.0",
38
30
  "@turnkey/solana": "0.3.9",
39
31
  "@turnkey/webauthn-stamper": "0.5.0",
40
- "@dynamic-labs/embedded-wallet": "4.0.0-alpha.1",
41
- "@dynamic-labs/rpc-providers": "4.0.0-alpha.1",
42
- "@dynamic-labs/solana-core": "4.0.0-alpha.1",
43
- "@dynamic-labs/wallet-book": "4.0.0-alpha.1",
44
- "@dynamic-labs/wallet-connector-core": "4.0.0-alpha.1",
45
- "@dynamic-labs/webauthn": "4.0.0-alpha.1",
32
+ "@dynamic-labs/assert-package-version": "4.0.0-alpha.10",
33
+ "@dynamic-labs/embedded-wallet": "4.0.0-alpha.10",
34
+ "@dynamic-labs/rpc-providers": "4.0.0-alpha.10",
35
+ "@dynamic-labs/solana-core": "4.0.0-alpha.10",
36
+ "@dynamic-labs/wallet-book": "4.0.0-alpha.10",
37
+ "@dynamic-labs/wallet-connector-core": "4.0.0-alpha.10",
38
+ "@dynamic-labs/webauthn": "4.0.0-alpha.10",
46
39
  "react-dom": "18.2.0",
47
40
  "viem": "2.9.25"
48
41
  },
package/src/index.cjs CHANGED
@@ -3,8 +3,10 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
+ var assertPackageVersion = require('@dynamic-labs/assert-package-version');
7
+ var _package = require('../package.cjs');
6
8
  var TurnkeySolanaWalletConnectors = require('./TurnkeySolanaWalletConnectors.cjs');
7
9
 
8
-
10
+ assertPackageVersion.assertPackageVersion('@dynamic-labs/embedded-wallet-solana', _package.version);
9
11
 
10
12
  exports.TurnkeySolanaWalletConnectors = TurnkeySolanaWalletConnectors.TurnkeySolanaWalletConnectors;
package/src/index.js CHANGED
@@ -1,2 +1,6 @@
1
1
  'use client'
2
+ import { assertPackageVersion } from '@dynamic-labs/assert-package-version';
3
+ import { version } from '../package.js';
2
4
  export { TurnkeySolanaWalletConnectors } from './TurnkeySolanaWalletConnectors.js';
5
+
6
+ assertPackageVersion('@dynamic-labs/embedded-wallet-solana', version);
@@ -290,22 +290,11 @@ class TurnkeySolanaWalletConnector extends embeddedWallet.TurnkeyWalletConnector
290
290
  }
291
291
  internalSignAndSendTransaction(transaction, options) {
292
292
  return _tslib.__awaiter(this, void 0, void 0, function* () {
293
- var _a;
294
293
  if (!this.turnkeyAddress)
295
294
  throw new utils.DynamicError('Solana wallet not found');
296
295
  const currentConnection = this.getConnection('confirmed');
297
- const blockhash = yield currentConnection.getLatestBlockhash();
298
- if ('version' in transaction) {
299
- transaction.message.recentBlockhash =
300
- blockhash.blockhash;
301
- }
302
- else {
303
- transaction.recentBlockhash = blockhash.blockhash;
304
- transaction.feePayer =
305
- (_a = transaction.feePayer) !== null && _a !== void 0 ? _a : new web3_js.PublicKey(this.turnkeyAddress);
306
- }
307
296
  const signedTransaction = yield this.signTransaction(transaction);
308
- const signature = yield currentConnection.sendRawTransaction(Buffer.from(signedTransaction.serialize()), options);
297
+ const signature = yield currentConnection.sendRawTransaction(signedTransaction.serialize(), options);
309
298
  // listen for tx confirmation until 60 seconds, which is ~150 blocks expiration
310
299
  return new Promise((resolve, reject) => {
311
300
  const timeout = setTimeout(() => {
@@ -329,8 +318,16 @@ class TurnkeySolanaWalletConnector extends embeddedWallet.TurnkeyWalletConnector
329
318
  if (!this.turnkeyAddress)
330
319
  throw new utils.DynamicError('Solana wallet not found');
331
320
  let optimizedTransaction = transaction;
321
+ let alreadySigned = false;
322
+ if ('version' in transaction) {
323
+ alreadySigned = transaction.signatures.some((sig) => !sig.every((byte) => byte === 0));
324
+ }
325
+ else {
326
+ alreadySigned = transaction.signatures.some((sig) => sig.signature);
327
+ }
332
328
  try {
333
- if ((yield this.getNetwork()) === 'mainnet') {
329
+ // we cannot optimize partially signed transactions as once a tx is modified the signatures are no longer valid
330
+ if ((yield this.getNetwork()) === 'mainnet' && !alreadySigned) {
334
331
  optimizedTransaction = (yield api.optimizeSolanaTransaction(this.getEnvId(), transaction, (_a = this.turnkeyAddress) !== null && _a !== void 0 ? _a : ''));
335
332
  }
336
333
  }
@@ -286,22 +286,11 @@ class TurnkeySolanaWalletConnector extends TurnkeyWalletConnectorBase {
286
286
  }
287
287
  internalSignAndSendTransaction(transaction, options) {
288
288
  return __awaiter(this, void 0, void 0, function* () {
289
- var _a;
290
289
  if (!this.turnkeyAddress)
291
290
  throw new DynamicError('Solana wallet not found');
292
291
  const currentConnection = this.getConnection('confirmed');
293
- const blockhash = yield currentConnection.getLatestBlockhash();
294
- if ('version' in transaction) {
295
- transaction.message.recentBlockhash =
296
- blockhash.blockhash;
297
- }
298
- else {
299
- transaction.recentBlockhash = blockhash.blockhash;
300
- transaction.feePayer =
301
- (_a = transaction.feePayer) !== null && _a !== void 0 ? _a : new PublicKey(this.turnkeyAddress);
302
- }
303
292
  const signedTransaction = yield this.signTransaction(transaction);
304
- const signature = yield currentConnection.sendRawTransaction(Buffer.from(signedTransaction.serialize()), options);
293
+ const signature = yield currentConnection.sendRawTransaction(signedTransaction.serialize(), options);
305
294
  // listen for tx confirmation until 60 seconds, which is ~150 blocks expiration
306
295
  return new Promise((resolve, reject) => {
307
296
  const timeout = setTimeout(() => {
@@ -325,8 +314,16 @@ class TurnkeySolanaWalletConnector extends TurnkeyWalletConnectorBase {
325
314
  if (!this.turnkeyAddress)
326
315
  throw new DynamicError('Solana wallet not found');
327
316
  let optimizedTransaction = transaction;
317
+ let alreadySigned = false;
318
+ if ('version' in transaction) {
319
+ alreadySigned = transaction.signatures.some((sig) => !sig.every((byte) => byte === 0));
320
+ }
321
+ else {
322
+ alreadySigned = transaction.signatures.some((sig) => sig.signature);
323
+ }
328
324
  try {
329
- if ((yield this.getNetwork()) === 'mainnet') {
325
+ // we cannot optimize partially signed transactions as once a tx is modified the signatures are no longer valid
326
+ if ((yield this.getNetwork()) === 'mainnet' && !alreadySigned) {
330
327
  optimizedTransaction = (yield optimizeSolanaTransaction(this.getEnvId(), transaction, (_a = this.turnkeyAddress) !== null && _a !== void 0 ? _a : ''));
331
328
  }
332
329
  }
@@ -10,16 +10,27 @@ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
10
10
  var utils = require('@dynamic-labs/utils');
11
11
 
12
12
  const getTotalSolanaSpend = (transaction, connection, thisAddress) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
13
- var _a, _b, _c, _d, _e, _f;
13
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
14
14
  let simulation;
15
+ let feePayer;
15
16
  if ('version' in transaction) {
17
+ [feePayer] = transaction.message.staticAccountKeys;
16
18
  simulation = yield connection.simulateTransaction(transaction, {
17
- accounts: { addresses: [thisAddress], encoding: 'base64' },
19
+ accounts: {
20
+ addresses: feePayer.toBase58() && feePayer.toBase58() !== thisAddress
21
+ ? [feePayer.toBase58(), thisAddress]
22
+ : [thisAddress],
23
+ encoding: 'base64',
24
+ },
18
25
  replaceRecentBlockhash: true,
19
26
  });
20
27
  }
21
28
  else {
22
- simulation = yield connection.simulateTransaction(transaction, undefined, [new web3_js.PublicKey(thisAddress)]);
29
+ feePayer =
30
+ transaction.feePayer || transaction.instructions[0].keys[0].pubkey;
31
+ simulation = yield connection.simulateTransaction(transaction, undefined, feePayer.toBase58() && feePayer.toBase58() !== thisAddress
32
+ ? [feePayer, new web3_js.PublicKey(thisAddress)]
33
+ : [new web3_js.PublicKey(thisAddress)]);
23
34
  }
24
35
  const previousBalance = yield connection.getBalance(new web3_js.PublicKey(thisAddress));
25
36
  if (!((_c = (_b = (_a = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.lamports)) {
@@ -43,11 +54,14 @@ const getTotalSolanaSpend = (transaction, connection, thisAddress) => _tslib.__a
43
54
  }
44
55
  return undefined;
45
56
  }
46
- const totalSolTransfer = previousBalance - ((_f = (_e = (_d = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.lamports);
57
+ // the last account will be the embedded wallet,
58
+ // if there are two addresses the first will be gas-sponsoring so we dont want to calculate sol for that
59
+ const totalSolTransfer = previousBalance -
60
+ ((_g = (_f = (_e = (_d = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e[1]) === null || _f === void 0 ? void 0 : _f.lamports) !== null && _g !== void 0 ? _g : (_k = (_j = (_h = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _h === void 0 ? void 0 : _h.accounts) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.lamports);
47
61
  return BigInt(totalSolTransfer);
48
62
  });
49
63
  const decodeTransaction = (transaction, connection, thisAddress) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
50
- var _g;
64
+ var _l;
51
65
  if (!transaction) {
52
66
  throw new utils.DynamicError('Transaction is required');
53
67
  }
@@ -72,7 +86,7 @@ const decodeTransaction = (transaction, connection, thisAddress) => _tslib.__awa
72
86
  }
73
87
  }
74
88
  else if (!transaction.instructions) {
75
- decodedInstructions = (_g = web3_js.Transaction.from(Buffer.from(transaction.serialize()))) === null || _g === void 0 ? void 0 : _g.instructions;
89
+ decodedInstructions = (_l = web3_js.Transaction.from(Buffer.from(transaction.serialize()))) === null || _l === void 0 ? void 0 : _l.instructions;
76
90
  }
77
91
  else {
78
92
  decodedInstructions = transaction.instructions;
@@ -100,7 +114,7 @@ const decodeTransaction = (transaction, connection, thisAddress) => _tslib.__awa
100
114
  }
101
115
  // SPL transfers
102
116
  let splTransfers = yield Promise.all(decodedInstructions.map((instruction) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
103
- var _h, _j, _k, _l, _m, _o, _p;
117
+ var _m, _o, _p, _q, _r, _s, _t;
104
118
  if (instruction.programId.equals(splToken.TOKEN_PROGRAM_ID)) {
105
119
  const decodedTokenInstruction = splToken.decodeTransferInstructionUnchecked(instruction);
106
120
  const { source, destination } = decodedTokenInstruction.keys;
@@ -114,9 +128,9 @@ const decodeTransaction = (transaction, connection, thisAddress) => _tslib.__awa
114
128
  }
115
129
  // Pure SPL transfers, get the address from the destination token account to display to user
116
130
  const destinationAccountInfo = yield connection.getParsedAccountInfo(destination.pubkey);
117
- const isTokenAccount = ((_k = (_j = (_h = destinationAccountInfo.value) === null || _h === void 0 ? void 0 : _h.data) === null || _j === void 0 ? void 0 : _j.parsed) === null || _k === void 0 ? void 0 : _k.type) === 'account';
131
+ const isTokenAccount = ((_p = (_o = (_m = destinationAccountInfo.value) === null || _m === void 0 ? void 0 : _m.data) === null || _o === void 0 ? void 0 : _o.parsed) === null || _p === void 0 ? void 0 : _p.type) === 'account';
118
132
  const destinationOwner = isTokenAccount
119
- ? (_p = (_o = (_m = (_l = destinationAccountInfo.value) === null || _l === void 0 ? void 0 : _l.data) === null || _m === void 0 ? void 0 : _m.parsed) === null || _o === void 0 ? void 0 : _o.info) === null || _p === void 0 ? void 0 : _p.owner
133
+ ? (_t = (_s = (_r = (_q = destinationAccountInfo.value) === null || _q === void 0 ? void 0 : _q.data) === null || _r === void 0 ? void 0 : _r.parsed) === null || _s === void 0 ? void 0 : _s.info) === null || _t === void 0 ? void 0 : _t.owner
120
134
  : null;
121
135
  const toAddress = destinationOwner
122
136
  ? destinationOwner
@@ -6,16 +6,27 @@ import { logger } from '@dynamic-labs/wallet-connector-core';
6
6
  import { DynamicError } from '@dynamic-labs/utils';
7
7
 
8
8
  const getTotalSolanaSpend = (transaction, connection, thisAddress) => __awaiter(void 0, void 0, void 0, function* () {
9
- var _a, _b, _c, _d, _e, _f;
9
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
10
10
  let simulation;
11
+ let feePayer;
11
12
  if ('version' in transaction) {
13
+ [feePayer] = transaction.message.staticAccountKeys;
12
14
  simulation = yield connection.simulateTransaction(transaction, {
13
- accounts: { addresses: [thisAddress], encoding: 'base64' },
15
+ accounts: {
16
+ addresses: feePayer.toBase58() && feePayer.toBase58() !== thisAddress
17
+ ? [feePayer.toBase58(), thisAddress]
18
+ : [thisAddress],
19
+ encoding: 'base64',
20
+ },
14
21
  replaceRecentBlockhash: true,
15
22
  });
16
23
  }
17
24
  else {
18
- simulation = yield connection.simulateTransaction(transaction, undefined, [new PublicKey(thisAddress)]);
25
+ feePayer =
26
+ transaction.feePayer || transaction.instructions[0].keys[0].pubkey;
27
+ simulation = yield connection.simulateTransaction(transaction, undefined, feePayer.toBase58() && feePayer.toBase58() !== thisAddress
28
+ ? [feePayer, new PublicKey(thisAddress)]
29
+ : [new PublicKey(thisAddress)]);
19
30
  }
20
31
  const previousBalance = yield connection.getBalance(new PublicKey(thisAddress));
21
32
  if (!((_c = (_b = (_a = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.lamports)) {
@@ -39,11 +50,14 @@ const getTotalSolanaSpend = (transaction, connection, thisAddress) => __awaiter(
39
50
  }
40
51
  return undefined;
41
52
  }
42
- const totalSolTransfer = previousBalance - ((_f = (_e = (_d = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.lamports);
53
+ // the last account will be the embedded wallet,
54
+ // if there are two addresses the first will be gas-sponsoring so we dont want to calculate sol for that
55
+ const totalSolTransfer = previousBalance -
56
+ ((_g = (_f = (_e = (_d = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e[1]) === null || _f === void 0 ? void 0 : _f.lamports) !== null && _g !== void 0 ? _g : (_k = (_j = (_h = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _h === void 0 ? void 0 : _h.accounts) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.lamports);
43
57
  return BigInt(totalSolTransfer);
44
58
  });
45
59
  const decodeTransaction = (transaction, connection, thisAddress) => __awaiter(void 0, void 0, void 0, function* () {
46
- var _g;
60
+ var _l;
47
61
  if (!transaction) {
48
62
  throw new DynamicError('Transaction is required');
49
63
  }
@@ -68,7 +82,7 @@ const decodeTransaction = (transaction, connection, thisAddress) => __awaiter(vo
68
82
  }
69
83
  }
70
84
  else if (!transaction.instructions) {
71
- decodedInstructions = (_g = Transaction.from(Buffer.from(transaction.serialize()))) === null || _g === void 0 ? void 0 : _g.instructions;
85
+ decodedInstructions = (_l = Transaction.from(Buffer.from(transaction.serialize()))) === null || _l === void 0 ? void 0 : _l.instructions;
72
86
  }
73
87
  else {
74
88
  decodedInstructions = transaction.instructions;
@@ -96,7 +110,7 @@ const decodeTransaction = (transaction, connection, thisAddress) => __awaiter(vo
96
110
  }
97
111
  // SPL transfers
98
112
  let splTransfers = yield Promise.all(decodedInstructions.map((instruction) => __awaiter(void 0, void 0, void 0, function* () {
99
- var _h, _j, _k, _l, _m, _o, _p;
113
+ var _m, _o, _p, _q, _r, _s, _t;
100
114
  if (instruction.programId.equals(TOKEN_PROGRAM_ID)) {
101
115
  const decodedTokenInstruction = decodeTransferInstructionUnchecked(instruction);
102
116
  const { source, destination } = decodedTokenInstruction.keys;
@@ -110,9 +124,9 @@ const decodeTransaction = (transaction, connection, thisAddress) => __awaiter(vo
110
124
  }
111
125
  // Pure SPL transfers, get the address from the destination token account to display to user
112
126
  const destinationAccountInfo = yield connection.getParsedAccountInfo(destination.pubkey);
113
- const isTokenAccount = ((_k = (_j = (_h = destinationAccountInfo.value) === null || _h === void 0 ? void 0 : _h.data) === null || _j === void 0 ? void 0 : _j.parsed) === null || _k === void 0 ? void 0 : _k.type) === 'account';
127
+ const isTokenAccount = ((_p = (_o = (_m = destinationAccountInfo.value) === null || _m === void 0 ? void 0 : _m.data) === null || _o === void 0 ? void 0 : _o.parsed) === null || _p === void 0 ? void 0 : _p.type) === 'account';
114
128
  const destinationOwner = isTokenAccount
115
- ? (_p = (_o = (_m = (_l = destinationAccountInfo.value) === null || _l === void 0 ? void 0 : _l.data) === null || _m === void 0 ? void 0 : _m.parsed) === null || _o === void 0 ? void 0 : _o.info) === null || _p === void 0 ? void 0 : _p.owner
129
+ ? (_t = (_s = (_r = (_q = destinationAccountInfo.value) === null || _q === void 0 ? void 0 : _q.data) === null || _r === void 0 ? void 0 : _r.parsed) === null || _s === void 0 ? void 0 : _s.info) === null || _t === void 0 ? void 0 : _t.owner
116
130
  : null;
117
131
  const toAddress = destinationOwner
118
132
  ? destinationOwner