{"_id":"@datsi/auth-arai-usuarios-cli","_rev":"5-6c2c2d224397d2706e838bcafb42710a","name":"@datsi/auth-arai-usuarios-cli","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.1":{"name":"@datsi/auth-arai-usuarios-cli","version":"1.0.1","keywords":["saml","saml2","oidc","openid-connect","passport","passport-saml","express","authentication","sso","arai","arai-usuarios","siu","university","universidad","typescript"],"license":"MIT","_id":"@datsi/auth-arai-usuarios-cli@1.0.1","maintainers":[{"name":"cailo","email":"cailovirtual@gmail.com"}],"dist":{"shasum":"1d5a83c2424f3e30e314de488ffca2439501ba30","tarball":"https://registry.npmjs.org/@datsi/auth-arai-usuarios-cli/-/auth-arai-usuarios-cli-1.0.1.tgz","fileCount":50,"integrity":"sha512-El27e+E4Sy2y9lnQgufpkAwjD04NXcnbsPfSDPAdMxzNU9gka9f+H/w6sOPXUmIgOfSPsos65wk2RcYipREShQ==","signatures":[{"sig":"MEYCIQD3b/TJx5aC1hTeZz0D/lUlgQuhJGaGtdXavrfQ+U4kQwIhAPheRa6VnXMZ/VKLdq2HhasTimS0ENp/7xDzn1XB9Bmw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83129},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"8eac6ea469bdd4bd25179fb338cd6e112a514776","scripts":{"build":"tsc","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"cailo","email":"cailovirtual@gmail.com"},"_npmVersion":"10.9.0","description":"Reusable SAML 2.0 / OIDC authentication library for Express.js — designed for Arai-Usuarios (SIU) but compatible with any standards-compliant IdP","directories":{},"_nodeVersion":"22.12.0","dependencies":{"express":"^4.x","passport":"^0.7.0","express-session":"^1.18.0","passport-openidconnect":"^0.1.2","@node-saml/passport-saml":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/express":"^4.17.21","@types/passport":"^1.0.16","@types/express-session":"^1.18.0","@types/passport-openidconnect":"^0.1.3"},"peerDependencies":{"express":"^4.x"},"_npmOperationalInternal":{"tmp":"tmp/auth-arai-usuarios-cli_1.0.1_1773000514310_0.0125891492465664","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@datsi/auth-arai-usuarios-cli","version":"1.0.2","description":"Reusable SAML 2.0 / OIDC authentication library for Express.js — designed for Arai-Usuarios (SIU) but compatible with any standards-compliant IdP","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build","prepublishOnly":"npm run build"},"keywords":["saml","saml2","oidc","openid-connect","passport","passport-saml","express","authentication","sso","arai","arai-usuarios","siu","university","universidad","typescript"],"license":"MIT","engines":{"node":">=18"},"dependencies":{"@node-saml/passport-saml":"^5.0.0","express":"^4.x","express-session":"^1.18.0","passport":"^0.7.0","passport-openidconnect":"^0.1.2"},"devDependencies":{"@types/express":"^4.17.21","@types/express-session":"^1.18.0","@types/passport":"^1.0.16","@types/passport-openidconnect":"^0.1.3","typescript":"^5.4.0"},"peerDependencies":{"express":"^4.x"},"_id":"@datsi/auth-arai-usuarios-cli@1.0.2","gitHead":"5d426eff6db20c2affaeb9ca392e9fe356a47869","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-9gh8cSzKcCDL1Ae1m6+CRS1LrkHPyOD+jT14mAk73K52KNN/ZRMKlYlNFkkrNK6hlljUvU+HRatNzzXea/ZJIg==","shasum":"e18baca49e67ae75fd1296eea06dd31a635f2adf","tarball":"https://registry.npmjs.org/@datsi/auth-arai-usuarios-cli/-/auth-arai-usuarios-cli-1.0.2.tgz","fileCount":50,"unpackedSize":83163,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF1oXJxwfKR3weH8w5oMpzn8T30jBjSLApZ6ImfBGQfxAiEAgArcQbhZjmnIrK/LzPxbFDgaVhs7mK9N0dUTtuVrrJc="}]},"_npmUser":{"name":"cailo","email":"cailovirtual@gmail.com"},"directories":{},"maintainers":[{"name":"cailo","email":"cailovirtual@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/auth-arai-usuarios-cli_1.0.2_1773257922960_0.0742808787282967"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-08T20:08:34.152Z","modified":"2026-03-11T19:38:43.223Z","1.0.0":"2026-03-08T17:44:52.316Z","1.0.1":"2026-03-08T20:08:34.483Z","1.0.2":"2026-03-11T19:38:43.107Z"},"license":"MIT","keywords":["saml","saml2","oidc","openid-connect","passport","passport-saml","express","authentication","sso","arai","arai-usuarios","siu","university","universidad","typescript"],"description":"Reusable SAML 2.0 / OIDC authentication library for Express.js — designed for Arai-Usuarios (SIU) but compatible with any standards-compliant IdP","maintainers":[{"name":"cailo","email":"cailovirtual@gmail.com"}],"readme":"# @datsi/auth-arai-usuarios-cli\n\n[![npm version](https://img.shields.io/npm/v/@datsi/auth-arai-usuarios-cli)](https://www.npmjs.com/package/@datsi/auth-arai-usuarios-cli)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)\n\nLibrería reutilizable de autenticación **SAML 2.0 / OIDC** para Express.js.\nDiseñada para integrarse con **Arai-Usuarios (SIU)**, compatible con cualquier IdP estándar.\n\n---\n\n## Características\n\n- Soporte dual **SAML 2.0** y **OIDC** — un solo cambio de configuración\n- Configuración 100% JSON (sin tocar código)\n- Profile mappers pre-armados para Arai-Usuarios\n- Hooks `onAuth` / `onLogout` para lógica personalizada\n- Middleware `requireAuth` para proteger rutas\n- TypeScript completo — tipos exportados listos para usar\n- Node.js ≥ 18\n\n---\n\n## Instalación\n\n```bash\nnpm install @datsi/auth-arai-usuarios-cli\n```\n\n---\n\n## Quick Start — SAML\n\n```typescript\nimport express from \"express\";\nimport { createAuth, araiProfileMapper } from \"@datsi/auth-arai-usuarios-cli\";\n\nconst app = express();\napp.set(\"trust proxy\", 1);\n\nconst auth = createAuth({\n  profileMapper: araiProfileMapper,\n  // Lee auth-arai-usuarios-cli.config.json de la raíz del proyecto\n});\n\nauth.middleware.forEach((mw) => app.use(mw));\napp.use(auth.router);\n\n// Ruta protegida\napp.get(\"/api/datos\", auth.requireAuth, (req, res) => {\n  res.json({ user: req.user });\n});\n\napp.listen(4000);\n```\n\n`auth-arai-usuarios-cli.config.json`:\n\n```json\n{\n  \"saml\": {\n    \"callbackUrl\": \"https://dominio.com/api/auth/saml/callback\",\n    \"entryPoint\": \"https://arai-usuarios.universidad.edu.ar/idp/saml2/idp/SSOService.php\",\n    \"issuer\": \"https://dominio.com\",\n    \"logoutUrl\": \"https://arai-usuarios.universidad.edu.ar/idp/saml2/idp/SingleLogoutService.php\",\n    \"certPath\": \"./certs/idp.crt\"\n  },\n  \"session\": {\n    \"secret\": \"mi-secret-seguro\",\n    \"cookie\": { \"domain\": \"dominio.com\" }\n  },\n  \"app\": { \"redirectUrl\": \"https://dominio.com\" }\n}\n```\n\n---\n\n## Quick Start — OIDC\n\n```typescript\nimport express from \"express\";\nimport { createAuth, araiOidcProfileMapper } from \"@datsi/auth-arai-usuarios-cli\";\n\nconst app = express();\napp.set(\"trust proxy\", 1);\n\nconst auth = createAuth({\n  oidcProfileMapper: araiOidcProfileMapper,\n  // Lee auth-arai-usuarios-cli.config.json de la raíz del proyecto\n});\n\nauth.middleware.forEach((mw) => app.use(mw));\napp.use(auth.router);\n\napp.get(\"/api/datos\", auth.requireAuth, (req, res) => {\n  res.json({ user: req.user });\n});\n\napp.listen(4000);\n```\n\n`auth-arai-usuarios-cli.config.json`:\n\n```json\n{\n  \"protocol\": \"oidc\",\n  \"oidc\": {\n    \"clientId\": \"mi-client-id\",\n    \"clientSecret\": \"mi-client-secret\",\n    \"issuerUrl\": \"https://arai-usuarios.universidad.edu.ar/idp\",\n    \"authorizationURL\": \"https://arai-usuarios.universidad.edu.ar/idp/module.php/oidc/authorize.php\",\n    \"tokenURL\": \"https://arai-usuarios.universidad.edu.ar/idp/module.php/oidc/access_token.php\",\n    \"userInfoURL\": \"https://arai-usuarios.universidad.edu.ar/idp/module.php/oidc/userinfo.php\",\n    \"callbackUrl\": \"https://dominio.com/api/auth/oidc/callback\"\n  },\n  \"session\": {\n    \"secret\": \"mi-secret-seguro\",\n    \"cookie\": { \"domain\": \"dominio.com\" }\n  },\n  \"app\": { \"redirectUrl\": \"https://dominio.com\" }\n}\n```\n\n> El código del consumidor es **idéntico** para SAML y OIDC. Solo cambia la config y el profile mapper.\n\n---\n\n## Rutas generadas automáticamente\n\n| Método | SAML | OIDC | Descripción |\n|---|---|---|---|\n| GET | `/api/login` | `/api/login` | Inicia el flujo de login (redirige al IdP) |\n| POST/GET | `/api/auth/saml/callback` | `/api/auth/oidc/callback` | Callback del IdP |\n| GET | `/api/user` | `/api/user` | Usuario autenticado o `401` |\n| GET | `/api/auth/idp/logout` | `/api/auth/idp/logout` | Cierra sesión (SLO / end_session) |\n\nCon `\"launcher\": true` en la config, se agregan además:\n\n| Método | Ruta | Descripción |\n|---|---|---|\n| GET | `/api/launcher-config` | `{ enabled: true/false }` |\n| GET | `/api/apps` | Apps del usuario desde `appLauncherData` |\n\n---\n\n## Profile Mappers disponibles\n\n| Mapper | Protocolo | Descripción |\n|---|---|---|\n| `defaultProfileMapper` | SAML | Pass-through de todos los atributos |\n| `araiProfileMapper` | SAML | Normaliza atributos de Arai-Usuarios |\n| `defaultOidcProfileMapper` | OIDC | Pass-through de todos los claims |\n| `araiOidcProfileMapper` | OIDC | Normaliza claims OIDC de Arai-Usuarios |\n\n---\n\n## API\n\n```typescript\nconst auth = createAuth(options?)\n```\n\n| Opción | Tipo | Descripción |\n|---|---|---|\n| `config` | `AuthConfig` | Config inline (alternativa al JSON) |\n| `configPath` | `string` | Ruta al archivo de config |\n| `profileMapper` | `ProfileMapper` | Mapper SAML custom |\n| `oidcProfileMapper` | `OidcProfileMapper` | Mapper OIDC custom |\n| `onAuth` | `PostAuthHook` | Hook post-autenticación |\n| `onLogout` | `PreLogoutHook` | Hook pre-logout |\n\n`createAuth()` retorna:\n\n| Propiedad | Descripción |\n|---|---|\n| `router` | Router Express con todas las rutas de auth |\n| `middleware` | Array de middlewares (session + passport) |\n| `requireAuth` | Middleware para proteger rutas |\n| `passport` | Instancia de Passport (uso avanzado) |\n\n`createSamlAuth()` es un alias retrocompatible de `createAuth()`.\n\n---\n\n## Licencia\n\nMIT\n","readmeFilename":"README.md"}