@paxoslabs/amplify-sdk 0.1.1 → 0.2.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +0 -2
  2. package/README.md +42 -0
  3. package/dist/{chunk-DTFLXAZJ.js → chunk-4NQCOMCZ.js} +147 -5
  4. package/dist/chunk-4NQCOMCZ.js.map +1 -0
  5. package/dist/{chunk-KYR6BFAE.js → chunk-5VOI4WPL.js} +38 -33
  6. package/dist/chunk-5VOI4WPL.js.map +1 -0
  7. package/dist/{chunk-ZILA73XN.mjs → chunk-5Y7M43XN.mjs} +144 -4
  8. package/dist/chunk-5Y7M43XN.mjs.map +1 -0
  9. package/dist/{chunk-VIULRHK6.mjs → chunk-7PCUTZF6.mjs} +3 -3
  10. package/dist/{chunk-VIULRHK6.mjs.map → chunk-7PCUTZF6.mjs.map} +1 -1
  11. package/dist/{chunk-XXHRCCZS.mjs → chunk-AQFFMJX7.mjs} +3 -3
  12. package/dist/chunk-AQFFMJX7.mjs.map +1 -0
  13. package/dist/{chunk-REKEQLQA.mjs → chunk-BOW2QPQC.mjs} +3 -3
  14. package/dist/{chunk-REKEQLQA.mjs.map → chunk-BOW2QPQC.mjs.map} +1 -1
  15. package/dist/{chunk-HI44AMLC.mjs → chunk-E7R7TL7J.mjs} +24 -19
  16. package/dist/chunk-E7R7TL7J.mjs.map +1 -0
  17. package/dist/{chunk-CUGK4ZBJ.mjs → chunk-IMS2HBJ7.mjs} +305 -30
  18. package/dist/chunk-IMS2HBJ7.mjs.map +1 -0
  19. package/dist/{chunk-LSNRG5Z2.js → chunk-KB4EPCK2.js} +4 -4
  20. package/dist/{chunk-LSNRG5Z2.js.map → chunk-KB4EPCK2.js.map} +1 -1
  21. package/dist/{chunk-ITB7FXG4.js → chunk-OJOKPBK7.js} +3 -3
  22. package/dist/chunk-OJOKPBK7.js.map +1 -0
  23. package/dist/{chunk-B2QCI6ET.js → chunk-UMRTU75Q.js} +309 -30
  24. package/dist/chunk-UMRTU75Q.js.map +1 -0
  25. package/dist/{chunk-GS7TDQXA.js → chunk-XUS6KI3G.js} +8 -8
  26. package/dist/{chunk-GS7TDQXA.js.map → chunk-XUS6KI3G.js.map} +1 -1
  27. package/dist/core.js +16 -16
  28. package/dist/core.js.map +1 -1
  29. package/dist/core.mjs +6 -6
  30. package/dist/core.mjs.map +1 -1
  31. package/dist/display.d.mts +1 -1
  32. package/dist/display.d.ts +1 -1
  33. package/dist/display.js +12 -12
  34. package/dist/display.mjs +4 -4
  35. package/dist/{exchange-rate-BfPH_fQt.d.mts → exchange-rate-DCB2CY9v.d.mts} +5 -0
  36. package/dist/{exchange-rate-Cp1ddpw4.d.ts → exchange-rate-DOmoqut9.d.ts} +5 -0
  37. package/dist/index.d.mts +455 -8
  38. package/dist/index.d.ts +455 -8
  39. package/dist/index.js +402 -215
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.mjs +292 -123
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/utils.js +5 -5
  44. package/dist/utils.mjs +2 -2
  45. package/package.json +2 -1
  46. package/dist/chunk-B2QCI6ET.js.map +0 -1
  47. package/dist/chunk-CUGK4ZBJ.mjs.map +0 -1
  48. package/dist/chunk-DTFLXAZJ.js.map +0 -1
  49. package/dist/chunk-HI44AMLC.mjs.map +0 -1
  50. package/dist/chunk-ITB7FXG4.js.map +0 -1
  51. package/dist/chunk-KYR6BFAE.js.map +0 -1
  52. package/dist/chunk-XXHRCCZS.mjs.map +0 -1
  53. package/dist/chunk-ZILA73XN.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,13 +1,14 @@
