Skip to content

Commit 8ed8957

Browse files
committed
fix: cleanup
1 parent c87a5e0 commit 8ed8957

3 files changed

Lines changed: 43 additions & 71 deletions

File tree

src/routes/operator.ts

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -254,14 +254,7 @@ export default class RouteOperator {
254254

255255
let quoteMetadata = this.quoteMetadataCache.get(routeName, quoteParams);
256256

257-
const isRefetchRequired =
258-
!quoteMetadata?.quote ||
259-
!quoteMetadata?.request ||
260-
!quoteMetadata?.router;
261-
262-
if (isRefetchRequired) {
263-
// Refetch the quote as cached quote does not exist
264-
// This case should be hit rarely
257+
if (!quoteMetadata?.quote.success) {
265258
quoteMetadata = await route.getQuote(
266259
amount,
267260
sourceToken,
@@ -271,14 +264,13 @@ export default class RouteOperator {
271264
options,
272265
recipientAddress,
273266
);
267+
268+
if (!quoteMetadata.quote.success) {
269+
throw quoteMetadata.quote.error;
270+
}
274271
}
275272

276-
return route.send(
277-
quoteMetadata as QuoteMetadata,
278-
signer,
279-
destChain,
280-
recipientAddress,
281-
);
273+
return route.send(quoteMetadata, signer, destChain, recipientAddress);
282274
}
283275
}
284276

@@ -308,7 +300,7 @@ class QuoteMetadataCache {
308300
)}:${params.nativeGas}:${params.recipient}`;
309301
}
310302

311-
get(routeName: string, params: QuoteParams): Partial<QuoteMetadata> | null {
303+
get(routeName: string, params: QuoteParams): QuoteMetadata | null {
312304
const key = this.quoteParamsKey(routeName, params);
313305
const quoteMetadata = this.cache[key];
314306
const hasQuoteExpired = quoteMetadata?.ttl() <= 5_000;
@@ -321,7 +313,7 @@ class QuoteMetadataCache {
321313
return {
322314
quote: quoteMetadata.quote,
323315
request: quoteMetadata.request,
324-
router: quoteMetadata.router,
316+
routeInstance: quoteMetadata.routeInstance,
325317
};
326318
}
327319

@@ -343,7 +335,7 @@ class QuoteMetadataCache {
343335

344336
// We don't yet have a pending request for this key, so initiate one
345337
route
346-
.computeQuote(
338+
.getQuote(
347339
params.amount,
348340
params.sourceToken,
349341
params.destToken,
@@ -352,7 +344,7 @@ class QuoteMetadataCache {
352344
{ nativeGas: params.nativeGas },
353345
params.recipient,
354346
)
355-
.then(({ router, quote, request }: Required<QuoteMetadata>) => {
347+
.then(({ routeInstance, quote, request }: Required<QuoteMetadata>) => {
356348
const pending = this.pending[key];
357349

358350
for (const { resolve } of pending) {
@@ -363,9 +355,11 @@ class QuoteMetadataCache {
363355

364356
if (quote.success) {
365357
quote.expires = getQuoteExpiry(quote.expires);
358+
} else {
359+
throw quote.error;
366360
}
367361

368-
this.cache[key] = new QuoteMetadataEntry(quote, router, request);
362+
this.cache[key] = new QuoteMetadataEntry(quote, routeInstance, request);
369363
})
370364
.catch((err: any) => {
371365
const pending = this.pending[key];
@@ -377,10 +371,14 @@ class QuoteMetadataCache {
377371
delete this.pending[key];
378372

379373
// Cache uncaught error
380-
this.cache[key] = new QuoteMetadataEntry({
381-
success: false,
382-
error: err,
383-
});
374+
this.cache[key] = new QuoteMetadataEntry(
375+
{
376+
success: false,
377+
error: err,
378+
},
379+
{} as routes.Route<Network>,
380+
{} as routes.RouteTransferRequest<Network>,
381+
);
384382
});
385383

386384
return new Promise((resolve, reject) => {
@@ -418,17 +416,17 @@ class QuoteMetadataEntry {
418416
// Last time we fetched a quote
419417
timestamp: Date;
420418
// Optional route used for the quote
421-
router?: routes.Route<Network>;
419+
routeInstance: routes.Route<Network>;
422420
// Optional request used for the quote
423-
request?: routes.RouteTransferRequest<Network>;
421+
request: routes.RouteTransferRequest<Network>;
424422

425423
constructor(
426424
quote: QuoteResult,
427-
router?: routes.Route<Network>,
428-
request?: routes.RouteTransferRequest<Network>,
425+
routeInstance: routes.Route<Network>,
426+
request: routes.RouteTransferRequest<Network>,
429427
) {
430428
this.quote = quote;
431-
this.router = router;
429+
this.routeInstance = routeInstance;
432430
this.request = request;
433431
this.timestamp = new Date();
434432
}

src/routes/sdkv2/route.ts

Lines changed: 16 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ export default class SDKv2Route {
180180
options?: routes.AutomaticTokenBridgeRoute.Options,
181181
recipient?: string,
182182
): Promise<QuoteMetadata> {
183+
if (!sourceChain || !destChain || !sourceToken || !destToken) {
184+
throw new Error('Malformed quote request');
185+
}
186+
183187
const request = await this.createRequest(
184188
sourceToken,
185189
destToken,
@@ -188,9 +192,9 @@ export default class SDKv2Route {
188192
recipient,
189193
);
190194

191-
const router = await this.createRouter();
195+
const routeInstance = await this.createRouteInstance();
192196

193-
const validationResult = await router.validate(request, {
197+
const validationResult = await routeInstance.validate(request, {
194198
amount: sdkAmount.display(amount),
195199
options,
196200
});
@@ -199,16 +203,16 @@ export default class SDKv2Route {
199203
throw validationResult.error;
200204
}
201205

202-
const quote = await router.quote(request, validationResult.params);
206+
const quote = await routeInstance.quote(request, validationResult.params);
203207

204-
return { router, quote, request };
208+
return { routeInstance, quote, request };
205209
}
206210

207-
async createRouter() {
211+
async createRouteInstance() {
208212
const wh = await getWormholeContextV2();
209-
const router = new this.rc(wh);
213+
const routeInstance = new this.rc(wh);
210214

211-
return router;
215+
return routeInstance;
212216
}
213217

214218
async createRequest(
@@ -239,49 +243,19 @@ export default class SDKv2Route {
239243
return req;
240244
}
241245

242-
async computeQuote(
243-
amountIn: Amount,
244-
sourceToken: Token,
245-
destToken: Token,
246-
fromChain: Chain,
247-
toChain: Chain,
248-
options?: routes.AutomaticTokenBridgeRoute.Options,
249-
recipient?: string,
250-
): Promise<QuoteMetadata> {
251-
if (!fromChain || !toChain) {
252-
throw new Error('Need both chains to get a quote from SDKv2');
253-
}
254-
255-
const { router, quote, request } = await this.getQuote(
256-
amountIn,
257-
sourceToken,
258-
destToken,
259-
fromChain,
260-
toChain,
261-
options,
262-
recipient,
263-
);
264-
265-
if (!quote.success) {
266-
throw quote.error;
267-
}
268-
269-
return { router, quote, request };
270-
}
271-
272246
async send(
273247
quoteMetadata: QuoteMetadata,
274248
signer: Signer,
275249
toChain: Chain,
276250
recipientAddress: string,
277251
): Promise<[routes.Route<Network>, routes.Receipt]> {
278-
const { quote, router, request } = quoteMetadata;
252+
const { quote, routeInstance, request } = quoteMetadata;
279253

280254
if (!quote.success) {
281255
throw quote.error;
282256
}
283257

284-
let receipt = await router.initiate(
258+
let receipt = await routeInstance.initiate(
285259
request,
286260
signer,
287261
quote,
@@ -294,7 +268,7 @@ export default class SDKv2Route {
294268
receipt.state === TransferState.SourceInitiated ||
295269
receipt.state === TransferState.SourceFinalized
296270
) {
297-
return [router, receipt];
271+
return [routeInstance, receipt];
298272
}
299273

300274
// Otherwise track the transfer until it reaches a final state,
@@ -305,9 +279,9 @@ export default class SDKv2Route {
305279

306280
while (retries < maxRetries) {
307281
try {
308-
for await (receipt of router.track(receipt, 120 * 1000)) {
282+
for await (receipt of routeInstance.track(receipt, 120 * 1000)) {
309283
if (receipt.state >= TransferState.SourceInitiated) {
310-
return [router, receipt];
284+
return [routeInstance, receipt];
311285
}
312286
}
313287
} catch (e) {

src/routes/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { routes, Network } from '@wormhole-foundation/sdk';
22

33
export type QuoteMetadata = {
4-
router: routes.Route<Network>;
54
quote: routes.QuoteResult<routes.Options>;
65
request: routes.RouteTransferRequest<Network>;
6+
routeInstance: routes.Route<Network>;
77
};

0 commit comments

Comments
 (0)