Bako Safe SDK
Provider
Overview

BakoProvider Overview

BakoProvider is the main entry point for interacting with the Bako Safe SDK. It handles authentication, network communication, and serves as the foundation for vault operations.

What is BakoProvider?

BakoProvider extends Fuel's native Provider class with Bako-specific functionality:

  • Authentication: Manages user sessions and API tokens
  • API Communication: Handles requests to Bako Safe servers
  • Credential Storage: Stores and manages authentication state
  • Service Access: Provides access to Bako services (predicates, transactions, etc.)

Class Overview

class BakoProvider extends Provider {
  // Authentication data
  cliAuth?: CLIAuth;
 
  // Static methods
  static async create(url: string, options: BakoProviderOptions): Promise<BakoProvider>;
  static async setup(params: BakoProviderSetup): Promise<BakoProviderAuth>;
  static async authenticate(options: BakoProviderAuthOptions): Promise<BakoProvider>;
 
  // Instance methods
  getWorkspaces(): Promise<Workspace[]>;
  getToken(): Promise<number>;
  createPredicate(payload): Promise<PredicateResponse>;
  findByAddress(address: string): Promise<PredicateResponse>;
  // ... and more
}

Authentication Methods

API Token (Programmatic)

const provider = await BakoProvider.create(
  'https://mainnet.fuel.network/v1/graphql',
  { apiToken: 'your-api-token' }
);

Interactive (Challenge-Response)

// Step 1: Setup
const { code } = await BakoProvider.setup({
  address: walletAddress,
  provider: 'https://mainnet.fuel.network/v1/graphql',
  encoder: TypeUser.FUEL
});
 
// Step 2: Sign challenge with wallet
const signature = await wallet.signMessage(code);
 
// Step 3: Authenticate
const provider = await BakoProvider.authenticate({
  challenge: code,
  signature,
  encoder: TypeUser.FUEL,
  address: walletAddress
});

Provider Options

BakoProviderOptions

interface BakoProviderOptions extends ProviderOptions {
  token: string;         // Session token
  address: string;       // User address
  serverApi?: string;    // Custom API URL
  userId?: string;       // User ID
  rootWallet?: string;   // Root wallet reference
}

BakoProviderAPITokenOptions

interface BakoProviderAPITokenOptions extends ProviderOptions {
  apiToken: string;      // API token
  serverApi?: string;    // Custom API URL
}

Network Support

NetworkURL
Mainnethttps://mainnet.fuel.network/v1/graphql
Testnethttps://testnet.fuel.network/v1/graphql

Usage with Vault

Once authenticated, use the provider with Vault:

// Create vault from provider credentials
const vault = Vault.createFromProvider(provider);
 
// Or recover existing vault
const vault = await Vault.fromAddress(vaultAddress, provider);

Next Steps