RadixGatewayClient

The gateway client handles all communication with the Radix network through the Gateway API.

Constructor

new RadixGatewayClient(config: GatewayConfig)

GatewayConfig

interface GatewayConfig {
  networkId: RadixNetwork;          // Network to connect to
  applicationName?: string;         // App name for analytics
  customEndpoint?: string;          // Custom gateway endpoint
}

Example:

const gateway = new RadixGatewayClient({
  networkId: RadixNetwork.Stokenet,
  applicationName: "MyRadixApp"
});

Network Information

getGatewayStatus()

Get current gateway status and information.

async getGatewayStatus(): Promise\<GatewayStatus>

Returns: Gateway status information

Example:

const status = await gateway.getGatewayStatus();
console.log("Gateway version:", status.release_info?.version);

getCurrentEpoch()

Get the current epoch number.

async getCurrentEpoch(): Promise\<number>

Returns: Current epoch number

Example:

const epoch = await gateway.getCurrentEpoch();
console.log("Current epoch:", epoch);

getNetworkConfiguration()

Get network configuration details.

async getNetworkConfiguration(): Promise\<NetworkConfig>

Returns: Network configuration

Example:

const config = await gateway.getNetworkConfiguration();
console.log("Network ID:", config.network_id);

Account Operations

getEntityDetails()

Get detailed information about any entity (account, component, resource).

async getEntityDetails(address: string): Promise\<EntityDetails>

Parameters:

  • address: Entity address to query

Returns: Entity details and metadata

Example:

const details = await gateway.getEntityDetails("account_tdx_...");
console.log("Entity type:", details.entity_type);

getAccountBalances()

Get all token balances for an account.

async getAccountBalances(accountAddress: string): Promise\<AccountBalancesResponse>

Parameters:

  • accountAddress: Account address to query

Returns: Account balances response

Example:

const balances = await gateway.getAccountBalances("account_tdx_...");
for (const item of balances.items[0].fungible_resources?.items || []) {
  console.log(`Balance: ${item.amount} of ${item.resource_address}`);
}

getAccountTransactionHistory()

Get transaction history for an account.

async getAccountTransactionHistory(
  accountAddress: string,
  options?: TransactionHistoryOptions
): Promise\<TransactionHistoryResponse>

Parameters:

  • accountAddress: Account address
  • options: Optional filters and pagination
interface TransactionHistoryOptions {
  limit?: number;           // Max transactions to return (default: 30)
  cursor?: string;          // Pagination cursor
  manifestClass?: string;   // Filter by manifest class
}

Example:

const history = await gateway.getAccountTransactionHistory("account_tdx_...", {
  limit: 10
});

history.items.forEach(tx => {
  console.log(`TX: ${tx.intent_hash} at ${tx.confirmed_at}`);
});

Transaction Operations

submitTransaction()

Submit a signed transaction to the network.

async submitTransaction(signedTransaction: CompiledTransaction): Promise\<TransactionSubmitResponse>

Parameters:

  • signedTransaction: Compiled and signed transaction

Returns: Transaction submission response

Example:

const result = await gateway.submitTransaction(signedTx);
console.log("Transaction ID:", result.duplicate || "submitted");

getTransactionStatus()

Get status of a submitted transaction.

async getTransactionStatus(transactionId: string): Promise\<TransactionStatusResponse>

Parameters:

  • transactionId: Transaction intent hash

Returns: Transaction status

Example:

const status = await gateway.getTransactionStatus("txid_...");
console.log("Status:", status.intent_status);

previewTransaction()

Preview a transaction without submitting it.

async previewTransaction(
  transactionManifest: string,
  startEpochInclusive: number,
  endEpochExclusive: number,
  signer?: string
): Promise\<TransactionPreviewResponse>

Parameters:

  • transactionManifest: Transaction manifest string
  • startEpochInclusive: Start epoch
  • endEpochExclusive: End epoch
  • signer: Optional signer public key

