# @velastack/pocketbase

PocketBase bindings for SvelteKit: a `hooks.server.ts` middleware, a typed client and type-safe collection schemas. This is the package the generated code imports.

```
npm install @velastack/pocketbase
```

Installed for you by [`vela create`](/create) and [`vela enable backend`](/enable/backend).

### Entrypoints

- `@velastack/pocketbase` - The middleware and the client
- `@velastack/pocketbase/form` - Superforms helpers
- `@velastack/pocketbase/api-key` - API key generation and verification
- `@velastack/pocketbase/testing` - The `TestContext` type for server tests

#### handlePocketbase

Configures the PocketBase middleware in `hooks.server.ts`.

```ts
import { handlePocketbase } from '@velastack/pocketbase';
import {
    POCKETBASE_URL,
    POCKETBASE_SUPERUSER_EMAIL,
    POCKETBASE_SUPERUSER_PASSWORD
} from '$env/static/private';

export const handle = handlePocketbase({
	pocketbaseUrl: POCKETBASE_URL,
	superuserEmail: POCKETBASE_SUPERUSER_EMAIL,
	superuserPassword: POCKETBASE_SUPERUSER_PASSWORD
})
```

The `auth`, `api` and `apiKeys` blocks are added to this call by the [enable](/enable) commands. It puts two clients on `locals`: `admin`, which queries the database directly, and `pb`, which is scoped to the authenticated user.

#### setDefaultData

Sets the default data for a form from a PocketBase record. Exported from the `/form` entrypoint.

```ts
import { setDefaultData } from '@velastack/pocketbase/form';

export const actions = {
	default: async ({ locals, request }) => {
        const record = await locals.admin.collection('posts').getOne(1);
        setDefaultData(form, record);
        return { form };
    }
}
```

#### setPocketbaseErrors

Sets PocketBase errors as Superforms errors when a form submission fails.

```ts
import { setPocketbaseErrors } from '@velastack/pocketbase/form';

export const actions = {
	default: async ({ locals, request }) => {
        try {
            await locals.admin.collection('posts').create(form.data);
        } catch (error) {
            setPocketbaseErrors(form, error);
            return fail(400, { form });
        }
    }
}
```

#### API keys

The primitives behind [`vela enable api-keys`](/enable/api-keys). Keys are stored hashed, so the secret is only ever shown once, at generation.

```ts
import {
    generateApiKeySecret,
    hashApiKey,
    verifyApiKey
} from '@velastack/pocketbase/api-key';
```

#### Generated types

[`vela sync`](/sync) augments this package with `Models`, `Collections` and `Schemas` for your project's collections, so `locals.pb.collection('posts')` is typed.