Bako Safe SDK
Authentication
Overview

Authentication Overview

Bako Safe SDK supports multiple authentication methods to accommodate different use cases and wallet types.

Supported Authentication Types

TypeEnum ValueUse Case
Fuel WalletTypeUser.FUELNative Fuel wallets (Fuel Wallet, Fuelet)
WebAuthnTypeUser.WEB_AUTHNPasskey-based authentication (biometrics)
EVM WalletTypeUser.EVMEthereum wallets (MetaMask, etc.)
API TokenN/ACLI and programmatic access

Authentication Flow

All authentication methods (except API Token) follow a challenge-response pattern:

TypeUser Enum

enum TypeUser {
  FUEL = 'FUEL',
  WEB_AUTHN = 'WEB_AUTHN',
  EVM = 'EVM',
  SOCIAL = 'SOCIAL'
}

Choosing an Authentication Method

ScenarioRecommended Method
Browser dApp with Fuel WalletFUEL
Browser dApp with MetaMaskEVM
Passwordless authenticationWEB_AUTHN
CLI tools / ScriptsAPI Token
CI/CD pipelinesAPI Token
Server-side applicationsAPI Token

Common Authentication Code

All interactive methods use BakoProvider.setup() and BakoProvider.authenticate():

import { BakoProvider, TypeUser } from 'bakosafe';
 
// Step 1: Generate challenge
const { code } = await BakoProvider.setup({
  address: walletAddress,
  provider: 'https://mainnet.fuel.network/v1/graphql',
  encoder: TypeUser.FUEL // or WEB_AUTHN, EVM
});
 
// Step 2: Sign with wallet (method varies by wallet type)
const signature = await signWithWallet(code);
 
// Step 3: Complete authentication
const provider = await BakoProvider.authenticate({
  challenge: code,
  signature,
  encoder: TypeUser.FUEL,
  address: walletAddress,
  serverUrl: 'https://api.bako.global'
});

Next Steps