{"_id":"@cambo-auth/core","_rev":"2-dbff249366bbb42cb810ad302121afc9","name":"@cambo-auth/core","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@cambo-auth/core","version":"0.0.1","license":"MIT","_id":"@cambo-auth/core@0.0.1","maintainers":[{"name":"cambodev","email":"mr.reanyouda@gmail.com"}],"dist":{"shasum":"c674b158a045a703e9b644eecaa05f21be867545","tarball":"https://registry.npmjs.org/@cambo-auth/core/-/core-0.0.1.tgz","fileCount":3,"integrity":"sha512-oVhYpI1h+HuH5ACfRGojs0DpoiNG0I0CzoKfrl2HheA/KhSFEfQEhUuCgEwPWp8mEzyr4V9bSvW4cI09e/b+ug==","signatures":[{"sig":"MEYCIQC/Oc44EXFQnN3qXj/AgvgF+W/x+7J/nJGEo5FawA66HwIhAKZXKUgsX9aNKVsTEnmdQn4dXx9C/CyBekaYLudtB5wA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7595},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"private":false,"scripts":{"dev":"tsc --watch","build":"tsc","prepublishOnly":"pnpm build"},"_npmUser":{"name":"cambodev","email":"mr.reanyouda@gmail.com"},"_npmVersion":"11.5.2","description":"TypeScript client SDK for Cambo Auth — the multi-tenant IAM platform","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/core_0.0.1_1778128239126_0.21187083326931688","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@cambo-auth/core","version":"0.0.2","description":"TypeScript client SDK for Cambo Auth — the multi-tenant IAM platform","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"license":"MIT","private":false,"publishConfig":{"access":"public"},"scripts":{"build":"tsc","dev":"tsc --watch","prepublishOnly":"pnpm build"},"devDependencies":{"typescript":"^5.7.3"},"_id":"@cambo-auth/core@0.0.2","_nodeVersion":"22.14.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-cf1aewEcrFLCBb93t7uckJlNlRR9OUQFJSYZED1TXRm1X6YFfZTiNk8fIC4dj30xgnyiJVqIPl0MdCOdht9X3Q==","shasum":"d5d74239ef27ffb5024165fb82cc4f154c80cee0","tarball":"https://registry.npmjs.org/@cambo-auth/core/-/core-0.0.2.tgz","fileCount":4,"unpackedSize":14728,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDCMhLijFmyStpQkuaJG26FQlfnveEyBccZ382f4yRM+AIgeKYVNiateemj4qguNcWG6KeNDsSc07kYnPD9wzqZ6xk="}]},"_npmUser":{"name":"cambodev","email":"mr.reanyouda@gmail.com"},"directories":{},"maintainers":[{"name":"cambodev","email":"mr.reanyouda@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.0.2_1778128538624_0.8992542161344252"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-07T04:30:39.011Z","modified":"2026-05-07T04:35:38.893Z","0.0.1":"2026-05-07T04:30:39.262Z","0.0.2":"2026-05-07T04:35:38.767Z"},"license":"MIT","description":"TypeScript client SDK for Cambo Auth — the multi-tenant IAM platform","maintainers":[{"name":"cambodev","email":"mr.reanyouda@gmail.com"}],"readme":"# @cambo-auth/core\n\n> Official JavaScript / TypeScript SDK for [Cambo Auth](https://core-auth.cambo.dev) — a multi-tenant Identity & Access Management (IAM) platform.\n\n[![npm version](https://img.shields.io/npm/v/@cambo-auth/core)](https://www.npmjs.com/package/@cambo-auth/core)\n[![license](https://img.shields.io/npm/l/@cambo-auth/core)](LICENSE)\n\n---\n\n## What is Cambo Auth?\n\nCambo Auth is a hosted IAM platform that gives your application:\n\n- **Authentication** — register, login, JWT access + refresh tokens\n- **Multi-tenancy** — organizations, projects, and member management\n- **RBAC** — roles, resources, and fine-grained permissions\n- **API Keys** — machine-to-machine authentication\n- **Session control** — list and revoke active sessions\n\nNo need to run your own auth server. Create an account, get an API key, and start in minutes.\n\n---\n\n## Installation\n\n```bash\nnpm install @cambo-auth/core\n# or\npnpm add @cambo-auth/core\n# or\nyarn add @cambo-auth/core\n```\n\n---\n\n## Quick Start\n\n```typescript\nimport { createClient } from '@cambo-auth/core';\n\n// Get your API key from https://core-auth.cambo.dev\n// → Organizations → Your Project → API Keys → Create Key\nconst auth = createClient('sk_live_your_api_key_here');\n\n// Register a user\nconst { accessToken, refreshToken } = await auth.auth.register({\n  email: 'user@example.com',\n  password: 'SecurePass123',\n  firstName: 'Alice',\n});\n\n// Login\nconst tokens = await auth.auth.login({\n  email: 'user@example.com',\n  password: 'SecurePass123',\n});\n\n// Get current user\nauth.setAccessToken(tokens.accessToken);\nconst me = await auth.auth.me();\nconsole.log(me.email); // user@example.com\n```\n\n---\n\n## Setup (3 steps)\n\n### 1. Create your project on Cambo Auth\n\n1. Sign up at [core-auth.cambo.dev](https://core-auth.cambo.dev)\n2. Create an **Organization** (your company / app name)\n3. Create a **Project** inside the organization\n4. Go to **API Keys** → create a `secret` key → copy it (shown once)\n\n### 2. Install and initialize\n\n```typescript\nimport { createClient } from '@cambo-auth/core';\n\nconst auth = createClient('sk_live_...');\n```\n\n### 3. Configure CORS (for browser apps)\n\nIn the admin dashboard → your project → **Allowed Origins** → add your domain:\n\n```\nhttps://yourapp.com\nhttp://localhost:3000\n```\n\n---\n\n## API Reference\n\n### Authentication\n\n```typescript\n// Register a new user\nawait auth.auth.register({ email, password, firstName?, lastName? });\n\n// Login\nawait auth.auth.login({ email, password });\n// → { accessToken, refreshToken }\n\n// Refresh access token (expires every 15 min)\nawait auth.auth.refresh(refreshToken);\n// → { accessToken, refreshToken }\n\n// Get current user profile\nauth.setAccessToken(accessToken);\nawait auth.auth.me();\n// → { id, email, firstName, lastName }\n\n// Logout (revokes current session)\nawait auth.auth.logout();\n```\n\n### Organizations\n\n```typescript\n// List all organizations\nawait auth.organizations.list();\n\n// Create an organization\nawait auth.organizations.create({ name, slug, description? });\n\n// Get organization details\nawait auth.organizations.get(orgId);\n\n// Add a member\nawait auth.organizations.addMember(orgId, userId, role?);\n// role: 'OWNER' | 'ADMIN' | 'MEMBER'\n```\n\n### Projects\n\n```typescript\n// List projects in an organization\nawait auth.projects.list(orgId);\n\n// Create a project\nawait auth.projects.create(orgId, { name, slug, description? });\n\n// Get project details\nawait auth.projects.get(orgId, projectId);\n\n// Update allowed CORS origins\nawait auth.projects.updateOrigins(orgId, projectId, ['https://yourapp.com']);\n```\n\n### Resources & Permissions (RBAC)\n\n```typescript\n// List resources\nawait auth.resources.list(projectId);\n\n// Create a resource (auto-generates create/read/update/delete permissions)\nawait auth.resources.create(projectId, 'invoice', 'Invoice documents');\n```\n\n### Roles\n\n```typescript\n// List roles\nawait auth.roles.list(projectId);\n\n// Create a role with permissions\nawait auth.roles.create(projectId, {\n  name: 'Viewer',\n  description: 'Read-only access',\n  permissionIds: ['perm-uuid-1', 'perm-uuid-2'],\n});\n```\n\n### API Keys\n\n```typescript\n// List API keys for a project\nawait auth.apiKeys.list(projectId);\n\n// Create an API key (key shown ONCE — store it securely)\nconst { key } = await auth.apiKeys.create(projectId, {\n  name: 'My Service',\n  type: 'secret', // 'public' | 'secret'\n});\nconsole.log(key); // sk_live_...\n\n// Revoke an API key\nawait auth.apiKeys.revoke(projectId, keyId);\n```\n\n### Sessions\n\n```typescript\n// List active sessions for the current user\nawait auth.sessions.list();\n// → [{ id, ipAddress, userAgent, createdAt, expiresAt }]\n\n// Revoke a session (sign out a device)\nawait auth.sessions.revoke(sessionId);\n```\n\n---\n\n## Token Refresh\n\nAccess tokens expire after **15 minutes**. Refresh before expiry:\n\n```typescript\nasync function refreshTokens(refreshToken: string) {\n  try {\n    const { accessToken, refreshToken: newRefresh } =\n      await auth.auth.refresh(refreshToken);\n\n    localStorage.setItem('accessToken', accessToken);\n    localStorage.setItem('refreshToken', newRefresh);\n    auth.setAccessToken(accessToken);\n\n    return accessToken;\n  } catch {\n    // Refresh expired — redirect to login\n    localStorage.clear();\n    window.location.href = '/login';\n  }\n}\n```\n\n---\n\n## Verifying Tokens in Your Backend\n\nThe access token is a standard JWT. Verify it locally without calling Cambo Auth on every request:\n\n```typescript\n// Node.js\nimport * as jwt from 'jsonwebtoken';\nconst payload = jwt.verify(token, process.env.CAMBO_AUTH_JWT_SECRET);\n// payload.sub = userId\n```\n\n```python\n# Python\nimport jwt\npayload = jwt.decode(token, os.environ['CAMBO_AUTH_JWT_SECRET'], algorithms=['HS256'])\n```\n\n> `CAMBO_AUTH_JWT_SECRET` is the `JWT_ACCESS_SECRET` value from your Cambo Auth server config.\n\n---\n\n## TypeScript\n\nFull TypeScript support is built in — no `@types` package needed.\n\n```typescript\nimport {\n  CoreSDK,\n  createClient,\n  type TokenPair,\n  type CoreSDKOptions,\n  type RegisterPayload,\n  type LoginPayload,\n} from '@cambo-auth/core';\n```\n\n---\n\n## Advanced: Self-Hosted Server\n\nIf you run your own Cambo Auth instance:\n\n```typescript\nimport { CoreSDK } from '@cambo-auth/core';\n\nconst auth = new CoreSDK({\n  baseUrl: 'https://your-own-server.com',\n  apiKey: 'sk_live_...',\n});\n```\n\n---\n\n## License\n\nMIT © [Cambo Auth](https://core-auth.cambo.dev)\n","readmeFilename":"README.md"}