1
- import { DEFAULT_SLIPPAGE_BPS } from './chunk-XXHRCCZS.mjs';
2
- export { YieldType } from './chunk-XXHRCCZS.mjs';
3
- export { getDepositExchangeRate, getWithdrawExchangeRate, isDepositSpendApproved, isWithdrawalSpendApproved } from './chunk-HI44AMLC.mjs';
4
- import { getRateInQuoteWithAssetDecimals, getClient, BoringVaultAbi, getRateInQuoteAndSharesAndWantAssetDecimals, TellerAbi } from './chunk-ZILA73XN.mjs';
1
+ import { DEFAULT_SLIPPAGE_BPS } from './chunk-AQFFMJX7.mjs';
2
+ export { YieldType } from './chunk-AQFFMJX7.mjs';
3
+ import { isDepositSpendApproved } from './chunk-E7R7TL7J.mjs';
4
+ export { getDepositExchangeRate, getWithdrawExchangeRate, isDepositSpendApproved, isWithdrawalSpendApproved } from './chunk-E7R7TL7J.mjs';
5
+ import { getRateInQuoteWithAssetDecimals, getClient, erc2612Abi, BoringVaultAbi, getRateInQuoteAndSharesAndWantAssetDecimals, TellerAbi } from './chunk-5Y7M43XN.mjs';
5
6
  import './chunk-R663BFAZ.mjs';
6
7
  import { toChainId } from './chunk-J3662HYT.mjs';
7
- import { calculateDeadline } from './chunk-REKEQLQA.mjs';
8
+ import { calculateDeadline } from './chunk-BOW2QPQC.mjs';
8
9
  import { WAD } from './chunk-7RWWVUHP.mjs';
9
- import { findVaultByConfig, APIError, getAssetsFromCache, DEFAULT_APPROVAL_AMOUNT, fetchSupportedAssets, ATOMIC_QUEUE_CONTRACT_ADDRESS, DEFAULT_DEADLINE } from './chunk-CUGK4ZBJ.mjs';
10
- export { APIError, fetchSupportedAssets, fetchVaults, findVaultByConfig, getAssetsFromCache, getCache, getWithdrawSupportedAssets, initAmplifySDK, initializeCache, refreshVaultCache } from './chunk-CUGK4ZBJ.mjs';
10
+ import { findVaultByConfig, APIError, getAssetsFromCache, DEFAULT_APPROVAL_AMOUNT, fetchSupportedAssets, ATOMIC_QUEUE_CONTRACT_ADDRESS, DEFAULT_DEADLINE } from './chunk-IMS2HBJ7.mjs';
11
+ export { APIError, LogLevel, fetchSupportedAssets, fetchVaults, findVaultByConfig, getAssetsFromCache, getCache, getLogger, getWithdrawSupportedAssets, initAmplifySDK, initializeCache, refreshVaultCache, setLogLevel, setLogger } from './chunk-IMS2HBJ7.mjs';
11
12
  import { parseUnits, erc20Abi, stringToHex, hexToSignature } from 'viem';
12
13
 
13
14
  async function prepareApproveDepositTokenTxData({
@@ -433,56 +434,6 @@ async function prepareDepositTxData(params) {
433
434
  );
434
435
  }
435
436
  }
