@better-iam/svelte
v0.2.0
Published
SvelteKit and Svelte bindings for Better IAM: a handle hook that serves the IAM API, guarded loads and form actions, and session stores.
Maintainers
Readme
@better-iam/svelte
SvelteKit and Svelte bindings for Better IAM.
@better-iam/svelte/kitis the server side. Ahandlehook serves the IAM API, fillsevent.locals.iam, and enforces path rules.guardwraps server loads andactionwraps form actions.@better-iam/svelteis the browser side: stores for the session and advisory decisions, for Svelte 4 and 5.
Full guide: docs/sveltekit.md. Runnable app: examples/sveltekit.
// src/hooks.server.ts
import { createIamKit } from '@better-iam/svelte/kit';
import { iam } from '$lib/server/iam';
export const iamKit = createIamKit(iam, {
protect: [{ path: '/app' }, { path: '/admin', authorize: { action: 'iam:identities:read' } }],
});
export const handle = iamKit.handle;// src/routes/projects/+page.server.ts
export const load = iamKit.guard(async (event, session) => ({
canCreate: await event.locals.iam.can('projects:create'),
name: session.identity.name,
}));<script>
import { createIam } from '@better-iam/svelte';
let { data } = $props();
const iam = createIam({ client, initialSession: data.session });
const { session } = iam;
const canManage = iam.can({ tenantId: data.session?.session.tenantId ?? '', action: 'projects:manage' });
</script>
{#if $canManage.allowed}<button>Manage</button>{/if}The stores and can() are advisory. The server enforces every operation.
