Documentation Index
Fetch the complete documentation index at: https://docs.timeback.com/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The Timeback SDK provides a SolidStart adapter using middleware.
Installation
npm install @timeback/sdk
Server Setup
Create a Timeback instance:
import { createTimeback } from '@timeback/sdk'
export const timeback = await createTimeback({
env: 'staging',
api: {
clientId: process.env.TIMEBACK_API_CLIENT_ID!,
clientSecret: process.env.TIMEBACK_API_CLIENT_SECRET!,
},
identity: {
mode: 'sso',
clientId: process.env.AWS_COGNITO_CLIENT_ID!,
clientSecret: process.env.AWS_COGNITO_CLIENT_SECRET!,
redirectUri: 'http://localhost:3000/api/timeback/identity/callback',
onCallbackSuccess: async ({ user, state, redirect }) => {
await setSession({ id: user.id, email: user.email })
return redirect(state?.returnTo ?? '/')
},
onCallbackError: ({ error, redirect }) => {
return redirect('/?error=sso_failed')
},
getUser: () => getSession(),
},
})
Middleware
Create middleware to handle Timeback routes:
import { createMiddleware } from '@solidjs/start/middleware'
import { solidStartHandler } from '@timeback/sdk/solid-start'
import { timeback } from '~/lib/timeback'
export default createMiddleware({
onRequest: [
async event => {
const response = await solidStartHandler({
timeback,
event,
})
if (response) return response
},
],
})
Alternative: Route-Based Handler
For more control, you can use a route-based approach instead of middleware:
src/routes/api/timeback/[...path].ts
import { toSolidStartHandler } from '@timeback/sdk/solid-start'
import { timeback } from '~/lib/timeback'
const handlers = toSolidStartHandler(timeback)
export const GET = handlers.GET
export const POST = handlers.POST
Client Provider
Wrap your app with the TimebackProvider:
import { TimebackProvider } from '@timeback/sdk/solid'
export default function App() {
return (
<TimebackProvider>
<Router root={props => <Suspense>{props.children}</Suspense>}>
<FileRoutes />
</Router>
</TimebackProvider>
)
}
Usage
Use primitives in components:
src/components/UserStatus.tsx
import { SignInButton, useTimeback } from '@timeback/sdk/solid'
import { Show } from 'solid-js'
export function UserStatus() {
const timeback = useTimeback()
return (
<Show when={timeback} fallback={<SignInButton size="lg">Sign In</SignInButton>}>
<div>Welcome!</div>
</Show>
)
}
Next Steps
Solid Client
Client-side Solid integration
Identity
Authentication options
Custom Activities
Track learning sessions