Fusioncat is currently in its alpha stage. The main API server is located at: https://api.staging.fusioncatalyst.io/Please note that breaking changes and bugs are to be expected, as the product is still under active development.

Resource Management Commands

The paw resources commands allow you to create and manage resources within servers, such as topics, queues, exchanges, and endpoints.

Commands

resources list

List all resources in a server.
paw resources list --server-id <id>

Options

  • --server-id (required): The ID of the server

Examples

# List all resources
paw resources list --server-id "server-uuid"

resources new

Create a new resource.
paw resources new --server-id <id> --name <name> --type <type> --mode <mode> [--description <description>]

Options

  • --server-id (required): The ID of the server
  • --name (required): Name of the resource
  • --type (required): Type of the resource
    • topic: Kafka topic or similar
    • exchange: AMQP exchange
    • queue: Message queue
    • table: Data table
    • endpoint: HTTP endpoint
  • --mode (required): Access mode for the resource
    • read: Read-only access
    • write: Write-only access
    • readwrite: Full read/write access
    • bind: Binding mode (for AMQP)
  • --description: Description of the resource

Examples

# Create a Kafka topic
paw resources new --server-id "kafka-server-uuid" --name "user-events" --type topic --mode readwrite

# Create an AMQP exchange
paw resources new --server-id "amqp-server-uuid" --name "order-exchange" --type exchange --mode write

# Create a queue
paw resources new --server-id "amqp-server-uuid" --name "order-processing" --type queue --mode read

# Create a webhook endpoint
paw resources new --server-id "webhook-server-uuid" --name "payment-callback" --type endpoint --mode write

Resource Types by Server

Kafka Server Resources

Topics - Event streams:
# Create topics for different event types
paw resources new --server-id "kafka-uuid" --name "user.events" --type topic --mode readwrite
paw resources new --server-id "kafka-uuid" --name "order.events" --type topic --mode write
paw resources new --server-id "kafka-uuid" --name "inventory.events" --type topic --mode read

AMQP Server Resources

Exchanges - Message routing:
# Direct exchange
paw resources new --server-id "amqp-uuid" --name "direct-exchange" --type exchange --mode write

# Topic exchange
paw resources new --server-id "amqp-uuid" --name "events.topic" --type exchange --mode write

# Fanout exchange
paw resources new --server-id "amqp-uuid" --name "broadcast.fanout" --type exchange --mode write
Queues - Message storage:
# Work queues
paw resources new --server-id "amqp-uuid" --name "email-queue" --type queue --mode readwrite
paw resources new --server-id "amqp-uuid" --name "sms-queue" --type queue --mode read

# Dead letter queue
paw resources new --server-id "amqp-uuid" --name "failed-messages-dlq" --type queue --mode readwrite

Webhook Server Resources

Endpoints - HTTP callbacks:
# Incoming webhooks
paw resources new --server-id "webhook-uuid" --name "github-webhook" --type endpoint --mode read

# Outgoing webhooks
paw resources new --server-id "webhook-uuid" --name "slack-notification" --type endpoint --mode write

Access Modes

read

  • Can consume/receive from the resource
  • For queues: dequeue messages
  • For topics: subscribe and consume
  • For endpoints: receive webhooks

write

  • Can produce/send to the resource
  • For queues: enqueue messages
  • For topics: publish events
  • For endpoints: send webhooks

readwrite

  • Full access to both read and write
  • Most common for internal services

bind

  • Special mode for AMQP
  • Bind queues to exchanges
  • Set up routing rules

Best Practices

Naming Conventions

  1. Topics: Use dot notation - domain.entity.action
    paw resources new --server-id "id" --name "user.profile.updated" --type topic --mode write
    paw resources new --server-id "id" --name "order.payment.completed" --type topic --mode write
    
  2. Queues: Use descriptive names with purpose
    paw resources new --server-id "id" --name "email-notification-queue" --type queue --mode read
    paw resources new --server-id "id" --name "report-generation-queue" --type queue --mode readwrite
    
  3. Endpoints: Include action and target
    paw resources new --server-id "id" --name "stripe-payment-webhook" --type endpoint --mode read
    paw resources new --server-id "id" --name "customer-notification-endpoint" --type endpoint --mode write
    

Resource Organization

Group related resources:
# User domain resources
paw resources new --server-id "kafka" --name "user.created" --type topic --mode write
paw resources new --server-id "kafka" --name "user.updated" --type topic --mode write
paw resources new --server-id "kafka" --name "user.deleted" --type topic --mode write

# Order processing resources
paw resources new --server-id "amqp" --name "order-validation-queue" --type queue --mode readwrite
paw resources new --server-id "amqp" --name "order-fulfillment-queue" --type queue --mode readwrite
paw resources new --server-id "amqp" --name "order-notification-queue" --type queue --mode write

Access Control

Principle of least privilege:
# Producer service - write only
paw resources new --server-id "id" --name "events" --type topic --mode write

# Consumer service - read only
paw resources new --server-id "id" --name "events" --type topic --mode read

# Processing service - full access
paw resources new --server-id "id" --name "work-queue" --type queue --mode readwrite

Examples

Event-Driven Microservices

# Create Kafka server
paw servers new --project-id "proj" --name "Event Bus" --type "async+kafka" --description "Main event bus"

# User service resources
paw resources new --server-id "kafka" --name "user.events" --type topic --mode write --description "User service publishes"

# Order service resources
paw resources new --server-id "kafka" --name "user.events" --type topic --mode read --description "Order service subscribes"
paw resources new --server-id "kafka" --name "order.events" --type topic --mode write --description "Order service publishes"

# Notification service resources
paw resources new --server-id "kafka" --name "order.events" --type topic --mode read --description "Notification service subscribes"

Task Queue System

# Create AMQP server
paw servers new --project-id "proj" --name "Task Queue" --type "async+amqp" --description "Background jobs"

# Create exchange
paw resources new --server-id "amqp" --name "tasks.direct" --type exchange --mode write

# Create queues
paw resources new --server-id "amqp" --name "email-tasks" --type queue --mode readwrite
paw resources new --server-id "amqp" --name "report-tasks" --type queue --mode readwrite
paw resources new --server-id "amqp" --name "cleanup-tasks" --type queue --mode readwrite

# Dead letter queue
paw resources new --server-id "amqp" --name "failed-tasks-dlq" --type queue --mode readwrite

Webhook Integration

# Create webhook server
paw servers new --project-id "proj" --name "Webhooks" --type "async+webhook" --description "External integrations"

# Incoming webhooks
paw resources new --server-id "webhook" --name "stripe-payment" --type endpoint --mode read
paw resources new --server-id "webhook" --name "github-push" --type endpoint --mode read

# Outgoing webhooks
paw resources new --server-id "webhook" --name "slack-alert" --type endpoint --mode write
paw resources new --server-id "webhook" --name "customer-notification" --type endpoint --mode write

Generated Code

Resources generate connection code:
// Generated Kafka consumer
export const userEventsConsumer = {
  topic: 'user.events',
  mode: 'read',
  subscribe: async (handler: (event: UserEvent) => Promise<void>) => {
    // Generated subscription code
  }
};

// Generated AMQP producer
export const taskQueueProducer = {
  queue: 'email-tasks',
  mode: 'write',
  send: async (task: EmailTask) => {
    // Generated send code
  }
};
  • Servers - Create servers to contain resources
  • Messages - Define messages to send through resources
  • Code Generation - Generate resource handling code