{"_id":"@alfycore/sso-client","name":"@alfycore/sso-client","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.4":{"name":"@alfycore/sso-client","version":"1.0.4","description":"Client SDK for Alfycore SSO integration with React, Next.js and Express.js","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","dev":"tsc --watch","prepublishOnly":"npm run build"},"keywords":["sso","alfycore","authentication","oauth","react","nextjs","express"],"author":{"name":"Alfycore"},"license":"MIT","peerDependencies":{"react":"^18.0.0","next":"^13.0.0 || ^14.0.0","express":"^4.18.0"},"peerDependenciesMeta":{"react":{"optional":true},"next":{"optional":true},"express":{"optional":true}},"dependencies":{"axios":"^1.6.2","jsonwebtoken":"^9.0.2","cookie":"^0.6.0"},"devDependencies":{"@types/cookie":"^0.6.0","@types/express":"^4.17.21","@types/jsonwebtoken":"^9.0.5","@types/node":"^20.10.5","@types/react":"^18.2.45","typescript":"^5.3.3"},"_id":"@alfycore/sso-client@1.0.4","_nodeVersion":"20.19.4","_npmVersion":"11.6.0","dist":{"integrity":"sha512-o5HBxnWXb8IIGfrBNBIh2ZclibjPpcUPpkfnKvLTO2f873qiGISPWCbt8GlFPlXanCEzLox16qiySSEW8dBymA==","shasum":"a77f29f78d678ac6e785d873407878c04529aa6e","tarball":"https://registry.npmjs.org/@alfycore/sso-client/-/sso-client-1.0.4.tgz","fileCount":41,"unpackedSize":66366,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDqLOj+zd7JfgDnotzcOFVILgmf6Ui3uVz5O3CbViQlCQIgXs0GTKel1qTC2uj5raA5xVsHqvBLsnXclccvowPYfc0="}]},"_npmUser":{"name":"wiltark","email":"karlo.hupe@gmail.com"},"directories":{},"maintainers":[{"name":"wiltark","email":"karlo.hupe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sso-client_1.0.4_1766157947465_0.08881273308002235"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-19T15:25:47.222Z","1.0.4":"2025-12-19T15:25:47.627Z","modified":"2025-12-19T15:25:48.087Z"},"maintainers":[{"name":"wiltark","email":"karlo.hupe@gmail.com"}],"description":"Client SDK for Alfycore SSO integration with React, Next.js and Express.js","keywords":["sso","alfycore","authentication","oauth","react","nextjs","express"],"author":{"name":"Alfycore"},"license":"MIT","readme":"# @alfycore/sso-client\r\n\r\nModule Node.js pour intégrer l'authentification SSO Alfycore dans vos applications React, Next.js et Express.js.\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @alfycore/sso-client\r\n```\r\n\r\n## Configuration\r\n\r\n### Variables d'environnement\r\n\r\nCréez un fichier `.env` avec les configurations suivantes :\r\n\r\n```env\r\nSSO_SERVER_URL=http://localhost:3001\r\nSSO_CLIENT_ID=your-client-id\r\nSSO_CLIENT_SECRET=your-client-secret\r\nSSO_REDIRECT_URI=http://localhost:3000/auth/callback\r\n```\r\n\r\n## Utilisation avec React\r\n\r\n### 1. Configuration du Provider\r\n\r\nEnveloppez votre application avec le `SSOProvider` :\r\n\r\n```tsx\r\nimport { SSOProvider } from '@alfycore/sso-client';\r\n\r\nconst ssoConfig = {\r\n  ssoServerUrl: process.env.REACT_APP_SSO_SERVER_URL!,\r\n  clientId: process.env.REACT_APP_SSO_CLIENT_ID!,\r\n  clientSecret: process.env.REACT_APP_SSO_CLIENT_SECRET!,\r\n  redirectUri: process.env.REACT_APP_SSO_REDIRECT_URI!,\r\n  scopes: ['openid', 'profile', 'email']\r\n};\r\n\r\nfunction App() {\r\n  return (\r\n    <SSOProvider \r\n      config={ssoConfig}\r\n      onAuthSuccess={(user) => console.log('Logged in:', user)}\r\n      onAuthError={(error) => console.error('Auth error:', error)}\r\n    >\r\n      <YourApp />\r\n    </SSOProvider>\r\n  );\r\n}\r\n```\r\n\r\n### 2. Utilisation du Hook useSSO\r\n\r\n```tsx\r\nimport { useSSO } from '@alfycore/sso-client';\r\n\r\nfunction Profile() {\r\n  const { user, isAuthenticated, isLoading, login, logout } = useSSO();\r\n\r\n  if (isLoading) {\r\n    return <div>Chargement...</div>;\r\n  }\r\n\r\n  if (!isAuthenticated) {\r\n    return <button onClick={login}>Se connecter</button>;\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <h1>Bienvenue {user?.name}</h1>\r\n      <p>Email: {user?.email}</p>\r\n      <button onClick={logout}>Se déconnecter</button>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n### 3. Routes Protégées\r\n\r\n```tsx\r\nimport { ProtectedRoute } from '@alfycore/sso-client';\r\n\r\nfunction Dashboard() {\r\n  return (\r\n    <ProtectedRoute fallback={<div>Chargement...</div>}>\r\n      <h1>Tableau de bord</h1>\r\n      <p>Contenu protégé</p>\r\n    </ProtectedRoute>\r\n  );\r\n}\r\n```\r\n\r\n## Utilisation avec Next.js\r\n\r\n### 1. Configuration dans _app.tsx\r\n\r\n```tsx\r\nimport { SSOProvider } from '@alfycore/sso-client';\r\nimport type { AppProps } from 'next/app';\r\n\r\nconst ssoConfig = {\r\n  ssoServerUrl: process.env.NEXT_PUBLIC_SSO_SERVER_URL!,\r\n  clientId: process.env.NEXT_PUBLIC_SSO_CLIENT_ID!,\r\n  clientSecret: process.env.NEXT_PUBLIC_SSO_CLIENT_SECRET!,\r\n  redirectUri: process.env.NEXT_PUBLIC_SSO_REDIRECT_URI!\r\n};\r\n\r\nexport default function App({ Component, pageProps }: AppProps) {\r\n  return (\r\n    <SSOProvider config={ssoConfig}>\r\n      <Component {...pageProps} />\r\n    </SSOProvider>\r\n  );\r\n}\r\n```\r\n\r\n### 2. Page Protégée\r\n\r\n```tsx\r\nimport { useSSO, ProtectedRoute } from '@alfycore/sso-client';\r\n\r\nexport default function DashboardPage() {\r\n  return (\r\n    <ProtectedRoute>\r\n      <Dashboard />\r\n    </ProtectedRoute>\r\n  );\r\n}\r\n\r\nfunction Dashboard() {\r\n  const { user, logout } = useSSO();\r\n  \r\n  return (\r\n    <div>\r\n      <h1>Dashboard - {user?.name}</h1>\r\n      <button onClick={logout}>Déconnexion</button>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n## Utilisation avec Express.js\r\n\r\n### 1. Configuration de base\r\n\r\n```javascript\r\nconst express = require('express');\r\nconst { ExpressSSOMiddleware } = require('@alfycore/sso-client');\r\n\r\nconst app = express();\r\n\r\nconst ssoMiddleware = new ExpressSSOMiddleware({\r\n  ssoServerUrl: process.env.SSO_SERVER_URL,\r\n  clientId: process.env.SSO_CLIENT_ID,\r\n  clientSecret: process.env.SSO_CLIENT_SECRET,\r\n  redirectUri: process.env.SSO_REDIRECT_URI,\r\n  cookieSecure: process.env.NODE_ENV === 'production',\r\n  loginPath: '/auth/login',\r\n  callbackPath: '/auth/callback',\r\n  logoutPath: '/auth/logout'\r\n});\r\n\r\n// Installer les routes d'authentification\r\napp.use(ssoMiddleware.routes());\r\n\r\n// Route publique\r\napp.get('/', (req, res) => {\r\n  res.send('Page d\\'accueil');\r\n});\r\n\r\n// Route protégée\r\napp.get('/dashboard', ssoMiddleware.requireAuth(), (req, res) => {\r\n  res.json({\r\n    message: 'Tableau de bord',\r\n    user: req.user\r\n  });\r\n});\r\n\r\n// Route avec authentification optionnelle\r\napp.get('/profile', ssoMiddleware.optionalAuth(), (req, res) => {\r\n  if (req.user) {\r\n    res.json({ user: req.user });\r\n  } else {\r\n    res.json({ message: 'Non authentifié' });\r\n  }\r\n});\r\n\r\napp.listen(3000, () => {\r\n  console.log('Server running on port 3000');\r\n});\r\n```\r\n\r\n### 2. TypeScript avec Express\r\n\r\n```typescript\r\nimport express, { Request, Response } from 'express';\r\nimport { ExpressSSOMiddleware } from '@alfycore/sso-client';\r\n\r\nconst app = express();\r\n\r\nconst ssoMiddleware = new ExpressSSOMiddleware({\r\n  ssoServerUrl: process.env.SSO_SERVER_URL!,\r\n  clientId: process.env.SSO_CLIENT_ID!,\r\n  clientSecret: process.env.SSO_CLIENT_SECRET!,\r\n  redirectUri: process.env.SSO_REDIRECT_URI!\r\n});\r\n\r\napp.use(ssoMiddleware.routes());\r\n\r\napp.get('/api/me', ssoMiddleware.requireAuth(false), (req: Request, res: Response) => {\r\n  res.json(req.user);\r\n});\r\n\r\napp.listen(3000);\r\n```\r\n\r\n## API Reference\r\n\r\n### SSOProvider (React/Next.js)\r\n\r\nProps:\r\n- `config`: Configuration SSO (obligatoire)\r\n- `onAuthSuccess`: Callback appelé après authentification réussie\r\n- `onAuthError`: Callback appelé en cas d'erreur\r\n- `storageKey`: Clé de stockage local (défaut: 'alfycore_sso_session')\r\n\r\n### useSSO Hook\r\n\r\nRetourne:\r\n- `user`: Utilisateur actuel ou null\r\n- `isAuthenticated`: Boolean indiquant si l'utilisateur est connecté\r\n- `isLoading`: Boolean indiquant le chargement\r\n- `login()`: Fonction pour initier la connexion\r\n- `logout()`: Fonction pour se déconnecter\r\n- `refreshSession()`: Fonction pour rafraîchir la session\r\n\r\n### ExpressSSOMiddleware\r\n\r\nMéthodes:\r\n- `routes()`: Middleware pour gérer les routes d'authentification\r\n- `requireAuth(redirectOnFail?)`: Middleware pour protéger les routes\r\n- `optionalAuth()`: Middleware avec authentification optionnelle\r\n- `getUser(req)`: Récupère l'utilisateur depuis la requête\r\n\r\nOptions:\r\n- `ssoServerUrl`: URL du serveur SSO\r\n- `clientId`: ID du client SSO\r\n- `clientSecret`: Secret du client SSO\r\n- `redirectUri`: URI de redirection\r\n- `cookieName`: Nom du cookie de session\r\n- `cookieMaxAge`: Durée de vie du cookie (ms)\r\n- `loginPath`: Chemin de la route de connexion\r\n- `callbackPath`: Chemin de la route de callback\r\n- `logoutPath`: Chemin de la route de déconnexion\r\n\r\n## Exemples Complets\r\n\r\nConsultez le dossier `examples/` pour des exemples complets d'utilisation avec :\r\n- React (Create React App)\r\n- Next.js\r\n- Express.js\r\n\r\n## Support\r\n\r\nPour toute question ou problème, créez une issue sur le dépôt GitHub.\r\n\r\n## Licence\r\n\r\nMIT\r\n","readmeFilename":"README.md","_rev":"1-b3c686e03db08e8e8a2ed993fc76715d"}