Skip to content

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

Built with VitePress