{"_id":"@edyd/verdaccio-theme-oidc","_rev":"5-ddca5805937f170126e585eb24572419","name":"@edyd/verdaccio-theme-oidc","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@edyd/verdaccio-theme-oidc","version":"1.0.0","license":"MIT","_id":"@edyd/verdaccio-theme-oidc@1.0.0","maintainers":[{"name":"edydeleon","email":"edy@familydeleon.com"}],"homepage":"https://gitlab.com/edydeleon/verdaccio-plugins/tree/main/plugins/verdaccio-theme-oidc","bugs":{"url":"https://gitlab.com/edydeleon/verdaccio-plugins/-/issues"},"dist":{"shasum":"9bddedd65d67db9f91a8d99d8f330d75230f108f","tarball":"https://registry.npmjs.org/@edyd/verdaccio-theme-oidc/-/verdaccio-theme-oidc-1.0.0.tgz","fileCount":8,"integrity":"sha512-8Mqg2Vg9S3xwnFl73BZEyZknlxT6chOmnIq05QXwzvR5mPQ2D8r5Lmi+eXFFnuXDOIIdZdy5wmrISY2cnqufoQ==","signatures":[{"sig":"MEUCIQDfmajD7vnWBYISnuN6rYyB88oYBuAjqPZvtgdgHwEbrwIgLJqi5R1AzND4Ty4KCpp7B3JyFSUaORujYMYnrZtPvMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":713877},"main":"index.js","engines":{"node":">=20"},"gitHead":"7cd7bee0a3602567fb30a31fba33a4d247c2483a","scripts":{"dev":"vite build --watch","build":"vite build","clean":"rimraf ./static","prepublishOnly":"pnpm build"},"_npmUser":{"name":"edydeleon","email":"edy@familydeleon.com"},"repository":{"url":"git+https://gitlab.com/edydeleon/verdaccio-plugins.git","type":"git","directory":"plugins/verdaccio-theme-oidc"},"_npmVersion":"10.8.2","description":"Verdaccio theme with native OIDC login and .npmrc configuration","directories":{},"_nodeVersion":"20.20.2","dependencies":{"react":"^19.1.0","react-dom":"^19.1.0","remark-gfm":"^4.0.1","rehype-slug":"^6.0.0","lucide-react":"^1.16.0","react-markdown":"^10.1.0","react-router-dom":"^7.6.1","rehype-highlight":"^7.0.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.0","rimraf":"6.1.0","typescript":"5.9.3","@types/node":"22.0.0","@types/react":"^19.1.4","@types/react-dom":"^19.1.5","@vitejs/plugin-react":"^4.5.2"},"_npmOperationalInternal":{"tmp":"tmp/verdaccio-theme-oidc_1.0.0_1779252622386_0.7473771415526453","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@edyd/verdaccio-theme-oidc","version":"1.1.0","keywords":["verdaccio","verdaccio-theme","oidc","oauth2","npm-registry"],"license":"MIT","_id":"@edyd/verdaccio-theme-oidc@1.1.0","maintainers":[{"name":"edydeleon","email":"edy@familydeleon.com"}],"homepage":"https://gitlab.com/edydeleon/verdaccio-plugins/tree/main/plugins/verdaccio-theme-oidc","bugs":{"url":"https://gitlab.com/edydeleon/verdaccio-plugins/-/issues"},"dist":{"shasum":"894c505e0042000838f7ae722cd8529e4360105a","tarball":"https://registry.npmjs.org/@edyd/verdaccio-theme-oidc/-/verdaccio-theme-oidc-1.1.0.tgz","fileCount":7,"integrity":"sha512-bt2d+b7U0lKG6WS1hkIbhF6IDJkTtbi7lJ3YdhgvSCOKczzdG7/4OuJJeQxwCZk0JE3mlFQMqhN/Ll99084qZw==","signatures":[{"sig":"MEUCIQD4c8U6hKl9GSlv1dBjQE8/1268Kc2Suv/pxqEEywpjAAIgDNgV4dF+W/kSx79XUH2pwBdCODxGRSHoMF+kLO4p2/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":708926},"main":"index.js","engines":{"node":">=20"},"gitHead":"9f174892b9490e17300c00051e290f7e19af6ed4","scripts":{"dev":"vite build --watch","test":"tsc --noEmit","build":"vite build","clean":"rimraf ./static","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"edydeleon","email":"edy@familydeleon.com"},"repository":{"url":"git+https://gitlab.com/edydeleon/verdaccio-plugins.git","type":"git","directory":"plugins/verdaccio-theme-oidc"},"_npmVersion":"11.11.0","description":"Verdaccio theme with native OIDC login and .npmrc configuration","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.0","react":"^19.1.0","rimraf":"6.1.0","react-dom":"^19.1.0","remark-gfm":"^4.0.1","typescript":"5.9.3","@types/node":"22.0.0","rehype-slug":"^6.0.0","@types/react":"^19.1.4","lucide-react":"^1.16.0","react-markdown":"^10.1.0","@types/react-dom":"^19.1.5","react-router-dom":"^7.6.1","rehype-highlight":"^7.0.2","@vitejs/plugin-react":"^4.5.2"},"_npmOperationalInternal":{"tmp":"tmp/verdaccio-theme-oidc_1.1.0_1779254613703_0.3781920728195789","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@edyd/verdaccio-theme-oidc","version":"1.1.1","keywords":["verdaccio","verdaccio-theme","oidc","oauth2","npm-registry"],"license":"MIT","_id":"@edyd/verdaccio-theme-oidc@1.1.1","maintainers":[{"name":"edydeleon","email":"edy@familydeleon.com"}],"homepage":"https://gitlab.com/edydeleon/verdaccio-plugins/tree/main/plugins/verdaccio-theme-oidc","bugs":{"url":"https://gitlab.com/edydeleon/verdaccio-plugins/-/issues"},"dist":{"shasum":"04fb0fe442566e7beaf42081908e94d62d044767","tarball":"https://registry.npmjs.org/@edyd/verdaccio-theme-oidc/-/verdaccio-theme-oidc-1.1.1.tgz","fileCount":8,"integrity":"sha512-Rg43Kpg07SDK/4rgi7E5a2wKRrnJDR3sMpAWK2aBMjMZSphGaiP7Xm/LooA2h+fEF54MB7jTinq8qKoRb/c2Hw==","signatures":[{"sig":"MEQCIFZjoQ6sGKYhbtbr3qdXpQoWjhGtzsjtEwu20hsfRYjbAiBjhAgPWGN5SnKtaeuihWVlY1+qDJxIBobkcXqT0H7vwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":715391},"main":"index.js","engines":{"node":">=20"},"gitHead":"88671c25a6f52424fc1d837ef99cd39900ba98bd","scripts":{"dev":"vite build --watch","test":"tsc --noEmit","build":"vite build","clean":"rimraf ./static","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:02cf1c31-f8e7-4efd-9baa-5c7ad285391b"}},"repository":{"url":"git+https://gitlab.com/edydeleon/verdaccio-plugins.git","type":"git","directory":"plugins/verdaccio-theme-oidc"},"_npmVersion":"11.12.1","description":"Verdaccio theme with native OIDC login and .npmrc configuration","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.0","react":"^19.1.0","rimraf":"6.1.0","react-dom":"^19.1.0","remark-gfm":"^4.0.1","typescript":"5.9.3","@types/node":"22.0.0","rehype-slug":"^6.0.0","@types/react":"^19.1.4","lucide-react":"^1.16.0","react-markdown":"^10.1.0","@types/react-dom":"^19.1.5","react-router-dom":"^7.6.1","rehype-highlight":"^7.0.2","@vitejs/plugin-react":"^4.5.2"},"_npmOperationalInternal":{"tmp":"tmp/verdaccio-theme-oidc_1.1.1_1779255383406_0.4701155346749466","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@edyd/verdaccio-theme-oidc","version":"1.2.0","keywords":["verdaccio","verdaccio-theme","oidc","oauth2","npm-registry"],"license":"MIT","_id":"@edyd/verdaccio-theme-oidc@1.2.0","maintainers":[{"name":"edydeleon","email":"edy@familydeleon.com"}],"homepage":"https://gitlab.com/edydeleon/verdaccio-plugins/tree/main/plugins/verdaccio-theme-oidc","bugs":{"url":"https://gitlab.com/edydeleon/verdaccio-plugins/-/issues"},"dist":{"shasum":"363519b8dbc97cf4163233cb7f1e4345a5cb6068","tarball":"https://registry.npmjs.org/@edyd/verdaccio-theme-oidc/-/verdaccio-theme-oidc-1.2.0.tgz","fileCount":8,"integrity":"sha512-FFfwHW40lVSIIGQHVhB9ty9SBO2EuFTF2isuudDLQqtgYMdf2JNyQdd43+ZBHT9t/AV0itGIIrhIHhBF77AZIQ==","signatures":[{"sig":"MEUCIFxR0i/8MUq7d1yWa9fgut5xkGD9zB2bVgWJzq94iPnmAiEAm/fRCRCw3bHKt40YSLxysWMVEOFFziIdJOx5I7LinnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@edyd%2fverdaccio-theme-oidc@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":748569},"main":"index.js","engines":{"node":">=20"},"gitHead":"442e6abdd9b445f0d753c039da95accd75d3a8cd","scripts":{"dev":"vite build --watch","test":"tsc --noEmit","build":"vite build","clean":"rimraf ./static","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:02cf1c31-f8e7-4efd-9baa-5c7ad285391b"}},"repository":{"url":"git+https://gitlab.com/edydeleon/verdaccio-plugins.git","type":"git","directory":"plugins/verdaccio-theme-oidc"},"_npmVersion":"11.13.0","description":"Verdaccio theme with native OIDC login and .npmrc configuration","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.0.0","react":"^19.1.0","rimraf":"6.1.0","react-dom":"^19.1.0","remark-gfm":"^4.0.1","typescript":"5.9.3","@types/node":"22.0.0","rehype-slug":"^6.0.0","@types/react":"^19.1.4","lucide-react":"^1.16.0","react-markdown":"^10.1.0","@types/react-dom":"^19.1.5","react-router-dom":"^7.6.1","rehype-highlight":"^7.0.2","@vitejs/plugin-react":"^4.5.2","@tanstack/react-virtual":"^3.13.26"},"_npmOperationalInternal":{"tmp":"tmp/verdaccio-theme-oidc_1.2.0_1780423704696_0.784680223293865","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@edyd/verdaccio-theme-oidc","version":"1.3.0","description":"Verdaccio theme with native OIDC login and .npmrc configuration","license":"MIT","repository":{"type":"git","url":"git+https://gitlab.com/edydeleon/verdaccio-plugins.git","directory":"plugins/verdaccio-theme-oidc"},"homepage":"https://gitlab.com/edydeleon/verdaccio-plugins/tree/main/plugins/verdaccio-theme-oidc","bugs":{"url":"https://gitlab.com/edydeleon/verdaccio-plugins/-/issues"},"main":"index.js","engines":{"node":">=20"},"devDependencies":{"@tanstack/react-virtual":"^3.13.26","@types/node":"22.0.0","@types/react":"^19.1.4","@types/react-dom":"^19.1.5","@vitejs/plugin-react":"^4.5.2","lucide-react":"^1.16.0","react":"^19.1.0","react-dom":"^19.1.0","react-markdown":"^10.1.0","react-router-dom":"^7.6.1","rehype-highlight":"^7.0.2","rehype-slug":"^6.0.0","remark-gfm":"^4.0.1","rimraf":"6.1.0","typescript":"5.9.3","vite":"8.0.0"},"keywords":["verdaccio","verdaccio-theme","oidc","oauth2","npm-registry"],"scripts":{"clean":"rimraf ./static","prepublishOnly":"pnpm build","build":"vite build","dev":"vite build --watch","typecheck":"tsc --noEmit","test":"tsc --noEmit"},"gitHead":"09e38d918b2d35c03847b71bff897c7e1f2aa1b9","_id":"@edyd/verdaccio-theme-oidc@1.3.0","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-jZrSnxoynz6UX87LQavZswLb8QB77Yi4ZDLEXRsDkoqbSq54Suy654SiHidKyp8o+KyDMWeYeBJgIlUVFeo4sg==","shasum":"f35884bd2bbfce4d24570f634cc97bfe80b9f8fa","tarball":"https://registry.npmjs.org/@edyd/verdaccio-theme-oidc/-/verdaccio-theme-oidc-1.3.0.tgz","fileCount":8,"unpackedSize":766372,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@edyd%2fverdaccio-theme-oidc@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCgxqSYKCF0dYejLXRPg4RcdYZGpgd6fu2ZYEJL9OERiAIgA5BKZewn4Fg2Y93w9CjXoJDGgDf/yuKU76NMfe7mol8="}]},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:02cf1c31-f8e7-4efd-9baa-5c7ad285391b"}},"directories":{},"maintainers":[{"name":"edydeleon","email":"edy@familydeleon.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/verdaccio-theme-oidc_1.3.0_1780578628856_0.1595685674442826"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-20T04:50:22.262Z","modified":"2026-06-04T13:10:29.273Z","1.0.0":"2026-05-20T04:50:22.588Z","1.1.0":"2026-05-20T05:23:33.882Z","1.1.1":"2026-05-20T05:36:23.581Z","1.2.0":"2026-06-02T18:08:24.914Z","1.3.0":"2026-06-04T13:10:28.996Z"},"bugs":{"url":"https://gitlab.com/edydeleon/verdaccio-plugins/-/issues"},"license":"MIT","homepage":"https://gitlab.com/edydeleon/verdaccio-plugins/tree/main/plugins/verdaccio-theme-oidc","keywords":["verdaccio","verdaccio-theme","oidc","oauth2","npm-registry"],"repository":{"type":"git","url":"git+https://gitlab.com/edydeleon/verdaccio-plugins.git","directory":"plugins/verdaccio-theme-oidc"},"description":"Verdaccio theme with native OIDC login and .npmrc configuration","maintainers":[{"name":"edydeleon","email":"edy@familydeleon.com"}],"readme":"# verdaccio-theme-oidc\n\nA custom Verdaccio theme that replaces the default login UI with a native OIDC\nflow. Works with any OpenID Connect provider (Google, Azure AD, Okta, Auth0,\nKeycloak, etc.).\n\n## Features\n\n### Authentication\n\n- \"Sign in with {Provider}\" — OIDC PKCE redirect (provider auto-detected)\n- Silent session restore on page refresh\n- Token expiry tracking with status dot in header and expiry banner\n- Re-authentication prompts for expired sessions and step-up operations\n- Post-login return-to-page navigation\n\n### Package browsing\n\n- Package grid with full-text search (name, description, keywords, and lazily\n  indexed README text), scope filter, sort (newest, A–Z)\n- Group-by-scope with collapse/expand\n- Virtualized list (windowed rendering) — smooth scrolling for large registries\n- Recent activity sidebar\n- Keyboard shortcuts (`/` and `Ctrl+K` to focus search)\n\n### Package detail\n\n- Readme tab (GFM, syntax highlighting, anchor links)\n- Versions tab (dist-tags, paginated list, publish dates)\n- Dependencies tab (deps, peer, dev) with links to internal packages\n- Uplinks tab (fetch time, etag)\n- Sidebar: install commands (npm, pnpm, yarn, bun), `.npmrc` snippet, metadata\n  (license, engines, size, dates, maintainers, links), quality score heuristic\n- Deprecation warning banner\n\n### Settings — Quick Setup\n\n- `.npmrc` with masked auth (reveal, copy, download)\n- CLI config commands for npm, pnpm, and yarn (with tabs)\n- Interactive `npm login` instructions\n\n### Settings — Account\n\n- Profile info (avatar, name, email, provider, groups)\n- Session status and permission badges (admin, token creation)\n- Personal package permissions table (access/publish/unpublish per pattern)\n\n### Settings — API Tokens\n\n- Create tokens with name and TTL presets (7–90 days)\n- Least-privilege **Permissions** selector: full access, read-only (install but\n  never publish), or publish only to specific package patterns (`@scope/*`,\n  `prefix-*`, exact names); scoped tokens show a `read-only`/`scoped` badge\n- One-time reveal with countdown timer (auto-clears after 60s)\n- CI-ready `NPM_AUTH` value (base64-encoded, copy-ready)\n- `.npmrc` CI snippet with `${NPM_AUTH}` placeholder\n- Active/inactive token list with expiry badges, last-used timestamps, and a\n  fingerprint (last 4 chars of the `NPM_AUTH` value) to tell tokens apart\n- Two-step revoke confirmation\n- Re-auth banner when step-up authentication required\n- Link to personal permissions for understanding token access scope\n\n### Settings — Admin\n\n- **Package Access:** Merged view of config + dynamic rules; add/remove users\n  and groups per pattern per action (access/publish/unpublish); create/delete\n  dynamic patterns (when allowed)\n- **Access Control:** Token creation mode display; manage token admins,\n  allowed users, and the deny-list kill switch (blocks an identity from all auth\n  and revokes its tokens); allowed groups (read-only, config-defined)\n- **All Tokens:** Browse and filter all users' tokens; revoke individual tokens\n  or all tokens for a user\n- **Audit Log:** Unified event feed (token, ACL, package access) with\n  server-side action/actor/date filters and paging\n- **Metrics:** Runtime counters (auth success/failure, tokens, JWKS cache, active\n  tokens, rate-limit rejections, audit-sink delivery, uptime) from the auth plugin's\n  metrics endpoint\n- **Uplinks:** Health status, host, auth configuration, timeout/retry settings\n\n### UX\n\n- Dark/light theme toggle (persisted)\n- Responsive layout (1024/768/480 breakpoints)\n- Focus-visible indicators, ARIA labels on interactive elements\n- Masked secrets with timed reveal\n\n## Requirements\n\nThis theme requires the companion `verdaccio-auth-oidc` plugin configured with\nboth `auth` and `middlewares` sections. The middleware must have `client_id` set\nto enable browser-based PKCE login.\n\n## Installation\n\n```bash\n# Copy built theme to Verdaccio plugins directory\nmkdir -p /path/to/verdaccio/plugins/verdaccio-theme-oidc\ncp index.js static/ /path/to/verdaccio/plugins/verdaccio-theme-oidc/\n```\n\n> **Version compatibility:** install the same version of\n> `@edyd/verdaccio-theme-oidc` and `@edyd/verdaccio-auth-oidc`. They are released\n> in lockstep; the theme's admin UI calls auth-plugin endpoints, so a newer theme\n> paired with an older auth plugin can break the admin views.\n\n## Configuration\n\nAdd to your Verdaccio `config.yaml`:\n\n```yaml\ntheme:\n  oidc: {}\n\nauth:\n  auth-oidc:\n    issuer: 'https://accounts.google.com'\n    username_claim: email\n\nmiddlewares:\n  auth-oidc:\n    enabled: true\n    client_id: 'your-oidc-client-id'\n    external_url: 'https://your-verdaccio-host'\n```\n\nThe provider name is auto-detected from the issuer URL. No additional theme\nconfiguration is needed.\n\n### With API tokens\n\nTo enable the token management UI in the settings page, configure `api_tokens`\nin the auth section:\n\n```yaml\nauth:\n  auth-oidc:\n    issuer: 'https://accounts.google.com'\n    username_claim: email\n    api_tokens:\n      enabled: true\n      admin_users:\n        - 'admin@mycompany.com'\n\nmiddlewares:\n  auth-oidc:\n    enabled: true\n    client_id: 'your-oidc-client-id'\n    external_url: 'https://your-verdaccio-host'\n\ntheme:\n  oidc: {}\n```\n\nSee the [verdaccio-auth-oidc](../verdaccio-auth-oidc/) README for the full\nlist of `api_tokens` options.\n\n## Troubleshooting\n\n**\"OIDC authentication is not configured\"** — The `middlewares` section is\nmissing or the `auth-oidc` middleware plugin is not installed. Add the\n`middlewares` section to your config.\n\n**\"OIDC browser login is not enabled\"** — The middleware is installed but\n`client_id` is not set. Add `client_id` to your middleware config.\n\n**\"Login redirects to the OIDC provider but never returns\"** — Make sure the\nredirect URI `https://your-host/-/oidc/callback` is registered in your OIDC\nprovider's application settings.\n\n**Token management not showing** — The `api_tokens.enabled` flag is not set in\nthe auth config, or the user does not have permission to create tokens.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}