@hinkal/common 0.3.10 → 0.3.11

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 (82) hide show
  1. package/README.md +24 -2
  2. package/common/src/API/callRelayer.d.ts +1 -0
  3. package/common/src/constants/protocol.constants.cjs +1 -1
  4. package/common/src/constants/protocol.constants.d.ts +10 -5
  5. package/common/src/constants/protocol.constants.mjs +1 -1
  6. package/common/src/data-structures/Hinkal/Hinkal.cjs +1 -1
  7. package/common/src/data-structures/Hinkal/Hinkal.d.ts +2 -1
  8. package/common/src/data-structures/Hinkal/Hinkal.mjs +5 -2
  9. package/common/src/data-structures/Hinkal/IHinkal.d.ts +2 -1
  10. package/common/src/data-structures/Hinkal/hinkalActionReceive.cjs +1 -1
  11. package/common/src/data-structures/Hinkal/hinkalActionReceive.mjs +1 -1
  12. package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.cjs +1 -1
  13. package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.mjs +57 -57
  14. package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
  15. package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +1 -1
  16. package/common/src/data-structures/Hinkal/hinkalProxySwap.cjs +1 -1
  17. package/common/src/data-structures/Hinkal/hinkalProxySwap.d.ts +1 -1
  18. package/common/src/data-structures/Hinkal/hinkalProxySwap.mjs +13 -12
  19. package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.cjs +1 -1
  20. package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.mjs +1 -1
  21. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
  22. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +1 -1
  23. package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.cjs +1 -1
  24. package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.d.ts +1 -1
  25. package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.mjs +9 -9
  26. package/common/src/data-structures/Hinkal/hinkalSolanaSponsoredShield.cjs +1 -1
  27. package/common/src/data-structures/Hinkal/hinkalSolanaSponsoredShield.d.ts +1 -1
  28. package/common/src/data-structures/Hinkal/hinkalSolanaSponsoredShield.mjs +15 -14
  29. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
  30. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +1 -1
  31. package/common/src/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
  32. package/common/src/data-structures/Hinkal/hinkalTransfer.mjs +1 -1
  33. package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs +1 -1
  34. package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.d.ts +1 -0
  35. package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.mjs +6 -3
  36. package/common/src/data-structures/crypto-keys/keys.cjs +1 -1
  37. package/common/src/data-structures/crypto-keys/keys.d.ts +1 -0
  38. package/common/src/data-structures/crypto-keys/keys.mjs +3 -0
  39. package/common/src/data-structures/token-price-fetcher/TokenChecker.cjs +1 -1
  40. package/common/src/data-structures/token-price-fetcher/TokenChecker.d.ts +1 -0
  41. package/common/src/data-structures/token-price-fetcher/TokenChecker.mjs +1 -0
  42. package/common/src/functions/pre-transaction/getVolatileTransferAmount.cjs +1 -1
  43. package/common/src/functions/pre-transaction/getVolatileTransferAmount.mjs +1 -1
  44. package/common/src/functions/utils/bridge-claimable-utxo.utils.cjs +1 -1
  45. package/common/src/functions/utils/bridge-claimable-utxo.utils.d.ts +1 -1
  46. package/common/src/functions/utils/bridge-claimable-utxo.utils.mjs +4 -4
  47. package/common/src/functions/utils/fees.utils.cjs +1 -1
  48. package/common/src/functions/utils/fees.utils.mjs +4 -4
  49. package/common/src/functions/utils/nearIntents.utils.cjs +1 -1
  50. package/common/src/functions/utils/nearIntents.utils.mjs +1 -1
  51. package/common/src/functions/utils/publicBalance.utils.cjs +1 -1
  52. package/common/src/functions/utils/publicBalance.utils.mjs +1 -0
  53. package/common/src/functions/web3/events/getShieldedBalance.cjs +1 -1
  54. package/common/src/functions/web3/events/getShieldedBalance.mjs +17 -16
  55. package/common/src/webworker/{logError-CIIt1CO3.js → logError-cvFNxc-0.js} +1 -1
  56. package/common/src/webworker/package.json +1 -1
  57. package/common/src/webworker/utxoWorker/utxoWorker.types.d.ts +4 -2
  58. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
  59. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
  60. package/common/src/webworker/utxoWorkerNode.cjs +1 -1
  61. package/common/src/webworker/viteWorkerURL.constant.cjs +3 -3
  62. package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
  63. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
  64. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
  65. package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
  66. package/package.json +1 -1
  67. package/providers/prepareEthersHinkal.cjs +1 -1
  68. package/providers/prepareEthersHinkal.d.ts +1 -0
  69. package/providers/prepareEthersHinkal.mjs +2 -2
  70. package/providers/prepareSolanaHinkal.cjs +1 -1
  71. package/providers/prepareSolanaHinkal.d.ts +1 -0
  72. package/providers/prepareSolanaHinkal.mjs +2 -2
  73. package/providers/prepareTronHinkal.cjs +1 -1
  74. package/providers/prepareTronHinkal.d.ts +1 -0
  75. package/providers/prepareTronHinkal.mjs +2 -2
  76. package/providers/prepareWagmiHinkal.cjs +1 -1
  77. package/providers/prepareWagmiHinkal.d.ts +1 -0
  78. package/providers/prepareWagmiHinkal.mjs +2 -2
  79. package/services/Hinkal.cjs +1 -1
  80. package/services/Hinkal.d.ts +2 -0
  81. package/services/Hinkal.mjs +6 -0
  82. package/types/IHinkal.d.ts +2 -0
package/README.md CHANGED
@@ -43,11 +43,12 @@ Initializing the SDK creates a `Hinkal` object that encapsulates:
43
43
  - Actions the user can perform, such as shielding (depositing), transfers, and swapping
44
44
  - Cryptographic keys for privacy-preserving operations
45
45
 
46
- Each provider exposes three prepare helpers:
46
+ Each provider exposes four prepare helpers:
47
47
 
48
48
  - `prepare*Hinkal` — signs the Hinkal login message and initializes user keys (deterministic signers)
49
49
  - `prepare*HinkalWithEnclaveSignIn` — signs in through the secure enclave and stabilizes identity for non-deterministic signers (smart contract wallets, some hardware wallets)
50
50
  - `prepare*HinkalFromSignature` — initializes user keys from a previously stored signature
51
+ - `prepare*HinkalFromNullifyingKey` — initializes a read-only session from an exported nullifying key (balance viewing only, no signing capability)
51
52
 
52
53
  **ethers.js:**
53
54
 
@@ -83,7 +84,7 @@ import { prepareTronHinkal } from '@hinkal/common/providers/prepareTronHinkal';
83
84
  const hinkal = await prepareTronHinkal(connector, hinkalConfig);
84
85
  ```
85
86
 
86
- The same `WithEnclaveSignIn` and `FromSignature` variants are available for each provider (for example, `prepareWagmiHinkalWithEnclaveSignIn`, `prepareSolanaHinkalFromSignature`).
87
+ The same `WithEnclaveSignIn`, `FromSignature`, and `FromNullifyingKey` variants are available for each provider (for example, `prepareWagmiHinkalWithEnclaveSignIn`, `prepareSolanaHinkalFromSignature`, `prepareEthersHinkalFromNullifyingKey`).
87
88
 
88
89
  The `hinkalConfig` is defined as follows:
89
90
 
@@ -155,6 +156,27 @@ At rest, only the encrypted signature and encrypted key are stored in the databa
155
156
 
156
157
  Requests that fail this check are rejected. The first signature stored for a given address is never replaced. Later logins only use a fresh signature to authenticate retrieval of the original.
157
158
 
159
+ ### Read-only sessions (view keys)
160
+
161
+ A signed-in session can export a nullifying key: a value derived from the login signature that resolves to the same shielded account but cannot authorize spends. Use it to view balances on another device, in a backend job, or anywhere handing out the wallet's signing capability is not acceptable.
162
+
163
+ ```typescript
164
+ // on a fully signed-in session
165
+ const nullifyingKey = hinkal.getNullifyingKey();
166
+ ```
167
+
168
+ Initialize a separate, read-only session from that key alone, either through a provider helper or directly on an existing `Hinkal` instance:
169
+
170
+ ```typescript
171
+ const readOnlyHinkal = await prepareWagmiHinkalFromNullifyingKey(connector, wagmiConfig, nullifyingKey, hinkalConfig);
172
+ // or:
173
+ readOnlyHinkal.initUserKeysWithNullifyingKey(nullifyingKey);
174
+ ```
175
+
176
+ A read-only session can fetch balances (`getTotalBalance`, `privateBalancesWithUSD`), decrypt incoming shielded outputs, and call `getRecipientInfo()` to receive funds — everything needed to view holdings. It cannot spend: `transfer`, `withdraw`, `swap`, `actionPrivateWallet`, and every other value-moving call throw, because they require the EdDSA spending key derived from the original wallet signature, which a nullifying key cannot reproduce.
177
+
178
+ Treat an exported nullifying key as sensitive account-specific material, not a public value — hand it out only to contexts you trust with read access to the account's balances and incoming transfers.
179
+
158
180
  ### Shielded balance
159
181
 
160
182
  Shielded balances are encrypted token holdings stored within the Hinkal protocol. Unlike regular blockchain balances that are publicly visible, shielded balances are hidden from external observers.
@@ -53,6 +53,7 @@ export interface SolanaSponsoredBuildRequestBody {
53
53
  relayAddress: string;
54
54
  recipientInfo?: string;
55
55
  recipientAddress?: string;
56
+ variableRate?: string;
56
57
  }
57
58
  export interface SolanaSponsoredBuildResponse {
58
59
  status: 'success' | 'failed';
@@ -1,2 +1,2 @@
1
- var e=`0x${`00`.repeat(20)}`,t=`11111111111111111111111111111111`,n=1e9,r=`0x566de53cee38c8e4e87636e137b206b4799ae79b87d563f416008946bdf14427`,i=`0x655C3Aa937530E06A336458D1CF168d297B597A2`,a=21888242871839275222246405745257275088548364400416034343698204186575808495617n,o=a/2n,s=2n**250n,c=200n,l=function(e){return e.ERC20=`ERC20`,e.ERC721=`ERC721`,e.ERC1155=`ERC1155`,e.MetaplexNFT=`Metaplex NFT`,e.Token2022NFT=`Token-2022 NFT`,e.CompressedNFT=`Compressed NFT`,e}({}),u=35n,d=5n,f=10n,p=10n,m=15e5,h=14e5,g=256*1024,_=2e5,v=.2,y=`v1x1`,b=`BjNVy3aJw55TpQApJZ2v9pxkmeXr5KcwzEvcJ1e1E8hY`,x=394466828,S=`Sign to deterministically derive your Hinkal shielded account keys.
1
+ var e=`0x${`00`.repeat(20)}`,t=`11111111111111111111111111111111`,n=1e9,r=`0x566de53cee38c8e4e87636e137b206b4799ae79b87d563f416008946bdf14427`,i=`0x655C3Aa937530E06A336458D1CF168d297B597A2`,a=21888242871839275222246405745257275088548364400416034343698204186575808495617n,o=a/2n,s=2n**250n,c=200n,l=function(e){return e.ERC20=`ERC20`,e.ERC721=`ERC721`,e.ERC1155=`ERC1155`,e.MetaplexNFT=`Metaplex NFT`,e.Token2022NFT=`Token-2022 NFT`,e.CompressedNFT=`Compressed NFT`,e}({}),u=35n,d=25n,f=25n,p=25n,m=15e5,h=14e5,g=256*1024,_=2e5,v=.2,y=`v1x1`,b=`BjNVy3aJw55TpQApJZ2v9pxkmeXr5KcwzEvcJ1e1E8hY`,x=394466828,S=`Sign to deterministically derive your Hinkal shielded account keys.
2
2
  WARNING: Only sign this on official Hinkal domains. Signing it anywhere else can expose your funds to theft.`,C=`Sign to deterministically derive your Hinkal shielded account keys.`;exports.CIRCOM_P=a,exports.CIRCOM_P_HALF=o,exports.COMPUTE_UNIT_PADDING_PERCENTAGE=v,exports.DAPP_SIGNING_MESSAGE=S,exports.DETERMINISTIC_SOLANA_LEDGER_BLOCKHASH=b,exports.DETERMINISTIC_SOLANA_LEDGER_LAST_VALID_BLOCK_HEIGHT=x,exports.ENCLAVE_PUBKEY=r,exports.ENCLAVE_SIGNER_ADDRESS=i,exports.HINKAL_PRIVATE_SEND_VARIABLE_RATE=d,exports.HINKAL_SHIELD_VARIABLE_RATE=f,exports.HINKAL_SWAP_VARIABLE_RATE=u,exports.MAX_COMPUTE_UNIT_LIMIT=h,exports.MAX_MICRO_LAMPORTS_PER_CU=m,exports.MAX_SOLANA_HEAP_FRAME_BYTES=g,exports.MERKLE_LEVELS=c,exports.MIN_COMPUTE_UNIT_LIMIT=_,exports.NULLIFYING_PRIVATE_KEY_MOD=s,exports.PAY_SEND_VARIABLE_RATE=p,exports.SDK_SIGNING_MESSAGE=C,exports.SIGNATURE_FROM_MNEMONIC_VERSION=y,exports.TRON_DEFAULT_FEE_LIMIT_SUN=n,exports.TokenType=l,exports.solanaNativeAddress=t,exports.zeroAddress=e;
@@ -41,11 +41,16 @@ export declare enum TokenType {
41
41
  }
42
42
  export declare const ARC_TESTNET_USDC_ADDRESS = "0x3600000000000000000000000000000000000000";
43
43
  export declare const HINKAL_SWAP_VARIABLE_RATE = 35n;
44
- export declare const HINKAL_PRIVATE_SEND_VARIABLE_RATE = 5n;
45
- export declare const HINKAL_SHIELD_VARIABLE_RATE = 10n;
46
- export declare const HINKAL_UNSHIELD_VARIABLE_RATE = 10n;
47
- export declare const PAY_SEND_VARIABLE_RATE = 10n;
48
- export declare const DASHBOARD_BATCH_VARIABLE_RATE = 10n;
44
+ export declare const HINKAL_PRIVATE_SEND_VARIABLE_RATE = 25n;
45
+ export declare const HINKAL_SHIELD_VARIABLE_RATE = 25n;
46
+ export declare const HINKAL_UNSHIELD_VARIABLE_RATE = 25n;
47
+ export declare const HINKAL_PUBLIC_SEND_BRIDGE_VARIABLE_RATE = 35n;
48
+ export declare const PAY_SEND_VARIABLE_RATE = 25n;
49
+ export declare const DASHBOARD_BATCH_VARIABLE_RATE = 25n;
50
+ export declare const ENCLAVE_UNSHIELD_VARIABLE_RATE = 10n;
51
+ export declare const ENCLAVE_PRIVATE_SEND_VARIABLE_RATE = 5n;
52
+ export declare const ENCLAVE_SWAP_VARIABLE_RATE = 35n;
53
+ export declare const ENCLAVE_PUBLIC_SEND_VARIABLE_RATE = 10n;
49
54
  export declare const PROOFLESS_DEPOSIT_FEE_RECIPIENT_INFO = "0x06658083baccdac9d3e6111bc269dd575cb56e81db0a5f2caa3f0eb1f88c6fe2,8354314446524355096481459216655298105054350800091638464256976305784245419446,722490175517350908286713598102996640499832681284017078999463654992377573936,16306595091285215578120164221849406306419004894577000059366293659280820760235,6147914159463087164835352251164665501684446307306788960888807068717120491375,0xcc0ea5b6fcfdf7a48ee5b4410d43509159c6c7939517d99a620d7ab5abdb8779";
