{"_id":"@armco/iam-client","_rev":"3-4ff43be719a7ab2afad437f6f2b742b9","name":"@armco/iam-client","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.1":{"name":"@armco/iam-client","version":"0.1.1","keywords":["iam","oauth2","oidc","authentication","armco","spa","pkce"],"author":{"name":"Armco"},"license":"MIT","_id":"@armco/iam-client@0.1.1","maintainers":[{"name":"mohiit1502","email":"mohiit1502@gmail.com"}],"dist":{"shasum":"cc97d4242cca9690e0eab6d26057bfd817a700e9","tarball":"https://registry.npmjs.org/@armco/iam-client/-/iam-client-0.1.1.tgz","fileCount":16,"integrity":"sha512-T75lhc9zkGNwIHTqF9CM1ZoQy+3yrlr6WJXvVUZOm62bWpEWb46AxtZ5bgTQGR89bHhsSDvluotz3AxCQec5kg==","signatures":[{"sig":"MEYCIQC59n6RLQ69LZFmdZDzUQZ1H5SEAxXMaaKXWMc8vR6mHQIhAIyqJEO85CBDACX7rMw2vT5HZQokTm2Fw2fMu+B4Ex31","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231970},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.mjs","require":"./dist/react.js"}},"gitHead":"7ccf50ffd4e7b35e2ee5d8c3d2bfe2feb41465c5","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","publish:sh":"./publish.sh","prepublishOnly":"npm run build","publish:sh:minor":"./publish.sh minor"},"_npmUser":{"name":"mohiit1502","email":"mohiit1502@gmail.com"},"_npmVersion":"11.6.1","description":"Browser/SPA client for IAM - OIDC/OAuth2 authentication with PKCE","directories":{},"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/react":"^18.2.0"},"peerDependencies":{"react":">=17.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam-client_0.1.1_1766929708672_0.9142844331345699","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@armco/iam-client","version":"0.1.2","keywords":["iam","oauth2","oidc","authentication","armco","spa","pkce"],"author":{"name":"Armco"},"license":"MIT","_id":"@armco/iam-client@0.1.2","maintainers":[{"name":"mohiit1502","email":"mohiit1502@gmail.com"}],"dist":{"shasum":"a4d13d0d360dea09f8ead407c0c43cedb20b46a2","tarball":"https://registry.npmjs.org/@armco/iam-client/-/iam-client-0.1.2.tgz","fileCount":16,"integrity":"sha512-XCAHP2kQCoVcJi3FWJ7KFG6WlJEGkBGMQ7H3+MBvKwr+GZwFpWuhN7RWe5KLGvDHKNp3Wr/bx+X8xO6lxi5vsw==","signatures":[{"sig":"MEUCIGBy3oxAu4xNFTvN10DtiGTn6s2iRvbGBow2c/tnYJvrAiEA+9Z9aQkaOixKkJvX0zRgrtaKBI6B3o4BYLKb1mTMg64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256642},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.mjs","require":"./dist/react.js"}},"gitHead":"4a83568090736f1a3f80cf406373c7febf5b62b6","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","publish:sh":"./publish.sh","prepublishOnly":"npm run build","publish:sh:minor":"./publish.sh minor"},"_npmUser":{"name":"mohiit1502","email":"mohiit1502@gmail.com"},"_npmVersion":"11.6.1","description":"Browser/SPA client for IAM - OIDC/OAuth2 authentication with PKCE","directories":{},"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/react":"^18.2.0"},"peerDependencies":{"react":">=17.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/iam-client_0.1.2_1770489362830_0.7655923870571459","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@armco/iam-client","version":"0.1.5","description":"Browser/SPA client for IAM - OIDC/OAuth2 authentication with PKCE","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.mjs","require":"./dist/react.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","lint":"eslint src --ext .ts,.tsx","test":"vitest run","prepublishOnly":"npm run build","publish:sh":"./publish.sh","publish:sh:minor":"./publish.sh minor"},"keywords":["iam","oauth2","oidc","authentication","armco","spa","pkce"],"author":{"name":"Armco"},"license":"MIT","peerDependencies":{"react":">=17.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"devDependencies":{"@types/node":"^20.10.0","@types/react":"^18.2.0","@vitest/coverage-v8":"^1.6.0","dotenv":"^17.4.2","jsdom":"^29.1.1","react":"^18.2.0","tsup":"^8.0.0","typescript":"^5.3.0","vitest":"^1.0.0"},"_id":"@armco/iam-client@0.1.5","gitHead":"6c0561f693e196d3e3c1a06f11e22d109bdb5920","_nodeVersion":"24.3.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-as6oxWd4z1L1wcDe53geYOEKoe9JlNa2OAtZ2kWUzaeOlNtEOuocEOE8B1FL8k6uD4WGHRkLtjVlB31XnaOn9g==","shasum":"d1afa3cfb240fdc477214f5780f22da05957b4f5","tarball":"https://registry.npmjs.org/@armco/iam-client/-/iam-client-0.1.5.tgz","fileCount":16,"unpackedSize":285256,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC3uiB1z6fAgk4D5RZKMNEN9DxpdHPE2uuXf6rNL3+k8gIgCQtHydw+EGvNcUoaHvCdEWIptyD2xBYs92v2YkC40Ao="}]},"_npmUser":{"name":"mohiit1502","email":"mohiit1502@gmail.com"},"directories":{},"maintainers":[{"name":"mohiit1502","email":"mohiit1502@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/iam-client_0.1.5_1777843436361_0.7503108882769989"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-28T13:48:28.615Z","modified":"2026-05-03T21:23:56.655Z","0.1.1":"2025-12-28T13:48:28.829Z","0.1.2":"2026-02-07T18:36:02.991Z","0.1.5":"2026-05-03T21:23:56.527Z"},"author":{"name":"Armco"},"license":"MIT","keywords":["iam","oauth2","oidc","authentication","armco","spa","pkce"],"description":"Browser/SPA client for IAM - OIDC/OAuth2 authentication with PKCE","maintainers":[{"name":"mohiit1502","email":"mohiit1502@gmail.com"}],"readme":"# @armco/iam-client\n\nBrowser/SPA client for IAM - OIDC/OAuth2 authentication with PKCE.\n\n## Installation\n\n```bash\nnpm install @armco/iam-client\n```\n\n## Quick Start\n\n### Vanilla JavaScript/TypeScript\n\n```typescript\nimport { createIAMClient } from '@armco/iam-client';\n\nconst iam = createIAMClient({\n  issuer: 'http://localhost:5000',\n  clientId: 'my-app',\n  redirectUri: 'http://localhost:3000/callback',\n  scopes: ['openid', 'profile', 'email', 'offline_access'],\n});\n\n// Login\ndocument.getElementById('login-btn').onclick = () => iam.login();\n\n// Signup\ndocument.getElementById('signup-btn').onclick = () => iam.signup();\n\n// Handle callback (on /callback page)\nconst result = await iam.handleCallback();\nif (result.success) {\n  console.log('Logged in:', result.user);\n} else {\n  console.error('Login failed:', result.error);\n}\n\n// Get current user\nconst user = iam.getUser();\n\n// Get access token (auto-refreshes if needed)\nconst token = await iam.getAccessToken();\n\n// Logout\nawait iam.logout();\n```\n\n### React\n\n```tsx\nimport { IAMProvider, useAuth } from '@armco/iam-client/react';\n\n// Wrap your app\nfunction App() {\n  return (\n    <IAMProvider\n      issuer=\"http://localhost:5000\"\n      clientId=\"my-app\"\n      redirectUri=\"http://localhost:3000/callback\"\n      onLoginSuccess={(result) => {\n        console.log('Logged in:', result.user);\n        // Navigate to dashboard\n      }}\n    >\n      <Router>\n        <Routes>\n          <Route path=\"/\" element={<Home />} />\n          <Route path=\"/callback\" element={<Callback />} />\n          <Route path=\"/dashboard\" element={<Dashboard />} />\n        </Routes>\n      </Router>\n    </StuffleIAMProvider>\n  );\n}\n\n// Use the hook\nfunction Home() {\n  const { isAuthenticated, isLoading, user, login, signup, logout } = useAuth();\n\n  if (isLoading) return <div>Loading...</div>;\n\n  if (!isAuthenticated) {\n    return (\n      <div>\n        <button onClick={() => login()}>Login</button>\n        <button onClick={() => signup()}>Sign Up</button>\n      </div>\n    );\n  }\n\n  return (\n    <div>\n      <p>Welcome, {user?.name || user?.email}</p>\n      <button onClick={() => logout()}>Logout</button>\n    </div>\n  );\n}\n\n// Callback page (auto-handled by provider)\nfunction Callback() {\n  const { isLoading, error } = useAuth();\n  \n  if (isLoading) return <div>Processing login...</div>;\n  if (error) return <div>Error: {error.message}</div>;\n  \n  return <Navigate to=\"/dashboard\" />;\n}\n```\n\n## Configuration\n\n```typescript\ninterface StuffleIAMConfig {\n  /** IAM server base URL */\n  issuer: string;\n  /** OAuth2 client ID */\n  clientId: string;\n  /** Redirect URI after login */\n  redirectUri: string;\n  /** Requested scopes (default: openid profile email) */\n  scopes?: string[];\n  /** Post-logout redirect URI */\n  postLogoutRedirectUri?: string;\n  /** Enable PKCE (default: true) */\n  usePkce?: boolean;\n  /** Storage type (default: sessionStorage) */\n  storage?: 'localStorage' | 'sessionStorage' | 'memory';\n  /** Auto-refresh tokens (default: true) */\n  autoRefresh?: boolean;\n  /** Seconds before expiry to refresh (default: 60) */\n  refreshThreshold?: number;\n}\n```\n\n## React Hooks\n\n| Hook | Description |\n|------|-------------|\n| `useAuth()` | Full auth context (user, login, logout, etc.) |\n| `useUser()` | Current user object |\n| `useIsAuthenticated()` | Boolean auth status |\n| `useAccessToken()` | Function to get access token |\n| `useHasRole(roles)` | Check if user has role(s) |\n\n## Protected Routes (HOC)\n\n```tsx\nimport { withAuth } from '@armco/iam-client/react';\n\nconst ProtectedPage = withAuth(MyComponent, {\n  LoadingComponent: () => <div>Loading...</div>,\n  UnauthorizedComponent: () => <div>Please login</div>,\n  roles: ['admin'], // Optional: require specific roles\n});\n```\n\n## API Reference\n\n### StuffleIAMClient Methods\n\n| Method | Description |\n|--------|-------------|\n| `login(options?)` | Start login flow |\n| `signup(options?)` | Start signup flow |\n| `logout(options?)` | End session |\n| `handleCallback(url?)` | Process OAuth callback |\n| `getUser()` | Get current user from ID token |\n| `getAccessToken()` | Get access token (refreshes if needed) |\n| `isAuthenticated()` | Check if user is logged in |\n| `refreshToken()` | Manually refresh tokens |\n| `subscribe(listener)` | Subscribe to auth state changes |\n\n## Development\n\n```bash\ncd packages/sdk-js\nnpm install\nnpm run build\nnpm run dev  # Watch mode\n```\n","readmeFilename":"README.md"}