@@ -15,7 +15,11 @@ import {
15
15
failed ,
16
16
} from "@balmy/sdk/dist/services/quotes/quote-sources/utils"
17
17
import qs from "qs"
18
- import { type Address , getAddress , isAddressEqual } from "viem"
18
+ import { type Address , Hex , getAddress , isAddressEqual } from "viem"
19
+
20
+ const soldOutCoolOff : Record < string , number > = { }
21
+
22
+ const SOLD_OUT_COOL_OFF_TIME = 5 * 60 * 1000
19
23
20
24
// https://api-v2.pendle.finance/core/docs#/Chains/ChainsController_getSupportedChainIds
21
25
export const PENDLE_METADATA : QuoteSourceMetadata < PendleSupport > = {
@@ -157,6 +161,19 @@ export class CustomPendleQuoteSource
157
161
158
162
url = `${ getUrl ( ) } /sdk/${ chainId } /redeem?${ queryString } `
159
163
} else {
164
+ if (
165
+ Date . now ( ) - soldOutCoolOff [ `${ buyToken } ${ chainId } ` ] <
166
+ SOLD_OUT_COOL_OFF_TIME
167
+ ) {
168
+ console . log ( "SOLD OUT" )
169
+ failed (
170
+ PENDLE_METADATA ,
171
+ chainId ,
172
+ sellToken ,
173
+ buyToken ,
174
+ "Sold out cool off" ,
175
+ )
176
+ }
160
177
// swap
161
178
const queryParams = {
162
179
receiver : recipient || takeFrom ,
@@ -187,7 +204,12 @@ export class CustomPendleQuoteSource
187
204
const msg =
188
205
( await response . text ( ) ) || `Failed with status ${ response . status } `
189
206
190
- if ( response . status === 400 ) console . log ( "[PENDLE ERROR]" , msg , url )
207
+ if ( response . status === 400 ) {
208
+ console . log ( "[PENDLE ERROR]" , msg , url )
209
+ if ( msg . includes ( "SY limit exceeded" ) ) {
210
+ soldOutCoolOff [ `${ buyToken } ${ chainId } ` ] = Date . now ( )
211
+ }
212
+ }
191
213
192
214
failed ( PENDLE_METADATA , chainId , sellToken , buyToken , msg )
193
215
}
0 commit comments