50
55
  export declare const SOLANA_PUBLIC_INPUT_PART_ONE_LENGTH = 15;
51
56
  export declare const MAX_WITHDRAW_TOKEN_COUNT_EVM = 5;
@@ -1,6 +1,6 @@
1
1
  //#region libs/shared/common/src/constants/protocol.constants.ts
2
2
  var e = `0x${"00".repeat(20)}`, t = "11111111111111111111111111111111", n = 1e9, r = "0x566de53cee38c8e4e87636e137b206b4799ae79b87d563f416008946bdf14427", i = "0x655C3Aa937530E06A336458D1CF168d297B597A2", a = 21888242871839275222246405745257275088548364400416034343698204186575808495617n, o = a / 2n, s = 2n ** 250n, c = 200n, l = /* @__PURE__ */ function(e) {
3
3
  return e.ERC20 = "ERC20", e.ERC721 = "ERC721", e.ERC1155 = "ERC1155", e.MetaplexNFT = "Metaplex NFT", e.Token2022NFT = "Token-2022 NFT", e.CompressedNFT = "Compressed NFT", e;
4
- }({}), u = 35n, d = 5n, f = 10n, p = 10n, m = 15e5, h = 14e5, g = 256 * 1024, _ = 2e5, v = .2, y = "v1x1", b = "BjNVy3aJw55TpQApJZ2v9pxkmeXr5KcwzEvcJ1e1E8hY", x = 394466828, S = "Sign to deterministically derive your Hinkal shielded account keys. \nWARNING: Only sign this on official Hinkal domains. Signing it anywhere else can expose your funds to theft.", C = "Sign to deterministically derive your Hinkal shielded account keys.";
4
+ }({}), u = 35n, d = 25n, f = 25n, p = 25n, m = 15e5, h = 14e5, g = 256 * 1024, _ = 2e5, v = .2, y = "v1x1", b = "BjNVy3aJw55TpQApJZ2v9pxkmeXr5KcwzEvcJ1e1E8hY", x = 394466828, S = "Sign to deterministically derive your Hinkal shielded account keys. \nWARNING: Only sign this on official Hinkal domains. Signing it anywhere else can expose your funds to theft.", C = "Sign to deterministically derive your Hinkal shielded account keys.";
5
5
  //#endregion
