{"version":3,"sources":["../src/core/index.ts","../src/core/config.ts","../src/core/process-manager.ts","../src/core/errors.ts","../src/config/index.ts","../src/config/loader.ts","../src/insight/index.ts","../src/insight/server.ts","../src/create-fusion/index.ts","../src/create-fusion/scaffold.ts","../src/next/index.ts","../src/next/provider.tsx","../src/client/fetcher.ts","../src/next/useAuth.ts","../src/rpc/index.ts"],"sourcesContent":["// Core exports placeholder\nexport * from './config';\nexport * from './logger';\nexport * from './filesystem';\nexport * from './process-manager';\nexport * from './errors';\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface FusionConfig {\n    [key: string]: any;\n}\n\nexport class ConfigLoader {\n    private config: Map<string, any> = new Map();\n    private configDir: string;\n\n    constructor(configDir: string = process.cwd()) {\n        this.configDir = configDir;\n    }\n\n    /**\n     * Load configuration from file or environment\n     */\n    load(key: string, defaultValue?: any): any {\n        if (this.config.has(key)) {\n            return this.config.get(key);\n        }\n\n        // Try to load from environment variable\n        const envKey = `FUSION_${key.toUpperCase()}`;\n        if (process.env[envKey]) {\n            const value = this.parseEnvValue(process.env[envKey]!);\n            this.config.set(key, value);\n            return value;\n        }\n\n        // Try to load from config file\n        const configPath = path.join(this.configDir, 'fusion.config.json');\n        if (fs.existsSync(configPath)) {\n            try {\n                const fileConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));\n                if (fileConfig[key] !== undefined) {\n                    this.config.set(key, fileConfig[key]);\n                    return fileConfig[key];\n                }\n            } catch (error) {\n                // Silently fail and use default\n            }\n        }\n\n        return defaultValue;\n    }\n\n    /**\n     * Set configuration value\n     */\n    set(key: string, value: any): void {\n        this.config.set(key, value);\n    }\n\n    /**\n     * Get all configuration\n     */\n    getAll(): FusionConfig {\n        return Object.fromEntries(this.config);\n    }\n\n    /**\n     * Parse environment value (handles JSON strings)\n     */\n    private parseEnvValue(value: string): any {\n        try {\n            return JSON.parse(value);\n        } catch {\n            return value;\n        }\n    }\n}\n\n// Export singleton instance\nexport const config = new ConfigLoader();\n\n// Helper function for backward compatibility\nexport function load(key: string, defaultValue?: any): any {\n    return config.load(key, defaultValue);\n}\n","export class ProcessManager {\n    /**\n     * Setup process error handlers\n     */\n    static initialize(): void {\n        process.on('uncaughtException', (error) => {\n            console.error('[Fusion] Uncaught Exception:', error);\n            process.exit(1);\n        });\n\n        process.on('unhandledRejection', (reason, promise) => {\n            console.error('[Fusion] Unhandled Rejection at:', promise, 'reason:', reason);\n        });\n\n        process.on('SIGTERM', () => {\n            console.log('[Fusion] SIGTERM received, shutting down gracefully');\n            process.exit(0);\n        });\n\n        process.on('SIGINT', () => {\n            console.log('[Fusion] SIGINT received, shutting down gracefully');\n            process.exit(0);\n        });\n    }\n\n    /**\n     * Graceful shutdown helper\n     */\n    static async shutdown(cleanup: () => Promise<void>): Promise<void> {\n        try {\n            await cleanup();\n            process.exit(0);\n        } catch (error) {\n            console.error('[Fusion] Error during shutdown:', error);\n            process.exit(1);\n        }\n    }\n}\n","export class FusionError extends Error {\n    constructor(message: string, public code?: string) {\n        super(message);\n        this.name = 'FusionError';\n    }\n}\n\nexport class ConfigError extends FusionError {\n    constructor(message: string) {\n        super(message, 'CONFIG_ERROR');\n        this.name = 'ConfigError';\n    }\n}\n\nexport class ValidationError extends FusionError {\n    constructor(message: string) {\n        super(message, 'VALIDATION_ERROR');\n        this.name = 'ValidationError';\n    }\n}\n\nexport class APIError extends FusionError {\n    constructor(message: string, public statusCode?: number) {\n        super(message, 'API_ERROR');\n        this.name = 'APIError';\n    }\n}\n","// Config exports placeholder\nexport * from './loader';\n","export const loader = {\n    load: () => ({}),\n};\n","// Insight exports placeholder\nexport * from './server';\n","export const server = {\n    start: () => console.log('Insight server started'),\n};\n","export * from './scaffold';\n","import { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport { logger } from '../core/logger';\n\nexport interface ScaffoldOptions {\n    projectName: string;\n    template: 'monorepo' | 'api' | 'web';\n    packageManager?: 'npm' | 'pnpm' | 'yarn';\n}\n\n/**\n * @deprecated Use the `wexts create` CLI and `examples/hello-rpc` canonical scaffold instead.\n */\nexport class ProjectScaffolder {\n    async scaffold(options: ScaffoldOptions): Promise<void> {\n        const { projectName, template } = options;\n        const projectPath = join(process.cwd(), projectName);\n\n        logger.info(`Creating project at: ${projectPath}`);\n\n        // Create base directory\n        await mkdir(projectPath, { recursive: true });\n\n        if (template === 'monorepo') {\n            await this.createMonorepo(projectPath, projectName);\n        } else if (template === 'api') {\n            await this.createNestJSApp(projectPath, projectName);\n        } else if (template === 'web') {\n            await this.createNextJSApp(projectPath, projectName);\n        }\n\n        logger.success(`Project ${projectName} created successfully!`);\n        logger.info(`\\nNext steps:`);\n        logger.info(`  cd ${projectName}`);\n        logger.info(`  wexts dev`);\n    }\n\n    private async createMonorepo(projectPath: string, projectName: string): Promise<void> {\n        // Create directory structure\n        await mkdir(join(projectPath, 'apps', 'api'), { recursive: true });\n        await mkdir(join(projectPath, 'apps', 'web'), { recursive: true });\n        await mkdir(join(projectPath, 'packages', 'types'), { recursive: true });\n        await mkdir(join(projectPath, 'packages', 'api-client'), { recursive: true });\n\n        // Create root package.json\n        const packageJson = {\n            name: projectName,\n            version: '0.0.1',\n            private: true,\n            workspaces: ['apps/*', 'packages/*'],\n            scripts: {\n                dev: 'wexts dev',\n                build: 'wexts build',\n            },\n            devDependencies: {\n                'wexts': '^4.0.0',\n            },\n        };\n\n        await writeFile(\n            join(projectPath, 'package.json'),\n            JSON.stringify(packageJson, null, 2)\n        );\n\n        // Create README\n        const readme = `# ${projectName}\\n\\nCreated with the deprecated ProjectScaffolder compatibility API.\\n\\nUse examples/hello-rpc as the canonical Wexts reference.\\n\\n## Getting Started\\n\\n\\`\\`\\`bash\\nwexts dev\\n\\`\\`\\`\\n`;\n        await writeFile(join(projectPath, 'README.md'), readme);\n    }\n\n    private async createNestJSApp(projectPath: string, projectName: string): Promise<void> {\n        await writeFile(\n            join(projectPath, 'README.md'),\n            `# ${projectName}\\n\\nStandalone API scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.\\n`\n        );\n    }\n\n    private async createNextJSApp(projectPath: string, projectName: string): Promise<void> {\n        await writeFile(\n            join(projectPath, 'README.md'),\n            `# ${projectName}\\n\\nStandalone web scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.\\n`\n        );\n    }\n}\n","export * from './provider';\nexport * from './useAuth';\n","'use client';\n\nimport React, { createContext, useContext, ReactNode } from 'react';\nimport { createWextsRpcClient, FusionFetcher, WextsRpcClient } from '../client/fetcher';\n\ninterface FusionContextType {\n    client: FusionFetcher;\n    wexts: WextsRpcClient;\n}\n\nconst FusionContext = createContext<FusionContextType | null>(null);\n\nexport interface FusionProviderProps {\n    children: ReactNode;\n    baseUrl?: string;\n    rpcBaseUrl?: string;\n    rpcClient?: object;\n}\n\n/**\n * FusionProvider - Provides API client to React components\n * Usage:\n * ```tsx\n * <FusionProvider baseUrl=\"/api\">\n *   <App />\n * </FusionProvider>\n * ```\n */\nexport function FusionProvider({ children, baseUrl = '/api', rpcBaseUrl = '/rpc', rpcClient }: FusionProviderProps) {\n    const client = React.useMemo(() => new FusionFetcher(baseUrl), [baseUrl]);\n    const wexts = React.useMemo(\n        () => (rpcClient as WextsRpcClient | undefined) ?? createWextsRpcClient(undefined, { baseUrl: rpcBaseUrl }),\n        [rpcBaseUrl, rpcClient]\n    );\n\n    return (\n        <FusionContext.Provider value={{ client, wexts }}>\n            {children}\n        </FusionContext.Provider>\n    );\n}\n\n/**\n * useFusion hook - Access API client in components\n * Usage:\n * ```tsx\n * const { client } = useFusion();\n * const data = await client.get('/users');\n * ```\n */\nexport function useFusion(): FusionContextType {\n    const context = useContext(FusionContext);\n    if (!context) {\n        throw new Error('useFusion must be used within FusionProvider');\n    }\n    return context;\n}\n\nexport function useWexts<TClient = WextsRpcClient>(): TClient {\n    const context = useFusion();\n    return context.wexts as TClient;\n}\n","import type { RpcManifest, RpcInvocationResponse } from '../rpc/types';\nimport { WextsRpcError } from '../errors';\n\nexport class FusionFetcher {\n    private baseUrl: string;\n\n    constructor(baseUrl: string = '/api') {\n        this.baseUrl = baseUrl;\n    }\n\n    private async request<T>(method: string, path: string, body?: any): Promise<T> {\n        const headers: Record<string, string> = {\n            'Content-Type': 'application/json',\n        };\n\n        // Automatically attach Fusion Token if present\n        if (typeof window !== 'undefined') {\n            const token = localStorage.getItem('fusion_token');\n            if (token) headers['Authorization'] = `Bearer ${token}`;\n        }\n\n        const response = await fetch(`${this.baseUrl}${path}`, {\n            method,\n            headers,\n            body: body ? JSON.stringify(body) : undefined,\n        });\n\n        if (!response.ok) {\n            throw new WextsRpcError({\n                code: 'WEXTS_API_REQUEST_FAILED',\n                message: `Fusion API Error: ${response.status} ${response.statusText}`,\n                suggestedFix: 'Check the API route, server logs, and authentication headers.',\n                docsSlug: 'troubleshooting',\n            });\n        }\n\n        if (response.status === 204) {\n            return undefined as T;\n        }\n\n        return response.json();\n    }\n\n    get<T>(path: string) { return this.request<T>('GET', path); }\n    post<T>(path: string, body: any) { return this.request<T>('POST', path, body); }\n    put<T>(path: string, body: any) { return this.request<T>('PUT', path, body); }\n    delete<T>(path: string) { return this.request<T>('DELETE', path); }\n}\n\nexport const apiFetcher = new FusionFetcher();\n\nexport interface WextsRpcClientOptions {\n    baseUrl?: string;\n    fetch?: typeof fetch;\n    getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n}\n\nexport type WextsRpcClient = Record<string, Record<string, (...args: unknown[]) => Promise<unknown>>>;\n\nexport function createWextsRpcClient(\n    manifest: Pick<RpcManifest, 'services'> | undefined,\n    options: WextsRpcClientOptions = {}\n): WextsRpcClient {\n    const hasManifest = Boolean(manifest);\n    const services = new Set((manifest?.services ?? []).map((service) => service.name));\n    const methodMap = new Map<string, Set<string>>();\n\n    for (const service of manifest?.services ?? []) {\n        methodMap.set(service.name, new Set(service.methods.map((method) => method.name)));\n    }\n\n    const createServiceProxy = (serviceName: string) => new Proxy({}, {\n        get(_target, methodName) {\n            if (typeof methodName !== 'string') return undefined;\n            if (methodName === 'then') return undefined;\n\n            const knownMethods = methodMap.get(serviceName);\n            if (knownMethods && !knownMethods.has(methodName)) {\n                throw new WextsRpcError({\n                    code: 'WEXTS_RPC_METHOD_NOT_FOUND',\n                    message: `Wexts RPC method not found: ${serviceName}.${methodName}`,\n                    suggestedFix: 'Run `wexts generate` and verify the method is decorated with @RpcMethod().',\n                    docsSlug: 'rpc',\n                });\n            }\n\n            return (...args: unknown[]) => invokeRpc(serviceName, methodName, args, options);\n        },\n    }) as Record<string, (...args: unknown[]) => Promise<unknown>>;\n\n    return new Proxy({}, {\n        get(_target, serviceName) {\n            if (typeof serviceName !== 'string') return undefined;\n            if (serviceName === 'then') return undefined;\n            if (!hasManifest) {\n                throw new WextsRpcError({\n                    code: 'WEXTS_RPC_MANIFEST_MISSING',\n                    message: 'Wexts RPC manifest is missing.',\n                    suggestedFix: 'Run `wexts generate` and import the generated client/provider instead of creating an empty client.',\n                    docsSlug: 'codegen',\n                });\n            }\n            if (!services.has(serviceName)) {\n                throw new WextsRpcError({\n                    code: 'WEXTS_RPC_SERVICE_NOT_FOUND',\n                    message: `Wexts RPC service not found: ${serviceName}`,\n                    suggestedFix: 'Run `wexts generate` and verify the service is decorated with @RpcService().',\n                    docsSlug: 'rpc',\n                });\n            }\n\n            return createServiceProxy(serviceName);\n        },\n    }) as WextsRpcClient;\n}\n\nasync function invokeRpc(\n    serviceName: string,\n    methodName: string,\n    args: unknown[],\n    options: WextsRpcClientOptions\n): Promise<unknown> {\n    const fetchImpl = options.fetch ?? fetch;\n    const baseUrl = options.baseUrl ?? '/rpc';\n    const headers = {\n        'Content-Type': 'application/json',\n        ...(await options.getHeaders?.() ?? {}),\n    };\n    const response = await fetchImpl(`${baseUrl}/${encodeURIComponent(serviceName)}/${encodeURIComponent(methodName)}`, {\n        method: 'POST',\n        headers,\n        body: JSON.stringify({ args }),\n    });\n\n    if (!response.ok) {\n        throw new WextsRpcError({\n            code: 'WEXTS_RPC_REQUEST_FAILED',\n            message: `Wexts RPC Error: ${response.status} ${response.statusText}`,\n            suggestedFix: 'Check the RPC route, service policy, and server logs.',\n            docsSlug: 'troubleshooting',\n        });\n    }\n\n    const payload = await response.json() as RpcInvocationResponse;\n    return payload.data;\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { useFusion } from './provider';\n\nexport interface AuthUser {\n    id: string;\n    email: string;\n    name?: string;\n}\n\nexport interface UseAuthReturn {\n    user: AuthUser | null;\n    loading: boolean;\n    login: (email: string, password: string) => Promise<void>;\n    logout: () => Promise<void>;\n    isAuthenticated: boolean;\n}\n\n/**\n * useAuth hook - Authentication state management\n * Usage:\n * ```tsx\n * const { user, login, logout, isAuthenticated } = useAuth();\n * ```\n */\nexport function useAuth(): UseAuthReturn {\n    const { client } = useFusion();\n    const [user, setUser] = useState<AuthUser | null>(null);\n    const [loading, setLoading] = useState(true);\n\n    useEffect(() => {\n        // Check for existing session\n        const token = localStorage.getItem('fusion_token');\n        if (token) {\n            // Validate token and load user\n            loadUser();\n        } else {\n            setLoading(false);\n        }\n    }, []);\n\n    const loadUser = async () => {\n        try {\n            const userData = await client.get<AuthUser>('/auth/me');\n            setUser(userData);\n        } catch (error) {\n            localStorage.removeItem('fusion_token');\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    const login = async (email: string, password: string) => {\n        const response = await client.post<{ token: string; user: AuthUser }>('/auth/login', {\n            email,\n            password,\n        });\n        localStorage.setItem('fusion_token', response.token);\n        setUser(response.user);\n    };\n\n    const logout = async () => {\n        localStorage.removeItem('fusion_token');\n        setUser(null);\n    };\n\n    return {\n        user,\n        loading,\n        login,\n        logout,\n        isAuthenticated: !!user,\n    };\n}\n","export * from './types';\n"],"mappings":"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","names":["fs","path","ConfigLoader","config","Map","configDir","process","cwd","load","key","defaultValue","has","get","envKey","toUpperCase","env","value","parseEnvValue","set","configPath","join","existsSync","fileConfig","JSON","parse","readFileSync","undefined","error","getAll","Object","fromEntries","ProcessManager","initialize","process","on","error","console","exit","reason","promise","log","shutdown","cleanup","FusionError","Error","message","code","name","ConfigError","ValidationError","APIError","statusCode","loader","load","server","start","console","log","mkdir","writeFile","join","ProjectScaffolder","scaffold","options","projectName","template","projectPath","join","process","cwd","logger","info","mkdir","recursive","createMonorepo","createNestJSApp","createNextJSApp","success","packageJson","name","version","private","workspaces","scripts","dev","build","devDependencies","writeFile","JSON","stringify","readme","React","createContext","useContext","FusionFetcher","baseUrl","request","method","path","body","headers","window","token","localStorage","getItem","response","fetch","JSON","stringify","undefined","ok","WextsRpcError","code","message","status","statusText","suggestedFix","docsSlug","json","get","post","put","delete","apiFetcher","createWextsRpcClient","manifest","options","hasManifest","Boolean","services","Set","map","service","name","methodMap","Map","set","methods","createServiceProxy","serviceName","Proxy","_target","methodName","knownMethods","has","args","invokeRpc","fetchImpl","getHeaders","encodeURIComponent","payload","data","FusionContext","createContext","FusionProvider","children","baseUrl","rpcBaseUrl","rpcClient","client","React","useMemo","FusionFetcher","wexts","createWextsRpcClient","undefined","Provider","value","useFusion","context","useContext","Error","useWexts","useState","useEffect","useAuth","client","useFusion","user","setUser","useState","loading","setLoading","useEffect","token","localStorage","getItem","loadUser","userData","get","error","removeItem","login","email","password","response","post","setItem","logout","isAuthenticated"]}