FuelLabs/fuels-ts · error · FuelError

INVALID_TRANSACTION_STATUS

INVALID_TRANSACTION_STATUS

Error message

Invalid transaction status: ${gqlStatus}.

What it means

Thrown by `getTransactionStatusName()` (transaction-summary/status.ts) when the GraphQL status string from the node does not match any known status name (FailureStatus, SuccessStatus, SubmittedStatus, SqueezedOutStatus, PreconfirmationSuccessStatus, PreconfirmationFailureStatus). The default branch prevents the summary from continuing with an undefined status enum value.

Source

Thrown at packages/account/src/providers/transaction-summary/status.ts:35

} from './types';

/** @hidden */
export const getTransactionStatusName = (gqlStatus: GqlTransactionStatusesNames) => {
  switch (gqlStatus) {
    case 'FailureStatus':
      return TransactionStatus.failure;
    case 'SuccessStatus':
      return TransactionStatus.success;
    case 'SubmittedStatus':
      return TransactionStatus.submitted;
    case 'SqueezedOutStatus':
      return TransactionStatus.squeezedout;
    case 'PreconfirmationSuccessStatus':
      return TransactionStatus.preconfirmationSuccess;
    case 'PreconfirmationFailureStatus':
      return TransactionStatus.preconfirmationFailure;
    default:
      throw new FuelError(
        ErrorCode.INVALID_TRANSACTION_STATUS,
        `Invalid transaction status: ${gqlStatus}.`
      );
  }
};

/** @hidden */
export const extractResolvedOutputs = (
  serializedOutputs?: SerializedResolvedOutput[] | null
): ResolvedOutput[] => {
  const resolvedOutputs: ResolvedOutput[] = [];
  serializedOutputs?.forEach(({ utxoId, output }) =>
    resolvedOutputs.push({
      utxoId,
      output: deserializeProcessedTxOutput(output) as OutputChange | OutputVariable,
    })
  );
  return resolvedOutputs;

View on GitHub (pinned to b3f37c91ac)

Solutions

  1. Upgrade @fuel-ts packages to align with the connected node version.
  2. Verify the provider URL points to a compatible node.
  3. If status is transient/unknown, poll again or fall back to a raw query.

Example fix

// before
const status = getTransactionStatusName(gqlStatus); // throws on unknown
// after
const KNOWN = ['FailureStatus','SuccessStatus','SubmittedStatus','SqueezedOutStatus','PreconfirmationSuccessStatus','PreconfirmationFailureStatus'];
const status = KNOWN.includes(gqlStatus) ? getTransactionStatusName(gqlStatus as any) : TransactionStatus.submitted;
Defensive patterns

Strategy: validation

Validate before calling

const KNOWN_STATUS = ['FailureStatus','SuccessStatus','SubmittedStatus','SqueezedOutStatus','PreconfirmationSuccessStatus','PreconfirmationFailureStatus'];
if (!KNOWN_STATUS.includes(gqlStatus)) throw new Error(`unknown status ${gqlStatus}`);

Type guard

function isKnownGqlStatus(s: unknown): boolean {
  return typeof s === 'string' && ['FailureStatus','SuccessStatus','SubmittedStatus','SqueezedOutStatus','PreconfirmationSuccessStatus','PreconfirmationFailureStatus'].includes(s);
}

Try / catch

null

Prevention

When it happens

Trigger: Building a transaction summary where `gqlTransaction.status` carries a status name string not in the SDK's known set. Reached internally from `getTransactionSummary`.

Common situations: Node/SDK version skew: the node emits a new status type (e.g. a new preconfirmation variant) that the SDK does not recognize; network returns a malformed status string; GraphQL schema changed across versions.

Related errors


AI-assisted analysis of FuelLabs/fuels-ts@b3f37c91ac (2026-08-12). Data as JSON: /api/errors/393f60aadfad3066. Report an issue: GitHub.