6
6
  export { a as CIRCOM_P, o as CIRCOM_P_HALF, v as COMPUTE_UNIT_PADDING_PERCENTAGE, S as DAPP_SIGNING_MESSAGE, b as DETERMINISTIC_SOLANA_LEDGER_BLOCKHASH, x as DETERMINISTIC_SOLANA_LEDGER_LAST_VALID_BLOCK_HEIGHT, r as ENCLAVE_PUBKEY, i as ENCLAVE_SIGNER_ADDRESS, d as HINKAL_PRIVATE_SEND_VARIABLE_RATE, f as HINKAL_SHIELD_VARIABLE_RATE, u as HINKAL_SWAP_VARIABLE_RATE, h as MAX_COMPUTE_UNIT_LIMIT, m as MAX_MICRO_LAMPORTS_PER_CU, g as MAX_SOLANA_HEAP_FRAME_BYTES, c as MERKLE_LEVELS, _ as MIN_COMPUTE_UNIT_LIMIT, s as NULLIFYING_PRIVATE_KEY_MOD, p as PAY_SEND_VARIABLE_RATE, C as SDK_SIGNING_MESSAGE, y as SIGNATURE_FROM_MNEMONIC_VERSION, n as TRON_DEFAULT_FEE_LIMIT_SUN, l as TokenType, t as solanaNativeAddress, e as zeroAddress };
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../functions/utils/serialize.utils.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../types/hinkal.types.cjs`),i=require(`../../crypto/poseidon.cjs`),a=require(`../../error-handling/error-codes.constants.cjs`),o=require(`../crypto-keys/keys.cjs`),s=require(`../../API/scheduled-transactions-calls.cjs`),c=require(`../../API/API.cjs`),l=require(`../../functions/utils/token-check.utils.cjs`),u=require(`../../functions/web3/events/getShieldedBalance.cjs`),d=require(`../../functions/web3/getContractMetadata.cjs`),f=require(`../../functions/snarkjs/fetchOnChainRootHashes.cjs`),p=require(`./hinkalDeposit.cjs`),m=require(`../../functions/utils/cacheDevice.utils.cjs`),h=require(`../../providers/SolanaProviderAdapter.cjs`),g=require(`../../functions/utils/enclave-signature-storage.cjs`),_=require(`../../functions/utils/mnemonics.cjs`),v=require(`./hinkalDepositAndWithdraw.cjs`),y=require(`./hinkalSolanaDeposit.cjs`),b=require(`./hinkalSwap.cjs`),x=require(`./hinkalWithdraw.cjs`),S=require(`../merkle-tree/MerkleTree.cjs`);require(`../merkle-tree/index.cjs`);const C=require(`./resetMerkleTrees.cjs`);require(`../../API/index.cjs`);const w=require(`../MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs`),T=require(`./hinkalPrivateWallet.cjs`),E=require(`./hinkalGetRecipientInfo.cjs`),D=require(`./hinkalSignSubAccount.cjs`),O=require(`./hinkalActionReceive.cjs`),k=require(`./hinkalProoflessDeposit.cjs`),A=require(`./hinkalProxySwap.cjs`),j=require(`./hinkalTransfer.cjs`),M=require(`./hinkalProxyToPrivate.cjs`),N=require(`../../providers/TronProviderAdapter.cjs`),P=require(`./hinkalSolanaDepositAndWithdraw.cjs`),F=require(`./hinkalSolanaWithdraw.cjs`),I=require(`./hinkalSolanaTransfer.cjs`),L=require(`./hinkalSolanaSwap.cjs`),R=require(`./hinkalSolanaProxySwap.cjs`),z=require(`./hinkalSolanaProxyShield.cjs`),B=require(`./hinkalDepositAndBridge.cjs`),V=require(`./hinkalBridgePrivateToPrivate.cjs`),H=require(`./hinkalNearDepositAndBridge.cjs`),U=require(`./hinkalClaimUtxo.cjs`),W=require(`./hinkalSolanaProoflessDeposit.cjs`),G=require(`./hinkalSolanaClaimUtxo.cjs`),K=require(`./hinkalWithdrawStuckUtxos.cjs`),q=require(`../private-balances/HinkalPrivateBalanceController.cjs`);require(`../private-balances/index.cjs`);const J=require(`./hinkalProxySend.cjs`);let Y=require(`@solana/web3.js`);var X=class{ethereumProviderAdapter;solanaProviderAdapter;tronProviderAdapter;userKeys;legacySignature;merkleTreeHinkalByChain={};nullifiersByChain={};encryptedOutputsByChain={};commitmentsSnapshotServiceByChain={};nullifierSnapshotServiceByChain={};privateBalances=new q.HinkalPrivateBalanceController(this);utxoUtils;lastCallState=new Map;cacheDevice;balanceFetchingMutexByChain=new Map;generateProofRemotely;disableMerkleTreeUpdates;allowParallelBalanceLocalDecryption;constructor(e){this.userKeys=new o.UserKeys(void 0),e?.tronChainOverride&&t.setHinkalTronChainId(e.tronChainOverride),t.HINKAL_SUPPORTED_CHAINS.forEach(e=>{this.merkleTreeHinkalByChain[e]=S.MerkleTree.create(i.poseidonFunction,0n),this.nullifiersByChain[e]=new Set,this.encryptedOutputsByChain[e]=[]}),this.generateProofRemotely=e?.generateProofRemotely??!0,this.utxoUtils=new w.MultiThreadedUtxoUtils,this.cacheDevice=m.createCacheDevice(e),this.disableMerkleTreeUpdates=e?.disableMerkleTreeUpdates??!1,this.allowParallelBalanceLocalDecryption=e?.allowParallelBalanceLocalDecryption??!1}enforceRateLimit(t,n,r=1e3){let i=Date.now(),a=e.CustomJSONStringify(n),o=this.lastCallState.get(t);if(o&&o.argsKey===a&&i-o.timestamp<r)throw Error(`${t} was already called with the same arguments`);this.lastCallState.set(t,{timestamp:i,argsKey:a})}getProviderAdapter(e){let n=e;n||=this.ethereumProviderAdapter?t.chainIds.ethMainnet:this.solanaProviderAdapter?t.currentSolanaChainId:t.chainIds.tronMainnet;let r;if(r=t.isSolanaLike(n)?this.solanaProviderAdapter:t.isTronLike(n)?this.tronProviderAdapter:this.ethereumProviderAdapter,!r)throw Error(`ProviderAdapter is not initialized`);return r}async initProviderAdapter(e,n){let r=t.chainIds.ethMainnet;n instanceof h.SolanaProviderAdapter?r=t.currentSolanaChainId:n instanceof N.TronProviderAdapter&&(r=t.currentTronChainId),await this.updateProviderAdapter(r,n),n.initConnector(e);let i=await n.connectAndPatchProvider(e);await n.init(i),await this.setListeners()}getSigningMessage(e=r.LoginMessageMode.SDK){switch(e){case r.LoginMessageMode.SDK:return n.SDK_SIGNING_MESSAGE;case r.LoginMessageMode.HINKAL_DAPP:default:return n.DAPP_SIGNING_MESSAGE}}async signHinkalMessage(e=r.LoginMessageMode.SDK){let t=this.getSigningMessage(e);return this.getProviderAdapter().signMessage(t)}async signSolanaLedgerMessage(){let e=new Y.Transaction({blockhash:n.DETERMINISTIC_SOLANA_LEDGER_BLOCKHASH,lastValidBlockHeight:n.DETERMINISTIC_SOLANA_LEDGER_LAST_VALID_BLOCK_HEIGHT,feePayer:this.getSolanaPublicKey()}),t=await this.getProviderAdapter().signTransactionWithoutBroadcast?.(e);if(!t)throw Error(`Failed to sign transaction without broadcast`);return t}async initUserKeys(e=r.LoginMessageMode.SDK){this.userKeys=new o.UserKeys(await this.signHinkalMessage(e))}initUserKeysWithSignature(e){this.userKeys=new o.UserKeys(e)}async initUserKeysFromSeedPhrases(e){let t=_.generateHashFromSeedPhrases(e);this.userKeys=new o.UserKeys(t)}async initUserKeysWithEnclaveSignature(e=r.LoginMessageMode.SDK){if(!await this.getEthereumAddress())throw Error(`Connected address not found`);let t=this.getProviderAdapter().isSolanaLedger?.()?await this.signSolanaLedgerMessage():await this.getProviderAdapter().signMessage(this.getSigningMessage(e)),n=await this.storeAndGetInitialSignature(t);this.initUserKeysWithSignature(n??t)}async storeAndGetInitialSignature(e){let t=await this.getEthereumAddress();if(!t)throw Error(`Connected address not found`);return g.storeAndGetSignatureFromEnclave(t,e)}async resetMerkle(e){this.disableMerkleTreeUpdates||(e?.every(e=>this.isSelectedNetworkSupported(e))??!0)&&await C.resetMerkleTrees(this,e)}getTronWeb(){let e=this.tronProviderAdapter;if(!e)throw Error(`Tron provider adapter not initialized`);if(!(e instanceof N.TronProviderAdapter))throw Error(`Tron provider adapter is not a TronProviderAdapter`);let t=e.getTronWeb();if(!t)throw Error(`TronWeb not available`);return t}getSupportedChains(){return this.ethereumProviderAdapter&&this.solanaProviderAdapter?t.WALLET_SUPPORTED_CHAINS:this.ethereumProviderAdapter?t.HINKAL_SUPPORTED_CHAINS.filter(e=>!t.isSolanaLike(e)&&!t.isTronLike(e)):this.solanaProviderAdapter?t.HINKAL_SUPPORTED_CHAINS.filter(e=>t.isSolanaLike(e)):this.tronProviderAdapter?[t.currentTronChainId]:[]}async waitForTransaction(e,t,n=1){return!!await this.getProviderAdapter(e).waitForTransaction(e,t,n)}getContract(e,t,n=void 0){return this.getProviderAdapter(e).getContract(e,t,n)}getContractWithFetcherByChainId(e,t,n=void 0){return d.getContractWithFetcherByChainId(e,t,n)}async signMessage(e){return await this.getProviderAdapter().signMessage(e)}async signTypedData(e,t,n){return await this.getProviderAdapter().signTypedData(e,t,n)}async signWithSubAccount(e,t,n,r){return D.hinkalSignSubAccount(e,t,n,r)}getContractWithSigner(e,t,n=``){return this.getProviderAdapter(e).getContractWithSigner(e,t,n)}getContractWithFetcher(e,t,n=``){return this.getProviderAdapter(e).getContractWithFetcher(e,t,n)}isSelectedNetworkSupported(e){return!!t.networkRegistry[e]}async switchNetwork(e){let n=this.getProviderAdapter(),r=n.getChainId(),i=r!==void 0&&t.isSameOnchainNetwork(e.chainId,r);if(!(e.chainId===r||i))try{await n.switchNetwork(e)}catch{throw Error(a.transactionErrorCodes.FAILED_TO_SWITCH_NETWORKS)}}async disconnectFromConnector(){await this.ethereumProviderAdapter?.disconnectFromConnector(),await this.solanaProviderAdapter?.disconnectFromConnector(),await this.tronProviderAdapter?.disconnectFromConnector()}async resetProviderAdapters(){this.ethereumProviderAdapter?.release(),this.solanaProviderAdapter?.release(),this.tronProviderAdapter?.release(),this.ethereumProviderAdapter=void 0,this.solanaProviderAdapter=void 0,this.tronProviderAdapter=void 0}async updateProviderAdapter(e,n){try{t.isSolanaLike(e)?(this.solanaProviderAdapter&&this.solanaProviderAdapter.release(),this.solanaProviderAdapter=n):t.isTronLike(e)?(this.tronProviderAdapter&&this.tronProviderAdapter.release(),this.tronProviderAdapter=n):(this.ethereumProviderAdapter&&this.ethereumProviderAdapter.release(),this.ethereumProviderAdapter=n)}catch(e){throw console.error(e),Error(`updateProviderAdapter failed, please try again.`)}}async setListeners(){this.ethereumProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}}),this.solanaProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}}),this.tronProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}})}async onAccountChanged(){await this.ethereumProviderAdapter?.onAccountChanged(),await this.solanaProviderAdapter?.onAccountChanged(),await this.tronProviderAdapter?.onAccountChanged();let e=r.EventType.AccountChanged;typeof document<`u`?document?.dispatchEvent(new Event(e)):process?.emit(`message`,e,void 0)}async onChainChanged(e){e?await this.getProviderAdapter(e).onChainChanged(e):await this.disconnectFromConnector()}async monitorConnectedAddress(e){await c.API.monitor(await this.getEthereumAddressByChain(e))}async getTotalBalances(e,t,n,r=!1,i,a=!1){let o=t??this.userKeys,s=new Map(await Promise.all(e.map(async e=>[e,n??await this.getEthereumAddressByChain(e)])));return u.getShieldedBalances(this,s,o.getShieldedPrivateKey(),o.getShieldedPublicKey(),r,i,a)}async getStuckShieldedBalances(e,t,n,r=!1,i=!1){let a=await this.getTotalBalances(e,t,n,r,i,!0);return new Map([...a].map(([e,t])=>[e,t.filter(e=>e.balance>0n)]))}get privateBalancesWithUSD(){return this.privateBalances.getSnapshot()}onPrivateBalancesWithUSDChange(e){return this.privateBalances.onPrivateBalancesWithUSDChange(e)}async getHinkalTreeRootHash(e){return(await f.fetchOnChainRootHashes(e)).hinkalRootHash}async resetMerkleTreesIfNecessary(e){let t=(await Promise.all((e??this.getSupportedChains()).map(async e=>{if(this.generateProofRemotely)return{chainId:e,needsReset:!1};let t=await this.getHinkalTreeRootHash(e);return{chainId:e,needsReset:BigInt(t)!==this.merkleTreeHinkalByChain[e].getRootHash()}}))).filter(e=>e.needsReset).map(e=>e.chainId);t.length>0&&(console.log(`resetting merkle tree in resetMerkleTreesIfNecessary for chains:`,t),await this.resetMerkle(t))}async getEthereumAddress(){let e=this.ethereumProviderAdapter??this.solanaProviderAdapter??this.tronProviderAdapter;if(!e)throw Error(`No provider adapter initialized`);return e.getAddress()}getEthereumAddressByChain(e){return this.getProviderAdapter(e).getAddress()}async getRandomRelay(e,t=!1){return(await c.API.getIdleRelay(e,t)).relay}getGasPrice(e){let t=this.getProviderAdapter(e);if(!t)throw Error(`Illegal State of providerAdapter in Hinkal: no providerAdapter initialized`);return t.getGasPrice(e)}getAPI(){return c.API}snapshotsClearInterval(){this.getSupportedChains().forEach(e=>{this.commitmentsSnapshotServiceByChain[e]?.intervalClear(),this.nullifierSnapshotServiceByChain[e]?.intervalClear()})}async destroy(){this.snapshotsClearInterval(),this.privateBalances.dispose(),await this.resetProviderAdapters()}getRecipientInfo(){return E.getRecipientInfo(this)}async deposit(e,t,n=!0,r=!1){return p.hinkalDeposit(this,e,t,n,r)}async depositSolana(e,t,n=!1){return y.hinkalSolanaDeposit(this,e,t,n)}async depositForOther(e,t,n,r=!0,i=!1,a){return this.enforceRateLimit(this.depositForOther.name,[e,t,n]),p.hinkalDepositForOther(this,e,t,n,r,i,a)}async depositSolanaForOther(e,t,n,r=!1,i){return this.enforceRateLimit(this.depositSolanaForOther.name,[e,t,n]),y.hinkalSolanaDepositForOther(this,e,t,n,r,i)}async depositAndWithdraw(e,n,r,i,a,o,s,c,u=!0){return t.isSolanaLike(l.validateAndGetChainId([e]))?P.hinkalSolanaDepositAndWithdraw(this,e,n,r,i,a,o,s,c):v.hinkalDepositAndWithdraw(this,e,n,r,i,a,o,s,c,u)}async claimUtxo(e,n,r,i){return t.isSolanaLike(l.validateAndGetChainId([e]))?G.hinkalSolanaClaimUtxo(this,e,n,r,i):U.hinkalClaimUtxo(this,e,n,r,i)}async depositAndBridge(e,t,n,r,i,a,o,s=!0){return B.hinkalDepositAndBridge(this,e,t,n,r,i,a,o,s)}async bridgePrivateToPrivate(e,t,n,r,i,a,o,s){return this.enforceRateLimit(this.bridgePrivateToPrivate.name,[e,t,n]),V.hinkalBridgePrivateToPrivate(this,e,t,n,r,i,a,o,s)}async checkSendTransactionStatus(e){return s.getScheduledTransactionById(e)}async nearDepositAndBridge(e,t,n,r,i,a,o,s,c){return this.enforceRateLimit(this.nearDepositAndBridge.name,[e,t,n,r]),H.hinkalNearDepositAndBridge(this,e,t,n,r,i,a,o,s,c)}async prooflessDeposit(e,n,i,a,o=!1,s=r.zeroProoflessFeeStructure,c=``,u,d=!1){return t.isSolanaLike(l.validateAndGetChainId(e))?W.hinkalSolanaProoflessDeposit(this,e,n,i,a,o,u,d):k.hinkalProoflessDeposit(this,e,n,i,a,o,s,c,u,d)}getSolanaProgram(e){if(!this.solanaProviderAdapter)throw Error(`No provider adapter initialized`);if(!(`getSolanaProgram`in this.solanaProviderAdapter))throw Error(`Current provider adapter is not a Solana provider adapter`);return this.solanaProviderAdapter.getSolanaProgram(e)}getSolanaPublicKey(){if(!this.solanaProviderAdapter)throw Error(`No provider adapter initialized`);if(!(`getSolanaPublicKey`in this.solanaProviderAdapter))throw Error(`Current provider adapter is not a Solana provider adapter`);return this.solanaProviderAdapter.getSolanaPublicKey()}async transfer(e,n,r,i,a,o){return this.enforceRateLimit(this.transfer.name,[e,n,r]),t.isSolanaLike(l.validateAndGetChainId(e))?I.hinkalSolanaTransfer(this,e,n,r,i,a,o):j.hinkalTransfer(this,e,n,r,i,a,o)}async withdraw(e,n,r,i,a,o,s,c){return t.isSolanaLike(l.validateAndGetChainId(e))?F.hinkalSolanaWithdraw(this,e,n,r,a,o,s,c):x.hinkalWithdraw(this,e,n,r,i,a,o,s,c)}async withdrawStuckUtxos(e,t){return K.hinkalWithdrawStuckUtxos(this,e,t)}async swap(e,n,r,i,a,o,s,c){return t.isSolanaLike(l.validateAndGetChainId(e))?this.swapSolana(e,n,i,a,o,c):b.hinkalSwap(this,e,n,r,i,a,o,s,c)}async swapSolana(e,t,n,r,i,a){let o=JSON.parse(n),s=BigInt(o.swapperAccountSalt),{instructionLists:c,addressLookupTableAccount:l}=o.data;return L.hinkalSolanaSwap(this,e,t,s,c,l,r,i,a)}async actionReceive(e,n,r,i,a,o){if(!a)throw Error(`subAccount is required`);return t.isSolanaLike(l.validateAndGetChainId(e))?z.hinkalSolanaProxyShield(this,e[0],n[0],a,void 0,!1,i?.variableRate,o):O.hinkalActionReceive(this,e,n,r,i,a,o)}async actionPrivateWallet(e,t,n,r,i,a,o,s,c,l,u=!1,d,f,p){return this.enforceRateLimit(this.actionPrivateWallet.name,[e,t,n,r,i,a,o,s,c,p]),T.hinkalPrivateWallet(this,e,t,n,r,i,a,o,s,c,l,u,d,f,p)}async proxySwap(e,n,r,i,a,o,s,c,u=!1,d,f){return t.isSolanaLike(l.validateAndGetChainId(e))?R.hinkalSolanaProxySwap(this,e,n,i,o,r,s,c,f):A.hinkalProxySwap(this,e,n,r,i,a,o,s,c,u,d,f)}async proxyToPrivate(e,n,r,i,a,o,s){return t.isSolanaLike(l.validateAndGetChainId(e))?(this.enforceRateLimit(this.proxyToPrivate.name,[e[0],n[0],r,i]),z.hinkalSolanaProxyShield(this,e[0],n[0],r,i,!1,o?.variableRate,s)):M.hinkalProxyToPrivate(this,e,n,i,a,o,r,s)}async proxySend(e,t,n,r,i,a,o){return J.hinkalProxySend(this,e,t,n,r,i,a,o)}areMerkleTreeUpdatesDisabled(){return this.disableMerkleTreeUpdates}updateMerkleTreeUpdates(e){this.disableMerkleTreeUpdates=e}};exports.Hinkal=X;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../functions/utils/serialize.utils.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../types/hinkal.types.cjs`),i=require(`../../crypto/poseidon.cjs`),a=require(`../../error-handling/error-codes.constants.cjs`),o=require(`../crypto-keys/keys.cjs`),s=require(`../../API/scheduled-transactions-calls.cjs`),c=require(`../../API/API.cjs`),l=require(`../../functions/utils/token-check.utils.cjs`),u=require(`../../functions/web3/events/getShieldedBalance.cjs`),d=require(`../../functions/web3/getContractMetadata.cjs`),f=require(`../../functions/snarkjs/fetchOnChainRootHashes.cjs`),p=require(`./hinkalDeposit.cjs`),m=require(`../../functions/utils/cacheDevice.utils.cjs`),h=require(`../../providers/SolanaProviderAdapter.cjs`),g=require(`../../functions/utils/enclave-signature-storage.cjs`),_=require(`../../functions/utils/mnemonics.cjs`),v=require(`./hinkalDepositAndWithdraw.cjs`),y=require(`./hinkalSolanaDeposit.cjs`),b=require(`./hinkalSwap.cjs`),x=require(`./hinkalWithdraw.cjs`),S=require(`../merkle-tree/MerkleTree.cjs`);require(`../merkle-tree/index.cjs`);const C=require(`./resetMerkleTrees.cjs`);require(`../../API/index.cjs`);const w=require(`../MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs`),T=require(`./hinkalPrivateWallet.cjs`),E=require(`./hinkalGetRecipientInfo.cjs`),D=require(`./hinkalSignSubAccount.cjs`),O=require(`./hinkalActionReceive.cjs`),k=require(`./hinkalProoflessDeposit.cjs`),A=require(`./hinkalProxySwap.cjs`),j=require(`./hinkalTransfer.cjs`),M=require(`./hinkalProxyToPrivate.cjs`),N=require(`../../providers/TronProviderAdapter.cjs`),P=require(`./hinkalSolanaDepositAndWithdraw.cjs`),F=require(`./hinkalSolanaWithdraw.cjs`),I=require(`./hinkalSolanaTransfer.cjs`),L=require(`./hinkalSolanaSwap.cjs`),R=require(`./hinkalSolanaProxySwap.cjs`),z=require(`./hinkalSolanaProxyShield.cjs`),B=require(`./hinkalDepositAndBridge.cjs`),V=require(`./hinkalBridgePrivateToPrivate.cjs`),H=require(`./hinkalNearDepositAndBridge.cjs`),U=require(`./hinkalClaimUtxo.cjs`),W=require(`./hinkalSolanaProoflessDeposit.cjs`),G=require(`./hinkalSolanaClaimUtxo.cjs`),K=require(`./hinkalWithdrawStuckUtxos.cjs`),q=require(`../private-balances/HinkalPrivateBalanceController.cjs`);require(`../private-balances/index.cjs`);const J=require(`./hinkalProxySend.cjs`);let Y=require(`@solana/web3.js`);var X=class{ethereumProviderAdapter;solanaProviderAdapter;tronProviderAdapter;userKeys;legacySignature;merkleTreeHinkalByChain={};nullifiersByChain={};encryptedOutputsByChain={};commitmentsSnapshotServiceByChain={};nullifierSnapshotServiceByChain={};privateBalances=new q.HinkalPrivateBalanceController(this);utxoUtils;lastCallState=new Map;cacheDevice;balanceFetchingMutexByChain=new Map;generateProofRemotely;disableMerkleTreeUpdates;allowParallelBalanceLocalDecryption;constructor(e){this.userKeys=new o.UserKeys(void 0),e?.tronChainOverride&&t.setHinkalTronChainId(e.tronChainOverride),t.HINKAL_SUPPORTED_CHAINS.forEach(e=>{this.merkleTreeHinkalByChain[e]=S.MerkleTree.create(i.poseidonFunction,0n),this.nullifiersByChain[e]=new Set,this.encryptedOutputsByChain[e]=[]}),this.generateProofRemotely=e?.generateProofRemotely??!0,this.utxoUtils=new w.MultiThreadedUtxoUtils,this.cacheDevice=m.createCacheDevice(e),this.disableMerkleTreeUpdates=e?.disableMerkleTreeUpdates??!1,this.allowParallelBalanceLocalDecryption=e?.allowParallelBalanceLocalDecryption??!1}enforceRateLimit(t,n,r=1e3){let i=Date.now(),a=e.CustomJSONStringify(n),o=this.lastCallState.get(t);if(o&&o.argsKey===a&&i-o.timestamp<r)throw Error(`${t} was already called with the same arguments`);this.lastCallState.set(t,{timestamp:i,argsKey:a})}getProviderAdapter(e){let n=e;n||=this.ethereumProviderAdapter?t.chainIds.ethMainnet:this.solanaProviderAdapter?t.currentSolanaChainId:t.chainIds.tronMainnet;let r;if(r=t.isSolanaLike(n)?this.solanaProviderAdapter:t.isTronLike(n)?this.tronProviderAdapter:this.ethereumProviderAdapter,!r)throw Error(`ProviderAdapter is not initialized`);return r}async initProviderAdapter(e,n){let r=t.chainIds.ethMainnet;n instanceof h.SolanaProviderAdapter?r=t.currentSolanaChainId:n instanceof N.TronProviderAdapter&&(r=t.currentTronChainId),await this.updateProviderAdapter(r,n),n.initConnector(e);let i=await n.connectAndPatchProvider(e);await n.init(i),await this.setListeners()}getSigningMessage(e=r.LoginMessageMode.SDK){switch(e){case r.LoginMessageMode.SDK:return n.SDK_SIGNING_MESSAGE;case r.LoginMessageMode.HINKAL_DAPP:default:return n.DAPP_SIGNING_MESSAGE}}async signHinkalMessage(e=r.LoginMessageMode.SDK){let t=this.getSigningMessage(e);return this.getProviderAdapter().signMessage(t)}async signSolanaLedgerMessage(){let e=new Y.Transaction({blockhash:n.DETERMINISTIC_SOLANA_LEDGER_BLOCKHASH,lastValidBlockHeight:n.DETERMINISTIC_SOLANA_LEDGER_LAST_VALID_BLOCK_HEIGHT,feePayer:this.getSolanaPublicKey()}),t=await this.getProviderAdapter().signTransactionWithoutBroadcast?.(e);if(!t)throw Error(`Failed to sign transaction without broadcast`);return t}async initUserKeys(e=r.LoginMessageMode.SDK){this.userKeys=new o.UserKeys(await this.signHinkalMessage(e))}initUserKeysWithSignature(e){this.userKeys=new o.UserKeys(e)}initUserKeysWithNullifyingKey(e){this.userKeys=new o.UserKeys(void 0,e)}async initUserKeysFromSeedPhrases(e){let t=_.generateHashFromSeedPhrases(e);this.userKeys=new o.UserKeys(t)}async initUserKeysWithEnclaveSignature(e=r.LoginMessageMode.SDK){if(!await this.getEthereumAddress())throw Error(`Connected address not found`);let t=this.getProviderAdapter().isSolanaLedger?.()?await this.signSolanaLedgerMessage():await this.getProviderAdapter().signMessage(this.getSigningMessage(e)),n=await this.storeAndGetInitialSignature(t);this.initUserKeysWithSignature(n??t)}async storeAndGetInitialSignature(e){let t=await this.getEthereumAddress();if(!t)throw Error(`Connected address not found`);return g.storeAndGetSignatureFromEnclave(t,e)}async resetMerkle(e){this.disableMerkleTreeUpdates||(e?.every(e=>this.isSelectedNetworkSupported(e))??!0)&&await C.resetMerkleTrees(this,e)}getTronWeb(){let e=this.tronProviderAdapter;if(!e)throw Error(`Tron provider adapter not initialized`);if(!(e instanceof N.TronProviderAdapter))throw Error(`Tron provider adapter is not a TronProviderAdapter`);let t=e.getTronWeb();if(!t)throw Error(`TronWeb not available`);return t}getSupportedChains(){return this.ethereumProviderAdapter&&this.solanaProviderAdapter?t.WALLET_SUPPORTED_CHAINS:this.ethereumProviderAdapter?t.HINKAL_SUPPORTED_CHAINS.filter(e=>!t.isSolanaLike(e)&&!t.isTronLike(e)):this.solanaProviderAdapter?t.HINKAL_SUPPORTED_CHAINS.filter(e=>t.isSolanaLike(e)):this.tronProviderAdapter?[t.currentTronChainId]:[]}async waitForTransaction(e,t,n=1){return!!await this.getProviderAdapter(e).waitForTransaction(e,t,n)}getContract(e,t,n=void 0){return this.getProviderAdapter(e).getContract(e,t,n)}getContractWithFetcherByChainId(e,t,n=void 0){return d.getContractWithFetcherByChainId(e,t,n)}async signMessage(e){return await this.getProviderAdapter().signMessage(e)}async signTypedData(e,t,n){return await this.getProviderAdapter().signTypedData(e,t,n)}async signWithSubAccount(e,t,n,r){return D.hinkalSignSubAccount(e,t,n,r)}getContractWithSigner(e,t,n=``){return this.getProviderAdapter(e).getContractWithSigner(e,t,n)}getContractWithFetcher(e,t,n=``){return this.getProviderAdapter(e).getContractWithFetcher(e,t,n)}isSelectedNetworkSupported(e){return!!t.networkRegistry[e]}async switchNetwork(e){let n=this.getProviderAdapter(),r=n.getChainId(),i=r!==void 0&&t.isSameOnchainNetwork(e.chainId,r);if(!(e.chainId===r||i))try{await n.switchNetwork(e)}catch{throw Error(a.transactionErrorCodes.FAILED_TO_SWITCH_NETWORKS)}}async disconnectFromConnector(){await this.ethereumProviderAdapter?.disconnectFromConnector(),await this.solanaProviderAdapter?.disconnectFromConnector(),await this.tronProviderAdapter?.disconnectFromConnector()}async resetProviderAdapters(){this.ethereumProviderAdapter?.release(),this.solanaProviderAdapter?.release(),this.tronProviderAdapter?.release(),this.ethereumProviderAdapter=void 0,this.solanaProviderAdapter=void 0,this.tronProviderAdapter=void 0}async updateProviderAdapter(e,n){try{t.isSolanaLike(e)?(this.solanaProviderAdapter&&this.solanaProviderAdapter.release(),this.solanaProviderAdapter=n):t.isTronLike(e)?(this.tronProviderAdapter&&this.tronProviderAdapter.release(),this.tronProviderAdapter=n):(this.ethereumProviderAdapter&&this.ethereumProviderAdapter.release(),this.ethereumProviderAdapter=n)}catch(e){throw console.error(e),Error(`updateProviderAdapter failed, please try again.`)}}async setListeners(){this.ethereumProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}}),this.solanaProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}}),this.tronProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}})}async onAccountChanged(){await this.ethereumProviderAdapter?.onAccountChanged(),await this.solanaProviderAdapter?.onAccountChanged(),await this.tronProviderAdapter?.onAccountChanged();let e=r.EventType.AccountChanged;typeof document<`u`?document?.dispatchEvent(new Event(e)):process?.emit(`message`,e,void 0)}async onChainChanged(e){e?await this.getProviderAdapter(e).onChainChanged(e):await this.disconnectFromConnector()}async monitorConnectedAddress(e){await c.API.monitor(await this.getEthereumAddressByChain(e))}async getTotalBalances(e,t,n,r=!1,i,a=!1){let o=t??this.userKeys,s=new Map(await Promise.all(e.map(async e=>[e,n??await this.getEthereumAddressByChain(e)])));return u.getShieldedBalances(this,s,o.getShieldedPrivateKey(),o.getShieldedPublicKey(),r,i,a)}async getStuckShieldedBalances(e,t,n,r=!1,i=!1){let a=await this.getTotalBalances(e,t,n,r,i,!0);return new Map([...a].map(([e,t])=>[e,t.filter(e=>e.balance>0n)]))}get privateBalancesWithUSD(){return this.privateBalances.getSnapshot()}onPrivateBalancesWithUSDChange(e){return this.privateBalances.onPrivateBalancesWithUSDChange(e)}async getHinkalTreeRootHash(e){return(await f.fetchOnChainRootHashes(e)).hinkalRootHash}async resetMerkleTreesIfNecessary(e){let t=(await Promise.all((e??this.getSupportedChains()).map(async e=>{if(this.generateProofRemotely)return{chainId:e,needsReset:!1};let t=await this.getHinkalTreeRootHash(e);return{chainId:e,needsReset:BigInt(t)!==this.merkleTreeHinkalByChain[e].getRootHash()}}))).filter(e=>e.needsReset).map(e=>e.chainId);t.length>0&&(console.log(`resetting merkle tree in resetMerkleTreesIfNecessary for chains:`,t),await this.resetMerkle(t))}async getEthereumAddress(){let e=this.ethereumProviderAdapter??this.solanaProviderAdapter??this.tronProviderAdapter;if(!e)throw Error(`No provider adapter initialized`);return e.getAddress()}getEthereumAddressByChain(e){return this.getProviderAdapter(e).getAddress()}async getRandomRelay(e,t=!1){return(await c.API.getIdleRelay(e,t)).relay}getGasPrice(e){let t=this.getProviderAdapter(e);if(!t)throw Error(`Illegal State of providerAdapter in Hinkal: no providerAdapter initialized`);return t.getGasPrice(e)}getAPI(){return c.API}snapshotsClearInterval(){this.getSupportedChains().forEach(e=>{this.commitmentsSnapshotServiceByChain[e]?.intervalClear(),this.nullifierSnapshotServiceByChain[e]?.intervalClear()})}async destroy(){this.snapshotsClearInterval(),this.privateBalances.dispose(),await this.resetProviderAdapters()}getRecipientInfo(){return E.getRecipientInfo(this)}async deposit(e,t,n=!0,r=!1){return p.hinkalDeposit(this,e,t,n,r)}async depositSolana(e,t,n=!1){return y.hinkalSolanaDeposit(this,e,t,n)}async depositForOther(e,t,n,r=!0,i=!1,a){return this.enforceRateLimit(this.depositForOther.name,[e,t,n]),p.hinkalDepositForOther(this,e,t,n,r,i,a)}async depositSolanaForOther(e,t,n,r=!1,i){return this.enforceRateLimit(this.depositSolanaForOther.name,[e,t,n]),y.hinkalSolanaDepositForOther(this,e,t,n,r,i)}async depositAndWithdraw(e,n,r,i,a,o,s,c,u=!0){return t.isSolanaLike(l.validateAndGetChainId([e]))?P.hinkalSolanaDepositAndWithdraw(this,e,n,r,i,a,o,s,c):v.hinkalDepositAndWithdraw(this,e,n,r,i,a,o,s,c,u)}async claimUtxo(e,n,r,i){return t.isSolanaLike(l.validateAndGetChainId([e]))?G.hinkalSolanaClaimUtxo(this,e,n,r,i):U.hinkalClaimUtxo(this,e,n,r,i)}async depositAndBridge(e,t,n,r,i,a,o,s=!0){return B.hinkalDepositAndBridge(this,e,t,n,r,i,a,o,s)}async bridgePrivateToPrivate(e,t,n,r,i,a,o,s){return this.enforceRateLimit(this.bridgePrivateToPrivate.name,[e,t,n]),V.hinkalBridgePrivateToPrivate(this,e,t,n,r,i,a,o,s)}async checkSendTransactionStatus(e){return s.getScheduledTransactionById(e)}async nearDepositAndBridge(e,t,n,r,i,a,o,s,c){return this.enforceRateLimit(this.nearDepositAndBridge.name,[e,t,n,r]),H.hinkalNearDepositAndBridge(this,e,t,n,r,i,a,o,s,c)}async prooflessDeposit(e,n,i,a,o=!1,s=r.zeroProoflessFeeStructure,c=``,u,d=!1){return t.isSolanaLike(l.validateAndGetChainId(e))?W.hinkalSolanaProoflessDeposit(this,e,n,i,a,o,u,d):k.hinkalProoflessDeposit(this,e,n,i,a,o,s,c,u,d)}getSolanaProgram(e){if(!this.solanaProviderAdapter)throw Error(`No provider adapter initialized`);if(!(`getSolanaProgram`in this.solanaProviderAdapter))throw Error(`Current provider adapter is not a Solana provider adapter`);return this.solanaProviderAdapter.getSolanaProgram(e)}getSolanaPublicKey(){if(!this.solanaProviderAdapter)throw Error(`No provider adapter initialized`);if(!(`getSolanaPublicKey`in this.solanaProviderAdapter))throw Error(`Current provider adapter is not a Solana provider adapter`);return this.solanaProviderAdapter.getSolanaPublicKey()}async transfer(e,n,r,i,a,o){return this.enforceRateLimit(this.transfer.name,[e,n,r]),t.isSolanaLike(l.validateAndGetChainId(e))?I.hinkalSolanaTransfer(this,e,n,r,i,a,o):j.hinkalTransfer(this,e,n,r,i,a,o)}async withdraw(e,n,r,i,a,o,s,c){return t.isSolanaLike(l.validateAndGetChainId(e))?F.hinkalSolanaWithdraw(this,e,n,r,a,o,s,c):x.hinkalWithdraw(this,e,n,r,i,a,o,s,c)}async withdrawStuckUtxos(e,t){return K.hinkalWithdrawStuckUtxos(this,e,t)}async swap(e,n,r,i,a,o,s,c){return t.isSolanaLike(l.validateAndGetChainId(e))?this.swapSolana(e,n,i,a,o,c):b.hinkalSwap(this,e,n,r,i,a,o,s,c)}async swapSolana(e,t,n,r,i,a){let o=JSON.parse(n),s=BigInt(o.swapperAccountSalt),{instructionLists:c,addressLookupTableAccount:l}=o.data;return L.hinkalSolanaSwap(this,e,t,s,c,l,r,i,a)}async actionReceive(e,n,r,i,a,o){if(!a)throw Error(`subAccount is required`);return t.isSolanaLike(l.validateAndGetChainId(e))?z.hinkalSolanaProxyShield(this,e[0],n[0],a,void 0,!1,i?.variableRate,o):O.hinkalActionReceive(this,e,n,r,i,a,o)}async actionPrivateWallet(e,t,n,r,i,a,o,s,c,l,u=!1,d,f,p){return this.enforceRateLimit(this.actionPrivateWallet.name,[e,t,n,r,i,a,o,s,c,p]),T.hinkalPrivateWallet(this,e,t,n,r,i,a,o,s,c,l,u,d,f,p)}async proxySwap(e,n,r,i,a,o,s,c,u=!1,d,f,p,m){return t.isSolanaLike(l.validateAndGetChainId(e))?R.hinkalSolanaProxySwap(this,e,n,i,o,r,a,s,c,m):A.hinkalProxySwap(this,e,n,r,i,a,o,s,c,u,d,m,f,p)}async proxyToPrivate(e,n,r,i,a,o,s){return t.isSolanaLike(l.validateAndGetChainId(e))?(this.enforceRateLimit(this.proxyToPrivate.name,[e[0],n[0],r,i]),z.hinkalSolanaProxyShield(this,e[0],n[0],r,i,!1,o?.variableRate,s)):M.hinkalProxyToPrivate(this,e,n,i,a,o,r,s)}async proxySend(e,t,n,r,i,a,o){return J.hinkalProxySend(this,e,t,n,r,i,a,o)}areMerkleTreeUpdatesDisabled(){return this.disableMerkleTreeUpdates}updateMerkleTreeUpdates(e){this.disableMerkleTreeUpdates=e}};exports.Hinkal=X;
@@ -53,6 +53,7 @@ export declare class Hinkal<ConnectorType> implements IHinkal {
53
53
  signSolanaLedgerMessage(): Promise<string>;
54
54
  initUserKeys(mode?: LoginMessageMode): Promise<void>;
55
55
  initUserKeysWithSignature(signature: string): void;
56
+ initUserKeysWithNullifyingKey(nullifyingKey: string): void;
56
57
  initUserKeysFromSeedPhrases(seedPhrases: string[]): Promise<void>;
57
58
  initUserKeysWithEnclaveSignature(signInMode?: LoginMessageMode): Promise<void>;
58
59
  storeAndGetInitialSignature(authSignature: string): Promise<string>;
@@ -111,7 +112,7 @@ export declare class Hinkal<ConnectorType> implements IHinkal {
111
112
  swapSolana(erc20Tokens: ERC20Token[], deltaAmounts: bigint[], swapData: string, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType): Promise<string>;
112
113
  actionReceive(erc20Tokens: ERC20Token[], deltaAmounts: bigint[], feeToken?: string, feeStructureOverride?: FeeStructure, subAccount?: SubAccount, action?: AdminTransactionType): Promise<string>;
113
114
  actionPrivateWallet(chainId: number, erc20Tokens: ERC20Token[], deltaAmounts: bigint[], onChainCreation: boolean[], ops: string[], emporiumTokenChanges: TokenChanges<bigint>[], subAccount?: SubAccount, feeToken?: string, feeStructureOverride?: FeeStructure, relayOverride?: string, autoDepositBack?: boolean, maxGasInDollar?: string, action?: AdminTransactionType, privateRecipientInfo?: PrivateRecipientInfo): Promise<string>;
114
- proxySwap(erc20Tokens: ERC20Token[], deltaAmounts: bigint[], externalActionId: ExternalActionId, swapData: string, isTheSameChainSwap: boolean, subAccount: SubAccount, feeToken?: string, feeStructureOverride?: FeeStructure, autoDepositBack?: boolean, maxGasInDollar?: string, action?: AdminTransactionType): Promise<string>;
115
+ proxySwap(erc20Tokens: ERC20Token[], deltaAmounts: bigint[], externalActionId: ExternalActionId, swapData: string, isTheSameChainSwap: boolean, subAccount: SubAccount, feeToken?: string, feeStructureOverride?: FeeStructure, autoDepositBack?: boolean, maxGasInDollar?: string, bridgedToken?: ERC20Token, bridgedTokenAmount?: bigint, action?: AdminTransactionType): Promise<string>;
115
116
  proxyToPrivate(erc20Tokens: ERC20Token[], deltaAmountsBase: bigint[], subAccount: SubAccount, recipientInfo: string, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType): Promise<string>;
116
117
  proxySend(erc20Tokens: ERC20Token[], amounts: bigint[], subAccount: SubAccount, recipientAddress: string, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType): Promise<string>;
117
118
  areMerkleTreeUpdatesDisabled(): boolean;
@@ -123,6 +123,9 @@ var fe = class {
123
123
  initUserKeysWithSignature(e) {
124
124
  this.userKeys = new v(e);
125
125
  }
126
+ initUserKeysWithNullifyingKey(e) {
127
+ this.userKeys = new v(void 0, e);
128
+ }
126
129
  async initUserKeysFromSeedPhrases(e) {
127
130
  let t = A(e);
128
131
  this.userKeys = new v(t);
@@ -393,8 +396,8 @@ var fe = class {
393
396
  p
394
397
  ]), ne(this, e, t, n, r, i, a, o, s, c, l, u, d, f, p);
395
398
  }
396
- async proxySwap(e, t, n, r, i, a, o, c, l = !1, u, d) {
397
- return s(x(e)) ? Z(this, e, t, r, a, n, o, c, d) : U(this, e, t, n, r, i, a, o, c, l, u, d);
399
+ async proxySwap(e, t, n, r, i, a, o, c, l = !1, u, d, f, p) {
400
+ return s(x(e)) ? Z(this, e, t, r, a, n, i, o, c, p) : U(this, e, t, n, r, i, a, o, c, l, u, p, d, f);
398
401
  }
399
402
  async proxyToPrivate(e, t, n, r, i, a, o) {
400
403
  return s(x(e)) ? (this.enforceRateLimit(this.proxyToPrivate.name, [
@@ -77,6 +77,7 @@ export interface IHinkal<ConnectorType = unknown> {
77
77
  signSolanaLedgerMessage(): Promise<string>;
78
78
  initUserKeys(mode?: LoginMessageMode): Promise<void>;
79
79
  initUserKeysWithSignature(signature: string): void;
80
+ initUserKeysWithNullifyingKey(nullifyingKey: string): void;
80
81
  initUserKeysFromSeedPhrases(seedPhrases: string[]): Promise<void>;
81
82
  initUserKeysWithEnclaveSignature(signInMode?: LoginMessageMode): Promise<void>;
82
83
  storeAndGetInitialSignature(authSignature: string): Promise<string>;
@@ -97,7 +98,7 @@ export interface IHinkal<ConnectorType = unknown> {
97
98
  signWithSubAccount(chainId: number, messageToSign: string | undefined, typedData: TypedData | undefined, subAccount: SubAccount): Promise<string>;
98
99
  actionPrivateWallet(chainId: number, erc20Tokens: ERC20Token[], deltaAmounts: bigint[], onChainCreation: boolean[], ops: string[], emporiumTokenChanges: TokenChanges<bigint>[], subAccount?: SubAccount, feeToken?: string, feeStructureOverride?: FeeStructure, relayOverride?: string, autoDepositBack?: boolean, maxGasInDollar?: string, action?: AdminTransactionType, privateRecipientInfo?: PrivateRecipientInfo): Promise<string>;
99
100
  actionReceive(erc20Tokens: ERC20Token[], deltaAmounts: bigint[], feeTokens?: string, feeStructureOverride?: FeeStructure, subAccount?: SubAccount, action?: AdminTransactionType): Promise<string>;
100
- proxySwap(erc20Tokens: ERC20Token[], deltaAmounts: bigint[], externalActionId: ExternalActionId, swapData: string, isTheSameChainSwap: boolean, subAccount: SubAccount, feeToken?: string, feeStructureOverride?: FeeStructure, autoDepositBack?: boolean, maxGasInDollar?: string, action?: AdminTransactionType): Promise<string>;
101
+ proxySwap(erc20Tokens: ERC20Token[], deltaAmounts: bigint[], externalActionId: ExternalActionId, swapData: string, isTheSameChainSwap: boolean, subAccount: SubAccount, feeToken?: string, feeStructureOverride?: FeeStructure, autoDepositBack?: boolean, maxGasInDollar?: string, bridgedToken?: ERC20Token, bridgedTokenAmount?: bigint, action?: AdminTransactionType): Promise<string>;
101
102
  proxyToPrivate(erc20Tokens: ERC20Token[], deltaAmountsBase: bigint[], subAccount: SubAccount, recipientInfo: string, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType): Promise<string>;
102
103
  proxySend(erc20Tokens: ERC20Token[], amounts: bigint[], subAccount: SubAccount, recipientAddress: string, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType): Promise<string>;
103
104
  areMerkleTreeUpdatesDisabled(): boolean;
@@ -1 +1 @@
1
- require(`../../constants/protocol.constants.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../functions/utils/token-check.utils.cjs`),n=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),r=require(`../AccountActions/AccountActions.cjs`),i=require(`../../functions/pre-transaction/getFeeStructure.cjs`),a=require(`../../functions/private-wallet/emporium.helpers.cjs`),o=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),s=require(`../../functions/utils/fees.utils.cjs`);var c=async(c,l,u,d,f,p,m)=>{if(!p)throw Error(`hinkalActionReceive: subAccount should be provided`);if(!d)throw Error(`Fee token is required in hinkalActionReceive`);let h=t.validateAndGetChainId(l),g=r.AccountActions.getAddressFromSubAccount(h,p);if(!g)throw Error(`Public account address is not available`);let _=l.map(e=>e.erc20TokenAddress),v=await n.modifyVolatileTokenAmountChanges(h,l,u,g),y=a.createTransaferEmporiumOpsBatch(c,h,_,v),b=await s.calculateModifiedFeeStructureForTokens(h,l,v,f??await i.getFeeStructure(h,d,_,e.ExternalActionId.Emporium,y.map(e=>o.convertEmporiumOpToCallInfo(e,g,h)),10n)),x=l.map((e,t)=>({token:e,amount:-1n*v[t]}));return c.actionPrivateWallet(h,l,v,v.map(()=>!1),y,x,p,d,b,void 0,void 0,void 0,m,void 0)};exports.hinkalActionReceive=c;
1
+ require(`../../constants/protocol.constants.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../functions/utils/token-check.utils.cjs`),n=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),r=require(`../AccountActions/AccountActions.cjs`),i=require(`../../functions/pre-transaction/getFeeStructure.cjs`),a=require(`../../functions/private-wallet/emporium.helpers.cjs`),o=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),s=require(`../../functions/utils/fees.utils.cjs`);var c=async(c,l,u,d,f,p,m)=>{if(!p)throw Error(`hinkalActionReceive: subAccount should be provided`);if(!d)throw Error(`Fee token is required in hinkalActionReceive`);let h=t.validateAndGetChainId(l),g=r.AccountActions.getAddressFromSubAccount(h,p);if(!g)throw Error(`Public account address is not available`);let _=l.map(e=>e.erc20TokenAddress),v=await n.modifyVolatileTokenAmountChanges(h,l,u,g),y=a.createTransaferEmporiumOpsBatch(c,h,_,v),b=await s.calculateModifiedFeeStructureForTokens(h,l,v,f??await i.getFeeStructure(h,d,_,e.ExternalActionId.Emporium,y.map(e=>o.convertEmporiumOpToCallInfo(e,g,h)),25n)),x=l.map((e,t)=>({token:e,amount:-1n*v[t]}));return c.actionPrivateWallet(h,l,v,v.map(()=>!1),y,x,p,d,b,void 0,void 0,void 0,m,void 0)};exports.hinkalActionReceive=c;
@@ -13,7 +13,7 @@ var c = async (c, l, u, d, f, p, m) => {
13
13
  if (!d) throw Error("Fee token is required in hinkalActionReceive");
14
14
  let h = t(l), g = r.getAddressFromSubAccount(h, p);
15
15
  if (!g) throw Error("Public account address is not available");
16
- let _ = l.map((e) => e.erc20TokenAddress), v = await n(h, l, u, g), y = a(c, h, _, v), b = await s(h, l, v, f ?? await i(h, d, _, e.Emporium, y.map((e) => o(e, g, h)), 10n)), x = l.map((e, t) => ({
16
+ let _ = l.map((e) => e.erc20TokenAddress), v = await n(h, l, u, g), y = a(c, h, _, v), b = await s(h, l, v, f ?? await i(h, d, _, e.Emporium, y.map((e) => o(e, g, h)), 25n)), x = l.map((e, t) => ({
17
17
  token: e,
18
18
  amount: -1n * v[t]
19
19
  }));
@@ -1 +1 @@
1
- const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../../functions/utils/addresses.cjs`),o=require(`../../types/external-action.types.cjs`),s=require(`../../types/token.types.cjs`),c=require(`../../API/API.cjs`),l=require(`../../functions/utils/erc20tokenFunctions.cjs`),u=require(`../AccountActions/AccountActions.cjs`),d=require(`../../functions/pre-transaction/getFeeStructure.cjs`),f=require(`../../functions/private-wallet/emporium.helpers.cjs`),p=require(`../../constants/addresses.constants.cjs`),m=require(`../../constants/bridging.constants.cjs`),h=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),g=require(`../../functions/utils/fees.utils.cjs`),_=require(`../../functions/utils/enclave-utxo-storage.cjs`),v=require(`../../functions/utils/bridge-arrival.utils.cjs`),y=require(`../../functions/utils/temp-wallet.utils.cjs`),b=require(`../../API/callNearIntentsAPI.cjs`),x=require(`../../functions/utils/nearIntents.utils.cjs`),S=require(`../../functions/web3/lifiAPI.cjs`),C=require(`../../functions/utils/bridge-claimable-utxo.utils.cjs`);var w=async(e,r,d,m,h,g,_,v)=>{let{chainId:b}=r,x=d.chainId,C=r.erc20TokenAddress,w=p.SWAP_ROUTER_ADDRESSES[o.ExternalActionId.Lifi][b];if(!w)throw Error(`LIFI not configured for chain ${b}`);let T=i.randomBigInt(6),{sourceSubAccount:E,destinationSubAccount:D}=y.deriveBridgeTempWallets(e,b,x,T),O=u.AccountActions.getAddressFromSubAccount(b,E),k=u.AccountActions.getAddressFromSubAccount(x,D);if(!O||!k)throw Error(`Missing temp wallet address for LIFI bridge`);let{lifiDataValue:A,outSwapAmountValue:j,extraNativeTokenFee:M}=await S.getLifiPrice(r,d,m,h,O,k),N={calldata:A,expectedAmount:j,nativeFee:M},P=i.getAmountInWei(r,m),F=Array.from(new Set([b,x])),I=a.hashEthereumAddress(await e.getEthereumAddress());await Promise.all(F.map(e=>c.API.addTemporaryWalletNonce(e,I,Number(T),s.TemporaryWalletRecoveryDestination.Confidential)));let L=n.caseInsensitiveEqual(C,t.zeroAddress),R=N.nativeFee>0n&&!L,z=L?P+N.nativeFee:P,B=[r],V=[-z];if(R){let e=await l.getErc20TokenFromAPI(b,t.zeroAddress);if(!e)throw Error(`Native token not found for bridge fee`);B.push(e),V.push(-N.nativeFee)}let H=f.createLifiBridgeOps(e,b,O,w,C,z,P,N),U=B.map((e,t)=>({token:e,amount:V[t]}));return{tempSubAccount:D,sourceTxHash:await e.actionPrivateWallet(b,B,V,V.map(()=>!1),H,U,E,g??C,_,void 0,!1,void 0,v,void 0),expectedAmount:N.expectedAmount}},T=async(e,t,n,r,o,l,d,f)=>{let p=n.chainId,h=i.randomBigInt(6),g=y.buildTempSubAccountForChain(e,p,h),_=u.AccountActions.getAddressFromSubAccount(p,g);if(!_)throw Error(`Missing temp wallet address for NEAR bridge`);let v=a.hashEthereumAddress(await e.getEthereumAddress());await c.API.addTemporaryWalletNonce(p,v,Number(h),s.TemporaryWalletRecoveryDestination.Confidential);let[S,C]=await Promise.all([x.resolveNearAssetId(t.chainId,t.erc20TokenAddress),x.resolveNearAssetId(p,n.erc20TokenAddress)]),w=i.getAmountInWei(t,r),T=new Date(Date.now()+m.NEAR_BRIDGE_QUOTE_DEADLINE_BUFFER_MS).toISOString(),{quote:E}=await b.getNearIntentsQuote({dry:!1,swapType:`EXACT_INPUT`,slippageTolerance:Math.round(o*1e4)||100,originAsset:S,depositType:`ORIGIN_CHAIN`,destinationAsset:C,amount:w.toString(),recipient:_,recipientType:`DESTINATION_CHAIN`,refundTo:e.userKeys.getNearIntentsAccountId(),refundType:`INTENTS`,deadline:T});if(!E.depositAddress)throw Error(`NEAR Intents quote returned no deposit address`);let D=await e.withdraw([t],[-w],E.depositAddress,!1,l??t.erc20TokenAddress,d,void 0,f);return{tempSubAccount:g,sourceTxHash:typeof D==`string`?D:D.hash,expectedAmount:BigInt(E.amountOut)}},E=async(n,i,a,s,c)=>{let l=i.chainId,p=i.erc20TokenAddress,m=u.AccountActions.getAddressFromSubAccount(l,a);if(!m)throw Error(`Missing temp wallet address for bridge shield`);let{recipientInfo:v,claimable:y}=C.resolveBridgeRecipient(n,c);if(y&&await _.storeClaimableKeyInEnclave(await n.getEthereumAddressByChain(l),y.ethAddress,y.keys.getShieldedPrivateKey(),l,y.signature,n.userKeys.getSignature()),e.isSolanaLike(l))return C.hinkalSolanaShieldBridged(n,i,a,s,v);let b=f.createTransaferEmporiumOpsBatch(n,l,[p],[s]),x=await g.calculateModifiedFeeStructure(l,i,s,await d.getFeeStructure(l,p,[p],o.ExternalActionId.Emporium,b.map(e=>h.convertEmporiumOpToCallInfo(e,m,l)),t.PAY_SEND_VARIABLE_RATE)),S=s-g.calculateTotalFee(s,x);if(S<=0n)throw Error(r.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);return{destTxHash:await n.proxyToPrivate([i],[S],a,v,x.feeToken,x),shieldedAmount:S}},D=async(t,n,r,i,a,o=m.DEFAULT_BRIDGING_SLIPPAGE_DECIMAL,s,c,l)=>{let{tempSubAccount:d,sourceTxHash:f,expectedAmount:p}=e.isNearIntentsBridgeSource(n.chainId)?await T(t,n,r,i,o,s,c,l):await w(t,n,r,i,o,s,c,l),h=u.AccountActions.getAddressFromSubAccount(r.chainId,d);if(!h)throw Error(`Missing temp wallet address for bridge`);let{destTxHash:g,shieldedAmount:_}=await E(t,r,d,await v.waitForBridgeArrival(r.chainId,h,r.erc20TokenAddress,p,o),a);return{sourceTxHash:f,destTxHash:g,destinationTokenAmount:_.toString()}};exports.hinkalBridgePrivateToPrivate=D;
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../../functions/utils/addresses.cjs`),o=require(`../../types/external-action.types.cjs`),s=require(`../../types/token.types.cjs`),c=require(`../../API/API.cjs`),l=require(`../../functions/utils/erc20tokenFunctions.cjs`),u=require(`../AccountActions/AccountActions.cjs`),d=require(`../../functions/pre-transaction/getFeeStructure.cjs`),f=require(`../../functions/private-wallet/emporium.helpers.cjs`),p=require(`../../constants/addresses.constants.cjs`),m=require(`../../constants/bridging.constants.cjs`),h=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),g=require(`../../functions/utils/fees.utils.cjs`),_=require(`../../functions/utils/enclave-utxo-storage.cjs`),v=require(`../../functions/utils/bridge-arrival.utils.cjs`),y=require(`../../functions/utils/temp-wallet.utils.cjs`),b=require(`../../API/callNearIntentsAPI.cjs`),x=require(`../../functions/utils/nearIntents.utils.cjs`),S=require(`../../functions/web3/lifiAPI.cjs`),C=require(`../../functions/utils/bridge-claimable-utxo.utils.cjs`);var w=async(e,r,d,m,h,g,_,v)=>{let{chainId:b}=r,x=d.chainId,C=r.erc20TokenAddress,w=p.SWAP_ROUTER_ADDRESSES[o.ExternalActionId.Lifi][b];if(!w)throw Error(`LIFI not configured for chain ${b}`);let T=i.randomBigInt(6),{sourceSubAccount:E,destinationSubAccount:D}=y.deriveBridgeTempWallets(e,b,x,T),O=u.AccountActions.getAddressFromSubAccount(b,E),k=u.AccountActions.getAddressFromSubAccount(x,D);if(!O||!k)throw Error(`Missing temp wallet address for LIFI bridge`);let{lifiDataValue:A,outSwapAmountValue:j,extraNativeTokenFee:M}=await S.getLifiPrice(r,d,m,h,O,k),N={calldata:A,expectedAmount:j,nativeFee:M},P=i.getAmountInWei(r,m),F=Array.from(new Set([b,x])),I=a.hashEthereumAddress(await e.getEthereumAddress());await Promise.all(F.map(e=>c.API.addTemporaryWalletNonce(e,I,Number(T),s.TemporaryWalletRecoveryDestination.Confidential)));let L=n.caseInsensitiveEqual(C,t.zeroAddress),R=N.nativeFee>0n&&!L,z=L?P+N.nativeFee:P,B=[r],V=[-z];if(R){let e=await l.getErc20TokenFromAPI(b,t.zeroAddress);if(!e)throw Error(`Native token not found for bridge fee`);B.push(e),V.push(-N.nativeFee)}let H=f.createLifiBridgeOps(e,b,O,w,C,z,P,N),U=B.map((e,t)=>({token:e,amount:V[t]}));return{tempSubAccount:D,sourceTxHash:await e.actionPrivateWallet(b,B,V,V.map(()=>!1),H,U,E,g??C,_,void 0,!1,void 0,v,void 0),expectedAmount:N.expectedAmount}},T=async(e,t,n,r,o,l,d,f)=>{let p=n.chainId,h=i.randomBigInt(6),g=y.buildTempSubAccountForChain(e,p,h),_=u.AccountActions.getAddressFromSubAccount(p,g);if(!_)throw Error(`Missing temp wallet address for NEAR bridge`);let v=a.hashEthereumAddress(await e.getEthereumAddress());await c.API.addTemporaryWalletNonce(p,v,Number(h),s.TemporaryWalletRecoveryDestination.Confidential);let[S,C]=await Promise.all([x.resolveNearAssetId(t.chainId,t.erc20TokenAddress),x.resolveNearAssetId(p,n.erc20TokenAddress)]),w=i.getAmountInWei(t,r),T=new Date(Date.now()+m.NEAR_BRIDGE_QUOTE_DEADLINE_BUFFER_MS).toISOString(),{quote:E}=await b.getNearIntentsQuote({dry:!1,swapType:`EXACT_INPUT`,slippageTolerance:Math.round(o*1e4)||100,originAsset:S,depositType:`ORIGIN_CHAIN`,destinationAsset:C,amount:w.toString(),recipient:_,recipientType:`DESTINATION_CHAIN`,refundTo:e.userKeys.getNearIntentsAccountId(),refundType:`INTENTS`,deadline:T});if(!E.depositAddress)throw Error(`NEAR Intents quote returned no deposit address`);let D=await e.withdraw([t],[-w],E.depositAddress,!1,l??t.erc20TokenAddress,d,void 0,f);return{tempSubAccount:g,sourceTxHash:typeof D==`string`?D:D.hash,expectedAmount:BigInt(E.amountOut)}},E=async(n,i,a,s,c)=>{let l=i.chainId,p=i.erc20TokenAddress,m=u.AccountActions.getAddressFromSubAccount(l,a);if(!m)throw Error(`Missing temp wallet address for bridge shield`);let{recipientInfo:v,claimable:y}=C.resolveBridgeRecipient(n,c);if(y&&await _.storeClaimableKeyInEnclave(await n.getEthereumAddressByChain(l),y.ethAddress,y.keys.getShieldedPrivateKey(),l,y.signature,n.userKeys.getSignature()),e.isSolanaLike(l))return C.hinkalSolanaShieldBridged(n,i,a,s,v,t.HINKAL_SHIELD_VARIABLE_RATE);let b=f.createTransaferEmporiumOpsBatch(n,l,[p],[s]),x=await g.calculateModifiedFeeStructure(l,i,s,await d.getFeeStructure(l,p,[p],o.ExternalActionId.Emporium,b.map(e=>h.convertEmporiumOpToCallInfo(e,m,l)),t.HINKAL_PRIVATE_SEND_VARIABLE_RATE)),S=s-g.calculateTotalFee(s,x);if(S<=0n)throw Error(r.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);return{destTxHash:await n.proxyToPrivate([i],[S],a,v,x.feeToken,x),shieldedAmount:S}},D=async(t,n,r,i,a,o=m.DEFAULT_BRIDGING_SLIPPAGE_DECIMAL,s,c,l)=>{let{tempSubAccount:d,sourceTxHash:f,expectedAmount:p}=e.isNearIntentsBridgeSource(n.chainId)?await T(t,n,r,i,o,s,c,l):await w(t,n,r,i,o,s,c,l),h=u.AccountActions.getAddressFromSubAccount(r.chainId,d);if(!h)throw Error(`Missing temp wallet address for bridge`);let{destTxHash:g,shieldedAmount:_}=await E(t,r,d,await v.waitForBridgeArrival(r.chainId,h,r.erc20TokenAddress,p,o),a);return{sourceTxHash:f,destTxHash:g,destinationTokenAmount:_.toString()}};exports.hinkalBridgePrivateToPrivate=D;
@@ -1,64 +1,64 @@
1
1
  import { isNearIntentsBridgeSource as e, isSolanaLike as t } from "../../constants/chains.constants.mjs";
2
- import { PAY_SEND_VARIABLE_RATE as n, zeroAddress as r } from "../../constants/protocol.constants.mjs";
3
- import { caseInsensitiveEqual as i } from "../../functions/utils/caseInsensitive.utils.mjs";
4
- import { transactionErrorCodes as a } from "../../error-handling/error-codes.constants.mjs";
5
- import { getAmountInWei as o, randomBigInt as s } from "../../functions/web3/etherFunctions.mjs";
6
- import { hashEthereumAddress as c } from "../../functions/utils/addresses.mjs";
7
- import { ExternalActionId as l } from "../../types/external-action.types.mjs";
8
- import { TemporaryWalletRecoveryDestination as u } from "../../types/token.types.mjs";
9
- import { API as d } from "../../API/API.mjs";
10
- import { getErc20TokenFromAPI as f } from "../../functions/utils/erc20tokenFunctions.mjs";
11
- import { AccountActions as p } from "../AccountActions/AccountActions.mjs";
12
- import { getFeeStructure as m } from "../../functions/pre-transaction/getFeeStructure.mjs";
13
- import { createLifiBridgeOps as h, createTransaferEmporiumOpsBatch as g } from "../../functions/private-wallet/emporium.helpers.mjs";
14
- import { SWAP_ROUTER_ADDRESSES as _ } from "../../constants/addresses.constants.mjs";
15
- import { DEFAULT_BRIDGING_SLIPPAGE_DECIMAL as v, NEAR_BRIDGE_QUOTE_DEADLINE_BUFFER_MS as y } from "../../constants/bridging.constants.mjs";
16
- import { convertEmporiumOpToCallInfo as b } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
17
- import { calculateModifiedFeeStructure as x, calculateTotalFee as S } from "../../functions/utils/fees.utils.mjs";
18
- import { storeClaimableKeyInEnclave as C } from "../../functions/utils/enclave-utxo-storage.mjs";
19
- import { waitForBridgeArrival as w } from "../../functions/utils/bridge-arrival.utils.mjs";
20
- import { buildTempSubAccountForChain as T, deriveBridgeTempWallets as E } from "../../functions/utils/temp-wallet.utils.mjs";
21
- import { getNearIntentsQuote as D } from "../../API/callNearIntentsAPI.mjs";
22
- import { resolveNearAssetId as O } from "../../functions/utils/nearIntents.utils.mjs";
23
- import { getLifiPrice as k } from "../../functions/web3/lifiAPI.mjs";
24
- import { hinkalSolanaShieldBridged as A, resolveBridgeRecipient as j } from "../../functions/utils/bridge-claimable-utxo.utils.mjs";
2
+ import { HINKAL_PRIVATE_SEND_VARIABLE_RATE as n, HINKAL_SHIELD_VARIABLE_RATE as r, zeroAddress as i } from "../../constants/protocol.constants.mjs";
3
+ import { caseInsensitiveEqual as a } from "../../functions/utils/caseInsensitive.utils.mjs";
4
+ import { transactionErrorCodes as o } from "../../error-handling/error-codes.constants.mjs";
5
+ import { getAmountInWei as s, randomBigInt as c } from "../../functions/web3/etherFunctions.mjs";
6
+ import { hashEthereumAddress as l } from "../../functions/utils/addresses.mjs";
7
+ import { ExternalActionId as u } from "../../types/external-action.types.mjs";
8
+ import { TemporaryWalletRecoveryDestination as d } from "../../types/token.types.mjs";
9
+ import { API as f } from "../../API/API.mjs";
10
+ import { getErc20TokenFromAPI as p } from "../../functions/utils/erc20tokenFunctions.mjs";
11
+ import { AccountActions as m } from "../AccountActions/AccountActions.mjs";
12
+ import { getFeeStructure as h } from "../../functions/pre-transaction/getFeeStructure.mjs";
13
+ import { createLifiBridgeOps as g, createTransaferEmporiumOpsBatch as _ } from "../../functions/private-wallet/emporium.helpers.mjs";
14
+ import { SWAP_ROUTER_ADDRESSES as v } from "../../constants/addresses.constants.mjs";
15
+ import { DEFAULT_BRIDGING_SLIPPAGE_DECIMAL as y, NEAR_BRIDGE_QUOTE_DEADLINE_BUFFER_MS as b } from "../../constants/bridging.constants.mjs";
16
+ import { convertEmporiumOpToCallInfo as x } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
17
+ import { calculateModifiedFeeStructure as S, calculateTotalFee as C } from "../../functions/utils/fees.utils.mjs";
18
+ import { storeClaimableKeyInEnclave as w } from "../../functions/utils/enclave-utxo-storage.mjs";
19
+ import { waitForBridgeArrival as T } from "../../functions/utils/bridge-arrival.utils.mjs";
20
+ import { buildTempSubAccountForChain as E, deriveBridgeTempWallets as D } from "../../functions/utils/temp-wallet.utils.mjs";
21
+ import { getNearIntentsQuote as O } from "../../API/callNearIntentsAPI.mjs";
22
+ import { resolveNearAssetId as k } from "../../functions/utils/nearIntents.utils.mjs";
23
+ import { getLifiPrice as A } from "../../functions/web3/lifiAPI.mjs";
24
+ import { hinkalSolanaShieldBridged as j, resolveBridgeRecipient as M } from "../../functions/utils/bridge-claimable-utxo.utils.mjs";
25
25
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.ts
26
- var M = async (e, t, n, a, m, g, v, y) => {
27
- let { chainId: b } = t, x = n.chainId, S = t.erc20TokenAddress, C = _[l.Lifi][b];
26
+ var N = async (e, t, n, r, o, h, _, y) => {
27
+ let { chainId: b } = t, x = n.chainId, S = t.erc20TokenAddress, C = v[u.Lifi][b];
28
28
  if (!C) throw Error(`LIFI not configured for chain ${b}`);
29
- let w = s(6), { sourceSubAccount: T, destinationSubAccount: D } = E(e, b, x, w), O = p.getAddressFromSubAccount(b, T), A = p.getAddressFromSubAccount(x, D);
30
- if (!O || !A) throw Error("Missing temp wallet address for LIFI bridge");
31
- let { lifiDataValue: j, outSwapAmountValue: M, extraNativeTokenFee: N } = await k(t, n, a, m, O, A), P = {
29
+ let w = c(6), { sourceSubAccount: T, destinationSubAccount: E } = D(e, b, x, w), O = m.getAddressFromSubAccount(b, T), k = m.getAddressFromSubAccount(x, E);
30
+ if (!O || !k) throw Error("Missing temp wallet address for LIFI bridge");
31
+ let { lifiDataValue: j, outSwapAmountValue: M, extraNativeTokenFee: N } = await A(t, n, r, o, O, k), P = {
32
32
  calldata: j,
33
33
  expectedAmount: M,
34
34
  nativeFee: N
35
- }, F = o(t, a), I = Array.from(new Set([b, x])), L = c(await e.getEthereumAddress());
36
- await Promise.all(I.map((e) => d.addTemporaryWalletNonce(e, L, Number(w), u.Confidential)));
37
- let R = i(S, r), z = P.nativeFee > 0n && !R, B = R ? F + P.nativeFee : F, V = [t], H = [-B];
35
+ }, F = s(t, r), I = Array.from(new Set([b, x])), L = l(await e.getEthereumAddress());
36
+ await Promise.all(I.map((e) => f.addTemporaryWalletNonce(e, L, Number(w), d.Confidential)));
37
+ let R = a(S, i), z = P.nativeFee > 0n && !R, B = R ? F + P.nativeFee : F, V = [t], H = [-B];
38
38
  if (z) {
39
- let e = await f(b, r);
39
+ let e = await p(b, i);
40
40
  if (!e) throw Error("Native token not found for bridge fee");
41
41
  V.push(e), H.push(-P.nativeFee);
42
42
  }
43
- let U = h(e, b, O, C, S, B, F, P), W = V.map((e, t) => ({
43
+ let U = g(e, b, O, C, S, B, F, P), W = V.map((e, t) => ({
44
44
  token: e,
45
45
  amount: H[t]
46
46
  }));
47
47
  return {
48
- tempSubAccount: D,
49
- sourceTxHash: await e.actionPrivateWallet(b, V, H, H.map(() => !1), U, W, T, g ?? S, v, void 0, !1, void 0, y, void 0),
48
+ tempSubAccount: E,
49
+ sourceTxHash: await e.actionPrivateWallet(b, V, H, H.map(() => !1), U, W, T, h ?? S, _, void 0, !1, void 0, y, void 0),
50
50
  expectedAmount: P.expectedAmount
51
51
  };
52
- }, N = async (e, t, n, r, i, a, l, f) => {
53
- let m = n.chainId, h = s(6), g = T(e, m, h), _ = p.getAddressFromSubAccount(m, g);
52
+ }, P = async (e, t, n, r, i, a, o, u) => {
53
+ let p = n.chainId, h = c(6), g = E(e, p, h), _ = m.getAddressFromSubAccount(p, g);
54
54
  if (!_) throw Error("Missing temp wallet address for NEAR bridge");
55
- let v = c(await e.getEthereumAddress());
56
- await d.addTemporaryWalletNonce(m, v, Number(h), u.Confidential);
57
- let [b, x] = await Promise.all([O(t.chainId, t.erc20TokenAddress), O(m, n.erc20TokenAddress)]), S = o(t, r), C = new Date(Date.now() + y).toISOString(), { quote: w } = await D({
55
+ let v = l(await e.getEthereumAddress());
56
+ await f.addTemporaryWalletNonce(p, v, Number(h), d.Confidential);
57
+ let [y, x] = await Promise.all([k(t.chainId, t.erc20TokenAddress), k(p, n.erc20TokenAddress)]), S = s(t, r), C = new Date(Date.now() + b).toISOString(), { quote: w } = await O({
58
58
  dry: !1,
59
59
  swapType: "EXACT_INPUT",
60
60
  slippageTolerance: Math.round(i * 1e4) || 100,
61
- originAsset: b,
61
+ originAsset: y,
62
62
  depositType: "ORIGIN_CHAIN",
63
63
  destinationAsset: x,
64
64
  amount: S.toString(),
@@ -69,27 +69,27 @@ var M = async (e, t, n, a, m, g, v, y) => {
69
69
  deadline: C
70
70
  });
71
71
  if (!w.depositAddress) throw Error("NEAR Intents quote returned no deposit address");
72
- let E = await e.withdraw([t], [-S], w.depositAddress, !1, a ?? t.erc20TokenAddress, l, void 0, f);
72
+ let T = await e.withdraw([t], [-S], w.depositAddress, !1, a ?? t.erc20TokenAddress, o, void 0, u);
73
73
  return {
74
74
  tempSubAccount: g,
75
- sourceTxHash: typeof E == "string" ? E : E.hash,
75
+ sourceTxHash: typeof T == "string" ? T : T.hash,
76
76
  expectedAmount: BigInt(w.amountOut)
77
77
  };
78
- }, P = async (e, r, i, o, s) => {
79
- let c = r.chainId, u = r.erc20TokenAddress, d = p.getAddressFromSubAccount(c, i);
80
- if (!d) throw Error("Missing temp wallet address for bridge shield");
81
- let { recipientInfo: f, claimable: h } = j(e, s);
82
- if (h && await C(await e.getEthereumAddressByChain(c), h.ethAddress, h.keys.getShieldedPrivateKey(), c, h.signature, e.userKeys.getSignature()), t(c)) return A(e, r, i, o, f);
83
- let _ = g(e, c, [u], [o]), v = await x(c, r, o, await m(c, u, [u], l.Emporium, _.map((e) => b(e, d, c)), n)), y = o - S(o, v);
84
- if (y <= 0n) throw Error(a.INSUFFICIENT_FUNDS_TO_TRANSACT);
78
+ }, F = async (e, i, a, s, c) => {
79
+ let l = i.chainId, d = i.erc20TokenAddress, f = m.getAddressFromSubAccount(l, a);
80
+ if (!f) throw Error("Missing temp wallet address for bridge shield");
81
+ let { recipientInfo: p, claimable: g } = M(e, c);
82
+ if (g && await w(await e.getEthereumAddressByChain(l), g.ethAddress, g.keys.getShieldedPrivateKey(), l, g.signature, e.userKeys.getSignature()), t(l)) return j(e, i, a, s, p, r);
83
+ let v = _(e, l, [d], [s]), y = await S(l, i, s, await h(l, d, [d], u.Emporium, v.map((e) => x(e, f, l)), n)), b = s - C(s, y);
84
+ if (b <= 0n) throw Error(o.INSUFFICIENT_FUNDS_TO_TRANSACT);
85
85
  return {
86
- destTxHash: await e.proxyToPrivate([r], [y], i, f, v.feeToken, v),
87
- shieldedAmount: y
86
+ destTxHash: await e.proxyToPrivate([i], [b], a, p, y.feeToken, y),
87
+ shieldedAmount: b
88
88
  };
89
- }, F = async (t, n, r, i, a, o = v, s, c, l) => {
90
- let { tempSubAccount: u, sourceTxHash: d, expectedAmount: f } = e(n.chainId) ? await N(t, n, r, i, o, s, c, l) : await M(t, n, r, i, o, s, c, l), m = p.getAddressFromSubAccount(r.chainId, u);
91
- if (!m) throw Error("Missing temp wallet address for bridge");
92
- let { destTxHash: h, shieldedAmount: g } = await P(t, r, u, await w(r.chainId, m, r.erc20TokenAddress, f, o), a);
89
+ }, I = async (t, n, r, i, a, o = y, s, c, l) => {
90
+ let { tempSubAccount: u, sourceTxHash: d, expectedAmount: f } = e(n.chainId) ? await P(t, n, r, i, o, s, c, l) : await N(t, n, r, i, o, s, c, l), p = m.getAddressFromSubAccount(r.chainId, u);
91
+ if (!p) throw Error("Missing temp wallet address for bridge");
92
+ let { destTxHash: h, shieldedAmount: g } = await F(t, r, u, await T(r.chainId, p, r.erc20TokenAddress, f, o), a);
93
93
  return {
94
94
  sourceTxHash: d,
95
95
  destTxHash: h,
@@ -97,4 +97,4 @@ var M = async (e, t, n, a, m, g, v, y) => {
97
97
  };
98
98
  };
99
99
  //#endregion
100
- export { F as hinkalBridgePrivateToPrivate };
100
+ export { I as hinkalBridgePrivateToPrivate };
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../utxo/Utxo.cjs`),a=require(`../../functions/utils/tron.utils.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../types/external-action.types.cjs`),c=require(`../../types/transact.types.cjs`),l=require(`../../functions/utils/token-check.utils.cjs`),u=require(`../crypto-keys/encryptDecryptUtxo.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`),p=require(`../../functions/pre-transaction/speculativeUtxo.cjs`),m=require(`../../functions/web3/functionCalls/transactCallDirectTron.cjs`),h=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),g=require(`./hinkalTransact.cjs`);require(`../../functions/index.cjs`);const _=require(`./hinkalDepositOnChainUtxos.cjs`);let v=require(`ethers`);var y=async(e,o,s,l,u,f,m,h)=>{if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let _=s.erc20TokenAddress,[v,y]=await Promise.all([e.getRandomRelay(o),e.getEthereumAddressByChain(o)]);if(!v)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let b=e.generateProofRemotely?5:1,x=[],S=a.addressToHexFormat(y);for(let r=0;r<l.length;r+=b){let s=l.slice(r,r+b),y=await Promise.all(s.map(async({recipientAddress:s,utxo:l},y)=>{let b=r+y,x=a.addressToHexFormat(s),C=n.caseInsensitiveEqual(l.erc20TokenAddress,_)?l:i.Utxo.createFrom(l,{erc20TokenAddress:_}),w=d.constructAdminData(f,o,[_],[-l.amount],S),{zkCallData:T,circomData:E,dimData:D,commitmentValidationData:O,tronProofSignature:k}=await g.hinkalTransact(e,{chainId:o,erc20Addresses:[_],amountChanges:[-l.amount],externalAddress:x,feeStructure:u,relay:v??t.zeroAddress,inputUtxos:[[C]],useBlockedUtxos:!0,speculative:h&&{pendingLeaves:h,inputUtxos:[[p.toSpeculativeUtxo(C)]]},submit:{mode:c.SubmitMode.ProofOnly},skipLock:!0});return{zkCallData:T,dimData:D,circomData:E,commitmentValidationData:O,adminData:w,recipientAddress:s,tronProofSignature:k,destinationChainId:m?.chainId,destinationTokenAddress:m?.tokenAddress,destinationTokenAmount:m?.tokenAmounts?.[b]}}));x.push(...y)}return x},b=async(e,t,n,r,i)=>{let{chainId:a,hashedEthereumAddress:o,feeStructure:s,action:c,destination:l}=i,{txCompletionTime:u,ref:d,hashedDashboardAccountId:f,preEstimateGas:p}=i,m=n.map(e=>e+s.flatFee),g=await _.prepareDepositOnChainUtxos(e,a,[t],[m]),{depositedUtxos:v,pendingLeaves:b}=g,x=v[0].map((e,t)=>({recipientAddress:r[t],utxo:e})),[S,C]=await Promise.all([_.submitDepositOnChainUtxos(e,g,p),y(e,a,t,x,s,c,l,b)]);return{depositTxHash:S,scheduleId:await h.transactCallRelayerBatch(a,C,o,u,d,f,S)}},x=async(e,t,n,r,i)=>{let{chainId:o,ethereumAddress:s,hashedEthereumAddress:l,feeStructure:d,action:f,destination:p}=i,{txCompletionTime:_,ref:b,hashedDashboardAccountId:x,preEstimateGas:S}=i,C=n.map(e=>e+d.flatFee),w=C.reduce((e,t)=>e+t,0n),T=await g.hinkalTransact(e,{chainId:o,erc20Addresses:[t.erc20TokenAddress],amountChanges:[w],externalAddress:s,selfOutputAmounts:C,createBlockedUtxos:!0,forceEmptyUtxos:!0,submit:{mode:c.SubmitMode.ProofOnly}}),E=T.circomData.encryptedOutputs?.[0];if(!E||E.length!==C.length)throw Error(`Deposit proof is missing encryptedOutputs for the deposited UTXOs`);let D=E.map((t,n)=>({recipientAddress:r[n],utxo:u.decryptUtxo(v.ethers.getBytes(t),e.userKeys)})),O=T.circomData.outCommitments.flat().map(e=>BigInt(e)).filter(e=>e!==0n).map(e=>e.toString()),[k,A]=await Promise.all([(async()=>{a.swapTronBCoordinate(T.zkCallData);let n=await m.transactCallDirectTron(e,o,w,t,T.zkCallData,T.circomData,T.dimData,void 0,void 0,S,T.tronProofSignature);if(!n)throw Error(`Deposit transaction hash not found`);return n})(),y(e,o,t,D,d,f,p,O)]);return{depositTxHash:k,scheduleId:await h.transactCallRelayerBatch(o,A,l,_,b,x,k)}},S=async(t,n,r,i,c,u,d,p,m,h=!0,g)=>{let _=l.validateAndGetChainId([n]),v=n.erc20TokenAddress,y=a.addressToHexFormat(await t.getEthereumAddressByChain(_)),S={chainId:_,ethereumAddress:y,hashedEthereumAddress:o.hashEthereumAddress(y),feeStructure:u??await f.getFeeStructure(_,v,[v],s.ExternalActionId.Transact,[],10n),txCompletionTime:c,ref:d,action:p,hashedDashboardAccountId:m?o.hashString(m):void 0,preEstimateGas:h,destination:g};if(!e.isTronLike(_))return b(t,n,r,i,S);if(r.length>4)throw Error(`Tron supports at most 4 recipients per deposit - no circuit emits more outputs`);return x(t,n,r,i,S)};exports.hinkalDepositAndWithdraw=S;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../utxo/Utxo.cjs`),a=require(`../../functions/utils/tron.utils.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../types/external-action.types.cjs`),c=require(`../../types/transact.types.cjs`),l=require(`../../functions/utils/token-check.utils.cjs`),u=require(`../crypto-keys/encryptDecryptUtxo.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`),p=require(`../../functions/pre-transaction/speculativeUtxo.cjs`),m=require(`../../functions/web3/functionCalls/transactCallDirectTron.cjs`),h=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),g=require(`./hinkalTransact.cjs`);require(`../../functions/index.cjs`);const _=require(`./hinkalDepositOnChainUtxos.cjs`);let v=require(`ethers`);var y=async(e,o,s,l,u,f,m,h)=>{if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let _=s.erc20TokenAddress,[v,y]=await Promise.all([e.getRandomRelay(o),e.getEthereumAddressByChain(o)]);if(!v)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let b=e.generateProofRemotely?5:1,x=[],S=a.addressToHexFormat(y);for(let r=0;r<l.length;r+=b){let s=l.slice(r,r+b),y=await Promise.all(s.map(async({recipientAddress:s,utxo:l},y)=>{let b=r+y,x=a.addressToHexFormat(s),C=n.caseInsensitiveEqual(l.erc20TokenAddress,_)?l:i.Utxo.createFrom(l,{erc20TokenAddress:_}),w=d.constructAdminData(f,o,[_],[-l.amount],S),{zkCallData:T,circomData:E,dimData:D,commitmentValidationData:O,tronProofSignature:k}=await g.hinkalTransact(e,{chainId:o,erc20Addresses:[_],amountChanges:[-l.amount],externalAddress:x,feeStructure:u,relay:v??t.zeroAddress,inputUtxos:[[C]],useBlockedUtxos:!0,speculative:h&&{pendingLeaves:h,inputUtxos:[[p.toSpeculativeUtxo(C)]]},submit:{mode:c.SubmitMode.ProofOnly},skipLock:!0});return{zkCallData:T,dimData:D,circomData:E,commitmentValidationData:O,adminData:w,recipientAddress:s,tronProofSignature:k,destinationChainId:m?.chainId,destinationTokenAddress:m?.tokenAddress,destinationTokenAmount:m?.tokenAmounts?.[b]}}));x.push(...y)}return x},b=async(e,t,n,r,i)=>{let{chainId:a,hashedEthereumAddress:o,feeStructure:s,action:c,destination:l}=i,{txCompletionTime:u,ref:d,hashedDashboardAccountId:f,preEstimateGas:p}=i,m=n.map(e=>e+s.flatFee),g=await _.prepareDepositOnChainUtxos(e,a,[t],[m]),{depositedUtxos:v,pendingLeaves:b}=g,x=v[0].map((e,t)=>({recipientAddress:r[t],utxo:e})),[S,C]=await Promise.all([_.submitDepositOnChainUtxos(e,g,p),y(e,a,t,x,s,c,l,b)]);return{depositTxHash:S,scheduleId:await h.transactCallRelayerBatch(a,C,o,u,d,f,S)}},x=async(e,t,n,r,i)=>{let{chainId:o,ethereumAddress:s,hashedEthereumAddress:l,feeStructure:d,action:f,destination:p}=i,{txCompletionTime:_,ref:b,hashedDashboardAccountId:x,preEstimateGas:S}=i,C=n.map(e=>e+d.flatFee),w=C.reduce((e,t)=>e+t,0n),T=await g.hinkalTransact(e,{chainId:o,erc20Addresses:[t.erc20TokenAddress],amountChanges:[w],externalAddress:s,selfOutputAmounts:C,createBlockedUtxos:!0,forceEmptyUtxos:!0,submit:{mode:c.SubmitMode.ProofOnly}}),E=T.circomData.encryptedOutputs?.[0];if(!E||E.length!==C.length)throw Error(`Deposit proof is missing encryptedOutputs for the deposited UTXOs`);let D=E.map((t,n)=>({recipientAddress:r[n],utxo:u.decryptUtxo(v.ethers.getBytes(t),e.userKeys)})),O=T.circomData.outCommitments.flat().map(e=>BigInt(e)).filter(e=>e!==0n).map(e=>e.toString()),[k,A]=await Promise.all([(async()=>{a.swapTronBCoordinate(T.zkCallData);let n=await m.transactCallDirectTron(e,o,w,t,T.zkCallData,T.circomData,T.dimData,void 0,void 0,S,T.tronProofSignature);if(!n)throw Error(`Deposit transaction hash not found`);return n})(),y(e,o,t,D,d,f,p,O)]);return{depositTxHash:k,scheduleId:await h.transactCallRelayerBatch(o,A,l,_,b,x,k)}},S=async(t,n,r,i,c,u,d,p,m,h=!0,g)=>{let _=l.validateAndGetChainId([n]),v=n.erc20TokenAddress,y=a.addressToHexFormat(await t.getEthereumAddressByChain(_)),S={chainId:_,ethereumAddress:y,hashedEthereumAddress:o.hashEthereumAddress(y),feeStructure:u??await f.getFeeStructure(_,v,[v],s.ExternalActionId.Transact,[],25n),txCompletionTime:c,ref:d,action:p,hashedDashboardAccountId:m?o.hashString(m):void 0,preEstimateGas:h,destination:g};if(!e.isTronLike(_))return b(t,n,r,i,S);if(r.length>4)throw Error(`Tron supports at most 4 recipients per deposit - no circuit emits more outputs`);return x(t,n,r,i,S)};exports.hinkalDepositAndWithdraw=S;
@@ -97,7 +97,7 @@ var S = async (e, o, s, c, l, d, f, m) => {
97
97
  chainId: v,
98
98
  ethereumAddress: b,
99
99
  hashedEthereumAddress: s(b),
100
- feeStructure: u ?? await m(v, y, [y], l.Transact, [], 10n),
100
+ feeStructure: u ?? await m(v, y, [y], l.Transact, [], 25n),
101
101
  txCompletionTime: o,
102
102
  ref: f,
103
103
  action: p,
@@ -1 +1 @@
1
- require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../types/external-action.types.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../AccountActions/AccountActions.cjs`),i=require(`../../functions/pre-transaction/getFeeStructure.cjs`),a=require(`../../constants/addresses.constants.cjs`),o=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),s=require(`../../functions/private-wallet/emporium.swap.helpers.cjs`);var c=async(c,l,u,d,f,p,m,h,g,_=!1,v,y)=>{if(!h)throw Error(`Fee token is required in hinkalProxySwap`);let b=n.validateAndGetChainId(l),x=r.AccountActions.getAddressFromSubAccount(b,m);if(!x)throw Error(`Public account address is not available`);let S=l.map(e=>e.erc20TokenAddress),C=await c.getRandomRelay(b,!0);if(!C)throw Error(e.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let w=await s.createSwapToEmporiumOps(c,b,d,a.SWAP_ROUTER_ADDRESSES[d][b],f,S[0],u[0],u[1],S[1],p,x,C,!0),T=g??await i.getFeeStructure(b,h,S,t.ExternalActionId.Emporium,w.map(e=>o.convertEmporiumOpToCallInfo(e,x,b)),35n),E=l.map((e,t)=>({token:e,amount:u[t]}));return c.actionPrivateWallet(b,[],[],[],w,E,m,h,T,C,_,v,y,void 0)};exports.hinkalProxySwap=c;
1
+ require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../types/external-action.types.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../AccountActions/AccountActions.cjs`),i=require(`../../functions/pre-transaction/getFeeStructure.cjs`),a=require(`../../constants/addresses.constants.cjs`),o=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),s=require(`../../functions/utils/fees.utils.cjs`),c=require(`../../functions/private-wallet/emporium.swap.helpers.cjs`);var l=async(l,u,d,f,p,m,h,g,_,v=!1,y,b,x,S)=>{if(!g)throw Error(`Fee token is required in hinkalProxySwap`);let C=n.validateAndGetChainId(u),w=r.AccountActions.getAddressFromSubAccount(C,h);if(!w)throw Error(`Public account address is not available`);let T=u.map(e=>e.erc20TokenAddress),E=await l.getRandomRelay(C,!0);if(!E)throw Error(e.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let D=await c.createSwapToEmporiumOps(l,C,f,a.SWAP_ROUTER_ADDRESSES[f][C],p,T[0],d[0],d[1],T[1],m,w,E,!0),O=_??await i.getFeeStructure(C,g,T,t.ExternalActionId.Emporium,D.map(e=>o.convertEmporiumOpToCallInfo(e,w,C)),35n),k=u.map((e,t)=>({token:e,amount:d[t]})),A=x&&S!==void 0?await s.calculateModifiedFeeStructure(C,x,S,O):O;return l.actionPrivateWallet(C,[],[],[],D,k,h,g,A,E,v,y,b,void 0)};exports.hinkalProxySwap=l;
@@ -4,4 +4,4 @@ import { FeeStructure } from '../../types/hinkal.types';
4
4
  import { IHinkal } from './IHinkal';
5
5
  import { SubAccount } from '../../types/proxy.types';
6
6
  import { AdminTransactionType } from '../../types/admin.types';
7
- export declare const hinkalProxySwap: (hinkal: IHinkal, erc20Tokens: ERC20Token[], deltaAmounts: bigint[], externalActionId: ExternalActionId, data: string, isTheSameChainSwap: boolean, subAccount: SubAccount, feeToken?: string, feeStructureOverride?: FeeStructure, autoDepositBack?: boolean, maxGasInDollar?: string, action?: AdminTransactionType) => Promise<string>;
7
+ export declare const hinkalProxySwap: (hinkal: IHinkal, erc20Tokens: ERC20Token[], deltaAmounts: bigint[], externalActionId: ExternalActionId, data: string, isTheSameChainSwap: boolean, subAccount: SubAccount, feeToken?: string, feeStructureOverride?: FeeStructure, autoDepositBack?: boolean, maxGasInDollar?: string, action?: AdminTransactionType, bridgedToken?: ERC20Token, bridgedTokenAmount?: bigint) => Promise<string>;
@@ -6,19 +6,20 @@ import { AccountActions as r } from "../AccountActions/AccountActions.mjs";
6
6
  import { getFeeStructure as i } from "../../functions/pre-transaction/getFeeStructure.mjs";
7
7
  import { SWAP_ROUTER_ADDRESSES as a } from "../../constants/addresses.constants.mjs";
8
8
  import { convertEmporiumOpToCallInfo as o } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
9
- import { createSwapToEmporiumOps as s } from "../../functions/private-wallet/emporium.swap.helpers.mjs";
9
+ import { calculateModifiedFeeStructure as s } from "../../functions/utils/fees.utils.mjs";
10
+ import { createSwapToEmporiumOps as c } from "../../functions/private-wallet/emporium.swap.helpers.mjs";
10
11
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalProxySwap.ts
11
- var c = async (c, l, u, d, f, p, m, h, g, _ = !1, v, y) => {
12
- if (!h) throw Error("Fee token is required in hinkalProxySwap");
13
- let b = n(l), x = r.getAddressFromSubAccount(b, m);
14
- if (!x) throw Error("Public account address is not available");
15
- let S = l.map((e) => e.erc20TokenAddress), C = await c.getRandomRelay(b, !0);
16
- if (!C) throw Error(e.RELAYER_NOT_AVAILABLE);
17
- let w = await s(c, b, d, a[d][b], f, S[0], u[0], u[1], S[1], p, x, C, !0), T = g ?? await i(b, h, S, t.Emporium, w.map((e) => o(e, x, b)), 35n), E = l.map((e, t) => ({
12
+ var l = async (l, u, d, f, p, m, h, g, _, v = !1, y, b, x, S) => {
13
+ if (!g) throw Error("Fee token is required in hinkalProxySwap");
14
+ let C = n(u), w = r.getAddressFromSubAccount(C, h);
15
+ if (!w) throw Error("Public account address is not available");
16
+ let T = u.map((e) => e.erc20TokenAddress), E = await l.getRandomRelay(C, !0);
17
+ if (!E) throw Error(e.RELAYER_NOT_AVAILABLE);
18
+ let D = await c(l, C, f, a[f][C], p, T[0], d[0], d[1], T[1], m, w, E, !0), O = _ ?? await i(C, g, T, t.Emporium, D.map((e) => o(e, w, C)), 35n), k = u.map((e, t) => ({
18
19
  token: e,
19
- amount: u[t]
20
- }));
21
- return c.actionPrivateWallet(b, [], [], [], w, E, m, h, T, C, _, v, y, void 0);
20
+ amount: d[t]
21
+ })), A = x && S !== void 0 ? await s(C, x, S, O) : O;
22
+ return l.actionPrivateWallet(C, [], [], [], D, k, h, g, A, E, v, y, b, void 0);
22
23
  };
23
24
  //#endregion
24
- export { c as hinkalProxySwap };
25
+ export { l as hinkalProxySwap };
@@ -1 +1 @@
1
- require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../functions/utils/addresses.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/token-check.utils.cjs`),i=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),a=require(`../AccountActions/AccountActions.cjs`),o=require(`../../functions/pre-transaction/getFeeStructure.cjs`),s=require(`../../functions/private-wallet/emporium.helpers.cjs`),c=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),l=require(`../../functions/utils/fees.utils.cjs`);var u=async(u,d,f,p,m,h,g,_)=>{if(!g)throw Error(`hinkalProxyToPrivate: subAccount should be provided`);if(!m)throw Error(`Fee token is required in hinkalProxyToPrivate`);if(!t.isValidPrivateAddress(p))throw Error(e.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let v=r.validateAndGetChainId(d),y=a.AccountActions.getAddressFromSubAccount(v,g);if(!y)throw Error(`Public account address is not available`);let b=d.map(e=>e.erc20TokenAddress),x=await i.modifyVolatileTokenAmountChanges(v,d,f,y),S=s.createTransaferEmporiumOpsBatch(u,v,b,x),C=await l.calculateModifiedFeeStructureForTokens(v,d,x,h??await o.getFeeStructure(v,m,b,n.ExternalActionId.Emporium,S.map(e=>c.convertEmporiumOpToCallInfo(e,y,v)),10n)),w=d.map((e,t)=>({token:e,amount:-1n*x[t]}));return u.actionPrivateWallet(v,[d[0]],[0n],[!1],S,w,g,m,C,void 0,void 0,void 0,_,{recipientInfo:p,amount:x[0],token:d[0]})};exports.hinkalProxyToPrivate=u;
1
+ require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../functions/utils/addresses.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/token-check.utils.cjs`),i=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),a=require(`../AccountActions/AccountActions.cjs`),o=require(`../../functions/pre-transaction/getFeeStructure.cjs`),s=require(`../../functions/private-wallet/emporium.helpers.cjs`),c=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),l=require(`../../functions/utils/fees.utils.cjs`);var u=async(u,d,f,p,m,h,g,_)=>{if(!g)throw Error(`hinkalProxyToPrivate: subAccount should be provided`);if(!m)throw Error(`Fee token is required in hinkalProxyToPrivate`);if(!t.isValidPrivateAddress(p))throw Error(e.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let v=r.validateAndGetChainId(d),y=a.AccountActions.getAddressFromSubAccount(v,g);if(!y)throw Error(`Public account address is not available`);let b=d.map(e=>e.erc20TokenAddress),x=await i.modifyVolatileTokenAmountChanges(v,d,f,y),S=s.createTransaferEmporiumOpsBatch(u,v,b,x),C=await l.calculateModifiedFeeStructureForTokens(v,d,x,h??await o.getFeeStructure(v,m,b,n.ExternalActionId.Emporium,S.map(e=>c.convertEmporiumOpToCallInfo(e,y,v)),25n)),w=d.map((e,t)=>({token:e,amount:-1n*x[t]}));return u.actionPrivateWallet(v,[d[0]],[0n],[!1],S,w,g,m,C,void 0,void 0,void 0,_,{recipientInfo:p,amount:x[0],token:d[0]})};exports.hinkalProxyToPrivate=u;
@@ -16,7 +16,7 @@ var u = async (u, d, f, p, m, h, g, _) => {
16
16
  if (!t(p)) throw Error(e.RECIPIENT_FORMAT_INCORRECT);
17
17
  let v = r(d), y = a.getAddressFromSubAccount(v, g);
18
18
  if (!y) throw Error("Public account address is not available");
19
- let b = d.map((e) => e.erc20TokenAddress), x = await i(v, d, f, y), S = s(u, v, b, x), C = await l(v, d, x, h ?? await o(v, m, b, n.Emporium, S.map((e) => c(e, y, v)), 10n)), w = d.map((e, t) => ({
19
+ let b = d.map((e) => e.erc20TokenAddress), x = await i(v, d, f, y), S = s(u, v, b, x), C = await l(v, d, x, h ?? await o(v, m, b, n.Emporium, S.map((e) => c(e, y, v)), 25n)), w = d.map((e, t) => ({
20
20
  token: e,
21
21
  amount: -1n * x[t]
22
22
  }));