@pinooxhq/auth 0.1.0

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/core/logger.ts","../../src/core/returnPath.ts","../../src/core/resolveConfig.ts","../../src/core/storage.ts","../../src/strategies/local.ts","../../src/strategies/remote.ts","../../src/http/types.ts","../../src/core/createAuth.ts","../../src/vue/useAuth.ts"],"names":["ref","computed","useRoute"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AuthLogEvent, AuthLogSink } from './types';\n\nexport interface AuthLogger {\n emit: (event: AuthLogEvent) => void;\n debug: (code: string, message: string, context?: Record<string, unknown>) => void;\n info: (code: string, message: string, context?: Record<string, unknown>) => void;\n warn: (code: string, message: string, context?: Record<string, unknown>) => void;\n error: (code: string, message: string, context?: Record<string, unknown>) => void;\n setSink: (sink: AuthLogSink | null) => void;\n}\n\nconst defaultSink = (event: AuthLogEvent, enabled: boolean): void => {\n if (!enabled && event.level === 'debug') {\n return;\n }\n\n const prefix = `[pinoox-auth:${event.code}]`;\n const payload = event.context ? [prefix, event.message, event.context] : [prefix, event.message];\n\n switch (event.level) {\n case 'error':\n console.error(...payload);\n break;\n case 'warn':\n console.warn(...payload);\n break;\n case 'info':\n console.info(...payload);\n break;\n default:\n console.debug(...payload);\n }\n};\n\nexport function createLogger(debug = false, sink?: AuthLogSink | null): AuthLogger {\n let customSink = sink ?? null;\n\n const emit = (event: AuthLogEvent): void => {\n if (customSink) {\n customSink(event);\n return;\n }\n\n defaultSink(event, debug);\n };\n\n return {\n emit,\n debug: (code, message, context) => emit({ level: 'debug', code, message, context }),\n info: (code, message, context) => emit({ level: 'info', code, message, context }),\n warn: (code, message, context) => emit({ level: 'warn', code, message, context }),\n error: (code, message, context) => emit({ level: 'error', code, message, context }),\n setSink: (next) => {\n customSink = next;\n },\n };\n}\n","import type { PinooxBootstrap } from './types';\n\nconst DEFAULT_FALLBACK = '/';\nconst DEFAULT_BLOCKED = ['/account'];\n\nexport function isSafeReturnPath(\n value: unknown,\n blockedPrefixes: string[] = DEFAULT_BLOCKED,\n): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n\n const trimmed = value.trim();\n\n if (!trimmed.startsWith('/') || trimmed.startsWith('//')) {\n return false;\n }\n\n if (trimmed.includes('://') || trimmed.includes('\\\\')) {\n return false;\n }\n\n for (const prefix of blockedPrefixes) {\n if (!prefix) {\n continue;\n }\n\n if (trimmed === prefix || trimmed.startsWith(`${prefix}/`)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function resolveReturnPath(\n queryOrPath: unknown = undefined,\n fallback: string = DEFAULT_FALLBACK,\n blockedPrefixes: string[] = DEFAULT_BLOCKED,\n): string {\n let candidate: unknown = queryOrPath;\n\n if (queryOrPath && typeof queryOrPath === 'object' && !Array.isArray(queryOrPath)) {\n candidate = (queryOrPath as { redirect?: unknown }).redirect;\n }\n\n if (candidate === undefined && typeof window !== 'undefined') {\n candidate = new URLSearchParams(window.location.search).get('redirect');\n }\n\n if (isSafeReturnPath(candidate, blockedPrefixes)) {\n return (candidate as string).trim();\n }\n\n return fallback;\n}\n\nexport function resolveSiteOrigin(\n bootUrl?: PinooxBootstrap['url'],\n explicit?: string | null,\n): string | null {\n const candidates = [explicit, bootUrl?.SITE];\n\n for (const value of candidates) {\n if (typeof value !== 'string' || !value) {\n continue;\n }\n\n try {\n return new URL(value).origin;\n } catch {\n const cleaned = value.replace(/\\/$/, '');\n if (/^https?:\\/\\//i.test(cleaned)) {\n return cleaned;\n }\n }\n }\n\n return null;\n}\n\nexport function toAbsoluteReturnUrl(path: string, siteOrigin?: string | null): string {\n if (typeof path !== 'string' || !path.startsWith('/')) {\n return path;\n }\n\n if (!siteOrigin || typeof window === 'undefined') {\n return path;\n }\n\n if (window.location.origin === siteOrigin) {\n return path;\n }\n\n return `${siteOrigin.replace(/\\/$/, '')}${path}`;\n}\n\nexport function redirectToReturn(\n queryOrPath?: unknown,\n options: {\n fallback?: string;\n siteOrigin?: string | null;\n blockedPrefixes?: string[];\n } = {},\n): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const path = resolveReturnPath(queryOrPath, options.fallback, options.blockedPrefixes);\n window.location.href = toAbsoluteReturnUrl(path, options.siteOrigin);\n}\n","import type { AuthMode, BootAuthConfig, PinooxBootstrap, ResolvedAuthConfig, AuthEndpoints, AuthStrategy } from './types';\nimport type { AuthLogger } from './logger';\nimport { resolveSiteOrigin } from './returnPath';\n\nexport interface CreateAuthOptions {\n mode?: AuthMode;\n key?: string;\n strategy?: AuthStrategy;\n loginUrl?: string;\n /** Prefix for relative endpoint paths (e.g. `/account/api/v1`). */\n baseUrl?: string | null;\n endpoints?: AuthEndpoints;\n apiBase?: string;\n /** Override site origin (defaults to __PINOOX__.url.SITE). */\n siteOrigin?: string | null;\n debug?: boolean;\n boot?: PinooxBootstrap | null;\n}\n\nfunction readBoot(): PinooxBootstrap {\n if (typeof globalThis === 'undefined') {\n return {};\n }\n\n const g = globalThis as typeof globalThis & {\n __PINOOX__?: PinooxBootstrap;\n PINOOX?: { URL?: PinooxBootstrap['url'] };\n };\n\n if (g.__PINOOX__ && typeof g.__PINOOX__ === 'object') {\n return g.__PINOOX__;\n }\n\n if (g.PINOOX?.URL) {\n return { url: g.PINOOX.URL };\n }\n\n return {};\n}\n\nfunction normalizeMode(value: unknown): AuthMode {\n const mode = String(value ?? 'jwt').toLowerCase();\n\n if (mode === 'cookie' || mode === 'session' || mode === 'jwt') {\n return mode;\n }\n\n return 'jwt';\n}\n\nfunction normalizeBaseUrl(value: string | null | undefined): string | null {\n if (typeof value !== 'string' || !value.trim()) {\n return null;\n }\n\n let base = value.trim().replace(/\\/$/, '');\n\n if (!/^https?:\\/\\//i.test(base) && !base.startsWith('/')) {\n base = `/${base}`;\n }\n\n return base;\n}\n\n/** Join base + relative path. Absolute http(s) or leading-/ paths pass through. */\nexport function joinUrl(base: string, path: string): string {\n if (!path) {\n return base;\n }\n\n if (/^https?:\\/\\//i.test(path)) {\n return path;\n }\n\n if (path.startsWith('/')) {\n return path;\n }\n\n const normalizedBase = base.replace(/\\/$/, '');\n return `${normalizedBase}/${path.replace(/^\\//, '')}`;\n}\n\n/**\n * Resolve an endpoint against optional baseUrl.\n * - absolute URL or site path (`/…`) → unchanged\n * - relative (`auth/get`) + baseUrl → joined\n * - relative without baseUrl → returned as-is (caller should prefer absolute defaults)\n */\nexport function resolveEndpoint(\n path: string | undefined,\n fallback: string,\n baseUrl?: string | null,\n): string {\n const value = (typeof path === 'string' && path.trim() !== '' ? path.trim() : fallback);\n\n if (/^https?:\\/\\//i.test(value) || value.startsWith('/')) {\n return value;\n }\n\n if (baseUrl) {\n return joinUrl(baseUrl, value);\n }\n\n return value;\n}\n\nfunction inferStrategy(bootAuth: BootAuthConfig | undefined, explicit?: AuthStrategy): AuthStrategy {\n if (explicit) {\n return normalizeStrategy(explicit) ?? explicit;\n }\n\n const fromBoot = normalizeStrategy(bootAuth?.strategy);\n if (fromBoot) {\n return fromBoot;\n }\n\n if (bootAuth?.source) {\n return 'remote';\n }\n\n return 'local';\n}\n\n/** Canonical: local | remote. Legacy: provider → local, consumer | external → remote. */\nfunction normalizeStrategy(value: unknown): AuthStrategy | null {\n if (value === 'local' || value === 'provider') {\n return 'local';\n }\n\n if (value === 'remote' || value === 'consumer' || value === 'external') {\n return 'remote';\n }\n\n return null;\n}\n\nfunction defaultEndpoints(apiBase: string, strategy: AuthStrategy, baseUrl: string | null): Required<AuthEndpoints> {\n if (strategy === 'remote') {\n if (baseUrl) {\n return {\n login: 'auth/login',\n logout: 'auth/logout',\n me: 'auth/get',\n };\n }\n\n return {\n login: '/account/api/v1/auth/login',\n logout: '/account/api/v1/auth/logout',\n me: '/account/api/v1/auth/get',\n };\n }\n\n return {\n login: joinUrl(apiBase || '/', 'auth/login'),\n logout: joinUrl(apiBase || '/', 'auth/logout'),\n me: joinUrl(apiBase || '/', 'auth/get'),\n };\n}\n\nexport function resolveConfig(options: CreateAuthOptions = {}, logger?: AuthLogger): ResolvedAuthConfig {\n const boot = options.boot ?? readBoot();\n const bootAuth = boot.auth ?? {};\n const apiBase = (options.apiBase ?? boot.url?.API ?? '').replace(/\\/$/, '');\n const strategy = inferStrategy(bootAuth, options.strategy);\n const baseUrl = normalizeBaseUrl(options.baseUrl ?? bootAuth.baseUrl ?? null);\n const defaults = defaultEndpoints(apiBase || '/', strategy, baseUrl);\n const bootEndpoints = bootAuth.endpoints ?? {};\n\n const endpoints: Required<AuthEndpoints> = {\n login: resolveEndpoint(options.endpoints?.login ?? bootEndpoints.login, defaults.login, baseUrl),\n logout: resolveEndpoint(options.endpoints?.logout ?? bootEndpoints.logout, defaults.logout, baseUrl),\n me: resolveEndpoint(options.endpoints?.me ?? bootEndpoints.me, defaults.me, baseUrl),\n };\n\n const key = bootAuth.key || options.key || '';\n const mode = normalizeMode(bootAuth.mode || options.mode);\n const debug = options.debug ?? (typeof import.meta !== 'undefined' && !!(import.meta as { env?: { DEV?: boolean } }).env?.DEV);\n\n if (!boot.auth && !options.key && !options.mode) {\n logger?.warn('config.missing', 'No __PINOOX__.auth and no explicit mode/key overrides', {\n hasBoot: Object.keys(boot).length > 0,\n });\n }\n\n if (!key) {\n logger?.warn('config.missing', 'auth.key is empty — token storage will fail until key is provided', {\n bootAuth,\n });\n }\n\n const loginUrl =\n options.loginUrl\n ?? bootAuth.loginUrl\n ?? (strategy === 'remote' ? '/account/login' : null);\n\n const appPath =\n (typeof boot.url?.BASE === 'string' && boot.url.BASE)\n || (typeof boot.url?.APP === 'string' && boot.url.APP)\n || (apiBase.match(/^(\\/[^/]+)/)?.[1] ?? null);\n\n const siteOrigin = resolveSiteOrigin(boot.url, options.siteOrigin);\n\n const resolved: ResolvedAuthConfig = {\n mode,\n key,\n provider: bootAuth.provider ?? null,\n source: bootAuth.source ?? null,\n strategy,\n loginUrl,\n baseUrl,\n endpoints,\n apiBase,\n siteOrigin,\n appPath,\n debug: !!debug,\n };\n\n logger?.debug('config.resolved', 'Auth config resolved', {\n mode: resolved.mode,\n key: resolved.key,\n provider: resolved.provider,\n source: resolved.source,\n strategy: resolved.strategy,\n baseUrl: resolved.baseUrl,\n endpoints: resolved.endpoints,\n siteOrigin: resolved.siteOrigin,\n appPath: resolved.appPath,\n });\n\n return resolved;\n}\n","import type { AuthLogger } from './logger';\n\nexport interface TokenStorage {\n get: () => string | null;\n set: (token: string | null) => void;\n clear: () => void;\n}\n\nfunction readCookie(name: string): string | null {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const match = document.cookie.match(new RegExp(`(?:^|; )${name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}=([^;]*)`));\n return match ? decodeURIComponent(match[1]) : null;\n}\n\nfunction writeCookie(name: string, value: string): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const maxAge = 60 * 60 * 24 * 90;\n document.cookie = `${name}=${encodeURIComponent(value)}; path=/; max-age=${maxAge}; SameSite=Lax`;\n}\n\nfunction deleteCookie(name: string): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n document.cookie = `${name}=; path=/; max-age=0; SameSite=Lax`;\n}\n\nfunction isDev(): boolean {\n try {\n return typeof import.meta !== 'undefined' && !!(import.meta as { env?: { DEV?: boolean } }).env?.DEV;\n } catch {\n return false;\n }\n}\n\nexport function createStorage(key: string, logger?: AuthLogger): TokenStorage {\n const syncDevCookie = isDev();\n\n return {\n get: () => {\n if (!key) {\n return null;\n }\n\n try {\n if (typeof localStorage !== 'undefined') {\n const fromStorage = localStorage.getItem(key)?.trim() || null;\n\n if (fromStorage) {\n if (syncDevCookie) {\n writeCookie(key, fromStorage);\n }\n\n return fromStorage;\n }\n }\n } catch (error) {\n logger?.warn('token.storage', 'Failed to read localStorage', { error: String(error) });\n }\n\n if (!syncDevCookie) {\n return null;\n }\n\n const fromCookie = readCookie(key);\n\n if (fromCookie) {\n try {\n localStorage.setItem(key, fromCookie);\n } catch {\n // ignore\n }\n\n return fromCookie;\n }\n\n return null;\n },\n\n set: (token) => {\n if (!key) {\n logger?.warn('mismatch.key', 'Cannot store token without auth.key');\n return;\n }\n\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n try {\n if (token) {\n const value = token.trim();\n localStorage.setItem(key, value);\n logger?.debug('token.stored', 'Token stored', { key });\n\n if (syncDevCookie) {\n writeCookie(key, value);\n }\n } else {\n localStorage.removeItem(key);\n logger?.debug('token.cleared', 'Token cleared', { key });\n\n if (syncDevCookie) {\n deleteCookie(key);\n }\n }\n } catch (error) {\n logger?.warn('token.storage', 'Failed to write storage', { error: String(error) });\n }\n },\n\n clear: () => {\n if (!key || typeof localStorage === 'undefined') {\n return;\n }\n\n try {\n localStorage.removeItem(key);\n } catch {\n // ignore\n }\n\n if (syncDevCookie) {\n deleteCookie(key);\n }\n\n logger?.debug('token.cleared', 'Token cleared', { key });\n },\n };\n}\n","import type { AuthLogger } from '../core/logger';\nimport type { AuthUser, LoginCredentials, LoginResult } from '../core/types';\nimport type { HttpClient } from '../http/types';\nimport type { ResolvedAuthConfig } from '../core/types';\nimport type { TokenStorage } from '../core/storage';\n\nfunction unwrapPayload(data: unknown): Record<string, unknown> {\n if (!data || typeof data !== 'object') {\n return {};\n }\n\n const record = data as Record<string, unknown>;\n\n if (record.data && typeof record.data === 'object') {\n return record.data as Record<string, unknown>;\n }\n\n return record;\n}\n\nexport function extractTokenAndUser(payload: unknown): { token: string | null; user: AuthUser | null } {\n const data = unwrapPayload(payload);\n\n const tokenCandidate =\n (typeof data.token === 'string' && data.token)\n || (typeof (payload as { token?: string })?.token === 'string' && (payload as { token: string }).token)\n || null;\n\n const userCandidate =\n (data.user && typeof data.user === 'object' ? (data.user as AuthUser) : null)\n || (data.username || data.email || data.user_id ? (data as AuthUser) : null);\n\n return {\n token: tokenCandidate,\n user: userCandidate,\n };\n}\n\nexport async function localLogin(\n config: ResolvedAuthConfig,\n http: HttpClient,\n storage: TokenStorage,\n credentials: LoginCredentials,\n logger?: AuthLogger,\n): Promise<LoginResult> {\n const response = await http.request({\n url: config.endpoints.login,\n method: 'POST',\n body: credentials,\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n },\n });\n\n if (!response.ok) {\n logger?.error('session.unauthorized', 'Login request failed', {\n status: response.status,\n url: config.endpoints.login,\n });\n throw Object.assign(new Error('Login failed'), { status: response.status, data: response.data });\n }\n\n const { token, user } = extractTokenAndUser(response.data);\n\n if (config.mode === 'jwt' && !token) {\n logger?.warn('mismatch.mode', 'JWT mode expected token in login response but none found', {\n mode: config.mode,\n url: config.endpoints.login,\n });\n }\n\n if (token) {\n storage.set(token);\n }\n\n logger?.info('session.ok', 'Login succeeded', { hasToken: !!token, hasUser: !!user });\n\n return { token, user, raw: response.data };\n}\n","import type { AuthLogger } from '../core/logger';\nimport type { ResolvedAuthConfig } from '../core/types';\nimport { resolveReturnPath } from '../core/returnPath';\n\nexport function buildRemoteLoginUrl(\n config: ResolvedAuthConfig,\n returnPath?: string,\n logger?: AuthLogger,\n): string {\n const loginUrl = config.loginUrl ?? '/account/login';\n const blocked = config.appPath ? [config.appPath, '/account'] : ['/account'];\n const safeRedirect = resolveReturnPath(\n returnPath\n ?? (typeof window !== 'undefined'\n ? `${window.location.pathname}${window.location.search}`\n : '/'),\n '/',\n blocked,\n );\n\n const url = `${loginUrl}?redirect=${encodeURIComponent(safeRedirect)}`;\n logger?.info('redirect.login', 'Redirecting to remote login', { url, returnPath: safeRedirect });\n\n return url;\n}\n\nexport function redirectToRemoteLogin(\n config: ResolvedAuthConfig,\n returnPath?: string,\n logger?: AuthLogger,\n): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n window.location.href = buildRemoteLoginUrl(config, returnPath, logger);\n}\n","export interface HttpRequestInput {\n url: string;\n method?: string;\n headers?: Record<string, string>;\n body?: unknown;\n credentials?: RequestCredentials;\n}\n\nexport interface HttpResponse<T = unknown> {\n status: number;\n data: T;\n headers: Headers;\n ok: boolean;\n}\n\nexport interface HttpClient {\n request: <T = unknown>(input: HttpRequestInput) => Promise<HttpResponse<T>>;\n}\n\nexport function createFetchProvider(): HttpClient {\n return {\n async request<T = unknown>(input: HttpRequestInput): Promise<HttpResponse<T>> {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...input.headers,\n };\n\n let body: BodyInit | undefined;\n\n if (input.body !== undefined && input.body !== null) {\n if (typeof input.body === 'string' || input.body instanceof FormData || input.body instanceof Blob) {\n body = input.body as BodyInit;\n } else {\n headers['Content-Type'] = headers['Content-Type'] ?? 'application/json';\n body = JSON.stringify(input.body);\n }\n }\n\n const response = await fetch(input.url, {\n method: input.method ?? 'GET',\n headers,\n body,\n credentials: input.credentials ?? 'include',\n });\n\n const contentType = response.headers.get('content-type') ?? '';\n let data: T;\n\n if (contentType.includes('application/json')) {\n data = (await response.json()) as T;\n } else {\n data = (await response.text()) as T;\n }\n\n return {\n status: response.status,\n data,\n headers: response.headers,\n ok: response.ok,\n };\n },\n };\n}\n","import { createLogger, type AuthLogger } from './logger';\nimport { resolveConfig, type CreateAuthOptions } from './resolveConfig';\nimport { createStorage, type TokenStorage } from './storage';\nimport { extractTokenAndUser, localLogin } from '../strategies/local';\nimport { buildRemoteLoginUrl, redirectToRemoteLogin } from '../strategies/remote';\nimport { createFetchProvider, type HttpClient } from '../http/types';\nimport {\n redirectToReturn,\n resolveReturnPath,\n toAbsoluteReturnUrl,\n} from './returnPath';\nimport type {\n AuthEvent,\n AuthEventHandler,\n AuthRequestAuth,\n AuthUser,\n LoginCredentials,\n LoginResult,\n ResolvedAuthConfig,\n} from './types';\n\nexport type { AuthUser, LoginCredentials, LoginResult, AuthEvent, AuthEventHandler, AuthRequestAuth };\n\nexport interface AuthInstance {\n readonly config: ResolvedAuthConfig;\n readonly logger: AuthLogger;\n user: AuthUser | null;\n token: string | null;\n isAuthenticated: boolean;\n login: (credentials?: LoginCredentials) => Promise<LoginResult | void>;\n logout: () => Promise<void>;\n me: () => Promise<AuthUser | null>;\n getToken: () => string | null;\n setToken: (token: string | null) => void;\n clearToken: () => void;\n getAuthHeader: () => string | null;\n authorize: (headers?: Record<string, string>) => AuthRequestAuth & { headers: Record<string, string> };\n getRequestAuth: () => AuthRequestAuth;\n setHttp: (client: HttpClient) => void;\n loginFromResponse: (payload: unknown) => LoginResult;\n redirectToLogin: (returnPath?: string) => void;\n /** Safe path from ?redirect= (or query object). */\n getReturnPath: (queryOrPath?: unknown, fallback?: string) => string;\n /** Absolute return URL (uses SITE origin when Vite origin differs). */\n getReturnUrl: (queryOrPath?: unknown, fallback?: string) => string;\n /** Navigate to post-login return URL. */\n redirectBack: (queryOrPath?: unknown, fallback?: string) => void;\n /** `{ redirect }` for router-link query preservation. */\n getRedirectQuery: (queryOrPath?: unknown, fallback?: string) => { redirect: string };\n /** Clear session and emit `unauthorized` (e.g. from HTTP 401). */\n notifyUnauthorized: (payload?: unknown) => void;\n on: (event: AuthEvent, handler: AuthEventHandler) => () => void;\n off: (event: AuthEvent, handler: AuthEventHandler) => void;\n}\n\nexport interface CreateAuthConfig extends CreateAuthOptions {\n http?: HttpClient;\n logger?: AuthLogger;\n}\n\nlet defaultInstance: AuthInstance | null = null;\n\nexport function getAuth(): AuthInstance {\n if (!defaultInstance) {\n throw new Error('@pinooxhq/auth: call createAuth() before getAuth()');\n }\n\n return defaultInstance;\n}\n\nexport function createAuth(options: CreateAuthConfig = {}): AuthInstance {\n const logger = options.logger ?? createLogger(options.debug);\n const config = resolveConfig(options, logger);\n const storage = createStorage(config.key, logger);\n let http: HttpClient = options.http ?? createFetchProvider();\n\n let token: string | null = storage.get();\n let user: AuthUser | null = null;\n let authenticated = false;\n\n const listeners = new Map<AuthEvent, Set<AuthEventHandler>>();\n\n const emit = (event: AuthEvent, payload?: unknown): void => {\n const set = listeners.get(event);\n\n if (!set) {\n return;\n }\n\n for (const handler of set) {\n try {\n handler(payload);\n } catch (error) {\n logger.error('error', 'Event handler failed', { event, error: String(error) });\n }\n }\n };\n\n const syncToken = (value: string | null): void => {\n token = value;\n storage.set(value);\n };\n\n const getAuthHeader = (): string | null => {\n if (config.mode !== 'jwt' || !token) {\n return null;\n }\n\n return token.toLowerCase().startsWith('bearer ') ? token : `Bearer ${token}`;\n };\n\n const getRequestAuth = (): AuthRequestAuth => ({\n header: getAuthHeader(),\n credentials: 'include',\n mode: config.mode,\n key: config.key,\n });\n\n const authorize = (headers: Record<string, string> = {}): AuthRequestAuth & { headers: Record<string, string> } => {\n const auth = getRequestAuth();\n const next = { ...headers };\n\n if (auth.header) {\n next.Authorization = auth.header;\n }\n\n logger.debug('request.auth', 'Authorized request headers', {\n mode: auth.mode,\n hasHeader: !!auth.header,\n });\n\n return { ...auth, headers: next };\n };\n\n const withAuthHeaders = (headers: Record<string, string> = {}): Record<string, string> => {\n return authorize(headers).headers;\n };\n\n const loginFromResponse = (payload: unknown): LoginResult => {\n const extracted = extractTokenAndUser(payload);\n\n if (config.mode === 'jwt' && !extracted.token) {\n logger.warn('mismatch.mode', 'JWT mode expected token in response but none found', {\n mode: config.mode,\n });\n emit('mismatch', { code: 'mismatch.mode', payload });\n }\n\n if (extracted.token) {\n syncToken(extracted.token);\n }\n\n if (extracted.user) {\n user = extracted.user;\n }\n\n authenticated = !!(extracted.token || config.mode !== 'jwt');\n emit('login', { token: extracted.token, user: extracted.user });\n\n return { ...extracted, raw: payload };\n };\n\n const me = async (): Promise<AuthUser | null> => {\n const current = storage.get();\n token = current;\n\n if (config.mode === 'jwt' && !current) {\n authenticated = false;\n user = null;\n logger.debug('session.unauthorized', 'No token for me()', { mode: config.mode });\n return null;\n }\n\n try {\n const response = await http.request({\n url: config.endpoints.me,\n method: 'GET',\n credentials: 'include',\n headers: withAuthHeaders({\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n }),\n });\n\n if (response.status === 401) {\n syncToken(null);\n user = null;\n authenticated = false;\n logger.warn('session.unauthorized', 'Session validation returned 401', {\n url: config.endpoints.me,\n });\n emit('unauthorized', { status: 401 });\n return null;\n }\n\n if (!response.ok) {\n logger.error('error', 'me() request failed', { status: response.status });\n emit('error', { status: response.status, data: response.data });\n return null;\n }\n\n const extracted = extractTokenAndUser(response.data);\n user = extracted.user ?? (response.data as AuthUser);\n authenticated = true;\n logger.info('session.ok', 'Session validated', { hasUser: !!user });\n return user;\n } catch (error) {\n logger.error('error', 'me() threw', { error: String(error) });\n emit('error', error);\n return null;\n }\n };\n\n const login = async (credentials?: LoginCredentials): Promise<LoginResult | void> => {\n if (config.strategy === 'remote') {\n redirectToRemoteLogin(config, undefined, logger);\n return;\n }\n\n if (!credentials?.password) {\n throw new Error('@pinooxhq/auth: login() requires credentials for local strategy');\n }\n\n const result = await localLogin(config, http, storage, credentials, logger);\n token = result.token ?? storage.get();\n user = result.user;\n authenticated = !!(result.token || config.mode !== 'jwt');\n emit('login', result);\n return result;\n };\n\n const logout = async (): Promise<void> => {\n try {\n await http.request({\n url: config.endpoints.logout,\n method: 'GET',\n credentials: 'include',\n headers: withAuthHeaders({\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n }),\n });\n } catch (error) {\n logger.warn('error', 'Remote logout failed; clearing local session anyway', {\n error: String(error),\n });\n }\n\n syncToken(null);\n user = null;\n authenticated = false;\n emit('logout');\n logger.info('token.cleared', 'Logged out');\n };\n\n const instance: AuthInstance = {\n config,\n logger,\n get user() {\n return user;\n },\n set user(value) {\n user = value;\n },\n get token() {\n return token ?? storage.get();\n },\n set token(value) {\n syncToken(value);\n },\n get isAuthenticated() {\n return authenticated && (!!token || config.mode !== 'jwt');\n },\n set isAuthenticated(value) {\n authenticated = value;\n },\n login,\n logout,\n me,\n getToken: () => token ?? storage.get(),\n setToken: (value) => {\n syncToken(value);\n },\n clearToken: () => {\n syncToken(null);\n authenticated = false;\n },\n getAuthHeader,\n authorize,\n getRequestAuth,\n setHttp: (client) => {\n http = client;\n },\n loginFromResponse,\n redirectToLogin: (returnPath) => {\n if (config.strategy === 'remote') {\n redirectToRemoteLogin(config, returnPath, logger);\n return;\n }\n\n const url = config.loginUrl ?? config.endpoints.login;\n logger.info('redirect.login', 'Redirecting to login', { url });\n\n if (typeof window !== 'undefined') {\n window.location.href = url;\n }\n },\n getReturnPath: (queryOrPath, fallback = '/') => {\n const blocked = config.appPath ? [config.appPath] : ['/account'];\n return resolveReturnPath(queryOrPath, fallback, blocked);\n },\n getReturnUrl: (queryOrPath, fallback = '/') => {\n const blocked = config.appPath ? [config.appPath] : ['/account'];\n const path = resolveReturnPath(queryOrPath, fallback, blocked);\n return toAbsoluteReturnUrl(path, config.siteOrigin);\n },\n redirectBack: (queryOrPath, fallback = '/') => {\n const blocked = config.appPath ? [config.appPath] : ['/account'];\n logger.info('redirect.back', 'Redirecting after auth', { queryOrPath, fallback });\n redirectToReturn(queryOrPath, {\n fallback,\n siteOrigin: config.siteOrigin,\n blockedPrefixes: blocked,\n });\n },\n getRedirectQuery: (queryOrPath, fallback = '/') => {\n const blocked = config.appPath ? [config.appPath] : ['/account'];\n return { redirect: resolveReturnPath(queryOrPath, fallback, blocked) };\n },\n notifyUnauthorized: (payload) => {\n syncToken(null);\n user = null;\n authenticated = false;\n logger.warn('session.unauthorized', 'Unauthorized notified', {\n payload: payload ? String(payload) : undefined,\n });\n emit('unauthorized', payload ?? { status: 401 });\n },\n on: (event, handler) => {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n\n listeners.get(event)!.add(handler);\n\n return () => {\n listeners.get(event)?.delete(handler);\n };\n },\n off: (event, handler) => {\n listeners.get(event)?.delete(handler);\n },\n };\n\n defaultInstance = instance;\n emit('config', config);\n\n return instance;\n}\n\nexport function buildLoginRedirectUrl(returnPath?: string): string {\n const auth = getAuth();\n return buildRemoteLoginUrl(auth.config, returnPath, auth.logger);\n}\n\nexport {\n isSafeReturnPath,\n resolveReturnPath,\n resolveSiteOrigin,\n toAbsoluteReturnUrl,\n redirectToReturn,\n} from './returnPath';\n\nexport type { CreateAuthOptions };\nexport type { TokenStorage };\n","import { computed, ref, type Ref, type ComputedRef } from 'vue';\nimport { useRoute } from 'vue-router';\nimport {\n createAuth,\n getAuth,\n type AuthInstance,\n type CreateAuthConfig,\n type AuthUser,\n type LoginCredentials,\n type LoginResult,\n} from '../core/createAuth';\n\nexport interface UseAuthReturn {\n auth: AuthInstance;\n user: Ref<AuthUser | null>;\n token: Ref<string | null>;\n isAuthenticated: ComputedRef<boolean>;\n login: (credentials?: LoginCredentials) => Promise<LoginResult | void>;\n logout: () => Promise<void>;\n me: () => Promise<AuthUser | null>;\n canAccess: (refresh?: boolean) => Promise<boolean>;\n}\n\nexport interface UseAuthRedirectReturn {\n returnPath: ComputedRef<string>;\n returnUrl: ComputedRef<string>;\n redirectQuery: ComputedRef<{ redirect: string }>;\n resolveRedirect: () => string;\n redirectBack: () => void;\n}\n\nlet vueBound: UseAuthReturn | null = null;\n\nfunction resolveAuthInstance(): AuthInstance {\n try {\n return getAuth();\n } catch {\n return createAuth();\n }\n}\n\nexport function createAuthPlugin(options: CreateAuthConfig = {}) {\n const auth = createAuth(options);\n\n return {\n install() {\n // noop install — instance is global via createAuth/getAuth\n void auth;\n },\n auth,\n };\n}\n\nexport function useAuth(): UseAuthReturn {\n if (vueBound) {\n return vueBound;\n }\n\n const auth = resolveAuthInstance();\n\n const user = ref<AuthUser | null>(auth.user);\n const token = ref<string | null>(auth.getToken());\n\n const syncFromAuth = (): void => {\n user.value = auth.user;\n token.value = auth.getToken();\n };\n\n auth.on('login', syncFromAuth);\n auth.on('logout', syncFromAuth);\n\n const isAuthenticated = computed(() => {\n return auth.isAuthenticated || (!!token.value && !!user.value);\n });\n\n const me = async (): Promise<AuthUser | null> => {\n const profile = await auth.me();\n syncFromAuth();\n return profile;\n };\n\n const canAccess = async (refresh = false): Promise<boolean> => {\n token.value = auth.getToken();\n\n if (!refresh && auth.isAuthenticated) {\n return true;\n }\n\n if (!token.value && auth.config.mode === 'jwt') {\n auth.isAuthenticated = false;\n user.value = null;\n return false;\n }\n\n const profile = await me();\n return !!profile || auth.isAuthenticated;\n };\n\n const login = async (credentials?: LoginCredentials): Promise<LoginResult | void> => {\n const result = await auth.login(credentials);\n syncFromAuth();\n return result;\n };\n\n const logout = async (): Promise<void> => {\n await auth.logout();\n syncFromAuth();\n };\n\n vueBound = {\n auth,\n user,\n token,\n isAuthenticated,\n login,\n logout,\n me,\n canAccess,\n };\n\n return vueBound;\n}\n\n/**\n * Post-login return URL helpers bound to the current route `?redirect=`.\n */\nexport function useAuthRedirect(fallback = '/'): UseAuthRedirectReturn {\n const route = useRoute();\n const auth = resolveAuthInstance();\n\n const returnPath = computed(() => auth.getReturnPath(route.query, fallback));\n const returnUrl = computed(() => auth.getReturnUrl(route.query, fallback));\n const redirectQuery = computed(() => auth.getRedirectQuery(route.query, fallback));\n\n return {\n returnPath,\n returnUrl,\n redirectQuery,\n resolveRedirect: () => returnUrl.value,\n redirectBack: () => auth.redirectBack(route.query, fallback),\n };\n}\n\nexport function createPiniaAuthStore(defineStore: typeof import('pinia').defineStore, id = 'pinoox-auth') {\n return defineStore(id, () => {\n const { auth, user, token, isAuthenticated, login, logout, me, canAccess } = useAuth();\n\n return {\n auth: isAuthenticated,\n user,\n token,\n isAuth: isAuthenticated,\n getUser: user,\n login: (loginKey: string, userData: AuthUser | null = null) => {\n auth.setToken(loginKey);\n token.value = loginKey;\n auth.isAuthenticated = true;\n\n if (userData) {\n auth.user = userData;\n user.value = userData;\n }\n },\n logout,\n canUserAccess: canAccess,\n syncTokenFromStorage: () => {\n const latest = auth.getToken();\n token.value = latest;\n return !!latest;\n },\n me,\n loginWithCredentials: login,\n };\n });\n}\n"]}
@@ -0,0 +1,71 @@
1
+ import * as pinia from 'pinia';
2
+ import { ComputedRef, Ref } from 'vue';
3
+ import { a as AuthInstance, h as AuthUser, L as LoginCredentials, l as LoginResult, C as CreateAuthConfig } from '../createAuth-LO46VVEW.cjs';
4
+
5
+ interface UseAuthReturn {
6
+ auth: AuthInstance;
7
+ user: Ref<AuthUser | null>;
8
+ token: Ref<string | null>;
9
+ isAuthenticated: ComputedRef<boolean>;
10
+ login: (credentials?: LoginCredentials) => Promise<LoginResult | void>;
11
+ logout: () => Promise<void>;
12
+ me: () => Promise<AuthUser | null>;
13
+ canAccess: (refresh?: boolean) => Promise<boolean>;
14
+ }
15
+ interface UseAuthRedirectReturn {
16
+ returnPath: ComputedRef<string>;
17
+ returnUrl: ComputedRef<string>;
18
+ redirectQuery: ComputedRef<{
19
+ redirect: string;
20
+ }>;
21
+ resolveRedirect: () => string;
22
+ redirectBack: () => void;
23
+ }
24
+ declare function createAuthPlugin(options?: CreateAuthConfig): {
25
+ install(): void;
26
+ auth: AuthInstance;
27
+ };
28
+ declare function useAuth(): UseAuthReturn;
29
+ /**
30
+ * Post-login return URL helpers bound to the current route `?redirect=`.
31
+ */
32
+ declare function useAuthRedirect(fallback?: string): UseAuthRedirectReturn;
33
+ declare function createPiniaAuthStore(defineStore: typeof pinia.defineStore, id?: string): pinia.StoreDefinition<string, Pick<{
34
+ auth: ComputedRef<boolean>;
35
+ user: Ref<AuthUser | null, AuthUser | null>;
36
+ token: Ref<string | null, string | null>;
37
+ isAuth: ComputedRef<boolean>;
38
+ getUser: Ref<AuthUser | null, AuthUser | null>;
39
+ login: (loginKey: string, userData?: AuthUser | null) => void;
40
+ logout: () => Promise<void>;
41
+ canUserAccess: (refresh?: boolean) => Promise<boolean>;
42
+ syncTokenFromStorage: () => boolean;
43
+ me: () => Promise<AuthUser | null>;
44
+ loginWithCredentials: (credentials?: LoginCredentials) => Promise<LoginResult | void>;
45
+ }, "token" | "user" | "getUser">, Pick<{
46
+ auth: ComputedRef<boolean>;
47
+ user: Ref<AuthUser | null, AuthUser | null>;
48
+ token: Ref<string | null, string | null>;
49
+ isAuth: ComputedRef<boolean>;
50
+ getUser: Ref<AuthUser | null, AuthUser | null>;
51
+ login: (loginKey: string, userData?: AuthUser | null) => void;
52
+ logout: () => Promise<void>;
53
+ canUserAccess: (refresh?: boolean) => Promise<boolean>;
54
+ syncTokenFromStorage: () => boolean;
55
+ me: () => Promise<AuthUser | null>;
56
+ loginWithCredentials: (credentials?: LoginCredentials) => Promise<LoginResult | void>;
57
+ }, "auth" | "isAuth">, Pick<{
58
+ auth: ComputedRef<boolean>;
59
+ user: Ref<AuthUser | null, AuthUser | null>;
60
+ token: Ref<string | null, string | null>;
61
+ isAuth: ComputedRef<boolean>;
62
+ getUser: Ref<AuthUser | null, AuthUser | null>;
63
+ login: (loginKey: string, userData?: AuthUser | null) => void;
64
+ logout: () => Promise<void>;
65
+ canUserAccess: (refresh?: boolean) => Promise<boolean>;
66
+ syncTokenFromStorage: () => boolean;
67
+ me: () => Promise<AuthUser | null>;
68
+ loginWithCredentials: (credentials?: LoginCredentials) => Promise<LoginResult | void>;
69
+ }, "login" | "logout" | "me" | "canUserAccess" | "syncTokenFromStorage" | "loginWithCredentials">>;
70
+
71
+ export { type UseAuthRedirectReturn, type UseAuthReturn, createAuthPlugin, createPiniaAuthStore, useAuth, useAuthRedirect };
@@ -0,0 +1,71 @@
1
+ import * as pinia from 'pinia';
2
+ import { ComputedRef, Ref } from 'vue';
3
+ import { a as AuthInstance, h as AuthUser, L as LoginCredentials, l as LoginResult, C as CreateAuthConfig } from '../createAuth-LO46VVEW.js';
4
+
5
+ interface UseAuthReturn {
6
+ auth: AuthInstance;
7
+ user: Ref<AuthUser | null>;
8
+ token: Ref<string | null>;
9
+ isAuthenticated: ComputedRef<boolean>;
10
+ login: (credentials?: LoginCredentials) => Promise<LoginResult | void>;
11
+ logout: () => Promise<void>;
12
+ me: () => Promise<AuthUser | null>;
13
+ canAccess: (refresh?: boolean) => Promise<boolean>;
14
+ }
15
+ interface UseAuthRedirectReturn {
16
+ returnPath: ComputedRef<string>;
17
+ returnUrl: ComputedRef<string>;
18
+ redirectQuery: ComputedRef<{
19
+ redirect: string;
20
+ }>;
21
+ resolveRedirect: () => string;
22
+ redirectBack: () => void;
23
+ }
24
+ declare function createAuthPlugin(options?: CreateAuthConfig): {
25
+ install(): void;
26
+ auth: AuthInstance;
27
+ };
28
+ declare function useAuth(): UseAuthReturn;
29
+ /**
30
+ * Post-login return URL helpers bound to the current route `?redirect=`.
31
+ */
32
+ declare function useAuthRedirect(fallback?: string): UseAuthRedirectReturn;
33
+ declare function createPiniaAuthStore(defineStore: typeof pinia.defineStore, id?: string): pinia.StoreDefinition<string, Pick<{
34
+ auth: ComputedRef<boolean>;
35
+ user: Ref<AuthUser | null, AuthUser | null>;
36
+ token: Ref<string | null, string | null>;
37
+ isAuth: ComputedRef<boolean>;
38
+ getUser: Ref<AuthUser | null, AuthUser | null>;
39
+ login: (loginKey: string, userData?: AuthUser | null) => void;
40
+ logout: () => Promise<void>;
41
+ canUserAccess: (refresh?: boolean) => Promise<boolean>;
42
+ syncTokenFromStorage: () => boolean;
43
+ me: () => Promise<AuthUser | null>;
44
+ loginWithCredentials: (credentials?: LoginCredentials) => Promise<LoginResult | void>;
45
+ }, "token" | "user" | "getUser">, Pick<{
46
+ auth: ComputedRef<boolean>;
47
+ user: Ref<AuthUser | null, AuthUser | null>;
48
+ token: Ref<string | null, string | null>;
49
+ isAuth: ComputedRef<boolean>;
50
+ getUser: Ref<AuthUser | null, AuthUser | null>;
51
+ login: (loginKey: string, userData?: AuthUser | null) => void;
52
+ logout: () => Promise<void>;
53
+ canUserAccess: (refresh?: boolean) => Promise<boolean>;
54
+ syncTokenFromStorage: () => boolean;
55
+ me: () => Promise<AuthUser | null>;
56
+ loginWithCredentials: (credentials?: LoginCredentials) => Promise<LoginResult | void>;
57
+ }, "auth" | "isAuth">, Pick<{
58
+ auth: ComputedRef<boolean>;
59
+ user: Ref<AuthUser | null, AuthUser | null>;
60
+ token: Ref<string | null, string | null>;
61
+ isAuth: ComputedRef<boolean>;
62
+ getUser: Ref<AuthUser | null, AuthUser | null>;
63
+ login: (loginKey: string, userData?: AuthUser | null) => void;
64
+ logout: () => Promise<void>;
65
+ canUserAccess: (refresh?: boolean) => Promise<boolean>;
66
+ syncTokenFromStorage: () => boolean;
67
+ me: () => Promise<AuthUser | null>;
68
+ loginWithCredentials: (credentials?: LoginCredentials) => Promise<LoginResult | void>;
69
+ }, "login" | "logout" | "me" | "canUserAccess" | "syncTokenFromStorage" | "loginWithCredentials">>;
70
+
71
+ export { type UseAuthRedirectReturn, type UseAuthReturn, createAuthPlugin, createPiniaAuthStore, useAuth, useAuthRedirect };