Superbridge
Start typing to search...

Reference

Type Guards

Type guard helpers for working with discriminated unions

The SDK includes type guard helpers for working with the various discriminated unions returned by the API.

Route Guards

Distinguish between quotes and errors when processing route results.

import { routeGuards } from "@superbridge/sdk";

for (const route of routes.data) {
  if (routeGuards.isRouteQuote(route.result)) {
    // route.result is a quote with initiatingTransaction, fees, etc.
  }

  if (routeGuards.isRouteQuoteError(route.result)) {
    // route.result is an error with a type field
  }

  if (routeGuards.isAmountTooLargeRouteError(route.result)) {
    // route.result.maximum is available
  }

  if (routeGuards.isAmountTooSmallRouteError(route.result)) {
    // route.result.minimum is available
  }
}

Transaction Guards

Narrow the initiatingTransaction on a route quote to a specific chain type.

import { txGuards } from "@superbridge/sdk";

const { initiatingTransaction } = quote;

if (txGuards.isEvmTx(initiatingTransaction)) {
  // InitiatingTransactionEvmDto5 - has to, data, value, chainId
}

if (txGuards.isEvmGaslessTx(initiatingTransaction)) {
  // InitiatingTransactionEvmGaslessDto5
}

if (txGuards.isSvmTx(initiatingTransaction)) {
  // InitiatingTransactionSvmDto5
}

if (txGuards.isStarknetTx(initiatingTransaction)) {
  // InitiatingTransactionStarkDto5
}

Activity Step Guards

Narrow steps on a SteppedBridgeDto to their specific types and statuses.

import { activityStepGuards } from "@superbridge/sdk";

for (const step of bridge.steps) {
  // Narrow by step kind
  if (activityStepGuards.isTransactionStep(step)) {
    // TransactionStepDoneDto | TransactionStepNotReadyDto | TransactionStepReadyDto | TransactionStepAutoDto
  }

  if (activityStepGuards.isWaitStep(step)) {
    // WaitStepDoneDto | WaitStepInProgressDto | WaitStepNotStartedDto
  }

  if (activityStepGuards.isInfoStep(step)) {
    // InfoStepDto
  }

  // Narrow transaction steps by status
  if (activityStepGuards.isTransactionStepReady(step)) {
    // TransactionStepReadyDto - has initiatingTransaction
  }

  if (activityStepGuards.isTransactionStepDone(step)) {
    // TransactionStepDoneDto - has confirmation
  }

  if (activityStepGuards.isTransactionStepNotReady(step)) {
    // TransactionStepNotReadyDto - has estimatedGas
  }

  if (activityStepGuards.isTransactionStepAuto(step)) {
    // TransactionStepAutoDto - executed automatically
  }
}

Wait steps can also be narrowed:

import { activityStepGuards } from "@superbridge/sdk";

for (const step of bridge.steps) {
  if (!activityStepGuards.isWaitStep(step)) continue;

  if (activityStepGuards.isWaitStepNotStarted(step)) {
    // WaitStepNotStartedDto
  }

  if (activityStepGuards.isWaitStepInProgress(step)) {
    // WaitStepInProgressDto
  }

  if (activityStepGuards.isWaitStepDone(step)) {
    // WaitStepDoneDto
  }
}

Confirmation Guards

Check the status of a ConfirmationDtoV2.

import { confirmationGuards } from "@superbridge/sdk";

if (confirmationGuards.isConfirmedSuccessTx(confirmation)) {
  // Has a valid transactionHash and confirmed status
}

if (confirmationGuards.isConfirmedFailedTx(confirmation)) {
  // Has a transactionHash but status is not confirmed
}