@gearbox-protocol/sdk 14.12.0-next.22 → 14.12.0-next.24
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/dist/cjs/abi/IWithdrawalCompressorV313.js +2 -1
- package/dist/cjs/abi/compressors/withdrawalCompressor.js +2 -1
- package/dist/cjs/plugins/adapters/contracts/AbstractAdapter.js +31 -9
- package/dist/cjs/plugins/adapters/contracts/AbstractCurveAdapter.js +8 -5
- package/dist/cjs/plugins/adapters/contracts/BalancerV3RouterAdapterContract.js +6 -4
- package/dist/cjs/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.js +6 -4
- package/dist/cjs/plugins/adapters/contracts/CamelotV3AdapterContract.js +6 -9
- package/dist/cjs/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.js +7 -5
- package/dist/cjs/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.js +6 -4
- package/dist/cjs/plugins/adapters/contracts/DaiUsdsAdapterContract.js +6 -4
- package/dist/cjs/plugins/adapters/contracts/ERC4626AdapterContract.js +13 -4
- package/dist/cjs/plugins/adapters/contracts/ERC4626ReferralAdapterContract.js +6 -4
- package/dist/cjs/plugins/adapters/contracts/FluidDexAdapterContract.js +8 -8
- package/dist/cjs/plugins/adapters/contracts/InfinifiGatewayAdapterContract.js +8 -5
- package/dist/cjs/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/LidoV1AdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/MellowClaimerAdapterContract.js +29 -0
- package/dist/cjs/plugins/adapters/contracts/MellowDVVAdapterContract.js +6 -4
- package/dist/cjs/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.js +11 -4
- package/dist/cjs/plugins/adapters/contracts/MellowWrapperAdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/MidasGatewayAdapterContract.js +31 -4
- package/dist/cjs/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/PendleRouterAdapterContract.js +14 -16
- package/dist/cjs/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/SecuritizeRedemptionGatewayAdapterContract.js +14 -13
- package/dist/cjs/plugins/adapters/contracts/StakingRewardsAdapterContract.js +7 -5
- package/dist/cjs/plugins/adapters/contracts/TraderJoeRouterAdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/UniswapV2AdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/UniswapV3AdapterContract.js +6 -9
- package/dist/cjs/plugins/adapters/contracts/UniswapV4AdapterContract.js +8 -8
- package/dist/cjs/plugins/adapters/contracts/UpshiftVaultAdapterContract.js +6 -4
- package/dist/cjs/plugins/adapters/contracts/VelodromeV2AdapterContract.js +4 -3
- package/dist/cjs/plugins/adapters/contracts/WstETHV1AdapterContract.js +6 -4
- package/dist/cjs/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.js +1 -5
- package/dist/cjs/preview/preview/applyInnerOperations.js +83 -58
- package/dist/cjs/preview/preview/applyQuotaChanges.js +43 -0
- package/dist/cjs/preview/preview/errors.js +0 -16
- package/dist/cjs/preview/preview/index.js +2 -0
- package/dist/cjs/preview/preview/previewAdjustCreditAccount.js +19 -8
- package/dist/cjs/preview/preview/previewCloseOrRepayCreditAccount.js +18 -7
- package/dist/cjs/preview/preview/previewOpenCreditAccount.js +18 -6
- package/dist/cjs/preview/preview/types.js +30 -0
- package/dist/cjs/preview/preview/unwrapNativeCollateral.js +10 -4
- package/dist/cjs/sdk/OnchainSDK.js +3 -6
- package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +2 -4
- package/dist/cjs/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +14 -22
- package/dist/cjs/sdk/accounts/withdrawal-compressor/addresses.js +6 -18
- package/dist/cjs/sdk/accounts/withdrawal-compressor/createWithdrawalCompressor.js +3 -5
- package/dist/esm/abi/IWithdrawalCompressorV313.js +2 -1
- package/dist/esm/abi/compressors/withdrawalCompressor.js +2 -1
- package/dist/esm/plugins/adapters/contracts/AbstractAdapter.js +31 -9
- package/dist/esm/plugins/adapters/contracts/AbstractCurveAdapter.js +8 -5
- package/dist/esm/plugins/adapters/contracts/BalancerV3RouterAdapterContract.js +6 -4
- package/dist/esm/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.js +6 -4
- package/dist/esm/plugins/adapters/contracts/CamelotV3AdapterContract.js +6 -9
- package/dist/esm/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.js +7 -5
- package/dist/esm/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.js +6 -4
- package/dist/esm/plugins/adapters/contracts/DaiUsdsAdapterContract.js +6 -4
- package/dist/esm/plugins/adapters/contracts/ERC4626AdapterContract.js +13 -4
- package/dist/esm/plugins/adapters/contracts/ERC4626ReferralAdapterContract.js +6 -4
- package/dist/esm/plugins/adapters/contracts/FluidDexAdapterContract.js +8 -8
- package/dist/esm/plugins/adapters/contracts/InfinifiGatewayAdapterContract.js +8 -5
- package/dist/esm/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/LidoV1AdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/MellowClaimerAdapterContract.js +32 -1
- package/dist/esm/plugins/adapters/contracts/MellowDVVAdapterContract.js +6 -4
- package/dist/esm/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.js +11 -4
- package/dist/esm/plugins/adapters/contracts/MellowWrapperAdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/MidasGatewayAdapterContract.js +33 -5
- package/dist/esm/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/PendleRouterAdapterContract.js +14 -16
- package/dist/esm/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/SecuritizeRedemptionGatewayAdapterContract.js +14 -13
- package/dist/esm/plugins/adapters/contracts/StakingRewardsAdapterContract.js +7 -5
- package/dist/esm/plugins/adapters/contracts/TraderJoeRouterAdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/UniswapV2AdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/UniswapV3AdapterContract.js +6 -9
- package/dist/esm/plugins/adapters/contracts/UniswapV4AdapterContract.js +8 -8
- package/dist/esm/plugins/adapters/contracts/UpshiftVaultAdapterContract.js +6 -4
- package/dist/esm/plugins/adapters/contracts/VelodromeV2AdapterContract.js +4 -3
- package/dist/esm/plugins/adapters/contracts/WstETHV1AdapterContract.js +6 -4
- package/dist/esm/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.js +2 -9
- package/dist/esm/preview/preview/applyInnerOperations.js +90 -59
- package/dist/esm/preview/preview/applyQuotaChanges.js +19 -0
- package/dist/esm/preview/preview/errors.js +0 -15
- package/dist/esm/preview/preview/index.js +1 -0
- package/dist/esm/preview/preview/previewAdjustCreditAccount.js +20 -8
- package/dist/esm/preview/preview/previewCloseOrRepayCreditAccount.js +18 -7
- package/dist/esm/preview/preview/previewOpenCreditAccount.js +20 -6
- package/dist/esm/preview/preview/types.js +16 -0
- package/dist/esm/preview/preview/unwrapNativeCollateral.js +12 -4
- package/dist/esm/sdk/OnchainSDK.js +3 -6
- package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +2 -4
- package/dist/esm/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +14 -22
- package/dist/esm/sdk/accounts/withdrawal-compressor/addresses.js +6 -18
- package/dist/esm/sdk/accounts/withdrawal-compressor/createWithdrawalCompressor.js +3 -5
- package/dist/types/abi/IWithdrawalCompressorV313.d.ts +4 -0
- package/dist/types/abi/compressors/withdrawalCompressor.d.ts +4 -0
- package/dist/types/permissionless/bindings/compressors/withdrawal-compressor.d.ts +4 -0
- package/dist/types/plugins/adapters/contracts/AbstractAdapter.d.ts +27 -7
- package/dist/types/plugins/adapters/contracts/AbstractCurveAdapter.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/BalancerV3RouterAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/CamelotV3AdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/DaiUsdsAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/ERC4626AdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/ERC4626ReferralAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/FluidDexAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/InfinifiGatewayAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/LidoV1AdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/MellowClaimerAdapterContract.d.ts +3 -2
- package/dist/types/plugins/adapters/contracts/MellowDVVAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/MellowWrapperAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/MidasGatewayAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/PendleRouterAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/SecuritizeRedemptionGatewayAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/StakingRewardsAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/TraderJoeRouterAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/UniswapV2AdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/UniswapV3AdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/UniswapV4AdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/UpshiftVaultAdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/VelodromeV2AdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/contracts/WstETHV1AdapterContract.d.ts +2 -3
- package/dist/types/plugins/adapters/types.d.ts +0 -10
- package/dist/types/preview/preview/applyInnerOperations.d.ts +8 -33
- package/dist/types/preview/preview/applyQuotaChanges.d.ts +24 -0
- package/dist/types/preview/preview/errors.d.ts +0 -12
- package/dist/types/preview/preview/index.d.ts +1 -0
- package/dist/types/preview/preview/previewAdjustCreditAccount.d.ts +1 -1
- package/dist/types/preview/preview/previewOpenCreditAccount.d.ts +1 -1
- package/dist/types/preview/preview/types.d.ts +81 -0
- package/dist/types/preview/preview/unwrapNativeCollateral.d.ts +19 -4
- package/dist/types/sdk/OnchainSDK.d.ts +3 -6
- package/dist/types/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.d.ts +4 -0
- package/dist/types/sdk/accounts/withdrawal-compressor/addresses.d.ts +1 -2
- package/dist/types/sdk/accounts/withdrawal-compressor/createWithdrawalCompressor.d.ts +2 -4
- package/dist/types/sdk/accounts/withdrawal-compressor/types.d.ts +7 -0
- package/package.json +1 -1
|
@@ -77,16 +77,17 @@ class MidasRedemptionVaultAdapterContract extends import_AbstractAdapter.Abstrac
|
|
|
77
77
|
}))
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
|
-
|
|
80
|
+
applyBalanceChanges(balances, decoded) {
|
|
81
81
|
switch (decoded.functionName) {
|
|
82
82
|
// redemption spends the mToken down to the leftover, tokenOut arg is
|
|
83
83
|
// the received token
|
|
84
84
|
case "redeemInstantDiff": {
|
|
85
85
|
const [, leftoverAmount] = decoded.args;
|
|
86
|
-
|
|
86
|
+
this.setLeftover(balances, this.mToken, leftoverAmount);
|
|
87
|
+
break;
|
|
87
88
|
}
|
|
88
89
|
default:
|
|
89
|
-
|
|
90
|
+
super.applyBalanceChanges(balances, decoded);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
}
|
|
@@ -117,27 +117,29 @@ class PendleRouterAdapterContract extends import_AbstractAdapter.AbstractAdapter
|
|
|
117
117
|
}))
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
|
-
|
|
120
|
+
applyBalanceChanges(balances, decoded) {
|
|
121
121
|
switch (decoded.functionName) {
|
|
122
122
|
case "swapDiffTokenForPt":
|
|
123
123
|
case "addLiquiditySingleTokenDiff": {
|
|
124
124
|
const [, , , diffInput] = decoded.args;
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
125
|
+
this.setLeftover(
|
|
126
|
+
balances,
|
|
127
|
+
diffInput.tokenIn,
|
|
128
|
+
diffInput.leftoverTokenIn
|
|
129
|
+
);
|
|
130
|
+
break;
|
|
131
131
|
}
|
|
132
132
|
case "swapDiffPtForToken": {
|
|
133
133
|
const [market, leftoverPt] = decoded.args;
|
|
134
134
|
const pt = this.#mustFindPendleToken(market, 0 /* PT */);
|
|
135
|
-
|
|
135
|
+
this.setLeftover(balances, pt, leftoverPt);
|
|
136
|
+
break;
|
|
136
137
|
}
|
|
137
138
|
case "removeLiquiditySingleTokenDiff": {
|
|
138
139
|
const [market, leftoverLp] = decoded.args;
|
|
139
140
|
const lp = this.#mustFindPendleToken(market, 1 /* LP */);
|
|
140
|
-
|
|
141
|
+
this.setLeftover(balances, lp, leftoverLp);
|
|
142
|
+
break;
|
|
141
143
|
}
|
|
142
144
|
case "redeemDiffPyToToken": {
|
|
143
145
|
const candidates = this.allowedPairs.filter(
|
|
@@ -152,15 +154,11 @@ class PendleRouterAdapterContract extends import_AbstractAdapter.AbstractAdapter
|
|
|
152
154
|
);
|
|
153
155
|
}
|
|
154
156
|
const [, leftoverPt] = decoded.args;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
tokenIn: candidates[0].pendleToken,
|
|
158
|
-
leftoverAmount: leftoverPt
|
|
159
|
-
}
|
|
160
|
-
];
|
|
157
|
+
this.setLeftover(balances, candidates[0].pendleToken, leftoverPt);
|
|
158
|
+
break;
|
|
161
159
|
}
|
|
162
160
|
default:
|
|
163
|
-
|
|
161
|
+
super.applyBalanceChanges(balances, decoded);
|
|
164
162
|
}
|
|
165
163
|
}
|
|
166
164
|
#mustFindPendleToken(market, type) {
|
|
@@ -64,15 +64,16 @@ class SecuritizeOnRampAdapterContract extends import_AbstractAdapter.AbstractAda
|
|
|
64
64
|
liquidityToken: this.#liquidityToken ? this.labelAddress(this.#liquidityToken) : void 0
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
|
-
|
|
67
|
+
applyBalanceChanges(balances, decoded) {
|
|
68
68
|
switch (decoded.functionName) {
|
|
69
69
|
// swaps the liquidity token into dsToken
|
|
70
70
|
case "swapDiff": {
|
|
71
71
|
const [leftoverAmount] = decoded.args;
|
|
72
|
-
|
|
72
|
+
this.setLeftover(balances, this.liquidityToken, leftoverAmount);
|
|
73
|
+
break;
|
|
73
74
|
}
|
|
74
75
|
default:
|
|
75
|
-
|
|
76
|
+
super.applyBalanceChanges(balances, decoded);
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
79
|
}
|
|
@@ -72,28 +72,29 @@ class SecuritizeRedemptionGatewayAdapterContract extends import_AbstractAdapter.
|
|
|
72
72
|
redemptionPhantomToken: this.#redemptionPhantomToken ? this.labelAddress(this.#redemptionPhantomToken) : void 0
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
|
-
|
|
75
|
+
applyBalanceChanges(balances, decoded) {
|
|
76
76
|
switch (decoded.functionName) {
|
|
77
|
-
// exact-input redemption: burns dsTokenAmount of the DS token in
|
|
78
|
-
// exchange for the redemption phantom token (which is credited by the
|
|
79
|
-
// storeExpectedBalances bracket delta, not here)
|
|
80
77
|
case "redeem": {
|
|
81
78
|
const [dsTokenAmount] = decoded.args;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
{
|
|
85
|
-
tokenIn: this.dsToken,
|
|
86
|
-
leftoverAmount: balance > dsTokenAmount ? balance - dsTokenAmount : 0n
|
|
87
|
-
}
|
|
88
|
-
];
|
|
79
|
+
this.spendExact(balances, this.dsToken, dsTokenAmount);
|
|
80
|
+
break;
|
|
89
81
|
}
|
|
90
82
|
// diff-style redemption: spends the DS token down to the leftover
|
|
91
83
|
case "redeemDiff": {
|
|
92
84
|
const [leftoverAmount] = decoded.args;
|
|
93
|
-
|
|
85
|
+
this.setLeftover(balances, this.dsToken, leftoverAmount);
|
|
86
|
+
break;
|
|
94
87
|
}
|
|
88
|
+
// TODO:
|
|
89
|
+
// `claim(address[] redeemers)` (the claim call emitted by the
|
|
90
|
+
// withdrawal compressor) cannot be previewed offline: the redemption
|
|
91
|
+
// phantom token burn (the compressor's `withdrawalTokenSpent`, i.e.
|
|
92
|
+
// each redeemer's `getRedemptionAmount()`) lives in per-redeemer clone
|
|
93
|
+
// contracts and is not recoverable from calldata. For claimable
|
|
94
|
+
// redeemers it equals the stablecoin credit, but that value is not in
|
|
95
|
+
// calldata either.
|
|
95
96
|
default:
|
|
96
|
-
|
|
97
|
+
super.applyBalanceChanges(balances, decoded);
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
}
|
|
@@ -100,21 +100,23 @@ class StakingRewardsAdapterContract extends import_AbstractAdapter.AbstractAdapt
|
|
|
100
100
|
referral: this.#referral
|
|
101
101
|
};
|
|
102
102
|
}
|
|
103
|
-
|
|
103
|
+
applyBalanceChanges(balances, decoded) {
|
|
104
104
|
switch (decoded.functionName) {
|
|
105
105
|
case "stakeDiff": {
|
|
106
106
|
const [leftoverAmount] = decoded.args;
|
|
107
|
-
|
|
107
|
+
this.setLeftover(balances, this.stakingToken, leftoverAmount);
|
|
108
|
+
break;
|
|
108
109
|
}
|
|
109
110
|
case "withdrawDiff": {
|
|
110
111
|
const [leftoverAmount] = decoded.args;
|
|
111
|
-
|
|
112
|
+
this.setLeftover(balances, this.stakedPhantomToken, leftoverAmount);
|
|
113
|
+
break;
|
|
112
114
|
}
|
|
113
115
|
// no accrued rewards on a freshly opened account
|
|
114
116
|
case "getReward":
|
|
115
|
-
|
|
117
|
+
break;
|
|
116
118
|
default:
|
|
117
|
-
|
|
119
|
+
super.applyBalanceChanges(balances, decoded);
|
|
118
120
|
}
|
|
119
121
|
}
|
|
120
122
|
}
|
|
@@ -82,14 +82,15 @@ class TraderJoeRouterAdapterContract extends import_AbstractAdapter.AbstractAdap
|
|
|
82
82
|
}))
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
|
-
|
|
85
|
+
applyBalanceChanges(balances, decoded) {
|
|
86
86
|
switch (decoded.functionName) {
|
|
87
87
|
case "swapDiffTokensForTokens": {
|
|
88
88
|
const [leftoverAmount, , path] = decoded.args;
|
|
89
|
-
|
|
89
|
+
this.setLeftover(balances, path.tokenPath[0], leftoverAmount);
|
|
90
|
+
break;
|
|
90
91
|
}
|
|
91
92
|
default:
|
|
92
|
-
|
|
93
|
+
super.applyBalanceChanges(balances, decoded);
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
96
|
}
|
|
@@ -93,14 +93,15 @@ class UniswapV2AdapterContract extends import_AbstractAdapter.AbstractAdapterCon
|
|
|
93
93
|
classifyLegacyOperation(_parsed, transfers) {
|
|
94
94
|
return { operation: "UniswapSwap", ...(0, import_transferHelpers.swapFromTransfers)(transfers) };
|
|
95
95
|
}
|
|
96
|
-
|
|
96
|
+
applyBalanceChanges(balances, decoded) {
|
|
97
97
|
switch (decoded.functionName) {
|
|
98
98
|
case "swapDiffTokensForTokens": {
|
|
99
99
|
const [leftoverAmount, , path] = decoded.args;
|
|
100
|
-
|
|
100
|
+
this.setLeftover(balances, path[0], leftoverAmount);
|
|
101
|
+
break;
|
|
101
102
|
}
|
|
102
103
|
default:
|
|
103
|
-
|
|
104
|
+
super.applyBalanceChanges(balances, decoded);
|
|
104
105
|
}
|
|
105
106
|
}
|
|
106
107
|
}
|
|
@@ -71,24 +71,21 @@ class UniswapV3AdapterContract extends import_AbstractAdapter.AbstractAdapterCon
|
|
|
71
71
|
}))
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
|
-
|
|
74
|
+
applyBalanceChanges(balances, decoded) {
|
|
75
75
|
switch (decoded.functionName) {
|
|
76
76
|
case "exactDiffInputSingle": {
|
|
77
77
|
const [params] = decoded.args;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
tokenIn: params.tokenIn,
|
|
81
|
-
leftoverAmount: params.leftoverAmount
|
|
82
|
-
}
|
|
83
|
-
];
|
|
78
|
+
this.setLeftover(balances, params.tokenIn, params.leftoverAmount);
|
|
79
|
+
break;
|
|
84
80
|
}
|
|
85
81
|
case "exactDiffInput": {
|
|
86
82
|
const [params] = decoded.args;
|
|
87
83
|
const tokenIn = `0x${params.path.replace("0x", "").slice(0, 40)}`;
|
|
88
|
-
|
|
84
|
+
this.setLeftover(balances, tokenIn, params.leftoverAmount);
|
|
85
|
+
break;
|
|
89
86
|
}
|
|
90
87
|
default:
|
|
91
|
-
|
|
88
|
+
super.applyBalanceChanges(balances, decoded);
|
|
92
89
|
}
|
|
93
90
|
}
|
|
94
91
|
stringifyFunctionParams(params) {
|
|
@@ -81,19 +81,19 @@ class UniswapV4AdapterContract extends import_AbstractAdapter.AbstractAdapterCon
|
|
|
81
81
|
classifyLegacyOperation(_parsed, transfers) {
|
|
82
82
|
return { operation: "UniswapSwap", ...(0, import_transferHelpers.swapFromTransfers)(transfers) };
|
|
83
83
|
}
|
|
84
|
-
|
|
84
|
+
applyBalanceChanges(balances, decoded) {
|
|
85
85
|
switch (decoded.functionName) {
|
|
86
86
|
case "swapExactInputSingleDiff": {
|
|
87
87
|
const [poolKey, zeroForOne, leftoverAmount] = decoded.args;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
this.setLeftover(
|
|
89
|
+
balances,
|
|
90
|
+
zeroForOne ? poolKey.token0 : poolKey.token1,
|
|
91
|
+
leftoverAmount
|
|
92
|
+
);
|
|
93
|
+
break;
|
|
94
94
|
}
|
|
95
95
|
default:
|
|
96
|
-
|
|
96
|
+
super.applyBalanceChanges(balances, decoded);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -70,18 +70,20 @@ class UpshiftVaultAdapterContract extends import_AbstractAdapter.AbstractAdapter
|
|
|
70
70
|
stakedPhantomToken: this.#stakedPhantomToken ? this.labelAddress(this.#stakedPhantomToken) : void 0
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
|
|
73
|
+
applyBalanceChanges(balances, decoded) {
|
|
74
74
|
switch (decoded.functionName) {
|
|
75
75
|
case "depositDiff": {
|
|
76
76
|
const [leftoverAmount] = decoded.args;
|
|
77
|
-
|
|
77
|
+
this.setLeftover(balances, this.asset, leftoverAmount);
|
|
78
|
+
break;
|
|
78
79
|
}
|
|
79
80
|
case "redeemDiff": {
|
|
80
81
|
const [leftoverAmount] = decoded.args;
|
|
81
|
-
|
|
82
|
+
this.setLeftover(balances, this.vault, leftoverAmount);
|
|
83
|
+
break;
|
|
82
84
|
}
|
|
83
85
|
default:
|
|
84
|
-
|
|
86
|
+
super.applyBalanceChanges(balances, decoded);
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
}
|
|
@@ -74,14 +74,15 @@ class VelodromeV2RouterAdapterContract extends import_AbstractAdapter.AbstractAd
|
|
|
74
74
|
}))
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
|
-
|
|
77
|
+
applyBalanceChanges(balances, decoded) {
|
|
78
78
|
switch (decoded.functionName) {
|
|
79
79
|
case "swapDiffTokensForTokens": {
|
|
80
80
|
const [leftoverAmount, , routes] = decoded.args;
|
|
81
|
-
|
|
81
|
+
this.setLeftover(balances, routes[0].from, leftoverAmount);
|
|
82
|
+
break;
|
|
82
83
|
}
|
|
83
84
|
default:
|
|
84
|
-
|
|
85
|
+
super.applyBalanceChanges(balances, decoded);
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
88
|
}
|
|
@@ -65,19 +65,21 @@ class WstETHV1AdapterContract extends import_AbstractAdapter.AbstractAdapterCont
|
|
|
65
65
|
}
|
|
66
66
|
return super.classifyLegacyOperation(parsed, transfers);
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
applyBalanceChanges(balances, decoded) {
|
|
69
69
|
switch (decoded.functionName) {
|
|
70
70
|
case "wrapDiff": {
|
|
71
71
|
const [leftoverAmount] = decoded.args;
|
|
72
|
-
|
|
72
|
+
this.setLeftover(balances, this.stETH, leftoverAmount);
|
|
73
|
+
break;
|
|
73
74
|
}
|
|
74
75
|
// wstETH is the adapter's target contract
|
|
75
76
|
case "unwrapDiff": {
|
|
76
77
|
const [leftoverAmount] = decoded.args;
|
|
77
|
-
|
|
78
|
+
this.setLeftover(balances, this.targetContract, leftoverAmount);
|
|
79
|
+
break;
|
|
78
80
|
}
|
|
79
81
|
default:
|
|
80
|
-
|
|
82
|
+
super.applyBalanceChanges(balances, decoded);
|
|
81
83
|
}
|
|
82
84
|
}
|
|
83
85
|
}
|
|
@@ -30,11 +30,7 @@ class DelayedWithdrawalPlugin extends import_sdk.BasePlugin {
|
|
|
30
30
|
return this.state;
|
|
31
31
|
}
|
|
32
32
|
this.#withdrawableAssets = new import_sdk.AddressMap(void 0, MAP_LABEL);
|
|
33
|
-
const
|
|
34
|
-
this.sdk.logger?.debug(
|
|
35
|
-
`loading delayed withdrawal plugin with compressor ${compressor.address}`
|
|
36
|
-
);
|
|
37
|
-
const resp = await compressor.getWithdrawableAssetsBatch();
|
|
33
|
+
const resp = await this.sdk.withdrawalCompressor.getWithdrawableAssetsBatch();
|
|
38
34
|
const byCreditManager = /* @__PURE__ */ new Map();
|
|
39
35
|
for (const cfg of resp) {
|
|
40
36
|
const assets = byCreditManager.get(cfg.creditManager) ?? [];
|
|
@@ -19,13 +19,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var applyInnerOperations_exports = {};
|
|
20
20
|
__export(applyInnerOperations_exports, {
|
|
21
21
|
applyInnerOperations: () => applyInnerOperations,
|
|
22
|
-
applyQuotaChanges: () => applyQuotaChanges,
|
|
23
22
|
makeInnerOperationsState: () => makeInnerOperationsState
|
|
24
23
|
});
|
|
25
24
|
module.exports = __toCommonJS(applyInnerOperations_exports);
|
|
26
25
|
var import_adapters = require("../../plugins/adapters/index.js");
|
|
27
26
|
var import_sdk = require("../../sdk/index.js");
|
|
28
27
|
var import_applyRWAWrapUnwrap = require("./applyRWAWrapUnwrap.js");
|
|
28
|
+
var import_types = require("./types.js");
|
|
29
29
|
function makeInnerOperationsState() {
|
|
30
30
|
return {
|
|
31
31
|
balances: new import_sdk.AssetsMap(),
|
|
@@ -39,41 +39,31 @@ function makeInnerOperationsState() {
|
|
|
39
39
|
function applyInnerOperations(sdk, multicall, state) {
|
|
40
40
|
let inBracket = false;
|
|
41
41
|
let storeSeen = false;
|
|
42
|
+
let error;
|
|
42
43
|
for (const op of multicall) {
|
|
44
|
+
let opError;
|
|
43
45
|
switch (op.operation) {
|
|
44
46
|
case "AddCollateral":
|
|
45
|
-
state
|
|
46
|
-
state.balances.inc(op.token, op.amount);
|
|
47
|
+
applyAddCollateral(state, op);
|
|
47
48
|
break;
|
|
48
|
-
case "WithdrawCollateral":
|
|
49
|
-
|
|
50
|
-
const amount = op.amount === import_sdk.MAX_UINT256 ? running > 0n ? running : 0n : op.amount;
|
|
51
|
-
state.balances.dec(op.token, amount);
|
|
52
|
-
state.collateralWithdrawn.inc(op.token, amount);
|
|
49
|
+
case "WithdrawCollateral":
|
|
50
|
+
applyWithdrawCollateral(state, op);
|
|
53
51
|
break;
|
|
54
|
-
}
|
|
55
52
|
case "IncreaseBorrowedAmount":
|
|
56
|
-
state
|
|
57
|
-
state.totalDebt += op.amount;
|
|
58
|
-
state.balances.inc(op.token, op.amount);
|
|
53
|
+
applyIncreaseDebt(state, op);
|
|
59
54
|
break;
|
|
60
|
-
case "DecreaseBorrowedAmount":
|
|
61
|
-
|
|
62
|
-
state.balances.dec(op.token, repaid);
|
|
63
|
-
state.totalDebt -= repaid;
|
|
64
|
-
if (state.debt > state.totalDebt) {
|
|
65
|
-
state.debt = state.totalDebt;
|
|
66
|
-
}
|
|
55
|
+
case "DecreaseBorrowedAmount":
|
|
56
|
+
applyDecreaseDebt(state, op);
|
|
67
57
|
break;
|
|
68
|
-
}
|
|
69
58
|
case "UpdateQuota":
|
|
70
59
|
state.quotaChanges.push({ token: op.token, balance: op.change });
|
|
71
60
|
break;
|
|
72
61
|
case "StoreExpectedBalances":
|
|
73
62
|
if (storeSeen) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
63
|
+
opError = {
|
|
64
|
+
code: import_types.ERROR_MALFORMED_BRACKET,
|
|
65
|
+
message: "duplicate storeExpectedBalances call"
|
|
66
|
+
};
|
|
77
67
|
}
|
|
78
68
|
storeSeen = true;
|
|
79
69
|
inBracket = true;
|
|
@@ -83,32 +73,83 @@ function applyInnerOperations(sdk, multicall, state) {
|
|
|
83
73
|
break;
|
|
84
74
|
case "CompareBalances":
|
|
85
75
|
if (!inBracket) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
76
|
+
opError = {
|
|
77
|
+
code: import_types.ERROR_MALFORMED_BRACKET,
|
|
78
|
+
message: "compareBalances without a preceding storeExpectedBalances"
|
|
79
|
+
};
|
|
89
80
|
}
|
|
90
81
|
inBracket = false;
|
|
91
82
|
break;
|
|
92
|
-
case "Execute":
|
|
93
|
-
|
|
94
|
-
if (inBracket) {
|
|
95
|
-
if (!(adapter instanceof import_adapters.AbstractAdapterContract)) {
|
|
96
|
-
throw new Error(
|
|
97
|
-
`call to ${op.adapter} between storeExpectedBalances and compareBalances is not an adapter call`
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
adapter.previewBalanceChanges(state.balances, op.calldata);
|
|
101
|
-
} else if (isRWAShare(sdk, adapter)) {
|
|
102
|
-
(0, import_applyRWAWrapUnwrap.applyRWAWrapUnwrap)(adapter, op.calldata, state.balances);
|
|
103
|
-
}
|
|
83
|
+
case "Execute":
|
|
84
|
+
opError = applyExecute(sdk, op, inBracket, state.balances);
|
|
104
85
|
break;
|
|
105
|
-
}
|
|
106
86
|
}
|
|
87
|
+
error ??= opError;
|
|
107
88
|
}
|
|
108
89
|
if (inBracket) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
90
|
+
error ??= {
|
|
91
|
+
code: import_types.ERROR_MALFORMED_BRACKET,
|
|
92
|
+
message: "storeExpectedBalances without a matching compareBalances"
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return error;
|
|
96
|
+
}
|
|
97
|
+
function applyAddCollateral(state, op) {
|
|
98
|
+
state.collateralAdded.inc(op.token, op.amount);
|
|
99
|
+
state.balances.inc(op.token, op.amount);
|
|
100
|
+
}
|
|
101
|
+
function applyWithdrawCollateral(state, op) {
|
|
102
|
+
const running = state.balances.getOrZero(op.token);
|
|
103
|
+
const amount = op.amount === import_sdk.MAX_UINT256 ? running > 0n ? running : 0n : op.amount;
|
|
104
|
+
state.balances.dec(op.token, amount);
|
|
105
|
+
state.collateralWithdrawn.inc(op.token, amount);
|
|
106
|
+
}
|
|
107
|
+
function applyIncreaseDebt(state, op) {
|
|
108
|
+
state.debt += op.amount;
|
|
109
|
+
state.totalDebt += op.amount;
|
|
110
|
+
state.balances.inc(op.token, op.amount);
|
|
111
|
+
}
|
|
112
|
+
function applyDecreaseDebt(state, op) {
|
|
113
|
+
const repaid = op.amount > state.totalDebt ? state.totalDebt : op.amount;
|
|
114
|
+
state.balances.dec(op.token, repaid);
|
|
115
|
+
state.totalDebt -= repaid;
|
|
116
|
+
if (state.debt > state.totalDebt) {
|
|
117
|
+
state.debt = state.totalDebt;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function applyExecute(sdk, op, inBracket, balances) {
|
|
121
|
+
const adapter = sdk.getContract(op.adapter);
|
|
122
|
+
if (!inBracket) {
|
|
123
|
+
if (!isRWAShare(sdk, adapter)) {
|
|
124
|
+
return {
|
|
125
|
+
code: import_types.ERROR_ADAPTER_CALL_OUTSIDE_BRACKET,
|
|
126
|
+
message: `call to ${op.adapter} outside of a storeExpectedBalances/compareBalances bracket`
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
(0, import_applyRWAWrapUnwrap.applyRWAWrapUnwrap)(adapter, op.calldata, balances);
|
|
131
|
+
return void 0;
|
|
132
|
+
} catch (e) {
|
|
133
|
+
return {
|
|
134
|
+
code: import_types.ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP,
|
|
135
|
+
message: e instanceof Error ? e.message : String(e)
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (!(adapter instanceof import_adapters.AbstractAdapterContract)) {
|
|
140
|
+
return {
|
|
141
|
+
code: import_types.ERROR_NON_ADAPTER_CALL_IN_BRACKET,
|
|
142
|
+
message: `call to ${op.adapter} between storeExpectedBalances and compareBalances is not an adapter call`
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
adapter.previewBalanceChanges(balances, op.calldata);
|
|
147
|
+
return void 0;
|
|
148
|
+
} catch (e) {
|
|
149
|
+
return {
|
|
150
|
+
code: import_types.ERROR_UNPREVIEWABLE_ADAPTER_CALL,
|
|
151
|
+
message: e instanceof Error ? e.message : String(e)
|
|
152
|
+
};
|
|
112
153
|
}
|
|
113
154
|
}
|
|
114
155
|
function isRWAShare(sdk, adapter) {
|
|
@@ -118,24 +159,8 @@ function isRWAShare(sdk, adapter) {
|
|
|
118
159
|
}
|
|
119
160
|
return false;
|
|
120
161
|
}
|
|
121
|
-
function applyQuotaChanges(initialQuotas, changes) {
|
|
122
|
-
const final = initialQuotas.clone();
|
|
123
|
-
for (const { token, balance: change } of changes) {
|
|
124
|
-
if (change === import_sdk.MIN_INT96) {
|
|
125
|
-
final.upsert(token, 0n);
|
|
126
|
-
} else {
|
|
127
|
-
const next = final.getOrZero(token) + change;
|
|
128
|
-
final.upsert(token, next > 0n ? next : 0n);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return {
|
|
132
|
-
quotas: final.toAssets(0n),
|
|
133
|
-
quotasChange: final.difference(initialQuotas).toAssets()
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
162
|
// Annotate the CommonJS export names for ESM import in node:
|
|
137
163
|
0 && (module.exports = {
|
|
138
164
|
applyInnerOperations,
|
|
139
|
-
applyQuotaChanges,
|
|
140
165
|
makeInnerOperationsState
|
|
141
166
|
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var applyQuotaChanges_exports = {};
|
|
20
|
+
__export(applyQuotaChanges_exports, {
|
|
21
|
+
applyQuotaChanges: () => applyQuotaChanges
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(applyQuotaChanges_exports);
|
|
24
|
+
var import_sdk = require("../../sdk/index.js");
|
|
25
|
+
function applyQuotaChanges(initialQuotas, changes) {
|
|
26
|
+
const final = initialQuotas.clone();
|
|
27
|
+
for (const { token, balance: change } of changes) {
|
|
28
|
+
if (change === import_sdk.MIN_INT96) {
|
|
29
|
+
final.upsert(token, 0n);
|
|
30
|
+
} else {
|
|
31
|
+
const next = final.getOrZero(token) + change;
|
|
32
|
+
final.upsert(token, next > 0n ? next : 0n);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
quotas: final.toAssets(0n),
|
|
37
|
+
quotasChange: final.difference(initialQuotas).toAssets()
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
41
|
+
0 && (module.exports = {
|
|
42
|
+
applyQuotaChanges
|
|
43
|
+
});
|
|
@@ -18,24 +18,9 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var errors_exports = {};
|
|
20
20
|
__export(errors_exports, {
|
|
21
|
-
InvalidTransactionValueError: () => InvalidTransactionValueError,
|
|
22
21
|
UnsupportedOperationError: () => UnsupportedOperationError
|
|
23
22
|
});
|
|
24
23
|
module.exports = __toCommonJS(errors_exports);
|
|
25
|
-
class InvalidTransactionValueError extends Error {
|
|
26
|
-
/** Transaction `msg.value`. */
|
|
27
|
-
value;
|
|
28
|
-
/** Amount of wrapped native token added as collateral. */
|
|
29
|
-
wethCollateral;
|
|
30
|
-
constructor(value, wethCollateral) {
|
|
31
|
-
super(
|
|
32
|
-
`transaction value ${value} exceeds WETH collateral ${wethCollateral}`
|
|
33
|
-
);
|
|
34
|
-
this.name = "InvalidTransactionValueError";
|
|
35
|
-
this.value = value;
|
|
36
|
-
this.wethCollateral = wethCollateral;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
24
|
class UnsupportedOperationError extends Error {
|
|
40
25
|
/** The parsed operation kind (the `operation` discriminant). */
|
|
41
26
|
operation;
|
|
@@ -47,6 +32,5 @@ class UnsupportedOperationError extends Error {
|
|
|
47
32
|
}
|
|
48
33
|
// Annotate the CommonJS export names for ESM import in node:
|
|
49
34
|
0 && (module.exports = {
|
|
50
|
-
InvalidTransactionValueError,
|
|
51
35
|
UnsupportedOperationError
|
|
52
36
|
});
|
|
@@ -16,6 +16,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
16
16
|
var preview_exports = {};
|
|
17
17
|
module.exports = __toCommonJS(preview_exports);
|
|
18
18
|
__reExport(preview_exports, require("./applyInnerOperations.js"), module.exports);
|
|
19
|
+
__reExport(preview_exports, require("./applyQuotaChanges.js"), module.exports);
|
|
19
20
|
__reExport(preview_exports, require("./detectCloseOrRepay.js"), module.exports);
|
|
20
21
|
__reExport(preview_exports, require("./errors.js"), module.exports);
|
|
21
22
|
__reExport(preview_exports, require("./previewAdjustCreditAccount.js"), module.exports);
|
|
@@ -25,6 +26,7 @@ __reExport(preview_exports, require("./types.js"), module.exports);
|
|
|
25
26
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
27
|
0 && (module.exports = {
|
|
27
28
|
...require("./applyInnerOperations.js"),
|
|
29
|
+
...require("./applyQuotaChanges.js"),
|
|
28
30
|
...require("./detectCloseOrRepay.js"),
|
|
29
31
|
...require("./errors.js"),
|
|
30
32
|
...require("./previewAdjustCreditAccount.js"),
|