Svelte
Svelte stores and a SvelteKit integration for KavachOS auth.
@kavachos/svelte provides reactive Svelte stores and a SvelteKit hooks integration. It works with Svelte 4+, SvelteKit, and plain Vite setups.
Installation
pnpm add @kavachos/svelteSetup
Create a client instance and export the stores from a shared module:
import { createKavachClient } from '@kavachos/svelte';
export const {
session,
user,
signIn,
signOut,
signUp,
agents,
} = createKavachClient({
basePath: '/api/kavach',
}); SvelteKit setup
In SvelteKit, expose the session on the server side via hooks.server.ts so the initial page load is never unauthenticated:
import { createKavachHooks } from '@kavachos/svelte/sveltekit';
export const { handle } = createKavachHooks({
basePath: '/api/kavach',
}); Access the session in +layout.server.ts:
import type { LayoutServerLoad } from './$types';
export const load: LayoutServerLoad = async ({ locals }) => {
return { session: locals.session }; // populated by the hook
};Session store
<script lang="ts">
import { session } from '$lib/kavach';
</script>
{#if $session.isLoading}
<p>Loading...</p>
{:else if $session.data}
<p>Signed in as {$session.data.user.email}</p>
{:else}
<a href="/sign-in">Sign in</a>
{/if}Sign in / sign up / sign out
<script lang="ts">
import { signIn } from '$lib/kavach';
let email = '';
let password = '';
let error = '';
async function handleSubmit() {
const result = await signIn({ email, password });
if (!result.success) {
error = result.error.message;
}
}
</script>import { signUp } from '$lib/kavach';
const result = await signUp({ email, password, name });import { signOut } from '$lib/kavach';
await signOut();createAgentStore
Manage agent identities in reactive Svelte stores:
<script lang="ts">
import { createAgentStore } from '@kavachos/svelte';
const { agents, createAgent, revokeAgent, isLoading } = createAgentStore({
basePath: '/api/kavach',
});
async function addAgent() {
await createAgent({ name: 'My assistant', permissions: ['read:data'] });
}
</script>
{#each $agents as agent}
<div>{agent.name} <button on:click={() => revokeAgent(agent.id)}>Revoke</button></div>
{/each}Client configuration reference
Prop
Type