Statut
Statut du registre : UNPUBLISHED. Installez ce SDK uniquement depuis un checkout du code source du dépôt ; n’utilisez pas de registre de paquets externe.
Le statut du package est Package actuel. Le fournisseur de contexteSolidJS, les primitives basées sur des signaux et les composants headlesssont implémentés. Un aller-retour réel avec un IdP sur une infrastructurede production est en attente de vérification manuelle.
Configuration du fournisseur
Enveloppez votre application avec XidProvider. Il crée unXidClient, appelle client.load() au montage pour récupérerla session courante et se démonte via onCleanup.
import { XidProvider } from '@xid-kit/solid'
export function App() {
return (
<XidProvider
mode="oidc"
issuer="https://xid.dev"
clientId="client_abc123"
redirectUri="https://app.example.com/auth/callback"
>
<Routes />
</XidProvider>
)
}Primitives d’authentification
Chaque primitive retourne un Accessor<T> réactif (fonctionsgetter). Appelez-les dans JSX ou dans createEffect pour suivre leschangements.
import { createAuth, createUser, createOrganization, createSession } from '@xid-kit/solid'
import { Show } from 'solid-js'
function Profile() {
const auth = createAuth()
// auth.isLoaded() -- Accessor<boolean>
// auth.isSignedIn() -- Accessor<boolean>
// auth.userId() -- Accessor<string | null>
// auth.getToken() -- () => Promise<Result<string, XidError>>
// auth.signOut() -- (options?) => Promise<Result<null, XidError>>
return (
<Show when={auth.isLoaded()} fallback={<p>Loading...</p>}>
<Show when={auth.isSignedIn()} fallback={<p>Not signed in</p>}>
<p>Signed in as {auth.userId()}</p>
<button onClick={() => void auth.signOut()}>Sign out</button>
</Show>
</Show>
)
}createOrganization et createSession
const org = createOrganization()
// org() is CreateOrganizationReturn
if (org().isSignedIn) {
console.log(org().organization?.name, org().membership?.role)
const activated = await org().setActive('org_new_id')
if (!activated.ok) throw new Error(activated.error.message)
}
const session = createSession()
if (session().isSignedIn) {
const token = await session().getToken()
if (!token.ok) throw new Error(token.error.message)
// use token.value for backend requests
}Composants headless
import { SignInButton, SignOutButton, Protect } from '@xid-kit/solid'
// Navigates to /sign-in by default
<SignInButton signInUrl="/auth/sign-in" redirectUrl="/dashboard">
Log in
</SignInButton>
// Signs out all sessions; pass sessionId to target one
<SignOutButton redirectUrl="/home">Log out</SignOutButton>
// Role and permission gate
<Protect role="admin" fallback={<p>Admins only</p>}>
<Settings />
</Protect>
<Protect permission="org:member:write" fallback={null}>
<InviteForm />
</Protect>API exportée
| Exporter | Type | Objectif |
|---|---|---|
XidProvider |
composant | Crée XidClient, appelle load() au montage et se démonte via onCleanup |
createAuth |
primitive | isLoaded, isSignedIn, userId, sessionId, session, getToken, signOut entant qu’Accesseurs |
createUser |
primitive | Accesseur encapsulant une union discriminante sur isLoaded / isSignedIn /user |
createOrganization |
primitive | Accesseur retournant l’organisation, l’appartenance et setActive pourl’organisation active |
createSession |
primitive | Accesseur retournant la session et getToken pour la session active |
SignInButton |
composant | Bouton headless naviguant vers l’URL de connexion au clic |
SignOutButton |
composant | Bouton headless qui appelle signOut au clic |
Protect |
composant | Portail de rôle et permission avec prop de secours |
Stockage des jetons
- Le XID Worker conserve des informations d’identification d’actualisation opaques dans un cookie
HttpOnly. Il ne s’agit pas d’un JWT et le SDK ne le lit jamais à partir de JavaScript ni ne le stocke danslocalStorage. getToken()renvoie un JWT de courte durée (60 s) mis en cache uniquement en mémoire parTokenManagerdans@xid-kit/core.