Error Handling

Not yet available on FTStatus

The FTStatus SDKs aren't available yet. Talk to support if you need programmatic access for your account.

The SDK uses ConnectRPC. Errors are thrown as ConnectError instances from the @connectrpc/connect package.

import { ConnectError } from "@connectrpc/connect";

try {
  await client.monitor.v1.MonitorService.deleteMonitor({ id: "invalid" });
} catch (error) {
  if (error instanceof ConnectError) {
    console.error(`Code: ${error.code}`);
    console.error(`Message: ${error.message}`);
  }
}

Common Error Codes

CodeDescription
unauthenticatedMissing or invalid API key
not_foundResource does not exist
invalid_argumentValidation failure (e.g., missing required field, value out of range)
permission_deniedNo access to this workspace or resource
already_existsDuplicate resource (e.g., slug already taken)

Retry Strategy

ConnectRPC does not retry by default. For transient failures (unavailable, deadline_exceeded), implement your own retry logic:

import { Code, ConnectError } from "@connectrpc/connect";

async function withRetry<T>(fn: () => Promise<T>, maxRetries = 3): Promise<T> {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    try {
      return await fn();
    } catch (error) {
      if (
        error instanceof ConnectError &&
        (error.code === Code.Unavailable ||
          error.code === Code.DeadlineExceeded) &&
        attempt < maxRetries
      ) {
        await new Promise((resolve) => setTimeout(resolve, 1000 * 2 ** attempt));
        continue;
      }
      throw error;
    }
  }
  throw new Error("Unreachable");
}

const { httpMonitors } = await withRetry(() =>
  client.monitor.v1.MonitorService.listMonitors({})
);