SDK Usage
Examples of using the SDK in different contexts.
React Native / Expo
typescript
// lib/api.ts
import { createClient } from "@logbook/sdk/client"
import { API_URL } from "@/constants/config"
export const api = createClient({
baseUrl: API_URL,
})
// Set token from auth store
import { useAuthStore } from "@/stores/authStore"
const session = useAuthStore.getState().session
if (session?.accessToken) {
api.setAuthToken(session.accessToken)
}With TanStack Query
typescript
import { useQuery, useMutation } from "@tanstack/react-query"
import { api } from "@/lib/api"
// Query
function useBooks() {
return useQuery({
queryKey: ["books"],
queryFn: () => api.books.list(),
})
}
// Mutation
function useCreateBook() {
return useMutation({
mutationFn: (data: CreateBookRequest) => api.books.create(data),
})
}React (Web)
typescript
// hooks/useApi.ts
import { createClient } from "@logbook/sdk/client"
import { useAuth } from "./useAuth"
export function useApi() {
const { token } = useAuth()
const client = createClient({
baseUrl: import.meta.env.VITE_API_URL,
})
if (token) {
client.setAuthToken(token)
}
return client
}Node.js (Server-Side)
typescript
import { createClient } from "@logbook/sdk/client"
const client = createClient({
baseUrl: process.env.API_URL,
})
// Use API key for server-to-server
client.setApiKey(process.env.API_KEY)
async function syncBooks() {
const books = await client.books.list()
// Process books...
}Error Handling
typescript
import type { ApiError } from "@logbook/sdk/types"
try {
const book = await api.books.get(bookId)
} catch (error) {
const apiError = error as ApiError
switch (apiError.status) {
case 401:
// Unauthorized - redirect to login
break
case 404:
// Not found
break
case 422:
// Validation error
console.log(apiError.errors)
break
default:
// Generic error
console.error(apiError.message)
}
}Pagination
typescript
import type { PaginatedResponse, Book } from "@logbook/sdk/types"
async function getAllBooks(): Promise<Book[]> {
const allBooks: Book[] = []
let page = 1
let hasMore = true
while (hasMore) {
const response: PaginatedResponse<Book> = await api.books.list({
page,
limit: 50,
})
allBooks.push(...response.data)
hasMore = response.page < response.totalPages
page++
}
return allBooks
}TypeScript Tips
Importing Types
typescript
// Import types separately
import type { Book, User } from "@logbook/sdk/types"
// Use in function signatures
function processBook(book: Book): void {
// ...
}Generics
typescript
import type { PaginatedResponse } from "@logbook/sdk/types"
// Type the response
const response: PaginatedResponse<Book> = await api.books.list()
// Access typed properties
response.data // Book[]
response.total // number
response.page // number