436
-
437
- // src/abi/erc2612-abi.ts
438
- var erc2612Abi = [
439
- // Standard ERC20 functions (subset needed for permit flow)
440
- {
441
- constant: true,
442
- inputs: [{ name: "_owner", type: "address" }],
443
- name: "nonces",
444
- outputs: [{ name: "", type: "uint256" }],
445
- type: "function"
446
- },
447
- {
448
- constant: true,
449
- inputs: [],
450
- name: "DOMAIN_SEPARATOR",
451
- outputs: [{ name: "", type: "bytes32" }],
452
- type: "function"
453
- },
454
- {
455
- constant: false,
456
- inputs: [
457
- { name: "owner", type: "address" },
458
- { name: "spender", type: "address" },
459
- { name: "value", type: "uint256" },
460
- { name: "deadline", type: "uint256" },
461
- { name: "v", type: "uint8" },
462
- { name: "r", type: "bytes32" },
463
- { name: "s", type: "bytes32" }
464
- ],
465
- name: "permit",
466
- outputs: [],
467
- type: "function"
468
- },
469
- {
470
- constant: true,
471
- inputs: [],
472
- name: "name",
473
- outputs: [{ name: "", type: "string" }],
474
- type: "function"
475
- },
476
- {
477
- constant: true,
478
- inputs: [],
479
- name: "version",
480
- outputs: [{ name: "", type: "string" }],
481
- type: "function"
482
- }
483
- ];
484
-
485
- // src/vaults/deposit/deposit-with-permit.ts
486
437
  var PERMIT_TYPES = {
487
438
  Permit: [
488
439
  { name: "owner", type: "address" },
@@ -499,7 +450,12 @@ async function prepareDepositPermitSignature(params) {
499
450
  depositAmount,
500
451
  recipientAddress,
501
452
  chainId,
502
- deadline
453
+ deadline,
454
+ // Optional pre-fetched data to skip RPC calls
455
+ nonce: prefetchedNonce,
456
+ decimals: prefetchedDecimals,
457
+ tokenName: prefetchedTokenName,
458
+ tokenVersion: prefetchedTokenVersion
503
459
  } = params;
504
460
  try {
505
461
  const normalizedChainId = toChainId(chainId);
@@ -534,79 +490,102 @@ async function prepareDepositPermitSignature(params) {
534
490
  { endpoint: "prepareDepositPermitSignature" }
535
491
  );
536
492
  }
537
- const client = await getClient(normalizedChainId);
538
- let tokenName;
539
- let tokenVersion;
540
- let nonce;
541
- try {
542
- const [nameResult, versionResult, nonceResult] = await Promise.allSettled(
543
- [
544
- client.readContract({
545
- address: depositToken,
546
- abi: erc2612Abi,
547
- functionName: "name"
548
- }),
549
- client.readContract({
550
- address: depositToken,
551
- abi: erc2612Abi,
552
- functionName: "version"
553
- }),
554
- client.readContract({
555
- address: depositToken,
556
- abi: erc2612Abi,
557
- functionName: "nonces",
558
- args: [recipientAddress]
559
- })
560
- ]
561
- );
562
- if (nameResult.status === "fulfilled") {
563
- tokenName = nameResult.value;
564
- } else {
565
- throw new APIError(`Failed to read token name from ${depositToken}`, {
566
- endpoint: "prepareDepositPermitSignature",
567
- cause: nameResult.reason
568
- });
569
- }
570
- if (versionResult.status === "fulfilled") {
571
- tokenVersion = versionResult.value;
572
- } else {
573
- tokenVersion = "1";
574
- }
575
- if (nonceResult.status === "fulfilled") {
576
- nonce = nonceResult.value;
577
- } else {
493
+ let resolvedTokenName;
494
+ let resolvedTokenVersion;
495
+ let resolvedNonce;
496
+ const hasAllPrefetchedData = prefetchedTokenName !== void 0 && prefetchedTokenVersion !== void 0 && prefetchedNonce !== void 0;
497
+ if (hasAllPrefetchedData) {
498
+ resolvedTokenName = prefetchedTokenName;
499
+ resolvedTokenVersion = prefetchedTokenVersion;
500
+ resolvedNonce = prefetchedNonce;
501
+ } else {
502
+ const client = await getClient(normalizedChainId);
503
+ try {
504
+ const [nameResult, versionResult, nonceResult] = await client.multicall(
505
+ {
506
+ contracts: [
507
+ {
508
+ address: depositToken,
509
+ abi: erc2612Abi,
510
+ functionName: "name"
511
+ },
512
+ {
513
+ address: depositToken,
514
+ abi: erc2612Abi,
515
+ functionName: "version"
516
+ },
517
+ {
518
+ address: depositToken,
519
+ abi: erc2612Abi,
520
+ functionName: "nonces",
521
+ args: [recipientAddress]
522
+ }
523
+ ]
524
+ }
525
+ );
526
+ if (prefetchedTokenName !== void 0) {
527
+ resolvedTokenName = prefetchedTokenName;
528
+ } else if (nameResult.status === "success") {
529
+ resolvedTokenName = nameResult.result;
530
+ } else {
531
+ throw new APIError(`Failed to read token name from ${depositToken}`, {
532
+ endpoint: "prepareDepositPermitSignature",
533
+ cause: nameResult.error
534
+ });
535
+ }
536
+ if (prefetchedTokenVersion !== void 0) {
537
+ resolvedTokenVersion = prefetchedTokenVersion;
538
+ } else if (versionResult.status === "success") {
539
+ resolvedTokenVersion = versionResult.result;
540
+ } else {
541
+ resolvedTokenVersion = "1";
542
+ }
543
+ if (prefetchedNonce !== void 0) {
544
+ resolvedNonce = prefetchedNonce;
545
+ } else if (nonceResult.status === "success") {
546
+ resolvedNonce = nonceResult.result;
547
+ } else {
548
+ throw new APIError(
549
+ `Token ${depositToken} does not support EIP-2612 permit. Missing required function: nonces()`,
550
+ {
551
+ endpoint: "prepareDepositPermitSignature",
552
+ cause: nonceResult.error
553
+ }
554
+ );
555
+ }
556
+ } catch (error) {
557
+ if (error instanceof APIError) {
558
+ throw error;
559
+ }
578
560
  throw new APIError(
579
- `Token ${depositToken} does not support EIP-2612 permit. Missing required function: nonces()`,
561
+ `Failed to read token metadata: ${error instanceof Error ? error.message : "Unknown error"}`,
580
562
  {
581
563
  endpoint: "prepareDepositPermitSignature",
582
- cause: nonceResult.reason
564
+ cause: error
583
565
  }
584
566
  );
585
567
  }
586
- } catch (error) {
587
- if (error instanceof APIError) {
588
- throw error;
589
- }
590
- throw new APIError(
591
- `Failed to read token metadata: ${error instanceof Error ? error.message : "Unknown error"}`,
592
- {
593
- endpoint: "prepareDepositPermitSignature",
594
- cause: error
595
- }
596
- );
597
568
  }
598
569
  const permitDeadline = deadline ?? BigInt(Math.floor(Date.now() / 1e3) + 3600);
599
- const assets = await fetchSupportedAssets({ address: depositToken });
600
- if (assets.length === 0) {
601
- throw new APIError(`Asset metadata not found for token ${depositToken}`, {
602
- endpoint: "prepareDepositPermitSignature"
603
- });
570
+ let resolvedDecimals;
571
+ if (prefetchedDecimals !== void 0) {
572
+ resolvedDecimals = prefetchedDecimals;
573
+ } else {
574
+ const assets = await fetchSupportedAssets({ address: depositToken });
575
+ if (assets.length === 0) {
576
+ throw new APIError(
577
+ `Asset metadata not found for token ${depositToken}`,
578
+ {
579
+ endpoint: "prepareDepositPermitSignature"
580
+ }
581
+ );
582
+ }
583
+ resolvedDecimals = assets[0].decimals;
604
584
  }
605
- const asset = assets[0];
606
- const value = parseUnits(depositAmount, asset.decimals);
585
+ const value = parseUnits(depositAmount, resolvedDecimals);
607
586
  const domain = {
608
- name: tokenName,
609
- version: tokenVersion,
587
+ name: resolvedTokenName,
588
+ version: resolvedTokenVersion,
610
589
  chainId: normalizedChainId,
611
590
  verifyingContract: depositToken
612
591
  };
@@ -614,7 +593,7 @@ async function prepareDepositPermitSignature(params) {
614
593
  owner: recipientAddress,
615
594
  spender: communityCodeDepositorAddress,
616
595
  value,
617
- nonce,
596
+ nonce: resolvedNonce,
618
597
  deadline: permitDeadline
619
598
  };
620
599
  return {
@@ -810,6 +789,196 @@ async function prepareDepositWithPermitTxData(params) {
810
789
  );
811
790
  }
812
791
  }
792
+ var DepositAuthMethod = {
793
+ PERMIT: "permit",
794
+ APPROVAL: "approval",
795
+ ALREADY_APPROVED: "already_approved"
796
+ };
797
+ async function prepareDepositAuthorization(params) {
798
+ const {
799
+ yieldType,
800
+ depositToken,
801
+ depositAmount,
802
+ recipientAddress,
803
+ chainId,
804
+ deadline,
805
+ forceMethod
806
+ } = params;
807
+ try {
808
+ const normalizedChainId = toChainId(chainId);
809
+ const vault = await findVaultByConfig({
810
+ assetAddress: depositToken,
811
+ yieldType,
812
+ chainId: normalizedChainId
813
+ });
814
+ if (!vault) {
815
+ throw new APIError(
816
+ `No vault found for token ${depositToken} with yield type '${yieldType}' on chain ${normalizedChainId}`,
817
+ { endpoint: "prepareDepositAuthorization" }
818
+ );
819
+ }
820
+ const tokenInfo = await isDepositSpendApproved({
821
+ yieldType,
822
+ chainId: normalizedChainId,
823
+ depositAssetAddress: depositToken,
824
+ recipientAddress
825
+ });
826
+ if (forceMethod === "permit") {
827
+ const permitData = await prepareDepositPermitSignature({
828
+ yieldType,
829
+ depositToken,
830
+ depositAmount,
831
+ recipientAddress,
832
+ chainId: normalizedChainId,
833
+ deadline,
834
+ // Pass pre-fetched data to avoid redundant RPC calls
835
+ nonce: tokenInfo.nonce ?? void 0,
836
+ decimals: tokenInfo.decimals,
837
+ tokenName: tokenInfo.tokenName,
838
+ tokenVersion: tokenInfo.tokenVersion
839
+ });
840
+ return {
841
+ method: DepositAuthMethod.PERMIT,
842
+ permitData
843
+ };
844
+ }
845
+ if (forceMethod === "approval") {
846
+ const txData2 = await prepareApproveDepositTokenTxData({
847
+ yieldType,
848
+ depositToken,
849
+ approvalAmount: depositAmount,
850
+ chainId: normalizedChainId
851
+ });
852
+ return {
853
+ method: DepositAuthMethod.APPROVAL,
854
+ txData: txData2,
855
+ currentAllowance: tokenInfo.allowance,
856
+ currentAllowanceAsBigInt: tokenInfo.allowanceAsBigInt
857
+ };
858
+ }
859
+ if (tokenInfo.supportsPermit) {
860
+ const permitData = await prepareDepositPermitSignature({
861
+ yieldType,
862
+ depositToken,
863
+ depositAmount,
864
+ recipientAddress,
865
+ chainId: normalizedChainId,
866
+ deadline,
867
+ // Pass pre-fetched data to avoid redundant RPC calls
868
+ nonce: tokenInfo.nonce ?? void 0,
869
+ decimals: tokenInfo.decimals,
870
+ tokenName: tokenInfo.tokenName,
871
+ tokenVersion: tokenInfo.tokenVersion
872
+ });
873
+ return {
874
+ method: DepositAuthMethod.PERMIT,
875
+ permitData
876
+ };
877
+ }
878
+ const depositAmountBigInt = parseUnits(depositAmount, tokenInfo.decimals);
879
+ const currentAllowanceBigInt = BigInt(tokenInfo.allowanceAsBigInt);
880
+ if (tokenInfo.isApproved && currentAllowanceBigInt >= depositAmountBigInt) {
881
+ return {
882
+ method: DepositAuthMethod.ALREADY_APPROVED,
883
+ allowance: tokenInfo.allowance,
884
+ allowanceAsBigInt: tokenInfo.allowanceAsBigInt
885
+ };
886
+ }
887
+ const txData = await prepareApproveDepositTokenTxData({
888
+ yieldType,
889
+ depositToken,
890
+ approvalAmount: depositAmount,
891
+ chainId: normalizedChainId
892
+ });
893
+ return {
894
+ method: DepositAuthMethod.APPROVAL,
895
+ txData,
896
+ currentAllowance: tokenInfo.allowance,
897
+ currentAllowanceAsBigInt: tokenInfo.allowanceAsBigInt
898
+ };
899
+ } catch (error) {
900
+ if (error instanceof APIError) {
901
+ throw error;
902
+ }
903
+ throw new APIError(
904
+ `Failed to prepare deposit authorization: ${error instanceof Error ? error.message : String(error)}`,
905
+ {
906
+ endpoint: "prepareDepositAuthorization",
907
+ cause: error
908
+ }
909
+ );
910
+ }
911
+ }
912
+ async function prepareDeposit(params) {
913
+ const {
914
+ yieldType,
915
+ depositToken,
916
+ depositAmount,
917
+ recipientAddress,
918
+ chainId,
919
+ slippage,
920
+ partnerCode,
921
+ signature,
922
+ deadline,
923
+ forceMethod
924
+ } = params;
925
+ try {
926
+ if (forceMethod === "permit" && (!signature || deadline === void 0)) {
927
+ throw new APIError(
928
+ "Permit deposit requires both signature and deadline parameters when forceMethod is 'permit'",
929
+ { endpoint: "prepareDeposit" }
930
+ );
931
+ }
932
+ const usePermit = forceMethod === "permit" || forceMethod !== "approval" && signature !== void 0 && deadline !== void 0;
933
+ if (usePermit) {
934
+ if (!signature || deadline === void 0) {
935
+ throw new APIError(
936
+ "Permit deposit requires both signature and deadline parameters",
937
+ { endpoint: "prepareDeposit" }
938
+ );
939
+ }
940
+ const txData2 = await prepareDepositWithPermitTxData({
941
+ yieldType,
942
+ depositToken,
943
+ depositAmount,
944
+ recipientAddress,
945
+ chainId,
946
+ signature,
947
+ deadline,
948
+ slippage,
949
+ partnerCode
950
+ });
951
+ return {
952
+ method: DepositAuthMethod.PERMIT,
953
+ txData: txData2
954
+ };
955
+ }
956
+ const txData = await prepareDepositTxData({
957
+ yieldType,
958
+ depositToken,
959
+ depositAmount,
960
+ recipientAddress,
961
+ chainId,
962
+ slippage,
963
+ partnerCode
964
+ });
965
+ return {
966
+ method: DepositAuthMethod.APPROVAL,
967
+ txData
968
+ };
969
+ } catch (error) {
970
+ if (error instanceof APIError) {
971
+ throw error;
972
+ }
973
+ throw new APIError(
974
+ `Failed to prepare deposit: ${error instanceof Error ? error.message : String(error)}`,
975
+ {
976
+ endpoint: "prepareDeposit",
977
+ cause: error
978
+ }
979
+ );
980
+ }
981
+ }
813
982
  async function prepareApproveWithdrawTxData({
814
983
  yieldType,
815
984
  wantAssetAddress,
@@ -1306,6 +1475,6 @@ var prepareWithdrawTxData = async ({
1306
1475
  }
1307
1476
  };
1308
1477
 
1309
- export { PERMIT_TYPES, parsePermitSignature, prepareApproveDepositTokenTxData, prepareApproveWithdrawTxData, prepareBulkWithdrawTxData, prepareDepositPermitSignature, prepareDepositTxData, prepareDepositWithPermitTxData, prepareWithdrawTxData };
1478
+ export { DepositAuthMethod, PERMIT_TYPES, parsePermitSignature, prepareApproveDepositTokenTxData, prepareApproveWithdrawTxData, prepareBulkWithdrawTxData, prepareDeposit, prepareDepositAuthorization, prepareDepositPermitSignature, prepareDepositTxData, prepareDepositWithPermitTxData, prepareWithdrawTxData };
1310
1479
  //# sourceMappingURL=index.mjs.map
1311
1480
  //# sourceMappingURL=index.mjs.map