@dynamic-labs/embedded-wallet-solana 4.0.0-alpha.5 → 4.0.0-alpha.7

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,43 @@
1
1
 
2
+ ## [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)
3
+
4
+
5
+ ### Features
6
+
7
+ * 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))
8
+ * 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))
9
+ * 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))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * 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))
15
+ * 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))
16
+ * 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))
17
+ * update version error text ([#7054](https://github.com/dynamic-labs/dynamic-auth/issues/7054)) ([713dacb](https://github.com/dynamic-labs/dynamic-auth/commit/713dacb79c2513323c2e6840d7418716011c2dcd))
18
+ * 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))
19
+
20
+ ## [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)
21
+
22
+
23
+ ### ⚠ BREAKING CHANGES
24
+
25
+ * remove support to magic ([#7033](https://github.com/dynamic-labs/dynamic-auth/issues/7033)) ([0fdc41f](https://github.com/dynamic-labs/dynamic-auth/commit/0fdc41f05f87b32f56b73db068f984f18bdf69a0))
26
+
27
+ ### Features
28
+
29
+ * global connectivity disconnect ([#7008](https://github.com/dynamic-labs/dynamic-auth/issues/7008)) ([80d705b](https://github.com/dynamic-labs/dynamic-auth/commit/80d705ba252aa3b01cbf4861507fed00e460215f))
30
+
31
+
32
+ ### Bug Fixes
33
+
34
+ * 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))
35
+ * add retry to useConnectWithOtp ([#7012](https://github.com/dynamic-labs/dynamic-auth/issues/7012)) ([d551d72](https://github.com/dynamic-labs/dynamic-auth/commit/d551d72a463f8a03964858b30ec174d41985a7b1))
36
+ * 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))
37
+ * 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))
38
+ * 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))
39
+
40
+
2
41
  ## [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)
3
42
 
4
43
 
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.5";
6
+ var version = "4.0.0-alpha.7";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.535",
9
- "@dynamic-labs/utils": "4.0.0-alpha.5",
10
- "@dynamic-labs/logger": "4.0.0-alpha.5",
11
- "@dynamic-labs/types": "4.0.0-alpha.5",
9
+ "@dynamic-labs/utils": "4.0.0-alpha.7",
10
+ "@dynamic-labs/logger": "4.0.0-alpha.7",
11
+ "@dynamic-labs/types": "4.0.0-alpha.7",
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.5";
2
+ var version = "4.0.0-alpha.7";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.535",
5
- "@dynamic-labs/utils": "4.0.0-alpha.5",
6
- "@dynamic-labs/logger": "4.0.0-alpha.5",
7
- "@dynamic-labs/types": "4.0.0-alpha.5",
5
+ "@dynamic-labs/utils": "4.0.0-alpha.7",
6
+ "@dynamic-labs/logger": "4.0.0-alpha.7",
7
+ "@dynamic-labs/types": "4.0.0-alpha.7",
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.5",
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.7",
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
21
  "@dynamic-labs/sdk-api-core": "0.0.535",
30
- "@dynamic-labs/utils": "4.0.0-alpha.5",
31
- "@dynamic-labs/logger": "4.0.0-alpha.5",
32
- "@dynamic-labs/types": "4.0.0-alpha.5",
22
+ "@dynamic-labs/utils": "4.0.0-alpha.7",
23
+ "@dynamic-labs/logger": "4.0.0-alpha.7",
24
+ "@dynamic-labs/types": "4.0.0-alpha.7",
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.5",
41
- "@dynamic-labs/rpc-providers": "4.0.0-alpha.5",
42
- "@dynamic-labs/solana-core": "4.0.0-alpha.5",
43
- "@dynamic-labs/wallet-book": "4.0.0-alpha.5",
44
- "@dynamic-labs/wallet-connector-core": "4.0.0-alpha.5",
45
- "@dynamic-labs/webauthn": "4.0.0-alpha.5",
32
+ "@dynamic-labs/assert-package-version": "4.0.0-alpha.7",
33
+ "@dynamic-labs/embedded-wallet": "4.0.0-alpha.7",
34
+ "@dynamic-labs/rpc-providers": "4.0.0-alpha.7",
35
+ "@dynamic-labs/solana-core": "4.0.0-alpha.7",
36
+ "@dynamic-labs/wallet-book": "4.0.0-alpha.7",
37
+ "@dynamic-labs/wallet-connector-core": "4.0.0-alpha.7",
38
+ "@dynamic-labs/webauthn": "4.0.0-alpha.7",
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,25 +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({
309
- requireAllSignatures: false,
310
- verifySignatures: false,
311
- })), options);
297
+ const signature = yield currentConnection.sendRawTransaction(signedTransaction.serialize(), options);
312
298
  // listen for tx confirmation until 60 seconds, which is ~150 blocks expiration
313
299
  return new Promise((resolve, reject) => {
314
300
  const timeout = setTimeout(() => {
@@ -332,8 +318,16 @@ class TurnkeySolanaWalletConnector extends embeddedWallet.TurnkeyWalletConnector
332
318
  if (!this.turnkeyAddress)
333
319
  throw new utils.DynamicError('Solana wallet not found');
334
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
+ }
335
328
  try {
336
- 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) {
337
331
  optimizedTransaction = (yield api.optimizeSolanaTransaction(this.getEnvId(), transaction, (_a = this.turnkeyAddress) !== null && _a !== void 0 ? _a : ''));
338
332
  }
339
333
  }
@@ -286,25 +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({
305
- requireAllSignatures: false,
306
- verifySignatures: false,
307
- })), options);
293
+ const signature = yield currentConnection.sendRawTransaction(signedTransaction.serialize(), options);
308
294
  // listen for tx confirmation until 60 seconds, which is ~150 blocks expiration
309
295
  return new Promise((resolve, reject) => {
310
296
  const timeout = setTimeout(() => {
@@ -328,8 +314,16 @@ class TurnkeySolanaWalletConnector extends TurnkeyWalletConnectorBase {
328
314
  if (!this.turnkeyAddress)
329
315
  throw new DynamicError('Solana wallet not found');
330
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
+ }
331
324
  try {
332
- 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) {
333
327
  optimizedTransaction = (yield optimizeSolanaTransaction(this.getEnvId(), transaction, (_a = this.turnkeyAddress) !== null && _a !== void 0 ? _a : ''));
334
328
  }
335
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