@zea.cl/auth 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/client/auth/OAuth2.ts","../../src/client/tokens/TokenManager.ts","../../src/client/admin/AdminAPI.ts","../../src/client/ThalamusClient.ts","../../src/hooks/useThalamus.ts","../../src/components/LoginButton.tsx","../../src/components/RegisterButton.tsx","../../src/components/UserMenu.tsx","../../src/components/APIKeyManager.tsx","../../src/components/OrgSwitcher.tsx","../../src/components/OrgManager.tsx","../../src/components/UserManager.tsx"],"names":["jsx","jsxs","useState","useEffect","Fragment"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * OAuth2 Authentication Module\n *\n * Handles OAuth2 authorization code flow, client credentials, and token refresh\n */\n\nimport type {\n ThalamusConfig,\n TokenResponse,\n AuthorizationUrlOptions,\n TokenExchangeOptions,\n ClientCredentialsOptions,\n RefreshTokenOptions,\n ThalamusError,\n} from '../types'\n\nexport class OAuth2 {\n constructor(private config: ThalamusConfig) {}\n\n /**\n * Generate OAuth2 authorization URL for user login\n *\n * @example\n * ```ts\n * const authUrl = thalamus.auth.getAuthorizationUrl({\n * scope: ['openid', 'profile', 'email'],\n * state: 'random-state-string'\n * })\n * // Redirect user to authUrl\n * ```\n */\n getAuthorizationUrl(options?: AuthorizationUrlOptions): string {\n const {\n scope = this.config.defaultScopes || ['openid', 'profile', 'email'],\n state = this.generateState(),\n responseType = 'code',\n codeChallenge,\n codeChallengeMethod,\n } = options || {}\n\n const params = new URLSearchParams({\n response_type: responseType,\n client_id: this.config.clientId,\n redirect_uri: this.config.redirectUri,\n scope: Array.isArray(scope) ? scope.join(' ') : scope,\n state,\n })\n\n // PKCE support (RFC 7636)\n if (codeChallenge) {\n params.set('code_challenge', codeChallenge)\n params.set('code_challenge_method', codeChallengeMethod || 'S256')\n }\n\n return `${this.config.baseUrl}/oauth/authorize?${params.toString()}`\n }\n\n /**\n * Exchange authorization code for access token\n *\n * @example\n * ```ts\n * const tokens = await thalamus.auth.exchangeCode('authorization_code_here')\n * console.log(tokens.access_token)\n * ```\n */\n async exchangeCode(\n codeOrOptions: string | TokenExchangeOptions\n ): Promise<TokenResponse> {\n const code = typeof codeOrOptions === 'string' ? codeOrOptions : codeOrOptions.code\n const codeVerifier = typeof codeOrOptions === 'string' ? undefined : codeOrOptions.codeVerifier\n\n const body: Record<string, any> = {\n grant_type: 'authorization_code',\n code,\n client_id: this.config.clientId,\n client_secret: this.config.clientSecret,\n redirect_uri: this.config.redirectUri,\n }\n\n // PKCE code verifier (RFC 7636)\n if (codeVerifier) {\n body.code_verifier = codeVerifier\n }\n\n return this.requestToken(body)\n }\n\n /**\n * Get access token using client credentials (M2M)\n *\n * @example\n * ```ts\n * const tokens = await thalamus.auth.getClientCredentialsToken({\n * scope: ['api:read', 'api:write']\n * })\n * ```\n */\n async getClientCredentialsToken(\n options?: ClientCredentialsOptions\n ): Promise<TokenResponse> {\n const { scope = this.config.defaultScopes || [] } = options || {}\n\n const body: Record<string, any> = {\n grant_type: 'client_credentials',\n client_id: this.config.clientId,\n client_secret: this.config.clientSecret,\n }\n\n if (scope.length > 0) {\n body.scope = Array.isArray(scope) ? scope.join(' ') : scope\n }\n\n return this.requestToken(body)\n }\n\n /**\n * Refresh access token using refresh token\n *\n * @example\n * ```ts\n * const newTokens = await thalamus.auth.refreshToken({\n * refreshToken: 'rt_...'\n * })\n * ```\n */\n async refreshToken(options: RefreshTokenOptions): Promise<TokenResponse> {\n const body = {\n grant_type: 'refresh_token',\n refresh_token: options.refreshToken,\n client_id: this.config.clientId,\n client_secret: this.config.clientSecret,\n }\n\n return this.requestToken(body)\n }\n\n /**\n * Revoke a token (access or refresh token)\n *\n * @example\n * ```ts\n * await thalamus.auth.revokeToken('at_...')\n * ```\n */\n async revokeToken(token: string, tokenTypeHint?: 'access_token' | 'refresh_token'): Promise<void> {\n const body: Record<string, string> = {\n token,\n }\n\n if (tokenTypeHint) {\n body.token_type_hint = tokenTypeHint\n }\n\n const response = await fetch(`${this.config.baseUrl}/oauth/revoke`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n throw await this.handleError(response)\n }\n }\n\n /**\n * Generate random state for CSRF protection\n */\n public generateState(length: number = 32): string {\n const array = new Uint8Array(32)\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(array)\n } else {\n // Fallback for Node.js\n const cryptoModule = require('crypto')\n cryptoModule.randomFillSync(array)\n }\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('')\n }\n\n /**\n * Make token request to /oauth/token\n */\n private async requestToken(body: Record<string, any>): Promise<TokenResponse> {\n const response = await fetch(`${this.config.baseUrl}/oauth/token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n throw await this.handleError(response)\n }\n\n return response.json() as Promise<TokenResponse>\n }\n\n /**\n * Handle API errors\n */\n private async handleError(response: Response): Promise<ThalamusError> {\n let errorData: any = {}\n try {\n errorData = await response.json()\n } catch {\n // Ignore JSON parse errors\n }\n\n const error: ThalamusError = new Error(\n errorData.error_description || errorData.message || `HTTP ${response.status}`\n )\n error.statusCode = response.status\n error.error = errorData.error\n error.error_description = errorData.error_description\n\n return error\n }\n}\n","/**\n * Token Management Module\n *\n * Handles token introspection and validation\n */\n\nimport type {\n ThalamusConfig,\n IntrospectionResponse,\n UserInfo,\n ThalamusError,\n} from '../types'\n\nexport class TokenManager {\n constructor(private config: ThalamusConfig) {}\n\n /**\n * Introspect a token to check if it's valid and get metadata\n *\n * @example\n * ```ts\n * const tokenInfo = await thalamus.tokens.introspect('at_...')\n * if (tokenInfo.active) {\n * console.log(tokenInfo.user_id)\n * console.log(tokenInfo.scope)\n * }\n * ```\n */\n async introspect(token: string): Promise<IntrospectionResponse> {\n const response = await fetch(`${this.config.baseUrl}/oauth/introspect`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ token }),\n })\n\n if (!response.ok) {\n throw await this.handleError(response)\n }\n\n return response.json() as Promise<IntrospectionResponse>\n }\n\n /**\n * Get user information from OpenID Connect userinfo endpoint\n *\n * @example\n * ```ts\n * const user = await thalamus.tokens.getUserInfo('at_...')\n * console.log(user.email)\n * console.log(user.name)\n * ```\n */\n async getUserInfo(accessToken: string): Promise<UserInfo> {\n const response = await fetch(`${this.config.baseUrl}/oauth/userinfo`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n\n if (!response.ok) {\n throw await this.handleError(response)\n }\n\n return response.json() as Promise<UserInfo>\n }\n\n /**\n * Validate token and return true if active, false otherwise\n *\n * @example\n * ```ts\n * const isValid = await thalamus.tokens.validate('at_...')\n * if (isValid) {\n * // Token is valid\n * }\n * ```\n */\n async validate(token: string): Promise<boolean> {\n try {\n const result = await this.introspect(token)\n return result.active === true\n } catch {\n return false\n }\n }\n\n /**\n * Handle API errors\n */\n private async handleError(response: Response): Promise<ThalamusError> {\n let errorData: any = {}\n try {\n errorData = await response.json()\n } catch {\n // Ignore JSON parse errors\n }\n\n const error: ThalamusError = new Error(\n errorData.error_description || errorData.message || `HTTP ${response.status}`\n )\n error.statusCode = response.status\n error.error = errorData.error\n error.error_description = errorData.error_description\n\n return error\n }\n}\n","/**\n * Admin API Module\n *\n * User, organization, role, and domain management endpoints.\n * Requires JWT Bearer token authentication.\n */\n\nimport type { ThalamusConfig, ThalamusError, AgentConfig, MCPServerConfig } from '../types'\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface User {\n id: string\n name: string\n email: string\n status: string\n organization_id?: string\n is_agent: boolean\n agent_config?: AgentConfig\n}\n\nexport interface AdminOrganization {\n id: string\n name: string\n domains?: string[]\n}\n\nexport interface AdminRole {\n id: string\n organization_id: string\n name: string\n description?: string\n scopes: string[]\n}\n\nexport interface DomainRole {\n id: string\n user_id: string\n organization_id: string\n domain: string\n role: string\n scopes: string[]\n}\n\nexport interface EffectiveScopes {\n user_id: string\n scopes: string[]\n}\n\n// ── AdminAPI ─────────────────────────────────────────────────────────────────\n\nexport class AdminAPI {\n constructor(private config: ThalamusConfig) {}\n\n private get baseUrl(): string {\n return this.config.baseUrl\n }\n\n // ── Users ────────────────────────────────────────────────────────────────\n\n /** List all users */\n async listUsers(): Promise<User[]> {\n const res = await this.request(`${this.baseUrl}/api/users`)\n const json: any = await res.json()\n return json.data ?? json\n }\n\n /** List all agents (users with is_agent === true) */\n async listAgents(): Promise<User[]> {\n const users = await this.listUsers()\n return users.filter((u) => u.is_agent === true)\n }\n\n /** Get a single user */\n async getUser(id: string): Promise<User> {\n const res = await this.request(`${this.baseUrl}/api/users/${id}`)\n const json: any = await res.json()\n return json.data ?? json\n }\n\n /** Add a member to an organization */\n async addOrgMember(orgId: string, userId: string): Promise<{ message: string }> {\n const res = await this.request(`${this.baseUrl}/api/organizations/${orgId}/members`, {\n method: 'POST',\n body: JSON.stringify({ user_id: userId }),\n })\n return res.json() as Promise<{ message: string }>\n }\n\n /** Update a user (only name and agent_config are writable) */\n async updateUser(id: string, data: Partial<Pick<User, 'name' | 'agent_config'>>): Promise<User> {\n const res = await this.request(`${this.baseUrl}/api/users/${id}`, {\n method: 'PATCH',\n body: JSON.stringify({ user: data }),\n })\n const json: any = await res.json()\n return json.data ?? json\n }\n\n /** Create a user */\n async createUser(data: {\n email: string\n password: string\n name?: string\n is_agent?: boolean\n agent_config?: AgentConfig\n }): Promise<User> {\n const res = await this.request(`${this.baseUrl}/api/users`, {\n method: 'POST',\n body: JSON.stringify({ user: data }),\n })\n const json: any = await res.json()\n return json.data ?? json\n }\n\n // ── Organizations ─────────────────────────────────────────────────────────\n\n /** Get an organization */\n async getOrganization(id: string): Promise<AdminOrganization> {\n const res = await this.request(`${this.baseUrl}/api/organizations/${id}`)\n const json: any = await res.json()\n return json.data ?? json\n }\n\n /** List all organizations */\n async listOrganizations(): Promise<AdminOrganization[]> {\n const res = await this.request(`${this.baseUrl}/api/organizations`)\n const json: any = await res.json()\n return json.data ?? json\n }\n\n // ── Domain Roles ──────────────────────────────────────────────────────────\n\n /** List domain roles (optionally filtered) */\n async listDomainRoles(filters?: {\n user_id?: string\n organization_id?: string\n domain?: string\n }): Promise<DomainRole[]> {\n const params = new URLSearchParams()\n if (filters?.user_id) params.set('user_id', filters.user_id)\n if (filters?.organization_id) params.set('organization_id', filters.organization_id)\n if (filters?.domain) params.set('domain', filters.domain)\n\n const qs = params.toString()\n const url = `${this.baseUrl}/api/domains/roles${qs ? `?${qs}` : ''}`\n const res = await this.request(url)\n const json: any = await res.json()\n return json.data ?? json\n }\n\n /** Grant a domain role to a user */\n async grantDomainRole(params: {\n user_id: string\n organization_id: string\n domain: string\n role: string\n scopes?: string[]\n entity_id?: string\n }): Promise<{ message: string }> {\n const res = await this.request(`${this.baseUrl}/api/domains/roles/grant`, {\n method: 'POST',\n body: JSON.stringify(params),\n })\n return res.json() as Promise<{ message: string }>\n }\n\n /** Revoke a domain role from a user */\n async revokeDomainRole(params: {\n user_id: string\n organization_id: string\n domain: string\n role: string\n }): Promise<{ message: string }> {\n const res = await this.request(`${this.baseUrl}/api/domains/roles/revoke`, {\n method: 'DELETE',\n body: JSON.stringify(params),\n })\n return res.json() as Promise<{ message: string }>\n }\n\n // ── Roles (RBAC) ──────────────────────────────────────────────────────────\n\n /** List all roles */\n async listRoles(): Promise<AdminRole[]> {\n const res = await this.request(`${this.baseUrl}/api/roles`)\n const json: any = await res.json()\n return json.data ?? json\n }\n\n /** Create a role */\n async createRole(params: {\n organization_id: string\n name: string\n description?: string\n scopes: string[]\n }): Promise<AdminRole> {\n const res = await this.request(`${this.baseUrl}/api/roles`, {\n method: 'POST',\n body: JSON.stringify(params),\n })\n const json: any = await res.json()\n return json.data ?? json\n }\n\n /** Delete a role */\n async deleteRole(id: string): Promise<void> {\n await this.request(`${this.baseUrl}/api/roles/${id}`, { method: 'DELETE' })\n }\n\n // ── User Roles ────────────────────────────────────────────────────────────\n\n /** Get user's effective scopes */\n async getEffectiveScopes(userId: string): Promise<EffectiveScopes> {\n const res = await this.request(`${this.baseUrl}/api/users/${userId}/effective-scopes`)\n const json: any = await res.json()\n return json.data ?? json\n }\n\n // ── Internal ──────────────────────────────────────────────────────────────\n\n private getAccessToken(): string | null {\n if (typeof globalThis !== 'undefined' && 'localStorage' in globalThis) {\n const storageKey = (this.config as any).storageKey || 'thalamus_auth'\n const saved = (globalThis as any).localStorage.getItem(storageKey)\n if (saved) {\n try {\n return JSON.parse(saved).accessToken\n } catch {\n return null\n }\n }\n }\n return null\n }\n\n private async request(url: string, options: RequestInit = {}): Promise<Response> {\n const token = this.getAccessToken()\n\n const res = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n ...options.headers,\n },\n })\n\n if (!res.ok) {\n throw await this.toError(res)\n }\n\n return res\n }\n\n private async toError(response: Response): Promise<ThalamusError> {\n let body: any = {}\n try {\n body = await response.json()\n } catch {\n // ignore\n }\n\n const error: ThalamusError = new Error(\n body.error_description || body.error || `HTTP ${response.status}`\n ) as ThalamusError\n error.statusCode = response.status\n error.error = body.error\n error.error_description = body.error_description\n\n return error\n }\n}\n","/**\n * ZEA Thalamus OAuth2 Client\n *\n * Official JavaScript/TypeScript SDK for Thalamus OAuth2 Server\n *\n * @example\n * ```ts\n * import ThalamusClient from '@zea/thalamus-js'\n *\n * const thalamus = new ThalamusClient({\n * clientId: process.env.THALAMUS_CLIENT_ID,\n * clientSecret: process.env.THALAMUS_CLIENT_SECRET,\n * redirectUri: 'https://yourapp.com/auth/callback',\n * baseUrl: 'https://auth.example.com'\n * })\n *\n * // Get authorization URL\n * const authUrl = thalamus.auth.getAuthorizationUrl()\n *\n * // Exchange code for tokens\n * const tokens = await thalamus.auth.exchangeCode(code)\n *\n * // Introspect token\n * const tokenInfo = await thalamus.tokens.introspect(accessToken)\n * ```\n */\n\nimport { OAuth2 } from './auth/OAuth2'\nimport { TokenManager } from './tokens/TokenManager'\nimport { AdminAPI } from './admin/AdminAPI'\nimport type { ThalamusConfig } from './types'\n\nexport class ThalamusClient {\n /** OAuth2 authentication methods */\n public readonly auth: OAuth2\n\n /** Token management and introspection */\n public readonly tokens: TokenManager\n\n /** Admin API — users, orgs, roles, domain management */\n public readonly admin: AdminAPI\n\n private readonly config: ThalamusConfig\n\n /**\n * Create a new Thalamus client\n *\n * @param config - Client configuration\n */\n constructor(config: ThalamusConfig) {\n // Validate required config\n if (!config.clientId) {\n throw new Error('clientId is required')\n }\n if (!config.redirectUri) {\n throw new Error('redirectUri is required')\n }\n if (!config.baseUrl) {\n throw new Error('baseUrl is required')\n }\n\n // Remove trailing slash from baseUrl\n config.baseUrl = config.baseUrl.replace(/\\/$/, '')\n\n this.config = config\n this.auth = new OAuth2(config)\n this.tokens = new TokenManager(config)\n this.admin = new AdminAPI(config)\n }\n\n /**\n * Get the current configuration\n */\n getConfig(): Readonly<ThalamusConfig> {\n return Object.freeze({ ...this.config })\n }\n}\n\nexport default ThalamusClient\n","'use client'\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\nimport type { ThalamusConfig, TokenResponse, UserInfo } from '../types'\nimport { ThalamusClient } from '../client/ThalamusClient'\n\nexport interface UseThalamusOptions extends ThalamusConfig {\n /** Storage key for persisting auth (default: 'thalamus_auth') */\n storageKey?: string\n}\n\nexport interface UseThalamusReturn {\n /** Start OAuth2 PKCE login flow (redirects browser) */\n login: (options?: { scope?: string[] }) => Promise<void>\n /** Clear stored token and reset state */\n logout: () => void\n /** Raw access token */\n token: string | null\n /** Decoded user info */\n user: UserInfo | null\n /** Whether authenticated */\n isAuthenticated: boolean\n /** Whether loading auth state */\n isLoading: boolean\n /** Refresh the access token */\n refreshToken: () => Promise<void>\n /** ThalamusClient instance for direct API calls */\n client: ThalamusClient\n /** Error message if any */\n error: string | null\n}\n\nexport function useThalamus(options: UseThalamusOptions): UseThalamusReturn {\n const storageKey = options.storageKey || 'thalamus_auth'\n const clientRef = useRef(new ThalamusClient(options))\n const client = clientRef.current\n\n const [token, setToken] = useState<string | null>(null)\n const [user, setUser] = useState<UserInfo | null>(null)\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n // ── Load stored auth on mount ──\n useEffect(() => {\n try {\n const saved = localStorage.getItem(storageKey)\n if (saved) {\n const { accessToken, refreshToken: rt } = JSON.parse(saved)\n setToken(accessToken)\n client.tokens.getUserInfo(accessToken).then(u => setUser(u)).catch(() => {})\n }\n } catch {} finally {\n setIsLoading(false)\n }\n }, [storageKey])\n\n // ── Handle OAuth callback ──\n useEffect(() => {\n const params = new URLSearchParams(window.location.search)\n const code = params.get('code')\n const state = params.get('state')\n if (!code || !state) return\n\n // Immediately remove code from URL to prevent React 18 Strict Mode double-fetching\n window.history.replaceState({}, '', window.location.pathname)\n\n const savedState = sessionStorage.getItem(`${storageKey}_state`)\n if (state !== savedState) {\n setError('State mismatch — possible CSRF attack')\n return\n }\n\n const verifier = sessionStorage.getItem(`${storageKey}_verifier`)\n if (!verifier) { setError('Missing code verifier'); return }\n\n client.auth.exchangeCode({ code, codeVerifier: verifier })\n .then(data => {\n persistAuth(data)\n setToken(data.access_token)\n client.tokens.getUserInfo(data.access_token).then(u => setUser(u)).catch(() => {})\n })\n .catch(err => setError(err.message))\n }, [storageKey])\n\n // ── Persist auth ──\n const persistAuth = (data: TokenResponse) => {\n localStorage.setItem(storageKey, JSON.stringify({ accessToken: data.access_token, refreshToken: data.refresh_token || null, expiresAt: Date.now() + data.expires_in * 1000 }))\n }\n\n // ── Login: PKCE + redirect ──\n const login = useCallback(async (opts?: { scope?: string[] }) => {\n setError(null)\n const verifier = client.auth.generateState()\n const challenge = await pkceChallenge(verifier)\n sessionStorage.setItem(`${storageKey}_verifier`, verifier)\n const url = client.auth.getAuthorizationUrl({ scope: opts?.scope, codeChallenge: challenge, codeChallengeMethod: 'S256' })\n sessionStorage.setItem(`${storageKey}_state`, new URL(url).searchParams.get('state') || '')\n window.location.href = url\n }, [storageKey])\n\n // ── Logout ──\n const logout = useCallback(() => {\n localStorage.removeItem(storageKey)\n setToken(null)\n setUser(null)\n }, [storageKey])\n\n // ── Refresh token ──\n const refreshToken = useCallback(async () => {\n try {\n const saved = localStorage.getItem(storageKey)\n if (!saved) return\n const { refreshToken: rt } = JSON.parse(saved)\n if (!rt) return\n const data = await client.auth.refreshToken({ refreshToken: rt })\n persistAuth(data)\n setToken(data.access_token)\n } catch {}\n }, [storageKey])\n\n return {\n login, logout, token, user,\n isAuthenticated: !!token,\n isLoading, refreshToken,\n client, error,\n }\n}\n\n// ── PKCE helper ──\nasync function pkceChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder()\n const hash = await crypto.subtle.digest('SHA-256', encoder.encode(verifier))\n return btoa(String.fromCharCode(...new Uint8Array(hash)))\n .replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n","'use client'\n\nimport React from 'react'\nimport { useThalamus } from '../hooks/useThalamus'\nimport type { ThalamusConfig } from '../types'\n\nexport interface LoginButtonProps {\n /** Thalamus config (same as ThalamusClient constructor) */\n config: ThalamusConfig\n /** Storage key (default: 'thalamus_auth') */\n storageKey?: string\n /** Button label */\n label?: string\n /** Scopes to request */\n scopes?: string[]\n /** CSS class */\n className?: string\n /** Button style overrides */\n style?: React.CSSProperties\n}\n\n/**\n * Drop-in login button with full OAuth2 PKCE flow.\n *\n * @example\n * ```tsx\n * <LoginButton\n * config={{\n * clientId: 'my_app',\n * redirectUri: 'http://localhost:5173/callback',\n * baseUrl: 'http://auth.zea.localhost',\n * }}\n * />\n * ```\n */\nexport function LoginButton({\n config,\n storageKey = 'thalamus_auth',\n label = 'Login with ZEA',\n scopes,\n className,\n style,\n}: LoginButtonProps) {\n const { login, isAuthenticated, isLoading, error } = useThalamus({ ...config, storageKey })\n\n if (isLoading) return <span style={{ color: '#8b949e', fontSize: 14 }}>Loading...</span>\n if (isAuthenticated) return null\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 8 }}>\n <button\n onClick={() => login({ scope: scopes })}\n className={className}\n style={{\n padding: '12px 32px',\n borderRadius: 8,\n border: 'none',\n cursor: 'pointer',\n background: '#238636',\n color: '#fff',\n fontSize: 16,\n fontWeight: 600,\n fontFamily: 'system-ui, sans-serif',\n ...style,\n }}\n >\n {label}\n </button>\n {error && <span style={{ color: '#ff7b72', fontSize: 12 }}>{error}</span>}\n </div>\n )\n}\n","'use client'\n\nimport React from 'react'\nimport type { ThalamusConfig } from '../types'\n\nexport interface RegisterButtonProps {\n config: ThalamusConfig\n /** Organization name — Thalamus creates it automatically on registration */\n orgName?: string\n /** App origin for auto-CORS + OAuth client registration */\n appOrigin?: string\n label?: string\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * Drop-in register button. Redirects to Thalamus /register page.\n * Passes orgName + appOrigin so Thalamus can auto-create org, OAuth client, and CORS.\n *\n * @example\n * ```tsx\n * // New developer — creates org + app config at the same time\n * <RegisterButton\n * config={{ clientId:'my_app', redirectUri:'http://localhost:5173/callback', baseUrl:'http://auth.zea.localhost' }}\n * orgName=\"My Startup\"\n * appOrigin=\"http://localhost:5173\"\n * />\n *\n * // Returning developer — just login, Thalamus asks if they want to register a new app\n * <RegisterButton\n * config={{ clientId:'my_app2', redirectUri:'http://localhost:5299/callback', baseUrl:'http://auth.zea.localhost' }}\n * />\n * ```\n */\nexport function RegisterButton({ config, orgName, appOrigin, label = 'Create Account', className, style }: RegisterButtonProps) {\n const handleClick = () => {\n const authParams = new URLSearchParams({\n client_id: config.clientId,\n redirect_uri: config.redirectUri,\n response_type: 'code',\n scope: (config.defaultScopes || ['openid', 'profile', 'email']).join(' '),\n state: crypto.randomUUID(),\n })\n if (orgName) authParams.set('org_name', orgName)\n if (appOrigin) authParams.set('app_origin', appOrigin)\n const returnTo = `/oauth/authorize?${authParams.toString()}`\n window.location.href = `${config.baseUrl}/register?return_to=${encodeURIComponent(returnTo)}`\n }\n\n return (\n <button onClick={handleClick} className={className} style={{ padding:'12px 32px', borderRadius:8, border:'1px solid #30363d', cursor:'pointer', background:'transparent', color:'#e6edf3', fontSize:16, fontWeight:600, fontFamily:'system-ui, sans-serif', ...style }}>\n {label}\n </button>\n )\n}\n","'use client'\n\nimport React from 'react'\nimport { useThalamus } from '../hooks/useThalamus'\nimport type { ThalamusConfig, UserInfo } from '../types'\n\nexport interface UserMenuProps {\n config: ThalamusConfig\n storageKey?: string\n /** Render custom user info */\n renderUser?: (user: UserInfo) => React.ReactNode\n className?: string\n}\n\n/**\n * User badge with logout. Shows nothing if not authenticated.\n *\n * @example\n * ```tsx\n * <UserMenu\n * config={{\n * clientId: 'my_app',\n * redirectUri: 'http://localhost:5173/callback',\n * baseUrl: 'http://auth.zea.localhost',\n * }}\n * />\n * ```\n */\nexport function UserMenu({ config, storageKey = 'thalamus_auth', renderUser, className }: UserMenuProps) {\n const { user, logout, isAuthenticated, isLoading, token } = useThalamus({ ...config, storageKey })\n\n if (isLoading || !isAuthenticated || !user) return null\n\n const initials = user.name\n ? user.name.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2)\n : (user.email || user.sub).slice(0, 2).toUpperCase()\n\n return (\n <div className={className} style={{ display: 'flex', alignItems: 'center', gap: 10, fontFamily: 'system-ui, sans-serif' }}>\n {renderUser ? renderUser(user) : (\n <>\n <div style={{\n width: 28, height: 28, borderRadius: '50%',\n background: '#238636', color: '#fff',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n fontSize: 11, fontWeight: 700, flexShrink: 0,\n }}>\n {user.picture ? <img src={user.picture} alt=\"\" style={{ width: 28, height: 28, borderRadius: '50%' }} /> : initials}\n </div>\n <div style={{ minWidth: 0 }}>\n <div style={{ fontSize: 12, fontWeight: 600, color: '#e6edf3', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {user.name || user.email || user.sub}\n </div>\n </div>\n </>\n )}\n <button\n onClick={logout}\n style={{\n background: 'none', border: '1px solid #30363d',\n color: '#8b949e', padding: '4px 10px', borderRadius: 6,\n cursor: 'pointer', fontSize: 11, fontFamily: 'inherit',\n }}\n >\n Logout\n </button>\n </div>\n )\n}\n","'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { User } from '../types'\n\nexport interface APIKeyManagerProps {\n /** Base URL of the service that manages API keys (e.g. Soma, or Thalamus itself) */\n baseUrl: string\n /** Storage key for the auth token (default: 'thalamus_auth') */\n authStorageKey?: string\n /** Label for the create button */\n label?: string\n className?: string\n}\n\ninterface APIKey {\n api_key: string\n prefix: string\n created: string\n}\n\n/**\n * Drop-in API Key generator and manager.\n *\n * @example\n * ```tsx\n * <APIKeyManager baseUrl=\"http://soma.zea.localhost\" />\n * ```\n */\nexport function APIKeyManager({ baseUrl, authStorageKey = 'thalamus_auth', label = '+ Generate API Key', className }: APIKeyManagerProps) {\n const [keys, setKeys] = useState<APIKey[]>([])\n const [newKey, setNewKey] = useState<string | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n\n const token = typeof window !== 'undefined' ? (() => {\n try { const s = localStorage.getItem(authStorageKey); return s ? JSON.parse(s).accessToken : null } catch { return null }\n })() : null\n\n useEffect(() => {\n if (!token) return\n const controller = new AbortController()\n \n fetch(`${baseUrl}/api/personal-access-tokens`, {\n headers: { Authorization: `Bearer ${token}` },\n signal: controller.signal\n })\n .then(res => res.json())\n .then(data => {\n if (data.data) {\n // Map backend response correctly based on standard Elixir JSON:API or similar\n setKeys(data.data.map((k: any) => ({\n api_key: k.api_key || k.id, \n prefix: k.token_prefix || k.prefix || 'zpat_',\n created: k.inserted_at || k.created_at || k.created || new Date().toISOString()\n })))\n }\n })\n .catch(e => {\n if (e.name !== 'AbortError') console.error('Failed to load API keys:', e)\n })\n\n return () => controller.abort()\n }, [baseUrl, token])\n\n const createKey = async () => {\n setLoading(true); setError('')\n try {\n const res = await fetch(`${baseUrl}/api/personal-access-tokens`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },\n body: JSON.stringify({ name: `key-${Date.now()}`, scopes: ['api:read', 'api:write'] }),\n })\n const data = await res.json()\n if (data.api_key) {\n setNewKey(data.api_key)\n setKeys(prev => [...prev, { api_key: data.api_key, prefix: data.prefix, created: new Date().toISOString() }])\n } else setError(data.error || 'Failed to create key')\n } catch (e: any) { setError(e.message) }\n setLoading(false)\n }\n\n const copyKey = (key: string) => { navigator.clipboard?.writeText(key) }\n\n return (\n <div className={className} style={{ fontFamily: 'system-ui, sans-serif' }}>\n {error && <div style={{ padding: '8px 12px', background: '#fff0f0', borderRadius: 6, color: '#c00', marginBottom: 12, fontSize: 12 }}>{error}</div>}\n\n <button onClick={createKey} disabled={loading} style={{\n padding: '8px 20px', borderRadius: 6, border: 'none', cursor: 'pointer',\n background: '#238636', color: '#fff', fontSize: 13, fontWeight: 600,\n opacity: loading ? 0.7 : 1, fontFamily: 'inherit',\n }}>\n {loading ? 'Generating...' : label}\n </button>\n\n {newKey && (\n <div style={{ marginTop: 16, padding: '12px 16px', background: '#f0fff0', borderRadius: 8, border: '1px solid #2ea44f' }}>\n <div style={{ fontSize: 12, fontWeight: 600, color: '#2ea44f', marginBottom: 6 }}>✅ Key created — copy it now</div>\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n <code style={{ flex: 1, padding: '8px 12px', background: '#fff', borderRadius: 4, fontSize: 11, fontFamily: 'monospace', wordBreak: 'break-all', userSelect: 'all' }}>{newKey}</code>\n <button onClick={() => copyKey(newKey)} style={{ padding: '6px 12px', borderRadius: 4, border: '1px solid #2ea44f', background: '#dafbe1', color: '#1a7f37', cursor: 'pointer', fontSize: 11, fontFamily: 'inherit' }}>Copy</button>\n </div>\n </div>\n )}\n\n {keys.length > 0 && (\n <div style={{ marginTop: 20 }}>\n <div style={{ fontSize: 12, fontWeight: 600, marginBottom: 8 }}>Existing keys ({keys.length})</div>\n {keys.map((k, i) => (\n <div key={i} style={{ padding: '6px 0', borderBottom: '1px solid #eee', fontSize: 11, fontFamily: 'monospace', color: '#656d76' }}>\n {k.prefix}...{k.api_key?.slice(-8)} · {new Date(k.created).toLocaleDateString()}\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport { ThalamusClient } from '../client/ThalamusClient'\nimport type { ThalamusConfig } from '../types'\n\nexport interface OrgSwitcherProps {\n config: ThalamusConfig\n /** Called when user switches org */\n onSwitch?: (orgId: string) => void\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * Organization switcher dropdown.\n *\n * @example\n * ```tsx\n * <OrgSwitcher\n * config={{ clientId: 'my_app', redirectUri: '/callback', baseUrl: 'http://auth.zea.localhost' }}\n * onSwitch={(orgId) => console.log('Switched to', orgId)}\n * />\n * ```\n */\nexport function OrgSwitcher({ config, onSwitch, className, style }: OrgSwitcherProps) {\n const [orgs, setOrgs] = useState<{ id: string; name: string }[]>([])\n const [selected, setSelected] = useState(() => {\n try {\n const authStr = typeof window !== 'undefined' ? localStorage.getItem('thalamus_auth') : null\n if (authStr) {\n const auth = JSON.parse(authStr)\n return auth.user?.organization_id || ''\n }\n } catch (e) {\n console.error(e)\n }\n return ''\n })\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n const client = new ThalamusClient(config)\n client.admin.listOrganizations()\n .then(o => { \n setOrgs(o)\n setLoading(false)\n if (o.length > 0) {\n let currentSelected = ''\n try {\n const authStr = typeof window !== 'undefined' ? localStorage.getItem('thalamus_auth') : null\n if (authStr) {\n const auth = JSON.parse(authStr)\n currentSelected = auth.user?.organization_id || ''\n }\n } catch(e) {}\n \n if (!currentSelected) {\n const defaultOrgId = 'ea7b11ea-852c-44e5-aee1-a761ec76eaea'\n const target = o.find(org => org.id === defaultOrgId) ? defaultOrgId : o[0].id\n setSelected(target)\n onSwitch?.(target)\n }\n }\n })\n .catch(() => setLoading(false))\n }, [config.baseUrl])\n\n if (loading) return null\n if (orgs.length === 0) return null\n\n return (\n <select\n className={`th-select ${className || ''}`}\n value={selected}\n onChange={e => { setSelected(e.target.value); onSwitch?.(e.target.value) }}\n style={style}\n >\n <option value=\"\">Select org...</option>\n {orgs.map(org => (\n <option key={org.id} value={org.id}>{org.name}</option>\n ))}\n </select>\n )\n}\n","'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport { ThalamusClient } from '../client/ThalamusClient'\nimport type { ThalamusConfig, Organization } from '../types'\n\nexport interface OrgManagerProps {\n config: ThalamusConfig\n className?: string\n}\n\nexport function OrgManager({ config, className }: OrgManagerProps) {\n const [orgs, setOrgs] = useState<Organization[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState('')\n\n useEffect(() => {\n const client = new ThalamusClient(config)\n client.admin.listOrganizations()\n .then(o => { setOrgs(o); setLoading(false) })\n .catch(e => { setError(e.message); setLoading(false) })\n }, [config.baseUrl, config.clientId, config.redirectUri])\n\n if (loading) return <p className=\"th-loading\">Loading...</p>\n if (error) return <div className=\"th-alert\">{error}</div>\n if (orgs.length === 0) return <p className=\"th-empty\">No organizations.</p>\n\n return (\n <div className={`th-list ${className || ''}`}>\n {orgs.map(org => (\n <div key={org.id} className=\"th-card\">\n <div className=\"th-card-title\">{org.name}</div>\n <div className=\"th-card-desc\">\n Domains: {(org.domains || []).join(', ') || 'none'}\n </div>\n </div>\n ))}\n </div>\n )\n}\n","'use client'\n\nimport React, { useState } from 'react'\nimport { ThalamusClient } from '../client/ThalamusClient'\nimport type { ThalamusConfig, User, AgentConfig } from '../types'\n\nexport interface UserCreateFormProps {\n config: ThalamusConfig\n onCreated?: (user: User) => void\n className?: string\n}\n\nexport function UserCreateForm({ config, onCreated, className }: UserCreateFormProps) {\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n const [name, setName] = useState('')\n const [isAgent, setIsAgent] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n const [showPassword, setShowPassword] = useState(false)\n\n const generatePassword = () => {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*'\n let pass = ''\n for (let i = 0; i < 16; i++) {\n pass += chars.charAt(Math.floor(Math.random() * chars.length))\n }\n setPassword(pass)\n setConfirmPassword(pass)\n setShowPassword(true)\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (password !== confirmPassword) {\n setError('Passwords do not match')\n return\n }\n setLoading(true); setError('')\n try {\n const client = new ThalamusClient(config)\n const user = await client.admin.createUser({ email, password, name, is_agent: isAgent })\n setEmail(''); setPassword(''); setConfirmPassword(''); setName(''); setIsAgent(false); setShowPassword(false)\n onCreated?.(user)\n } catch (err: any) { setError(err.message) }\n setLoading(false)\n }\n\n return (\n <form onSubmit={handleSubmit} className={`th-form ${className || ''}`}>\n <div className=\"th-form-grid\">\n <input required placeholder=\"Email\" type=\"email\" value={email} onChange={e => setEmail(e.target.value)} className=\"th-input\" />\n <input placeholder=\"Name (optional)\" value={name} onChange={e => setName(e.target.value)} className=\"th-input\" />\n \n <div style={{ position: 'relative', display: 'flex', gap: '8px' }}>\n <input required placeholder=\"Password\" type={showPassword ? 'text' : 'password'} value={password} onChange={e => setPassword(e.target.value)} className=\"th-input\" minLength={8} style={{ flex: 1, minWidth: 0 }} />\n <button type=\"button\" onClick={generatePassword} className=\"th-btn th-btn--ghost\" title=\"Generate Password\" style={{ padding: '0 12px' }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\"/></svg>\n </button>\n </div>\n \n <input required placeholder=\"Confirm Password\" type={showPassword ? 'text' : 'password'} value={confirmPassword} onChange={e => setConfirmPassword(e.target.value)} className=\"th-input\" minLength={8} />\n\n <select value={isAgent ? 'agent' : 'user'} onChange={e => setIsAgent(e.target.value === 'agent')} className=\"th-select\" style={{ gridColumn: '1 / -1' }}>\n <option value=\"user\">Human User</option>\n <option value=\"agent\">AI Agent</option>\n </select>\n </div>\n {error && <div className=\"th-alert\">{error}</div>}\n <div style={{ marginTop: '8px' }}>\n <button type=\"submit\" disabled={loading} className=\"th-btn th-btn--primary\">\n {loading ? 'Creating...' : 'Create User'}\n </button>\n </div>\n </form>\n )\n}\n\n// ── User Table ──\n\nexport interface UserTableProps {\n users: User[]\n loading?: boolean\n error?: string | null\n className?: string\n}\n\nexport function UserTable({ users, loading, error, className }: UserTableProps) {\n if (loading) return <p className=\"th-loading\">Loading...</p>\n if (error) return <div className=\"th-alert\">{error}</div>\n if (users.length === 0) return <p className=\"th-empty\">No users found.</p>\n\n return (\n <div className={`th-table-container ${className || ''}`}>\n <table className=\"th-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Email</th>\n <th>Organization</th>\n <th>User Type</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n {users.map(u => (\n <tr key={u.id}>\n <td>{u.name || '—'}</td>\n <td className=\"th-text-accent\">{u.email}</td>\n <td style={{ color: 'var(--th-text-muted)' }}>{u.organization_id ? u.organization_id.split('-')[0] + '...' : '—'}</td>\n <td style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '10px 16px' }}>\n {u.is_agent ? (\n <><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect width=\"18\" height=\"14\" x=\"3\" y=\"7\" rx=\"2\" ry=\"2\"/><path d=\"M12 7V3\"/><path d=\"M9 3h6\"/><path d=\"M12 11h.01\"/><path d=\"M15 15h.01\"/><path d=\"M9 15h.01\"/></svg> Agent</>\n ) : (\n <><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/></svg> User</>\n )}\n </td>\n <td>\n <StatusBadge status={u.status} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\n// ── Status Badge ──\n\nexport function StatusBadge({ status }: { status: string }) {\n const badgeClass = status ? `th-badge--${status}` : ''\n return (\n <span className={`th-badge ${badgeClass}`}>\n {status || 'unknown'}\n </span>\n )\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { U as UseAdminOptions, h as UseAdminReturn, i as UseThalamusOptions, j as UseThalamusReturn, u as useAdmin, m as useThalamus } from '../index-DtXFjTm2.mjs';
2
+ import '../index-BnHWPrKX.mjs';
@@ -0,0 +1,2 @@
1
+ export { U as UseAdminOptions, h as UseAdminReturn, i as UseThalamusOptions, j as UseThalamusReturn, u as useAdmin, m as useThalamus } from '../index-C5rsqdqK.js';
2
+ import '../index-BnHWPrKX.js';