Skip to content

getBridgeStatus

The getBridgeStatus function checks the status of a bridge transaction by querying the provider's API. It works with all supported bridge providers.

Import

import { getBridgeStatus } from '@silentswap/sdk';

Basic Usage

import { getBridgeStatus } from '@silentswap/sdk';
 
// After executing a bridge transaction, you get a requestId
const status = await getBridgeStatus(
  'request-id-from-execution', // Request ID from executeBridgeTransaction
  quoteResult.provider // Use the provider from your quote result
);
 
console.log('Status:', status.status); // 'pending' | 'success' | 'failed' | 'refund' | 'fallback'
console.log('Transaction Hashes:', status.txHashes);
console.log('Details:', status.details);

API Reference

Function Signature

function getBridgeStatus(
  requestId: string,
  provider: BridgeProvider
): Promise<BridgeStatus>

Parameters

  • requestId (string): Request ID returned from executeBridgeTransaction
  • provider (BridgeProvider): Bridge provider used (from your quote result)

Return Value

interface BridgeStatus {
  status: 'pending' | 'success' | 'failed' | 'refund' | 'fallback';
  txHashes?: Hex[];
  details?: string;
  requestId?: string;
}

Status Values

  • 'pending': Transaction is still processing
  • 'success': Bridge completed successfully
  • 'failed': Bridge failed
  • 'refund': Transaction was refunded
  • 'fallback': Transaction fell back to alternative route

Examples

Polling for Status

import { getBridgeStatus, type BridgeProvider, type BridgeStatus } from '@silentswap/sdk';
 
async function pollBridgeStatus(
  requestId: string,
  provider: BridgeProvider,
  maxAttempts: number = 60,
  intervalMs: number = 5000
): Promise<BridgeStatus> {
  for (let i = 0; i < maxAttempts; i++) {
    const status = await getBridgeStatus(requestId, provider);
    
    if (status.status === 'success') {
      console.log('Bridge completed successfully!');
      return status;
    }
    
    if (status.status === 'failed' || status.status === 'refund') {
      console.log('Bridge failed or refunded');
      return status;
    }
    
    // Still pending, wait and retry
    console.log(`Attempt ${i + 1}/${maxAttempts}: Still pending...`);
    await new Promise(resolve => setTimeout(resolve, intervalMs));
  }
  
  throw new Error('Bridge status polling timeout');
}
 
// Usage
const status = await pollBridgeStatus(
  'request-id-123',
  quoteResult.provider, // Use provider from quote
  60, // Max 60 attempts
  5000 // 5 second intervals
);

With Error Handling

import { getBridgeStatus } from '@silentswap/sdk';
 
try {
  const status = await getBridgeStatus(requestId, provider);
  
  switch (status.status) {
    case 'success':
      console.log('Bridge completed:', status.txHashes);
      break;
    case 'pending':
      console.log('Still processing...');
      break;
    case 'failed':
      console.error('Bridge failed:', status.details);
      break;
    case 'refund':
      console.warn('Transaction refunded:', status.details);
      break;
    case 'fallback':
      console.info('Used fallback route:', status.details);
      break;
  }
} catch (err) {
  if (err.message.includes('API error')) {
    console.error('Provider API error:', err);
  } else {
    console.error('Status check error:', err);
  }
}

Backend Monitoring

import { getBridgeStatus, type BridgeProvider } from '@silentswap/sdk';
 
// Store bridge requests in database
interface BridgeRequest {
  id: string;
  requestId: string;
  provider: BridgeProvider;
  status: string;
  createdAt: Date;
}
 
async function checkPendingBridges() {
  const pendingBridges = await db.getPendingBridges();
  
  for (const bridge of pendingBridges) {
    try {
      const status = await getBridgeStatus(bridge.requestId, bridge.provider);
      
      // Update database
      await db.updateBridgeStatus(bridge.id, status.status, {
        txHashes: status.txHashes,
        details: status.details,
      });
      
      // Notify user if completed
      if (status.status === 'success') {
        await notifyUser(bridge.userId, 'Bridge completed successfully!');
      }
    } catch (err) {
      console.error(`Failed to check bridge ${bridge.id}:`, err);
    }
  }
}
 
// Run every 30 seconds
setInterval(checkPendingBridges, 30000);

Best Practices

  1. Polling Intervals: Use reasonable polling intervals (5-10 seconds) to avoid rate limiting
  2. Timeout Handling: Set maximum polling attempts to avoid infinite loops
  3. Error Handling: Always handle API errors gracefully
  4. Status Caching: Cache status results to reduce API calls
  5. User Notifications: Notify users when bridge status changes

Related Functions