@gauntlet-xyz/sdk 2.5.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -6
- package/dist/api/activity.d.ts +1 -1
- package/dist/api/activity.d.ts.map +1 -1
- package/dist/api/caip.d.ts +1 -1
- package/dist/api/caip.d.ts.map +1 -1
- package/dist/api/client.d.ts +43 -5
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/errors.d.ts +1 -1
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/generated.d.ts +570 -7
- package/dist/api/generated.d.ts.map +1 -1
- package/dist/api/index.d.ts +13 -13
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +48 -8
- package/dist/api/index.js.map +7 -1
- package/dist/api/positionHistory.d.ts +1 -1
- package/dist/api/positionHistory.d.ts.map +1 -1
- package/dist/attribution/index.d.ts +3 -3
- package/dist/attribution/index.d.ts.map +1 -1
- package/dist/chunk-7TA2OJUK.js +4364 -0
- package/dist/chunk-7TA2OJUK.js.map +7 -0
- package/dist/chunk-HC2BS7MK.js +439 -0
- package/dist/chunk-HC2BS7MK.js.map +7 -0
- package/dist/chunk-S2TTA45N.js +2009 -0
- package/dist/chunk-S2TTA45N.js.map +7 -0
- package/dist/chunk-STIV2CC4.js +57 -0
- package/dist/chunk-STIV2CC4.js.map +7 -0
- package/dist/chunk-SU6JAKIA.js +283 -0
- package/dist/chunk-SU6JAKIA.js.map +7 -0
- package/dist/cjs/api/activity.d.ts +70 -0
- package/dist/cjs/api/activity.d.ts.map +1 -0
- package/dist/cjs/api/activity.js +136 -0
- package/dist/cjs/api/activity.js.map +7 -0
- package/dist/cjs/api/caip.d.ts +29 -0
- package/dist/cjs/api/caip.d.ts.map +1 -0
- package/dist/cjs/api/caip.js +59 -0
- package/dist/cjs/api/caip.js.map +7 -0
- package/dist/cjs/api/client.d.ts +173 -0
- package/dist/cjs/api/client.d.ts.map +1 -0
- package/dist/cjs/api/client.js +171 -0
- package/dist/cjs/api/client.js.map +7 -0
- package/dist/cjs/api/decimal.d.ts +21 -0
- package/dist/cjs/api/decimal.d.ts.map +1 -0
- package/dist/cjs/api/decimal.js +60 -0
- package/dist/cjs/api/decimal.js.map +7 -0
- package/dist/cjs/api/errors.d.ts +32 -0
- package/dist/cjs/api/errors.d.ts.map +1 -0
- package/dist/cjs/api/errors.js +80 -0
- package/dist/cjs/api/errors.js.map +7 -0
- package/dist/cjs/api/generated.d.ts +2068 -0
- package/dist/cjs/api/generated.d.ts.map +1 -0
- package/dist/cjs/api/generated.js +17 -0
- package/dist/cjs/api/generated.js.map +7 -0
- package/dist/cjs/api/http.d.ts +16 -0
- package/dist/cjs/api/http.d.ts.map +1 -0
- package/dist/cjs/api/http.js +64 -0
- package/dist/cjs/api/http.js.map +7 -0
- package/dist/cjs/api/index.d.ts +14 -0
- package/dist/cjs/api/index.d.ts.map +1 -0
- package/dist/cjs/api/index.js +73 -0
- package/dist/cjs/api/index.js.map +7 -0
- package/dist/cjs/api/positionHistory.d.ts +44 -0
- package/dist/cjs/api/positionHistory.d.ts.map +1 -0
- package/dist/cjs/api/positionHistory.js +131 -0
- package/dist/cjs/api/positionHistory.js.map +7 -0
- package/dist/cjs/attribution/erc8021.d.ts +9 -0
- package/dist/cjs/attribution/erc8021.d.ts.map +1 -0
- package/dist/cjs/attribution/erc8021.js +37 -0
- package/dist/cjs/attribution/erc8021.js.map +7 -0
- package/dist/cjs/attribution/index.d.ts +25 -0
- package/dist/cjs/attribution/index.d.ts.map +1 -0
- package/dist/cjs/attribution/index.js +68 -0
- package/dist/cjs/attribution/index.js.map +7 -0
- package/dist/cjs/client.d.ts +72 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +80 -0
- package/dist/cjs/client.js.map +7 -0
- package/dist/cjs/constants.d.ts +16 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +83 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/errors.d.ts +85 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +210 -0
- package/dist/cjs/errors.js.map +7 -0
- package/dist/cjs/evm/abis/erc20.d.ts +41 -0
- package/dist/cjs/evm/abis/erc20.d.ts.map +1 -0
- package/dist/cjs/evm/abis/erc20.js +57 -0
- package/dist/cjs/evm/abis/erc20.js.map +7 -0
- package/dist/cjs/evm/abis/erc4626.d.ts +105 -0
- package/dist/cjs/evm/abis/erc4626.d.ts.map +1 -0
- package/dist/cjs/evm/abis/erc4626.js +97 -0
- package/dist/cjs/evm/abis/erc4626.js.map +7 -0
- package/dist/cjs/evm/abis/multiDepositorVault.d.ts +1048 -0
- package/dist/cjs/evm/abis/multiDepositorVault.d.ts.map +1 -0
- package/dist/cjs/evm/abis/multiDepositorVault.js +614 -0
- package/dist/cjs/evm/abis/multiDepositorVault.js.map +7 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts +910 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts.map +1 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.js +517 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.js.map +7 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts +277 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts.map +1 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js +166 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js.map +7 -0
- package/dist/cjs/evm/abis/provisioner.d.ts +4984 -0
- package/dist/cjs/evm/abis/provisioner.d.ts.map +1 -0
- package/dist/cjs/evm/abis/provisioner.js +2785 -0
- package/dist/cjs/evm/abis/provisioner.js.map +7 -0
- package/dist/cjs/evm/abis/provisionerV2.d.ts +740 -0
- package/dist/cjs/evm/abis/provisionerV2.d.ts.map +1 -0
- package/dist/cjs/evm/abis/provisionerV2.js +320 -0
- package/dist/cjs/evm/abis/provisionerV2.js.map +7 -0
- package/dist/cjs/evm/adapters/aera.d.ts +6 -0
- package/dist/cjs/evm/adapters/aera.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/aera.js +491 -0
- package/dist/cjs/evm/adapters/aera.js.map +7 -0
- package/dist/cjs/evm/adapters/index.d.ts +3 -0
- package/dist/cjs/evm/adapters/index.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/index.js +41 -0
- package/dist/cjs/evm/adapters/index.js.map +7 -0
- package/dist/cjs/evm/adapters/morpho.d.ts +3 -0
- package/dist/cjs/evm/adapters/morpho.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/morpho.js +103 -0
- package/dist/cjs/evm/adapters/morpho.js.map +7 -0
- package/dist/cjs/evm/adapters/types.d.ts +84 -0
- package/dist/cjs/evm/adapters/types.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/types.js +17 -0
- package/dist/cjs/evm/adapters/types.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts +46 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js +223 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/readOptions.d.ts +8 -0
- package/dist/cjs/evm/aeraContracts/readOptions.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/readOptions.js +31 -0
- package/dist/cjs/evm/aeraContracts/readOptions.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/v1.d.ts +2317 -0
- package/dist/cjs/evm/aeraContracts/v1.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/v1.js +120 -0
- package/dist/cjs/evm/aeraContracts/v1.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/v2.d.ts +4538 -0
- package/dist/cjs/evm/aeraContracts/v2.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/v2.js +449 -0
- package/dist/cjs/evm/aeraContracts/v2.js.map +7 -0
- package/dist/cjs/evm/aeraContracts.d.ts +33 -0
- package/dist/cjs/evm/aeraContracts.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts.js +224 -0
- package/dist/cjs/evm/aeraContracts.js.map +7 -0
- package/dist/cjs/evm/deposit.d.ts +50 -0
- package/dist/cjs/evm/deposit.d.ts.map +1 -0
- package/dist/cjs/evm/deposit.js +112 -0
- package/dist/cjs/evm/deposit.js.map +7 -0
- package/dist/cjs/evm/depositQuote.d.ts +32 -0
- package/dist/cjs/evm/depositQuote.d.ts.map +1 -0
- package/dist/cjs/evm/depositQuote.js +96 -0
- package/dist/cjs/evm/depositQuote.js.map +7 -0
- package/dist/cjs/evm/depositReceiverApproval.d.ts +17 -0
- package/dist/cjs/evm/depositReceiverApproval.d.ts.map +1 -0
- package/dist/cjs/evm/depositReceiverApproval.js +66 -0
- package/dist/cjs/evm/depositReceiverApproval.js.map +7 -0
- package/dist/cjs/evm/index.d.ts +28 -0
- package/dist/cjs/evm/index.d.ts.map +1 -0
- package/dist/cjs/evm/index.js +116 -0
- package/dist/cjs/evm/index.js.map +7 -0
- package/dist/cjs/evm/operationMode.d.ts +9 -0
- package/dist/cjs/evm/operationMode.d.ts.map +1 -0
- package/dist/cjs/evm/operationMode.js +65 -0
- package/dist/cjs/evm/operationMode.js.map +7 -0
- package/dist/cjs/evm/tokenModes.d.ts +22 -0
- package/dist/cjs/evm/tokenModes.d.ts.map +1 -0
- package/dist/cjs/evm/tokenModes.js +47 -0
- package/dist/cjs/evm/tokenModes.js.map +7 -0
- package/dist/cjs/evm/types.d.ts +34 -0
- package/dist/cjs/evm/types.d.ts.map +1 -0
- package/dist/cjs/evm/types.js +32 -0
- package/dist/cjs/evm/types.js.map +7 -0
- package/dist/cjs/evm/userCurrentBalance.d.ts +55 -0
- package/dist/cjs/evm/userCurrentBalance.d.ts.map +1 -0
- package/dist/cjs/evm/userCurrentBalance.js +225 -0
- package/dist/cjs/evm/userCurrentBalance.js.map +7 -0
- package/dist/cjs/evm/vaults.d.ts +44 -0
- package/dist/cjs/evm/vaults.d.ts.map +1 -0
- package/dist/cjs/evm/vaults.js +78 -0
- package/dist/cjs/evm/vaults.js.map +7 -0
- package/dist/cjs/evm/withdraw.d.ts +73 -0
- package/dist/cjs/evm/withdraw.d.ts.map +1 -0
- package/dist/cjs/evm/withdraw.js +161 -0
- package/dist/cjs/evm/withdraw.js.map +7 -0
- package/dist/cjs/evm/withdrawQuote.d.ts +135 -0
- package/dist/cjs/evm/withdrawQuote.d.ts.map +1 -0
- package/dist/cjs/evm/withdrawQuote.js +256 -0
- package/dist/cjs/evm/withdrawQuote.js.map +7 -0
- package/dist/cjs/index.d.ts +31 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +128 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/privy/index.d.ts +52 -0
- package/dist/cjs/privy/index.d.ts.map +1 -0
- package/dist/cjs/privy/index.js +57 -0
- package/dist/cjs/privy/index.js.map +7 -0
- package/dist/client.d.ts +4 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/errors.d.ts +4 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/evm/adapters/aera.d.ts +1 -1
- package/dist/evm/adapters/aera.d.ts.map +1 -1
- package/dist/evm/adapters/index.d.ts +1 -1
- package/dist/evm/adapters/index.d.ts.map +1 -1
- package/dist/evm/adapters/morpho.d.ts +1 -1
- package/dist/evm/adapters/morpho.d.ts.map +1 -1
- package/dist/evm/adapters/types.d.ts +5 -3
- package/dist/evm/adapters/types.d.ts.map +1 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts +1 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -1
- package/dist/evm/aeraContracts/v1.d.ts +2 -2
- package/dist/evm/aeraContracts/v1.d.ts.map +1 -1
- package/dist/evm/aeraContracts/v2.d.ts +25 -4
- package/dist/evm/aeraContracts/v2.d.ts.map +1 -1
- package/dist/evm/aeraContracts.d.ts +2 -2
- package/dist/evm/aeraContracts.d.ts.map +1 -1
- package/dist/evm/deposit.d.ts +4 -2
- package/dist/evm/deposit.d.ts.map +1 -1
- package/dist/evm/depositQuote.d.ts +32 -0
- package/dist/evm/depositQuote.d.ts.map +1 -0
- package/dist/evm/depositReceiverApproval.d.ts +2 -2
- package/dist/evm/depositReceiverApproval.d.ts.map +1 -1
- package/dist/evm/index.d.ts +27 -25
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +88 -12
- package/dist/evm/index.js.map +7 -1
- package/dist/evm/tokenModes.d.ts +2 -2
- package/dist/evm/tokenModes.d.ts.map +1 -1
- package/dist/evm/userCurrentBalance.d.ts +6 -2
- package/dist/evm/userCurrentBalance.d.ts.map +1 -1
- package/dist/evm/vaults.d.ts +2 -9
- package/dist/evm/vaults.d.ts.map +1 -1
- package/dist/evm/withdraw.d.ts +3 -3
- package/dist/evm/withdraw.d.ts.map +1 -1
- package/dist/evm/withdrawQuote.d.ts +14 -6
- package/dist/evm/withdrawQuote.d.ts.map +1 -1
- package/dist/index.d.ts +30 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -14
- package/dist/index.js.map +7 -1
- package/dist/manifest/vaults.json +1958 -0
- package/dist/privy/index.d.ts +1 -1
- package/dist/privy/index.d.ts.map +1 -1
- package/dist/privy/index.js +39 -48
- package/dist/privy/index.js.map +7 -1
- package/manifest/vaults.json +22 -395
- package/package.json +43 -9
- package/src/api/client.ts +69 -5
- package/src/api/generated.ts +570 -7
- package/src/api/index.ts +8 -0
- package/src/client.ts +4 -1
- package/src/constants.ts +2 -0
- package/src/errors.ts +7 -0
- package/src/evm/adapters/aera.ts +14 -11
- package/src/evm/adapters/types.ts +2 -0
- package/src/evm/aeraContracts/v2.ts +124 -16
- package/src/evm/deposit.ts +19 -7
- package/src/evm/depositQuote.ts +137 -0
- package/src/evm/index.ts +10 -1
- package/src/evm/userCurrentBalance.ts +12 -1
- package/src/evm/vaults.ts +0 -7
- package/src/evm/withdrawQuote.ts +125 -51
- package/src/index.ts +11 -2
- package/dist/api/activity.js +0 -154
- package/dist/api/activity.js.map +0 -1
- package/dist/api/caip.js +0 -38
- package/dist/api/caip.js.map +0 -1
- package/dist/api/client.js +0 -119
- package/dist/api/client.js.map +0 -1
- package/dist/api/decimal.js +0 -44
- package/dist/api/decimal.js.map +0 -1
- package/dist/api/errors.js +0 -41
- package/dist/api/errors.js.map +0 -1
- package/dist/api/generated.js +0 -6
- package/dist/api/generated.js.map +0 -1
- package/dist/api/http.js +0 -39
- package/dist/api/http.js.map +0 -1
- package/dist/api/positionHistory.js +0 -126
- package/dist/api/positionHistory.js.map +0 -1
- package/dist/attribution/erc8021.js +0 -17
- package/dist/attribution/erc8021.js.map +0 -1
- package/dist/attribution/index.js +0 -45
- package/dist/attribution/index.js.map +0 -1
- package/dist/client.js +0 -72
- package/dist/client.js.map +0 -1
- package/dist/constants.js +0 -28
- package/dist/constants.js.map +0 -1
- package/dist/errors.js +0 -134
- package/dist/errors.js.map +0 -1
- package/dist/evm/abis/erc20.js +0 -30
- package/dist/evm/abis/erc20.js.map +0 -1
- package/dist/evm/abis/erc4626.js +0 -70
- package/dist/evm/abis/erc4626.js.map +0 -1
- package/dist/evm/abis/multiDepositorVault.js +0 -587
- package/dist/evm/abis/multiDepositorVault.js.map +0 -1
- package/dist/evm/abis/priceAndFeeCalculator.js +0 -490
- package/dist/evm/abis/priceAndFeeCalculator.js.map +0 -1
- package/dist/evm/abis/priceAndFeeCalculatorV2.js +0 -141
- package/dist/evm/abis/priceAndFeeCalculatorV2.js.map +0 -1
- package/dist/evm/abis/provisioner.js +0 -2768
- package/dist/evm/abis/provisioner.js.map +0 -1
- package/dist/evm/abis/provisionerV2.js +0 -295
- package/dist/evm/abis/provisionerV2.js.map +0 -1
- package/dist/evm/adapters/aera.js +0 -280
- package/dist/evm/adapters/aera.js.map +0 -1
- package/dist/evm/adapters/index.js +0 -14
- package/dist/evm/adapters/index.js.map +0 -1
- package/dist/evm/adapters/morpho.js +0 -79
- package/dist/evm/adapters/morpho.js.map +0 -1
- package/dist/evm/adapters/types.js +0 -2
- package/dist/evm/adapters/types.js.map +0 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.js +0 -174
- package/dist/evm/aeraContracts/priceAndFeeCalculator.js.map +0 -1
- package/dist/evm/aeraContracts/readOptions.js +0 -4
- package/dist/evm/aeraContracts/readOptions.js.map +0 -1
- package/dist/evm/aeraContracts/v1.js +0 -59
- package/dist/evm/aeraContracts/v1.js.map +0 -1
- package/dist/evm/aeraContracts/v2.js +0 -273
- package/dist/evm/aeraContracts/v2.js.map +0 -1
- package/dist/evm/aeraContracts.js +0 -195
- package/dist/evm/aeraContracts.js.map +0 -1
- package/dist/evm/deposit.js +0 -109
- package/dist/evm/deposit.js.map +0 -1
- package/dist/evm/depositReceiverApproval.js +0 -32
- package/dist/evm/depositReceiverApproval.js.map +0 -1
- package/dist/evm/operationMode.js +0 -41
- package/dist/evm/operationMode.js.map +0 -1
- package/dist/evm/tokenModes.js +0 -34
- package/dist/evm/tokenModes.js.map +0 -1
- package/dist/evm/types.js +0 -5
- package/dist/evm/types.js.map +0 -1
- package/dist/evm/userCurrentBalance.js +0 -211
- package/dist/evm/userCurrentBalance.js.map +0 -1
- package/dist/evm/vaults.js +0 -75
- package/dist/evm/vaults.js.map +0 -1
- package/dist/evm/withdraw.js +0 -177
- package/dist/evm/withdraw.js.map +0 -1
- package/dist/evm/withdrawQuote.js +0 -164
- package/dist/evm/withdrawQuote.js.map +0 -1
package/src/evm/withdrawQuote.ts
CHANGED
|
@@ -24,8 +24,10 @@ import {
|
|
|
24
24
|
convertTokenToNumeraire,
|
|
25
25
|
} from './aeraContracts/priceAndFeeCalculator';
|
|
26
26
|
import {
|
|
27
|
+
getKnownSyncRedeemLiquidityTokens,
|
|
27
28
|
getSyncRedeemEpochState,
|
|
28
29
|
getSyncRedeemRate,
|
|
30
|
+
getSyncRedeemRateContext,
|
|
29
31
|
getSyncRedeemTokenOut,
|
|
30
32
|
getSyncWithdrawUnitsIn,
|
|
31
33
|
getUserUnitsRefundableUntil,
|
|
@@ -33,7 +35,7 @@ import {
|
|
|
33
35
|
} from './aeraContracts/v2';
|
|
34
36
|
import { resolveOperationMode } from './operationMode';
|
|
35
37
|
|
|
36
|
-
/** Epoch
|
|
38
|
+
/** Epoch-cap accounting plus any liquid-token balance known to the caller. */
|
|
37
39
|
export interface SyncWithdrawCapacity {
|
|
38
40
|
/** Effective epoch cap (min of relative and absolute), in numeraire. */
|
|
39
41
|
epochCapNumeraire: bigint;
|
|
@@ -43,6 +45,8 @@ export interface SyncWithdrawCapacity {
|
|
|
43
45
|
remainingNumeraire: bigint;
|
|
44
46
|
/** Remaining capacity expressed in the withdraw token. */
|
|
45
47
|
remainingTokens: bigint;
|
|
48
|
+
/** Vault token balance when no pull-funds calldata is configured; otherwise unknown. */
|
|
49
|
+
knownLiquidityTokens?: bigint;
|
|
46
50
|
/** This redemption's size in numeraire (matches the on-chain epoch accounting). */
|
|
47
51
|
requestNumeraire: bigint;
|
|
48
52
|
/** True when this redemption alone exceeds remaining epoch capacity (the tx would revert). */
|
|
@@ -77,6 +81,8 @@ interface SyncWithdrawQuoteDetails {
|
|
|
77
81
|
tokensOut: bigint;
|
|
78
82
|
/** Lower bound on tokens received after slippage (equals `tokensOut` for `'withdraw'`). */
|
|
79
83
|
minTokensOut: bigint;
|
|
84
|
+
/** Largest exact-token withdrawal that fits `shares`; only set for `'redeem'` quotes. */
|
|
85
|
+
shareSafeTokensOut?: bigint;
|
|
80
86
|
/** Live multiplier breakdown (base, dynamic premium, effective), in bps. */
|
|
81
87
|
rate: SyncRedeemRate;
|
|
82
88
|
capacity: SyncWithdrawCapacity;
|
|
@@ -112,12 +118,15 @@ export type SyncWithdrawQuote =
|
|
|
112
118
|
| (SyncWithdrawQuoteDetails & { kind: 'redeem' })
|
|
113
119
|
| (SyncWithdrawQuoteDetails & { kind: 'withdraw' });
|
|
114
120
|
|
|
115
|
-
type
|
|
121
|
+
export type SyncWithdrawRateParams = {
|
|
116
122
|
vaultId: string;
|
|
117
123
|
/** EVM chain ID. Defaults to the vault's primary chain (Base for current multichain vaults). */
|
|
118
124
|
chainId?: number;
|
|
119
125
|
/** Required for multiasset vaults. */
|
|
120
126
|
assetSymbol?: string;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
type SyncWithdrawQuoteBaseParams = SyncWithdrawRateParams & {
|
|
121
130
|
/** Optional for explicit amount/shares quotes; required for full-position quotes. */
|
|
122
131
|
account?: Address;
|
|
123
132
|
/**
|
|
@@ -150,47 +159,25 @@ function validateSyncWithdrawQuoteParams(params: SyncWithdrawQuoteParams) {
|
|
|
150
159
|
}
|
|
151
160
|
}
|
|
152
161
|
|
|
153
|
-
|
|
154
|
-
* Builds a live quote for an instant (sync) withdraw without sending a transaction.
|
|
155
|
-
*
|
|
156
|
-
* Surfaces everything the on-chain `redeem`/`withdraw` would apply or check but that a plain
|
|
157
|
-
* transaction build does not pre-validate: the effective rate (including the price-age dynamic
|
|
158
|
-
* premium), slippage bounds, the global per-epoch redeem capacity, and whether the caller's units
|
|
159
|
-
* are still locked from a recent sync deposit.
|
|
160
|
-
*
|
|
161
|
-
* @throws {VaultNotFoundError} If the vault ID is not found.
|
|
162
|
-
* @throws {UnsupportedAssetError} If the asset symbol is not accepted by the vault.
|
|
163
|
-
* @throws {UnsupportedFeatureError} If the vault is not an Aera V2 deployment.
|
|
164
|
-
* @throws {UnsupportedDepositModeError} If sync redeem is not enabled for the token.
|
|
165
|
-
* @throws {StalePriceError} If the oracle price is too stale for an instant redeem.
|
|
166
|
-
*/
|
|
167
|
-
export async function getSyncWithdrawQuote(
|
|
162
|
+
async function resolveSyncWithdrawContext(
|
|
168
163
|
client: GauntletClient,
|
|
169
|
-
params:
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (
|
|
174
|
-
params.slippageBps !== undefined &&
|
|
175
|
-
(!Number.isInteger(params.slippageBps) ||
|
|
176
|
-
params.slippageBps < 0 ||
|
|
177
|
-
params.slippageBps > Number(MAX_BPS))
|
|
178
|
-
) {
|
|
179
|
-
throw new InvalidSlippageBPSError(params.slippageBps);
|
|
180
|
-
}
|
|
181
|
-
const slippageBps = params.slippageBps ?? DEFAULT_BPS;
|
|
182
|
-
|
|
164
|
+
params: SyncWithdrawRateParams,
|
|
165
|
+
readKind: 'quote' | 'rate'
|
|
166
|
+
) {
|
|
183
167
|
const resolved = await resolveVault(client, params.vaultId, params.chainId);
|
|
184
168
|
if (!resolved) throw new VaultNotFoundError(params.vaultId);
|
|
185
169
|
|
|
186
170
|
const { vault, protocol } = resolved;
|
|
187
171
|
if (protocol !== 'aera') {
|
|
188
|
-
throw new UnsupportedFeatureError(
|
|
172
|
+
throw new UnsupportedFeatureError(
|
|
173
|
+
readKind === 'quote'
|
|
174
|
+
? 'Sync withdraw quote is only available for Aera vaults'
|
|
175
|
+
: 'Sync withdraw rate is only available for Aera vaults'
|
|
176
|
+
);
|
|
189
177
|
}
|
|
190
178
|
|
|
191
179
|
const chainId = params.chainId ?? vault.chainId;
|
|
192
180
|
const publicClient = client.getPublicClient(chainId);
|
|
193
|
-
|
|
194
181
|
const token =
|
|
195
182
|
vault.supplyToken.length > 1
|
|
196
183
|
? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol)
|
|
@@ -201,33 +188,100 @@ export async function getSyncWithdrawQuote(
|
|
|
201
188
|
|
|
202
189
|
const quoteBlock = await publicClient.getBlock();
|
|
203
190
|
if (quoteBlock.number === null) {
|
|
204
|
-
throw new UnsupportedFeatureError(
|
|
191
|
+
throw new UnsupportedFeatureError(
|
|
192
|
+
readKind === 'quote'
|
|
193
|
+
? 'Aera: sync withdraw quote requires a numbered block'
|
|
194
|
+
: 'Aera: sync withdraw rate requires a numbered block'
|
|
195
|
+
);
|
|
205
196
|
}
|
|
206
|
-
const
|
|
197
|
+
const readContext = {
|
|
207
198
|
blockNumber: quoteBlock.number,
|
|
208
199
|
blockTimestamp: BigInt(quoteBlock.timestamp),
|
|
209
200
|
};
|
|
210
201
|
|
|
211
|
-
const runtime = await resolveAeraRuntimeContracts(publicClient, vault,
|
|
202
|
+
const runtime = await resolveAeraRuntimeContracts(publicClient, vault, readContext);
|
|
212
203
|
requireAeraSyncRedeemRuntime(runtime);
|
|
213
204
|
|
|
214
205
|
const support = await resolveAeraTokenModeSupport(
|
|
215
206
|
publicClient,
|
|
216
207
|
runtime,
|
|
217
208
|
token.address,
|
|
218
|
-
|
|
209
|
+
readContext
|
|
219
210
|
);
|
|
220
211
|
resolveOperationMode(params.vaultId, 'sync', {
|
|
221
212
|
async: support.asyncRedeem,
|
|
222
213
|
sync: support.syncRedeem,
|
|
223
214
|
});
|
|
224
215
|
|
|
216
|
+
return { publicClient, vault, token, runtime, chainId, readContext };
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/** Reads the live instant-withdraw fee rate without requiring a withdrawal amount or account. */
|
|
220
|
+
export async function getSyncWithdrawRate(
|
|
221
|
+
client: GauntletClient,
|
|
222
|
+
params: SyncWithdrawRateParams
|
|
223
|
+
): Promise<SyncRedeemRate> {
|
|
224
|
+
const { publicClient, vault, token, runtime, readContext } = await resolveSyncWithdrawContext(
|
|
225
|
+
client,
|
|
226
|
+
params,
|
|
227
|
+
'rate'
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
return getSyncRedeemRate(
|
|
231
|
+
publicClient,
|
|
232
|
+
runtime.provisioner.address,
|
|
233
|
+
vault.vaultAddress,
|
|
234
|
+
token.address,
|
|
235
|
+
runtime.feeCalculator.address,
|
|
236
|
+
readContext
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Builds a live quote for an instant (sync) withdraw without sending a transaction.
|
|
242
|
+
*
|
|
243
|
+
* Surfaces everything the on-chain `redeem`/`withdraw` would apply or check but that a plain
|
|
244
|
+
* transaction build does not pre-validate: the effective rate (including the price-age dynamic
|
|
245
|
+
* premium), slippage bounds, the global per-epoch redeem capacity, any known vault-balance limit,
|
|
246
|
+
* and whether the caller's units are still locked from a recent sync deposit.
|
|
247
|
+
*
|
|
248
|
+
* @throws {VaultNotFoundError} If the vault ID is not found.
|
|
249
|
+
* @throws {UnsupportedAssetError} If the asset symbol is not accepted by the vault.
|
|
250
|
+
* @throws {UnsupportedFeatureError} If the vault is not an Aera V2 deployment.
|
|
251
|
+
* @throws {UnsupportedDepositModeError} If sync redeem is not enabled for the token.
|
|
252
|
+
* @throws {StalePriceError} If the oracle price is too stale for an instant redeem.
|
|
253
|
+
*/
|
|
254
|
+
export async function getSyncWithdrawQuote(
|
|
255
|
+
client: GauntletClient,
|
|
256
|
+
params: SyncWithdrawQuoteParams
|
|
257
|
+
): Promise<SyncWithdrawQuote> {
|
|
258
|
+
validateSyncWithdrawQuoteParams(params);
|
|
259
|
+
|
|
260
|
+
if (
|
|
261
|
+
params.slippageBps !== undefined &&
|
|
262
|
+
(!Number.isInteger(params.slippageBps) ||
|
|
263
|
+
params.slippageBps < 0 ||
|
|
264
|
+
params.slippageBps > Number(MAX_BPS))
|
|
265
|
+
) {
|
|
266
|
+
throw new InvalidSlippageBPSError(params.slippageBps);
|
|
267
|
+
}
|
|
268
|
+
const slippageBps = params.slippageBps ?? DEFAULT_BPS;
|
|
269
|
+
|
|
270
|
+
const {
|
|
271
|
+
publicClient,
|
|
272
|
+
vault,
|
|
273
|
+
token,
|
|
274
|
+
runtime,
|
|
275
|
+
chainId,
|
|
276
|
+
readContext: quoteReadContext,
|
|
277
|
+
} = await resolveSyncWithdrawContext(client, params, 'quote');
|
|
278
|
+
|
|
225
279
|
const provisioner = runtime.provisioner.address;
|
|
226
280
|
const feeCalculator = runtime.feeCalculator.address;
|
|
227
281
|
const feeVersion = runtime.feeCalculator.version;
|
|
228
282
|
const vaultAddress = vault.vaultAddress;
|
|
229
283
|
|
|
230
|
-
const rate = await
|
|
284
|
+
const { rate, hasPullFundsSubmitData } = await getSyncRedeemRateContext(
|
|
231
285
|
publicClient,
|
|
232
286
|
provisioner,
|
|
233
287
|
vaultAddress,
|
|
@@ -242,6 +296,7 @@ export async function getSyncWithdrawQuote(
|
|
|
242
296
|
let minTokensOut: bigint;
|
|
243
297
|
let maxUnitsIn: bigint;
|
|
244
298
|
let request: SyncWithdrawQuoteRequest;
|
|
299
|
+
let shareSafeTokensOut: bigint | undefined;
|
|
245
300
|
|
|
246
301
|
if ('amount' in params && params.amount != null) {
|
|
247
302
|
// Exact token out: shares burned is the estimate, bounded above by slippage.
|
|
@@ -283,23 +338,34 @@ export async function getSyncWithdrawQuote(
|
|
|
283
338
|
throw new InvalidWithdrawParamsError();
|
|
284
339
|
}
|
|
285
340
|
requireNonZeroSyncWithdrawBound(shares, 'unitsIn');
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
341
|
+
const getTokensOut = (unitsIn: bigint) =>
|
|
342
|
+
getSyncRedeemTokenOut(
|
|
343
|
+
publicClient,
|
|
344
|
+
provisioner,
|
|
345
|
+
feeCalculator,
|
|
346
|
+
feeVersion,
|
|
347
|
+
vaultAddress,
|
|
348
|
+
token.address,
|
|
349
|
+
unitsIn,
|
|
350
|
+
rate.effectiveMultiplierBps,
|
|
351
|
+
quoteReadContext
|
|
352
|
+
);
|
|
353
|
+
// A capacity-limited Max is submitted as an exact-token withdraw. Reserve slippage headroom so
|
|
354
|
+
// its maximum share cost cannot exceed the user's share balance.
|
|
355
|
+
const shareSafeUnitsIn = (shares * MAX_BPS) / (MAX_BPS + BigInt(slippageBps));
|
|
356
|
+
const tokensOutPromise = getTokensOut(shares);
|
|
357
|
+
const shareSafeTokensOutPromise =
|
|
358
|
+
shareSafeUnitsIn === shares ? tokensOutPromise : getTokensOut(shareSafeUnitsIn);
|
|
359
|
+
[tokensOut, shareSafeTokensOut] = await Promise.all([
|
|
360
|
+
tokensOutPromise,
|
|
361
|
+
shareSafeTokensOutPromise,
|
|
362
|
+
]);
|
|
297
363
|
minTokensOut = applySlippageDown(tokensOut, slippageBps);
|
|
298
364
|
requireNonZeroSyncWithdrawBound(minTokensOut, 'minTokensOut');
|
|
299
365
|
maxUnitsIn = shares;
|
|
300
366
|
}
|
|
301
367
|
|
|
302
|
-
const [epoch, requestNumeraire, unitsLockedUntil] = await Promise.all([
|
|
368
|
+
const [epoch, requestNumeraire, unitsLockedUntil, knownLiquidityTokens] = await Promise.all([
|
|
303
369
|
getSyncRedeemEpochState(publicClient, provisioner, quoteReadContext),
|
|
304
370
|
convertTokenToNumeraire(
|
|
305
371
|
publicClient,
|
|
@@ -313,6 +379,13 @@ export async function getSyncWithdrawQuote(
|
|
|
313
379
|
params.account
|
|
314
380
|
? getUserUnitsRefundableUntil(publicClient, provisioner, params.account, quoteReadContext)
|
|
315
381
|
: Promise.resolve(undefined),
|
|
382
|
+
getKnownSyncRedeemLiquidityTokens(
|
|
383
|
+
publicClient,
|
|
384
|
+
vaultAddress,
|
|
385
|
+
token.address,
|
|
386
|
+
hasPullFundsSubmitData,
|
|
387
|
+
quoteReadContext
|
|
388
|
+
),
|
|
316
389
|
]);
|
|
317
390
|
|
|
318
391
|
const remainingNumeraire =
|
|
@@ -328,18 +401,19 @@ export async function getSyncWithdrawQuote(
|
|
|
328
401
|
remainingNumeraire,
|
|
329
402
|
quoteReadContext
|
|
330
403
|
);
|
|
331
|
-
|
|
332
404
|
const quoteDetails: SyncWithdrawQuoteDetails = {
|
|
333
405
|
shares,
|
|
334
406
|
maxUnitsIn,
|
|
335
407
|
tokensOut,
|
|
336
408
|
minTokensOut,
|
|
409
|
+
shareSafeTokensOut,
|
|
337
410
|
rate,
|
|
338
411
|
capacity: {
|
|
339
412
|
epochCapNumeraire: epoch.epochCapNumeraire,
|
|
340
413
|
epochRedeemedNumeraire: epoch.epochRedeemedNumeraire,
|
|
341
414
|
remainingNumeraire,
|
|
342
415
|
remainingTokens,
|
|
416
|
+
knownLiquidityTokens,
|
|
343
417
|
requestNumeraire,
|
|
344
418
|
exceedsCapacity: requestNumeraire > remainingNumeraire,
|
|
345
419
|
},
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { GauntletClient, AttributionMode } from './client';
|
|
1
|
+
export { GauntletClient, AttributionMode, bundledVaultManifest } from './client';
|
|
2
2
|
export type { GauntletClientConfig } from './client';
|
|
3
3
|
export { ContractVersion } from './evm/types';
|
|
4
4
|
|
|
@@ -15,8 +15,9 @@ export type { VaultFilter } from './evm/vaults';
|
|
|
15
15
|
|
|
16
16
|
export { getDepositTx } from './evm/deposit';
|
|
17
17
|
export { getDepositReceiverApprovalTx } from './evm/depositReceiverApproval';
|
|
18
|
+
export { getSyncDepositQuote, getSyncDepositRate } from './evm/depositQuote';
|
|
18
19
|
export { getWithdrawTx } from './evm/withdraw';
|
|
19
|
-
export { getSyncWithdrawQuote } from './evm/withdrawQuote';
|
|
20
|
+
export { getSyncWithdrawQuote, getSyncWithdrawRate } from './evm/withdrawQuote';
|
|
20
21
|
export { getAeraTokenModeSupport } from './evm/tokenModes';
|
|
21
22
|
export { getUserCurrentBalance } from './evm/userCurrentBalance';
|
|
22
23
|
export { getVaults, VaultId } from './evm/vaults';
|
|
@@ -34,6 +35,12 @@ export {
|
|
|
34
35
|
|
|
35
36
|
export type { EvmDepositParams } from './evm/deposit';
|
|
36
37
|
export type { EvmDepositReceiverApprovalParams } from './evm/depositReceiverApproval';
|
|
38
|
+
export type {
|
|
39
|
+
SyncDepositQuote,
|
|
40
|
+
SyncDepositQuoteParams,
|
|
41
|
+
SyncDepositRate,
|
|
42
|
+
SyncDepositRateParams,
|
|
43
|
+
} from './evm/depositQuote';
|
|
37
44
|
export type { EvmWithdrawParams } from './evm/withdraw';
|
|
38
45
|
export type {
|
|
39
46
|
SyncWithdrawQuote,
|
|
@@ -42,6 +49,7 @@ export type {
|
|
|
42
49
|
SyncWithdrawQuoteContext,
|
|
43
50
|
SyncWithdrawQuoteRequest,
|
|
44
51
|
SyncWithdrawQuoteBounds,
|
|
52
|
+
SyncWithdrawRateParams,
|
|
45
53
|
} from './evm/withdrawQuote';
|
|
46
54
|
export type { AeraTokenModeSupportParams } from './evm/tokenModes';
|
|
47
55
|
export type { SyncRedeemRate } from './evm/aeraContracts/v2';
|
|
@@ -63,6 +71,7 @@ export {
|
|
|
63
71
|
UnsupportedProtocolError,
|
|
64
72
|
UnsupportedFeatureError,
|
|
65
73
|
InvalidWithdrawParamsError,
|
|
74
|
+
InvalidSyncDepositBoundError,
|
|
66
75
|
InvalidSyncWithdrawBoundError,
|
|
67
76
|
InvalidSlippageBPSError,
|
|
68
77
|
UnimplementedFeatureError,
|
package/dist/api/activity.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { GauntletSDKError } from '../errors';
|
|
2
|
-
import { decimalToBigInt, sharesToBigInt } from './decimal';
|
|
3
|
-
import { SettlementTimeoutError } from './errors';
|
|
4
|
-
const PENDING_TYPES = new Set(['deposit_pending', 'withdraw_pending']);
|
|
5
|
-
const REFUNDED_TYPES = new Set(['deposit_refunded', 'withdraw_refunded']);
|
|
6
|
-
function flowKind(rowType) {
|
|
7
|
-
if (rowType.startsWith('deposit'))
|
|
8
|
-
return 'deposit';
|
|
9
|
-
if (rowType.startsWith('withdraw'))
|
|
10
|
-
return 'withdraw';
|
|
11
|
-
if (rowType === 'transfer_in' || rowType === 'transfer_out')
|
|
12
|
-
return rowType;
|
|
13
|
-
throw new GauntletSDKError(`Unknown activity row type "${rowType}"`);
|
|
14
|
-
}
|
|
15
|
-
function abs(value) {
|
|
16
|
-
return value < 0n ? -value : value;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Comparison scale for asset amounts. The API emits human-unit decimal strings
|
|
20
|
-
* with at most `token.decimals` fractional digits, so 18 digits is exact for
|
|
21
|
-
* every supported asset.
|
|
22
|
-
*/
|
|
23
|
-
const ASSET_SCALE = 18;
|
|
24
|
-
function toAssetAmount(rows) {
|
|
25
|
-
// Per the API contract, at most one row of an async lifecycle carries the
|
|
26
|
-
// asset movement (the other legs are "0"), so the max magnitude is the
|
|
27
|
-
// flow's amount. For refunded flows this surfaces the requested amount
|
|
28
|
-
// instead of the useless net of zero.
|
|
29
|
-
let best = rows[0];
|
|
30
|
-
let bestMagnitude = abs(decimalToBigInt(best.assets_delta.native, ASSET_SCALE));
|
|
31
|
-
for (const row of rows.slice(1)) {
|
|
32
|
-
const magnitude = abs(decimalToBigInt(row.assets_delta.native, ASSET_SCALE));
|
|
33
|
-
if (magnitude > bestMagnitude) {
|
|
34
|
-
best = row;
|
|
35
|
-
bestMagnitude = magnitude;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
const token = best.assets_delta.token ?? rows.find((r) => r.assets_delta.token)?.assets_delta.token ?? null;
|
|
39
|
-
const decimal = best.assets_delta.native.replace(/^-/, '');
|
|
40
|
-
const raw = token?.decimals != null ? decimalToBigInt(decimal, token.decimals) : null;
|
|
41
|
-
return { decimal, raw, token };
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Pure stitcher: folds raw activity rows into `ActivityFlow`s. Rows may be in
|
|
45
|
-
* any order and may span multiple vaults; async lifecycles are paired by
|
|
46
|
-
* `request_hash`. Flows are returned newest-first (by the flow's latest row).
|
|
47
|
-
*/
|
|
48
|
-
export function stitchActivityFlows(rows) {
|
|
49
|
-
const groups = new Map();
|
|
50
|
-
for (const [index, row] of rows.entries()) {
|
|
51
|
-
// Rows without a request_hash are standalone sync flows: each one is its
|
|
52
|
-
// own group, so two same-type events in one transaction (e.g. a multicall
|
|
53
|
-
// doing two deposits) stay two flows.
|
|
54
|
-
const key = row.request_hash ?? `row:${index}`;
|
|
55
|
-
const group = groups.get(key);
|
|
56
|
-
if (group)
|
|
57
|
-
group.push(row);
|
|
58
|
-
else
|
|
59
|
-
groups.set(key, [row]);
|
|
60
|
-
}
|
|
61
|
-
const flows = [];
|
|
62
|
-
for (const group of groups.values()) {
|
|
63
|
-
group.sort((a, b) => a.block_timestamp - b.block_timestamp);
|
|
64
|
-
const pendingRow = group.find((r) => PENDING_TYPES.has(r.type)) ?? null;
|
|
65
|
-
const terminalRow = group.find((r) => !PENDING_TYPES.has(r.type)) ?? null;
|
|
66
|
-
const isAsync = group.some((r) => r.request_hash != null);
|
|
67
|
-
let status;
|
|
68
|
-
if (!terminalRow)
|
|
69
|
-
status = 'pending';
|
|
70
|
-
else if (REFUNDED_TYPES.has(terminalRow.type))
|
|
71
|
-
status = 'refunded';
|
|
72
|
-
else
|
|
73
|
-
status = 'settled';
|
|
74
|
-
let sharesMagnitude = 0n;
|
|
75
|
-
for (const row of group) {
|
|
76
|
-
const shares = abs(sharesToBigInt(row.shares_delta));
|
|
77
|
-
if (shares > sharesMagnitude)
|
|
78
|
-
sharesMagnitude = shares;
|
|
79
|
-
}
|
|
80
|
-
flows.push({
|
|
81
|
-
kind: flowKind((terminalRow ?? pendingRow ?? group[0]).type),
|
|
82
|
-
status,
|
|
83
|
-
vaultId: group[0].vault_id,
|
|
84
|
-
requestHash: group[0].request_hash ?? null,
|
|
85
|
-
requestedAt: pendingRow
|
|
86
|
-
? new Date(pendingRow.block_timestamp * 1000)
|
|
87
|
-
: isAsync
|
|
88
|
-
? null
|
|
89
|
-
: new Date(group[0].block_timestamp * 1000),
|
|
90
|
-
settledAt: terminalRow ? new Date(terminalRow.block_timestamp * 1000) : null,
|
|
91
|
-
assets: toAssetAmount(group),
|
|
92
|
-
shares: sharesMagnitude,
|
|
93
|
-
txHashes: [...new Set(group.map((r) => r.tx_hash))],
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
return flows.sort((a, b) => {
|
|
97
|
-
const aAt = (a.settledAt ?? a.requestedAt)?.getTime() ?? 0;
|
|
98
|
-
const bAt = (b.settledAt ?? b.requestedAt)?.getTime() ?? 0;
|
|
99
|
-
return bAt - aAt;
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Fetches the wallet's activity log and stitches it into lifecycle-aware
|
|
104
|
-
* flows — the replacement for scanning vault event logs over RPC.
|
|
105
|
-
*
|
|
106
|
-
* ```ts
|
|
107
|
-
* const flows = await getActivityFlows(client.api, wallet);
|
|
108
|
-
* const open = flows.filter((f) => f.status === 'pending');
|
|
109
|
-
* ```
|
|
110
|
-
*/
|
|
111
|
-
export async function getActivityFlows(api, walletAddress, options = {}) {
|
|
112
|
-
const maxRows = options.maxRows ?? 1000;
|
|
113
|
-
const rows = [];
|
|
114
|
-
for await (const row of api.activityRows(walletAddress, {
|
|
115
|
-
vaultId: options.vaultId,
|
|
116
|
-
// The API caps page size at 1000; request maxRows per page so the common
|
|
117
|
-
// case is a single round trip instead of ten default-100 pages.
|
|
118
|
-
limit: options.limit ?? Math.min(maxRows, 1000),
|
|
119
|
-
order: 'desc',
|
|
120
|
-
})) {
|
|
121
|
-
rows.push(row);
|
|
122
|
-
if (rows.length >= maxRows)
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
const flows = stitchActivityFlows(rows);
|
|
126
|
-
if (rows.length >= maxRows) {
|
|
127
|
-
// The window cut may have split an async lifecycle, keeping a terminal
|
|
128
|
-
// row whose request leg (the one carrying the amount) fell outside the
|
|
129
|
-
// window. Drop those flows rather than reporting zeroed amounts.
|
|
130
|
-
return flows.filter((f) => f.requestHash === null || f.requestedAt !== null);
|
|
131
|
-
}
|
|
132
|
-
return flows;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Polls the activity log until the Aera async request identified by
|
|
136
|
-
* `requestHash` reaches a terminal state, and returns the settled or refunded
|
|
137
|
-
* flow. Use after submitting a `requestDeposit` / `requestRedeem` transaction.
|
|
138
|
-
*/
|
|
139
|
-
export async function waitForRequestSettlement(api, walletAddress, requestHash, options = {}) {
|
|
140
|
-
const pollIntervalMs = options.pollIntervalMs ?? 5000;
|
|
141
|
-
const timeoutMs = options.timeoutMs ?? 600000;
|
|
142
|
-
const deadline = Date.now() + timeoutMs;
|
|
143
|
-
for (;;) {
|
|
144
|
-
const flows = await getActivityFlows(api, walletAddress, { vaultId: options.vaultId });
|
|
145
|
-
const flow = flows.find((f) => f.requestHash === requestHash);
|
|
146
|
-
if (flow && flow.status !== 'pending')
|
|
147
|
-
return flow;
|
|
148
|
-
if (Date.now() + pollIntervalMs > deadline) {
|
|
149
|
-
throw new SettlementTimeoutError(requestHash, timeoutMs);
|
|
150
|
-
}
|
|
151
|
-
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=activity.js.map
|
package/dist/api/activity.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/api/activity.ts"],"names":[],"mappings":"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"}
|
package/dist/api/caip.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { VaultNotFoundError } from '../errors';
|
|
2
|
-
import { resolveVault } from '../evm/vaults';
|
|
3
|
-
import { InvalidCaipIdError } from './errors';
|
|
4
|
-
export function parseApiVaultId(id) {
|
|
5
|
-
const match = /^(?:eip155:)?(\d+):(0x[0-9a-fA-F]{40})$/.exec(id);
|
|
6
|
-
if (!match)
|
|
7
|
-
throw new InvalidCaipIdError(id);
|
|
8
|
-
return { chainId: Number(match[1]), address: match[2].toLowerCase() };
|
|
9
|
-
}
|
|
10
|
-
export function formatApiVaultId(chainId, address) {
|
|
11
|
-
return `${chainId}:${address.toLowerCase()}`;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Resolves a manifest vault id (e.g. `VaultId.AeraUsdAlpha` / `'gtusda'`) to
|
|
15
|
-
* the Gaia API's CAIP-10 id for the vault's deployment on `chainId`.
|
|
16
|
-
*
|
|
17
|
-
* Deployment resolution is `resolveVault` — the same rules tx-building uses:
|
|
18
|
-
* single-deployment vaults resolve directly (a mismatched explicit `chainId`
|
|
19
|
-
* throws `ChainMismatchError`), multi-chain vaults default to Base when
|
|
20
|
-
* `chainId` is omitted.
|
|
21
|
-
*/
|
|
22
|
-
export async function apiVaultIdFromVaultId(client, vaultId, chainId) {
|
|
23
|
-
const resolved = await resolveVault(client, vaultId, chainId);
|
|
24
|
-
if (!resolved)
|
|
25
|
-
throw new VaultNotFoundError(vaultId, chainId);
|
|
26
|
-
return formatApiVaultId(resolved.vault.chainId, resolved.vault.vaultAddress);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Resolves a Gaia API CAIP-10 vault id back to the manifest vault id, or
|
|
30
|
-
* `undefined` when the vault is not in the bundled manifest (the API indexes
|
|
31
|
-
* more vaults than the manifest lists).
|
|
32
|
-
*/
|
|
33
|
-
export async function vaultIdFromApiVaultId(client, apiVaultId) {
|
|
34
|
-
const { chainId, address } = parseApiVaultId(apiVaultId);
|
|
35
|
-
const manifest = await client.manifest;
|
|
36
|
-
return manifest.vaults.find((v) => v.deployments.some((d) => d.chain === 'evm' && d.chainId === chainId && d.vaultAddress.toLowerCase() === address))?.vaultId;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=caip.js.map
|
package/dist/api/caip.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"caip.js","sourceRoot":"","sources":["../../src/api/caip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAY9C,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,MAAM,KAAK,GAAG,yCAAyC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,OAAe;IAC/D,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAsB,EACtB,OAAe,EACf,OAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAsB,EACtB,UAAkB;IAElB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAChC,CAAC,CAAC,WAAW,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,OAAO,CAC9F,CACF,EAAE,OAAO,CAAC;AACb,CAAC"}
|