{"_id":"@ascencia/id-server","name":"@ascencia/id-server","dist-tags":{"next":"0.1.0-rc.1","latest":"0.1.0-rc.1"},"versions":{"0.1.0-rc.1":{"name":"@ascencia/id-server","version":"0.1.0-rc.1","description":"Vérification des jetons Ascencia ID côté application cliente : JWKS, introspection, webhooks, gardes de permission.","type":"module","main":"./src/index.ts","types":"./src/index.ts","exports":{".":"./src/index.ts","./hono":"./src/adapters/hono.ts","./express":"./src/adapters/express.ts","./next":"./src/adapters/next.ts"},"sideEffects":false,"scripts":{"typecheck":"tsc --noEmit","test":"vitest run","build":"echo 'source-only package'"},"dependencies":{"@ascencia/id-rbac":"0.1.0-rc.1","jose":"^6.2.10","@ascencia/id-core":"0.1.0-rc.1"},"peerDependencies":{"express":"^5.1.0","hono":"^4.10.0"},"peerDependenciesMeta":{"express":{"optional":true},"hono":{"optional":true}},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/pedrokarim/ascencia-auth.git","directory":"packages/server"},"publishConfig":{"access":"public"},"_id":"@ascencia/id-server@0.1.0-rc.1","bugs":{"url":"https://github.com/pedrokarim/ascencia-auth/issues"},"homepage":"https://github.com/pedrokarim/ascencia-auth#readme","_integrity":"sha512-yGvohgKwXijVIg7C+Eox0n93oDSkFtaZiFfGC91Aj6gX/DSFEoCPs+2nKaQ3BKTIsmHNIXwTQ+JQaD1ita/jhw==","_resolved":"/home/runner/work/ascencia-auth/ascencia-auth/tarballs/ascencia-id-server-0.1.0-rc.1.tgz","_from":"file:tarballs/ascencia-id-server-0.1.0-rc.1.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-yGvohgKwXijVIg7C+Eox0n93oDSkFtaZiFfGC91Aj6gX/DSFEoCPs+2nKaQ3BKTIsmHNIXwTQ+JQaD1ita/jhw==","shasum":"f8e5d0d2f70cc3737d3a3c09f7d887435dd24591","tarball":"https://registry.npmjs.org/@ascencia/id-server/-/id-server-0.1.0-rc.1.tgz","fileCount":12,"unpackedSize":61468,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDfUiO4cAfuvXi2tlRxCHTloIjszLCLy7KTGnuWZp2RFgIhAItNmGc0s2VgEtn6NHGpuDr+rYymhZUtWou6S8gfeS+G"}]},"_npmUser":{"name":"pedrokarim64","email":"Karimisma6464@Gmail.com"},"directories":{},"maintainers":[{"name":"pedrokarim64","email":"Karimisma6464@Gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/id-server_0.1.0-rc.1_1787514101230_0.4188545247033437"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-23T19:41:41.013Z","0.1.0-rc.1":"2026-08-23T19:41:41.365Z","modified":"2026-08-23T19:41:41.653Z"},"maintainers":[{"name":"pedrokarim64","email":"Karimisma6464@Gmail.com"}],"description":"Vérification des jetons Ascencia ID côté application cliente : JWKS, introspection, webhooks, gardes de permission.","homepage":"https://github.com/pedrokarim/ascencia-auth#readme","repository":{"type":"git","url":"git+https://github.com/pedrokarim/ascencia-auth.git","directory":"packages/server"},"bugs":{"url":"https://github.com/pedrokarim/ascencia-auth/issues"},"license":"MIT","readme":"# @ascencia/id-server\n\nLe côté serveur d'une application cliente d'**Ascencia ID** : vérification des\njetons, et adaptateurs Next.js, Express et Hono.\n\n```bash\nbun add @ascencia/id-server\n```\n\n## Next.js (App Router) — le montage recommandé\n\nClient **confidentiel** : les jetons restent côté serveur, le navigateur ne\nreçoit qu'un cookie de session opaque. Un XSS sur le site ne suffit donc pas à\nvoler un accès.\n\n```ts\n// lib/auth.ts\nimport { createAscenciaServer } from '@ascencia/id-server/next';\n\nexport const ascencia = createAscenciaServer({\n  issuer: process.env.ASCENCIA_ISSUER!,\n  clientId: process.env.ASCENCIA_CLIENT_ID!,\n  clientSecret: process.env.ASCENCIA_CLIENT_SECRET!,\n  redirectUri: `${process.env.SITE_URL}/api/auth/callback`,\n});\n```\n\n```ts\n// app/api/auth/[...ascencia]/route.ts\nexport const { GET, POST } = ascencia.handlers;\n```\n\n```tsx\n// Dans un composant serveur\nimport { cookies } from 'next/headers';\n\nconst context = await ascencia.getContext(await cookies());\nif (!context?.can('admin.access')) redirect('/login');\n```\n\n### En serverless, fournir un magasin de sessions\n\nLe magasin par défaut est **en mémoire**. Sur Vercel ou tout autre hébergement\nserverless, chaque démarrage à froid repart d'une mémoire vide : les sessions\ndisparaissent sans erreur, et l'utilisateur est déconnecté au hasard — un\nsymptôme qui ressemble à un caprice plutôt qu'à une panne.\n\n```ts\ncreateAscenciaServer({\n  …,\n  sessionStore: {\n    async get(id) { … },\n    async set(id, record, ttlSeconds) { … },\n    async delete(id) { … },\n  },\n});\n```\n\nN'importe quel magasin clé-valeur convient : une table, Redis, un KV\nd'hébergeur.\n\n## Express, Hono\n\n```ts\nimport { ascenciaExpress } from '@ascencia/id-server/express';\nimport { ascenciaHono } from '@ascencia/id-server/hono';\n```\n\nLes deux posent le contexte sur la requête à partir d'un `Authorization:\nBearer` : c'est le montage pour une **API**, pas pour un site avec des pages.\n\n## Vérification\n\nLa signature est vérifiée contre le JWKS de l'émetteur, mis en cache et\nrenouvelé à la rotation. Le mode strict interroge en plus `/oauth/introspect`,\nce qui coûte un aller-retour mais reflète l'état **courant** du jeton — utile\nlà où une révocation doit prendre effet immédiatement.\n\n## TypeScript\n\nPublié en source TypeScript. Avec Next.js :\n\n```ts\ntranspilePackages: ['@ascencia/id-core', '@ascencia/id-server'],\n```\n\nMIT · [Documentation](https://id.ascencia.re/help)\n","readmeFilename":"README.md","_rev":"1-e3151fde1eef63f78e727fd4741dc95a"}