Returns: Transaction preview

Example:

const preview = await gateway.previewTransaction(
  manifest,
  epoch,
  epoch + 10,
  wallet.getPublicKey()
);
console.log("Estimated fee:", preview.receipt.fee_summary?.total_cost);

Resource Operations

getResourceDetails()

Get details about a resource (token).

async getResourceDetails(resourceAddress: string): Promise\<ResourceDetails>

Parameters:

  • resourceAddress: Resource address

Returns: Resource details and metadata

Example:

const resource = await gateway.getResourceDetails("resource_tdx_...");
console.log("Resource type:", resource.resource_type);

getResourceMetadata()

Get metadata for a resource.

async getResourceMetadata(resourceAddress: string): Promise\<ResourceMetadata>

Parameters:

  • resourceAddress: Resource address

Returns: Resource metadata

Example:

const metadata = await gateway.getResourceMetadata("resource_tdx_...");
const symbol = metadata.items.find(item => item.key === "symbol")?.value;
console.log("Token symbol:", symbol);

Component Operations

getComponentDetails()

Get details about a component (smart contract).

async getComponentDetails(componentAddress: string): Promise\<ComponentDetails>

Parameters:

  • componentAddress: Component address

Returns: Component details

Example:

const component = await gateway.getComponentDetails("component_tdx_...");
console.log("Component type:", component.package_address);

getComponentState()

Get current state of a component.

async getComponentState(componentAddress: string): Promise\<ComponentState>

Parameters:

  • componentAddress: Component address

Returns: Component state

Example:

const state = await gateway.getComponentState("component_tdx_...");
console.log("Component state:", state.state);

Validation Methods

isValidAddress()

Check if an address is valid for the current network.

isValidAddress(address: string): boolean

Parameters:

  • address: Address to validate

Returns: true if valid

Example:

const valid = gateway.isValidAddress("account_tdx_...");
console.log("Address valid:", valid);

getXRDResourceAddress()

Get the XRD resource address for the current network.

getXRDResourceAddress(): string

Returns: XRD resource address

Example:

const xrdAddress = gateway.getXRDResourceAddress();
console.log("XRD address:", xrdAddress);

Error Handling

Gateway operations can throw various errors:

try {
  const balance = await gateway.getAccountBalances("invalid_address");
} catch (error) {
  if (error.message.includes("not found")) {
    console.log("Account does not exist");
  } else if (error.message.includes("network")) {
    console.log("Network connection issue");
  } else {
    console.log("Other error:", error.message);
  }
}

Common Error Types

  • EntityNotFoundError: Entity does not exist
  • NetworkError: Connection or gateway issues
  • ValidationError: Invalid input parameters
  • RateLimitError: Too many requests

Performance Tips

Connection Reuse

// ✅ Good: Reuse the same gateway instance
const gateway = new RadixGatewayClient({ networkId: RadixNetwork.Stokenet });

// Use for multiple operations
const balance1 = await gateway.getAccountBalances(address1);
const balance2 = await gateway.getAccountBalances(address2);

Batch Operations

// ✅ Better: Use Promise.all for parallel requests
const [balance1, balance2, epoch] = await Promise.all([
  gateway.getAccountBalances(address1),
  gateway.getAccountBalances(address2),
  gateway.getCurrentEpoch()
]);

Error Recovery

async function robustGatewayCall<T>(
  operation: () => Promise\<T>,
  retries: number = 3
): Promise\<T> {
  for (let i = 0; i < retries; i++) {
    try {
      return await operation();
    } catch (error) {
      if (i === retries - 1) throw error;
      await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
    }
  }
  throw new Error("Max retries exceeded");
}

// Usage
const balance = await robustGatewayCall(() => 
  gateway.getAccountBalances(address)
);

Gateway Endpoints: The client automatically connects to the correct gateway endpoint based on networkId. Stokenet uses the testnet gateway, Mainnet uses the production gateway.