# @sonr.io/sdk This is the TypeScript SDK for Highway WebAuthn authentication gateway. It provides a comprehensive client library for interacting with Highway APIs, including WebAuthn authentication, session management, and blockchain operations. ## Features - **WebAuthn Client**: Complete WebAuthn registration and authentication flows - **Session Management**: Automatic session handling and token management - **Type Safety**: Full TypeScript support with comprehensive type definitions - **HTTP Client**: Configured HTTP client with automatic retries and error handling - **Blockchain Integration**: Client methods for DID and blockchain operations - **Environment Support**: Configurable for development, staging, and production ## Installation ```bash npm install @sonr.io/sdk # or yarn add @sonr.io/sdk # or pnpm add @sonr.io/sdk ``` ## Usage ### Basic Setup ```typescript import { HighwaySDK } from "@sonr.io/sdk"; const sdk = new HighwaySDK({ apiUrl: "https://api.yourdomain.com", environment: "production", }); ``` ### WebAuthn Authentication ```typescript // Register a new user try { const registrationResult = await sdk.auth.register({ username: "user@example.com", displayName: "John Doe", }); console.log("Registration successful:", registrationResult); } catch (error) { console.error("Registration failed:", error); } // Authenticate existing user try { const authResult = await sdk.auth.authenticate({ username: "user@example.com", }); console.log("Authentication successful:", authResult); } catch (error) { console.error("Authentication failed:", error); } ``` ### Session Management ```typescript // Get current session const session = await sdk.session.getCurrent(); // Validate session const isValid = await sdk.session.validate(); // Logout await sdk.session.logout(); ``` ### Blockchain Operations ```typescript // Create DID const didResult = await sdk.blockchain.createDID({ username: "user@example.com", credentialId: "webauthn-credential-id", publicKey: "public-key-data", }); // Resolve DID const didDocument = await sdk.blockchain.resolveDID("did:sonr:123456789"); ``` ## API Reference ### HighwaySDK The main SDK class that provides access to all Highway services. #### Constructor Options ```typescript interface HighwaySDKOptions { apiUrl: string; environment?: "development" | "staging" | "production"; timeout?: number; retries?: number; } ``` #### Methods - `auth`: WebAuthn authentication methods - `session`: Session management methods - `blockchain`: Blockchain and DID operations - `profile`: User profile management ### Authentication (`sdk.auth`) - `register(options)`: Register new WebAuthn credential - `authenticate(options)`: Authenticate with WebAuthn - `getProfile()`: Get current user profile ### Session (`sdk.session`) - `getCurrent()`: Get current session information - `validate()`: Validate current session - `logout()`: End current session ### Blockchain (`sdk.blockchain`) - `createDID(options)`: Create new DID document - `resolveDID(id)`: Resolve DID document by ID - `getHealth()`: Get blockchain service health ## Development Roadmap ### 🔮 **Future Implementation** (Planned) - [ ] **SDK Core**: TypeScript SDK with HTTP client configuration - [ ] **Authentication Module**: WebAuthn registration and authentication methods - [ ] **Session Management**: Automatic session handling and token management - [ ] **Blockchain Module**: DID creation and resolution methods - [ ] **Profile Management**: User profile operations and management - [ ] **Type Definitions**: Comprehensive TypeScript type definitions - [ ] **Error Handling**: Robust error handling and retry logic ### 🚧 **Production Readiness** (Next) - [ ] **Testing Suite**: Unit tests for all SDK methods - [ ] **Documentation**: Complete API documentation and examples - [ ] **Performance Optimization**: Request caching and optimization - [ ] **Bundle Optimization**: Tree-shaking and minimal bundle size - [ ] **Browser Support**: Cross-browser compatibility testing - [ ] **Node.js Support**: Server-side usage support ### 🔮 **Future Enhancements** - [ ] **React Hooks**: React hooks for easy integration - [ ] **Vue Composables**: Vue.js composables for Vue applications - [ ] **Offline Support**: Offline capability with background sync - [ ] **Real-time Features**: WebSocket support for real-time updates - [ ] **Advanced Caching**: Intelligent caching strategies - [ ] **Plugin System**: Extensible plugin architecture ## Error Handling The SDK provides comprehensive error handling: ```typescript import { HighwayError, WebAuthnError, SessionError } from "@sonr.io/sdk"; try { await sdk.auth.register(options); } catch (error) { if (error instanceof WebAuthnError) { console.error("WebAuthn error:", error.message); } else if (error instanceof SessionError) { console.error("Session error:", error.message); } else if (error instanceof HighwayError) { console.error("Highway error:", error.message); } } ``` ## Configuration ### Environment Variables ```env # Default API URL HIGHWAY_API_URL=https://api.yourdomain.com # Development HIGHWAY_API_URL=http://localhost:8080 ``` ### SDK Configuration ```typescript const sdk = new HighwaySDK({ apiUrl: process.env.HIGHWAY_API_URL || "https://api.yourdomain.com", environment: process.env.NODE_ENV || "production", timeout: 10000, retries: 3, }); ``` ## Development ```bash # Install dependencies pnpm install # Build the SDK pnpm build # Run tests pnpm test # Run tests in watch mode pnpm test:watch ``` ## Integration Examples ### React Application ```typescript import { HighwaySDK } from "@sonr.io/sdk"; import { useEffect, useState } from "react"; function useHighway() { const [sdk] = useState( () => new HighwaySDK({ apiUrl: process.env.NEXT_PUBLIC_API_URL!, }) ); return sdk; } function AuthComponent() { const sdk = useHighway(); const handleRegister = async () => { try { await sdk.auth.register({ username: "user@example.com", displayName: "John Doe", }); } catch (error) { console.error("Registration failed:", error); } }; return ; } ``` ### Node.js Application ```typescript import { HighwaySDK } from "@sonr.io/sdk"; const sdk = new HighwaySDK({ apiUrl: "https://api.yourdomain.com", environment: "production", }); async function createUser() { try { const result = await sdk.auth.register({ username: "user@example.com", displayName: "John Doe", }); console.log("User created:", result); } catch (error) { console.error("Failed to create user:", error); } } ``` ## Dependencies - **TypeScript**: ^5.3.0 - **Axios**: ^1.6.0 (HTTP client) - **Zod**: ^3.22.0 (Schema validation) - **@simplewebauthn/browser**: ^9.0.0 (WebAuthn client) ## Contributing When contributing to the SDK: 1. Follow TypeScript best practices 2. Add comprehensive type definitions 3. Include unit tests for new features 4. Update documentation and examples 5. Ensure backward compatibility