@bagelink/sdk
v1.9.83
Published
Bagel core sdk packages
Readme
@bagelink/sdk
OpenAPI-based TypeScript SDK generator with Vue 3 composables.
Features
- 🚀 Generate type-safe SDKs from OpenAPI specifications
- 🎯 Enhanced responses - array + metadata in one object
- 🔐 Built-in authentication support
- 🎨 FastAPI/Pydantic error parsing
- 📡 SSE/Stream support with type safety
- ⚡ Request state management composables
- 🔧 Flexible configuration with interceptors
Installation
pnpm add @bagelink/sdkQuick Start
1. Generate SDK
# From OpenAPI spec
VITE_BAGEL_BASE_URL=https://api.example.com bun run bin/index.ts .bagelink2. Initialize
import { createApi } from './.bagelink/api'
createApi({
baseURL: '/api',
withCredentials: true
})3. Use
import { useApi } from './.bagelink/api'
const api = useApi()
const users = await api.users.get()
// Array operations
for (const user of users) {
console.log(user.name)
}
// Metadata
console.log(users.totalCount, users.page)
// Raw access
console.log(users.$raw.headers)Configuration
createApi({
baseURL: '/api',
withCredentials: true,
auth: {
getToken: () => localStorage.getItem('token'),
onUnauthorized: () => router.push('/login')
},
onError: (error) => {
console.error(error.message)
if (error.fields) {
// Handle validation errors
}
},
interceptors: {
request: (config) => {
// Modify request
return config
}
}
})State Management
import { useApiRequest } from './.bagelink/api'
const { loading, error, data, execute } = useApiRequest(
() => api.users.get()
)Type Assignment
For assigning single objects to plain types:
import { unwrap } from './.bagelink/api'
const agent = ref<AgentResponse | null>(null)
agent.value = unwrap(await api.agents.getByAgentId({ agentId }))Arrays work without unwrap():
const agents = ref<AgentResponse[]>([])
agents.value = await api.agents.get() // Works fine