@byoky/sdk
v0.4.18
Published
JavaScript SDK for Byoky — connect to the wallet extension, proxy AI API calls, and show a connect modal
Maintainers
Readme
@byoky/sdk
JavaScript SDK for Byoky -- connect to the wallet extension, proxy AI API calls, and manage sessions. Your users' API keys never leave their device.
Install
npm install @byoky/sdkQuick Start
import { Byoky } from '@byoky/sdk';
const byoky = new Byoky();
const session = await byoky.connect({
providers: [{ id: 'anthropic', required: true }],
modal: true, // built-in connect UI with QR code
});
// Use any provider SDK -- keys never touch your app
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
apiKey: session.sessionKey,
fetch: session.createFetch('anthropic'),
});
const msg = await client.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Hello!' }],
});Connection Modes
Browser Extension
The default path. The SDK communicates with the Byoky extension via postMessage:
const session = await byoky.connect({
providers: [{ id: 'anthropic', required: true }],
});Mobile Wallet (Relay)
For users without the extension. Shows a QR code they scan with the Byoky mobile app:
const session = await byoky.connect({
providers: [{ id: 'anthropic', required: true }],
useRelay: true,
modal: true, // shows QR code
});Backend Relay
Your server makes LLM calls through the user's browser. Keys never leave the extension, even server-side:
// Server (Node.js)
import { ByokyServer } from '@byoky/sdk/server';
const server = new ByokyServer();
wss.on('connection', async (ws) => {
const client = await server.handleConnection(ws);
const fetch = client.createFetch('anthropic');
// Make API calls -- proxied through the user's wallet
});// Browser
const relay = session.createRelay('wss://your-server.com/ws/relay');API
new Byoky(options?)
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| timeout | number | 60000 | Connection timeout in ms |
| relayUrl | string | 'wss://relay.byoky.com' | WebSocket relay server URL |
byoky.connect(request)
Connect to the wallet. Returns a ByokySession.
const session = await byoky.connect({
providers: [
{ id: 'anthropic', required: true },
{ id: 'openai', required: false },
],
modal: true, // or ModalOptions
});| Option | Type | Description |
|--------|------|-------------|
| providers | ProviderRequirement[] | Providers to request access to |
| modal | boolean \| ModalOptions | Show built-in connect UI |
| useRelay | boolean | Skip extension, go to relay pairing |
| onPairingReady | (code: string) => void | Custom pairing code handler |
byoky.tryReconnect()
Silently restore a previous session. Returns null if no session exists.
const session = await byoky.tryReconnect();ByokySession
| Property / Method | Description |
|-------------------|-------------|
| sessionKey | Unique session identifier |
| providers | Map of available providers with auth method |
| createFetch(providerId) | Create a proxied fetch function |
| createRelay(wsUrl) | Open WebSocket relay for backend use |
| disconnect() | End the session |
| isConnected() | Check if session is still valid |
| getUsage() | Get token usage stats (input/output tokens) |
| onDisconnect(cb) | Subscribe to disconnection events |
| onProvidersUpdated(cb) | Subscribe to provider changes |
ByokyServer (from @byoky/sdk/server)
Server-side relay handler.
const server = new ByokyServer({ pingInterval: 30000, helloTimeout: 10000 });
const client = await server.handleConnection(ws);
client.sessionId; // Session identifier
client.providers; // Available providers
client.connected; // Connection status
client.createFetch('anthropic'); // Proxied fetch
client.close(); // Close connection
client.onClose(() => { ... }); // Disconnect callbackConnect Modal
The built-in modal handles extension detection, relay fallback, and QR code display:
const session = await byoky.connect({
providers: [{ id: 'anthropic', required: true }],
modal: {
theme: {
accentColor: '#0ea5e9',
backgroundColor: '#0d0d1a',
textColor: '#e2e2ec',
borderRadius: '16px',
},
},
});Utilities
import { isExtensionInstalled, getStoreUrl } from '@byoky/sdk';
if (!isExtensionInstalled()) {
console.log('Get Byoky:', getStoreUrl());
}Supported Providers
Anthropic, OpenAI, Google Gemini, Mistral, xAI, DeepSeek, Cohere, Groq, Perplexity, Together AI, Fireworks AI, OpenRouter, Replicate, Hugging Face, Azure OpenAI.
