@qidcloud/sdk 1.2.3 → 1.2.4

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/modules/auth.ts","../src/modules/db.ts","../src/modules/edge.ts","../src/modules/vault.ts","../src/modules/logs.ts","../src/hooks/useQidAuth.ts","../src/components/QidSignInButton.tsx","../src/components/QidCloudLogin.tsx","../src/index.ts"],"sourcesContent":["import { io, Socket } from 'socket.io-client';\r\nimport { QidCloud } from '../index';\r\nimport { QidAuthSession, QidUser } from '../types';\r\n\r\nexport class AuthModule {\r\n private sdk: QidCloud;\r\n private socket: Socket | null = null;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Initialize a new handshake session for QR login\r\n */\r\n async createSession(): Promise<QidAuthSession> {\r\n const resp = await this.sdk.api.post('/api/initiate-generic');\r\n const { sessionId, nonce } = resp.data;\r\n\r\n // Construct QR data (JSON format for mobile app)\r\n const qrData = JSON.stringify({\r\n sessionId,\r\n nonce,\r\n action: 'login-handshake',\r\n timestamp: Date.now()\r\n });\r\n\r\n return {\r\n sessionId,\r\n qrData,\r\n expiresAt: Date.now() + 120000 // 2 minutes\r\n };\r\n }\r\n\r\n /**\r\n * Listen for authorization events for a specific session\r\n */\r\n listen(sessionId: string, onAuthorized: (token: string) => void, onDenied?: (msg: string) => void) {\r\n if (!this.socket) {\r\n const baseUrl = this.sdk.getConfig().baseUrl || 'https://api.qidcloud.com';\r\n this.socket = io(baseUrl);\r\n }\r\n\r\n this.socket.emit('join', sessionId);\r\n\r\n this.socket.on('authenticated', (token: string) => {\r\n onAuthorized(token);\r\n });\r\n\r\n this.socket.on('identity_authorized', (data: any) => {\r\n // Some backend routes wrap the token in an object\r\n const token = typeof data === 'string' ? data : data.token;\r\n onAuthorized(token);\r\n });\r\n\r\n this.socket.on('identity_denied', (data: any) => {\r\n if (onDenied) onDenied(data.message || 'Authorization denied');\r\n });\r\n }\r\n\r\n /**\r\n * Terminate the session on the server\r\n */\r\n async logout(token: string): Promise<void> {\r\n if (!token) return;\r\n try {\r\n await this.sdk.api.post('/api/logout', {}, {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n } catch (e) {\r\n console.warn('Logout failed or session already expired');\r\n } finally {\r\n this.disconnect();\r\n }\r\n }\r\n\r\n /**\r\n * Stop listening and disconnect socket\r\n */\r\n disconnect() {\r\n if (this.socket) {\r\n this.socket.disconnect();\r\n this.socket = null;\r\n }\r\n }\r\n\r\n /**\r\n * Fetch user profile using a session token\r\n */\r\n async getProfile(token: string): Promise<QidUser> {\r\n const resp = await this.sdk.api.get('/api/me', {\r\n headers: {\r\n 'Authorization': `Bearer ${token}`\r\n }\r\n });\r\n const data = resp.data;\r\n return {\r\n userId: data.regUserId,\r\n regUserId: data.regUserId,\r\n username: data.username,\r\n email: data.email,\r\n role: data.role\r\n };\r\n }\r\n}\r\n\r\n","import { QidCloud } from '../index';\r\nimport { QidDbResponse } from '../types';\r\n\r\nexport class DbModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Execute a SQL query against the project's enclave database\r\n * @param sql The SQL query string\r\n * @param params Parameterized values for the query\r\n * @param userToken Optional session token for user-scoped access\r\n */\r\n async query<T = any>(sql: string, params: any[] = [], userToken?: string): Promise<QidDbResponse<T>> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post('/api/db/query', { sql, params }, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Initialize the project's enclave database schema\r\n * Useful for first-time project setup\r\n */\r\n async setup(userToken?: string): Promise<{ success: boolean; schemaName: string }> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post('/api/db/setup', {}, { headers });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\nimport { QidEdgeResponse } from '../types';\r\n\r\nexport class EdgeModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Invoke a serverless edge function\r\n * @param name Name of the function to invoke\r\n * @param params Arguments passed to the function\r\n * @param userToken Optional session token for user-scoped access\r\n */\r\n async invoke(name: string, params: any = {}, userToken?: string): Promise<QidEdgeResponse> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post('/api/edge/invoke', { name, params }, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * List all functions in the project enclave\r\n */\r\n async list(): Promise<any[]> {\r\n const resp = await this.sdk.api.get('/api/edge/list');\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get logs for a specific function\r\n * @param name Function name\r\n * @param userToken Optional session token\r\n */\r\n async getLogs(name: string, userToken?: string): Promise<any[]> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.get(`/api/edge/${name}/logs`, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get project-wide enclave logs\r\n */\r\n async getProjectLogs(userToken?: string): Promise<any[]> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.get('/api/edge/logs/project', { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Delete a function from the enclave\r\n */\r\n async delete(name: string, userToken?: string): Promise<{ success: boolean }> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.delete(`/api/edge/${name}`, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Deploy a new function or update an existing one\r\n * @param data Deployment data including name, code, and optional envVars\r\n * @param userToken Optional session token\r\n */\r\n async deploy(data: { name: string; code: string; runtime?: string; envVars?: any; overwrite?: boolean }, userToken?: string): Promise<{ success: boolean; message: string }> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.post('/api/edge/deploy', data, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get available serverless runtimes\r\n */\r\n async getRuntimes(): Promise<string[]> {\r\n const resp = await this.sdk.api.get('/api/edge/runtimes');\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Toggle centralized logging for the project's edge functions\r\n * @param enabled Whether to enable or disable logging\r\n * @param userToken Optional session token\r\n */\r\n async toggleLogging(enabled: boolean, userToken?: string): Promise<{ success: boolean; loggingEnabled: boolean }> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.post('/api/edge/logs/settings', { enabled }, { headers });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\nimport { QidFile, QidUploadResponse } from '../types';\r\n\r\nexport class VaultModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Upload a file to the project's secure enclave storage\r\n * @param file The file data (Buffer or Blob)\r\n * @param fileName Name of the file\r\n * @param metadata Optional E2EE metadata or custom tags\r\n * @param userToken Session token for user-scoped storage\r\n */\r\n async upload(file: any, fileName: string, metadata: any = {}, userToken?: string): Promise<QidUploadResponse> {\r\n const formData = new FormData();\r\n formData.append('file', file, fileName);\r\n formData.append('metadata', JSON.stringify(metadata));\r\n\r\n const headers: any = {\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post('/api/storage/upload', formData, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * List files in the project enclave\r\n * @param userToken Session token for user-scoped storage\r\n */\r\n async list(userToken?: string): Promise<QidFile[]> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.get('/api/storage/list', { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Download a file from storage\r\n * @param fileId Unique ID of the file\r\n * @param userToken Session token for user-scoped storage\r\n */\r\n async download(fileId: string, userToken?: string): Promise<ArrayBuffer> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.get(`/api/storage/${fileId}`, {\r\n headers,\r\n responseType: 'arraybuffer'\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Delete a file from storage (Soft Delete)\r\n * @param fileId Unique ID of the file\r\n * @param userToken Session token for user-scoped storage\r\n */\r\n async delete(fileId: string, userToken?: string): Promise<{ success: boolean; message: string }> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.delete(`/api/storage/${fileId}`, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * List deleted files in the project enclave (Recycle Bin)\r\n * @param userToken Session token for user-scoped storage\r\n */\r\n async listDeleted(userToken?: string): Promise<QidFile[]> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.get('/api/storage/deleted', { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Restore a deleted file from the recycle bin\r\n * @param fileId Unique ID of the file\r\n * @param userToken Session token for user-scoped storage\r\n */\r\n async restore(fileId: string, userToken?: string): Promise<{ success: boolean; message: string }> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post(`/api/storage/restore/${fileId}`, {}, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Permanently purge a deleted file\r\n * @param fileId Unique ID of the file\r\n * @param userToken Session token for user-scoped storage\r\n */\r\n async purge(fileId: string, userToken?: string): Promise<{ success: boolean; message: string }> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.delete(`/api/storage/purge/${fileId}`, { headers });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\n\r\nexport class LogsModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Write a custom application log to the project enclave\r\n * @param message The log message\r\n * @param source The source of the log (e.g. 'auth-service', 'frontend')\r\n * @param level Log level (info, warn, error)\r\n * @param metadata Structured data for searching/filtering\r\n */\r\n async write(message: string, source: string = 'app', level: string = 'info', metadata: any = {}): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.post('/api/logs', { message, source, level, metadata });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Retrieve application logs for the project\r\n * @param query Filters (limit, level, etc.)\r\n */\r\n async fetch(query: any = {}): Promise<any[]> {\r\n const resp = await this.sdk.api.get('/api/logs', { params: query });\r\n return resp.data;\r\n }\r\n}\r\n","import { useState, useCallback, useEffect, useRef } from 'react';\r\nimport { QidCloud } from '../index';\r\nimport { QidUser, QidAuthSession } from '../types';\r\n\r\nexport interface UseQidAuthReturn {\r\n user: QidUser | null;\r\n token: string | null;\r\n loading: boolean;\r\n error: string | null;\r\n session: QidAuthSession | null;\r\n initializing: boolean;\r\n isExpired: boolean;\r\n timeLeft: number;\r\n login: () => Promise<void>;\r\n logout: () => void;\r\n cancel: () => void;\r\n setAuthenticated: (user: QidUser, token: string) => void;\r\n}\r\n\r\n/**\r\n * A React hook for managing QidCloud authentication lifecycle.\r\n * Handles handshake initialization, WebSocket listeners, and profile fetching.\r\n */\r\nexport function useQidAuth(sdk: QidCloud): UseQidAuthReturn {\r\n const [user, setUser] = useState<QidUser | null>(null);\r\n const [token, setToken] = useState<string | null>(null);\r\n const [session, setSession] = useState<QidAuthSession | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [initializing, setInitializing] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const [timeLeft, setTimeLeft] = useState<number>(0);\r\n const [isExpired, setIsExpired] = useState(false);\r\n\r\n // Use ref to track if we should still be listening (to avoid state updates after unmount/cancel)\r\n const activeSessionId = useRef<string | null>(null);\r\n const timerRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n const clearTimer = useCallback(() => {\r\n if (timerRef.current) {\r\n clearInterval(timerRef.current);\r\n timerRef.current = null;\r\n }\r\n }, []);\r\n\r\n const STORAGE_KEY = 'qid_auth_token';\r\n\r\n // Helper to fetch profile\r\n const fetchProfile = useCallback(async (authToken: string) => {\r\n setLoading(true);\r\n try {\r\n const profile = await sdk.auth.getProfile(authToken);\r\n setToken(authToken);\r\n setUser(profile);\r\n localStorage.setItem(STORAGE_KEY, authToken);\r\n } catch (err: any) {\r\n console.error('Failed to restore session:', err);\r\n setError('Session expired');\r\n localStorage.removeItem(STORAGE_KEY);\r\n setToken(null);\r\n setUser(null);\r\n } finally {\r\n setLoading(false);\r\n setInitializing(false);\r\n }\r\n }, [sdk]);\r\n\r\n // Init: Check local storage\r\n useEffect(() => {\r\n const storedToken = localStorage.getItem(STORAGE_KEY);\r\n if (storedToken) {\r\n fetchProfile(storedToken);\r\n }\r\n }, [fetchProfile]);\r\n\r\n const logout = useCallback(async () => {\r\n if (token) {\r\n await sdk.auth.logout(token);\r\n } else {\r\n sdk.auth.disconnect();\r\n }\r\n localStorage.removeItem(STORAGE_KEY);\r\n setUser(null);\r\n setToken(null);\r\n setSession(null);\r\n setIsExpired(false);\r\n clearTimer();\r\n }, [sdk, token, clearTimer]);\r\n\r\n const cancel = useCallback(() => {\r\n activeSessionId.current = null;\r\n setSession(null);\r\n setInitializing(false);\r\n setIsExpired(false);\r\n clearTimer();\r\n sdk.auth.disconnect();\r\n }, [sdk, clearTimer]);\r\n\r\n const login = useCallback(async () => {\r\n setInitializing(true);\r\n setError(null);\r\n setIsExpired(false);\r\n clearTimer();\r\n\r\n try {\r\n const newSession = await sdk.auth.createSession();\r\n setSession(newSession);\r\n activeSessionId.current = newSession.sessionId;\r\n\r\n // Start Timer\r\n const expiresAt = newSession.expiresAt || (Date.now() + 120000); // Fallback 2m\r\n setTimeLeft(Math.max(0, Math.floor((expiresAt - Date.now()) / 1000)));\r\n\r\n timerRef.current = setInterval(() => {\r\n const remaining = Math.max(0, Math.floor((expiresAt - Date.now()) / 1000));\r\n setTimeLeft(remaining);\r\n\r\n if (remaining <= 0) {\r\n setIsExpired(true);\r\n clearTimer();\r\n // Don't nullify session immediately, let UI show expiry state\r\n }\r\n }, 1000);\r\n\r\n sdk.auth.listen(\r\n newSession.sessionId,\r\n async (receivedToken: string) => {\r\n // Safety check: is this still the active session?\r\n if (activeSessionId.current !== newSession.sessionId) return;\r\n\r\n clearTimer();\r\n setSession(null); // Clear QR session\r\n\r\n // Fetch profile and persist\r\n await fetchProfile(receivedToken);\r\n },\r\n (err: string) => {\r\n if (activeSessionId.current !== newSession.sessionId) return;\r\n setError(err);\r\n setInitializing(false);\r\n setSession(null);\r\n clearTimer();\r\n }\r\n );\r\n } catch (err: any) {\r\n setError(err.message || 'Failed to initiate login handshake');\r\n setInitializing(false);\r\n clearTimer();\r\n }\r\n }, [sdk, clearTimer, fetchProfile]);\r\n\r\n // Cleanup on unmount\r\n useEffect(() => {\r\n return () => {\r\n clearTimer();\r\n sdk.auth.disconnect();\r\n };\r\n }, [sdk, clearTimer]);\r\n\r\n return {\r\n user,\r\n token,\r\n loading,\r\n error,\r\n session,\r\n initializing,\r\n isExpired,\r\n timeLeft,\r\n login,\r\n logout,\r\n cancel,\r\n setAuthenticated: (user: QidUser, token: string) => {\r\n setUser(user);\r\n setToken(token);\r\n localStorage.setItem(STORAGE_KEY, token);\r\n setInitializing(false);\r\n }\r\n };\r\n}\r\n","import React from 'react';\r\nimport { QRCodeSVG } from 'qrcode.react';\r\nimport { QidCloud } from '../index';\r\nimport { QidUser } from '../types';\r\nimport { useQidAuth } from '../hooks/useQidAuth';\r\n\r\ninterface QidSignInButtonProps {\r\n sdk: QidCloud;\r\n onSuccess: (user: QidUser, token: string) => void;\r\n onError?: (error: string) => void;\r\n className?: string;\r\n buttonText?: string;\r\n}\r\n\r\n/**\r\n * A ready-to-use React component for QidCloud QR identity authentication.\r\n */\r\nexport const QidSignInButton: React.FC<QidSignInButtonProps> = ({\r\n sdk,\r\n onSuccess,\r\n onError,\r\n className,\r\n buttonText = 'LOGIN WITH QIDCLOUD'\r\n}: QidSignInButtonProps) => {\r\n const {\r\n user,\r\n token,\r\n error,\r\n session,\r\n initializing,\r\n isExpired,\r\n timeLeft,\r\n login,\r\n cancel\r\n } = useQidAuth(sdk);\r\n\r\n const [appError, setAppError] = React.useState(false);\r\n\r\n // Watch for success\r\n React.useEffect(() => {\r\n if (user && token) {\r\n onSuccess(user, token);\r\n }\r\n }, [user, token, onSuccess]);\r\n\r\n // Watch for errors\r\n React.useEffect(() => {\r\n if (error && onError) {\r\n onError(error);\r\n }\r\n }, [error, onError]);\r\n\r\n return (\r\n <>\r\n <button\r\n onClick={login}\r\n disabled={initializing || !!session}\r\n className={className || 'qid-signin-btn'}\r\n style={{\r\n backgroundColor: '#00e5ff',\r\n color: '#000',\r\n padding: '12px 24px',\r\n borderRadius: '12px',\r\n border: 'none',\r\n fontWeight: '900',\r\n cursor: (initializing || !!session) ? 'not-allowed' : 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '10px',\r\n textTransform: 'uppercase',\r\n fontSize: '0.85rem',\r\n letterSpacing: '0.5px',\r\n boxShadow: '0 4px 15px rgba(0, 229, 255, 0.3)',\r\n transition: 'all 0.2s'\r\n }}\r\n >\r\n <div style={{\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '50%',\r\n backgroundColor: (initializing || !!session) ? '#333' : '#000',\r\n boxShadow: (initializing || !!session) ? 'none' : '0 0 8px rgba(0,0,0,0.5)'\r\n }} />\r\n {initializing ? 'Preparing Handshake...' : (session ? 'Awaiting Scan...' : buttonText)}\r\n </button>\r\n\r\n {session && (\r\n <div className=\"qid-modal-overlay\" style={{\r\n position: 'fixed',\r\n top: 0, left: 0, right: 0, bottom: 0,\r\n backgroundColor: 'rgba(0,0,0,0.92)',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n zIndex: 9999,\r\n backdropFilter: 'blur(8px)'\r\n }}>\r\n <div className=\"qid-modal-content\" style={{\r\n backgroundColor: '#0a0a0a',\r\n padding: '40px',\r\n borderRadius: '28px',\r\n textAlign: 'center',\r\n color: '#fff',\r\n maxWidth: '420px',\r\n width: '90%',\r\n border: '1px solid rgba(0, 229, 255, 0.2)',\r\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)'\r\n }}>\r\n <div style={{ marginBottom: '25px' }}>\r\n <div style={{\r\n display: 'inline-block',\r\n padding: '12px 20px',\r\n borderRadius: '30px',\r\n backgroundColor: 'rgba(0, 229, 255, 0.1)',\r\n border: '1px solid rgba(0, 229, 255, 0.3)',\r\n marginBottom: '15px'\r\n }}>\r\n <span style={{ color: '#00e5ff', fontSize: '0.7rem', fontWeight: '900', letterSpacing: '2px' }}>PQC ENCLAVE SECURED</span>\r\n </div>\r\n <h2 style={{ fontSize: '1.75rem', fontWeight: '900', marginBottom: '10px', letterSpacing: '-0.5px' }}>Identity Handshake</h2>\r\n <p style={{ fontSize: '0.95rem', color: '#94a3b8', lineHeight: '1.6' }}>\r\n Scan this encrypted gateway with your QidCloud app to authorize access.\r\n </p>\r\n </div>\r\n\r\n <div style={{\r\n backgroundColor: '#fff',\r\n padding: '24px',\r\n display: 'inline-block',\r\n borderRadius: '24px',\r\n marginBottom: '30px',\r\n boxShadow: '0 10px 40px rgba(0,0,0,0.3)'\r\n }}>\r\n <QRCodeSVG\r\n value={session.qrData}\r\n size={220}\r\n level=\"H\"\r\n includeMargin={false}\r\n style={{ opacity: isExpired ? 0.1 : 1, transition: 'opacity 0.3s' }}\r\n imageSettings={{\r\n src: \"https://api.qidcloud.com/favicon.ico\",\r\n x: undefined,\r\n y: undefined,\r\n height: 40,\r\n width: 40,\r\n excavate: true,\r\n }}\r\n />\r\n {isExpired && (\r\n <div style={{\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width: '100%'\r\n }}>\r\n <button\r\n onClick={login}\r\n style={{\r\n backgroundColor: '#00e5ff',\r\n color: '#000',\r\n border: 'none',\r\n padding: '12px 20px',\r\n borderRadius: '12px',\r\n fontWeight: '900',\r\n cursor: 'pointer',\r\n boxShadow: '0 4px 15px rgba(0, 229, 255, 0.4)',\r\n fontSize: '0.8rem'\r\n }}\r\n >\r\n REFRESH QR\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {isExpired && (\r\n <p style={{ color: '#ef4444', fontSize: '0.85rem', marginBottom: '20px', fontWeight: '600' }}>\r\n Session expired. Please refresh.\r\n </p>\r\n )}\r\n\r\n <div style={{ marginBottom: '20px' }}>\r\n <p style={{ fontSize: '0.85rem', color: '#94a3b8', marginBottom: '8px' }}>\r\n Are you on mobile?\r\n </p>\r\n <p style={{ fontSize: '0.75rem', color: '#64748b' }}>\r\n Use <strong>One-Click Auth</strong> for instant access.\r\n </p>\r\n </div>\r\n\r\n <div style={{ display: 'flex', gap: '12px', marginTop: '10px' }}>\r\n <button onClick={cancel} style={{\r\n flex: 2,\r\n padding: '16px',\r\n backgroundColor: 'transparent',\r\n color: '#64748b',\r\n border: '1px solid rgba(148, 163, 184, 0.2)',\r\n borderRadius: '16px',\r\n cursor: 'pointer',\r\n fontWeight: '700',\r\n transition: 'all 0.2s',\r\n fontSize: '0.9rem'\r\n }}>\r\n Cancel\r\n </button>\r\n\r\n {/* Mobile Deep Link Button */}\r\n <button\r\n onClick={() => {\r\n setAppError(false);\r\n const deepLink = `qidcloud://authorize?sessionId=${session.sessionId}`; // Corrected format per docs\r\n\r\n // Timeout to check if app opened\r\n const start = Date.now();\r\n window.location.href = deepLink;\r\n\r\n setTimeout(() => {\r\n if (Date.now() - start < 1500) {\r\n setAppError(true);\r\n }\r\n }, 1000);\r\n }}\r\n style={{\r\n flex: 1,\r\n padding: '16px',\r\n backgroundColor: 'rgba(0, 229, 255, 0.1)',\r\n color: '#00e5ff',\r\n border: '1px solid rgba(0, 229, 255, 0.3)',\r\n borderRadius: '16px',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n transition: 'all 0.2s'\r\n }}\r\n title=\"Authenticate with QidCloud App\"\r\n >\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\" />\r\n <line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {appError && (\r\n <p style={{ color: '#f59e0b', fontSize: '0.75rem', marginTop: '12px', fontWeight: '600' }}>\r\n QidCloud App not found on device\r\n </p>\r\n )}\r\n\r\n <div style={{ marginTop: '25px', fontSize: '0.75rem', color: '#475569' }}>\r\n Session ID: {session.sessionId.slice(0, 8)}...\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { QidCloud } from '../index';\r\nimport { QidSignInButton } from './QidSignInButton';\r\nimport { QidUser } from '../types';\r\n\r\ninterface QidCloudLoginProps {\r\n sdk: QidCloud;\r\n onSuccess: (user: QidUser, token: string) => void;\r\n onError?: (error: string) => void;\r\n className?: string; // Wrapper class\r\n}\r\n\r\n/**\r\n * A comprehensive login component for QidCloud.\r\n * STRICT SECURITY: ONLY supports QR Scanning (Mobile App) for Post-Quantum security.\r\n * Conventional login is not available in the SDK to prevent password transmission in third-party apps.\r\n */\r\nexport const QidCloudLogin: React.FC<QidCloudLoginProps> = ({\r\n sdk,\r\n onSuccess,\r\n onError,\r\n className\r\n}) => {\r\n return (\r\n <div className={`qid-login-container ${className || ''}`} style={{\r\n fontFamily: \"'Inter', sans-serif\",\r\n maxWidth: '380px',\r\n margin: '0 auto',\r\n padding: '30px',\r\n backgroundColor: '#050505',\r\n borderRadius: '24px',\r\n border: '1px solid #333',\r\n boxShadow: '0 20px 80px rgba(0,0,0,0.8)',\r\n color: '#fff',\r\n textAlign: 'center'\r\n }}>\r\n <div style={{ marginBottom: '30px' }}>\r\n <h2 style={{ fontSize: '1.5rem', fontWeight: 700, margin: '0 0 10px 0', letterSpacing: '-0.02em' }}>\r\n QidCloud Login\r\n </h2>\r\n <p style={{ color: '#888', fontSize: '0.9rem', margin: 0 }}>\r\n Secure Post-Quantum Access\r\n </p>\r\n </div>\r\n\r\n <div style={{ marginBottom: '20px', padding: '10px', backgroundColor: '#111', borderRadius: '16px', border: '1px dashed #333' }}>\r\n <p style={{ fontSize: '0.85rem', color: '#888', marginBottom: '20px', lineHeight: '1.5' }}>\r\n Login instantly by scanning the secure QR code with your <strong>QidCloud App</strong>.\r\n </p>\r\n <QidSignInButton\r\n sdk={sdk}\r\n onSuccess={onSuccess}\r\n onError={onError}\r\n buttonText=\"Login with QIDCLOUD\"\r\n className=\"qid-qr-btn-full\"\r\n />\r\n </div>\r\n\r\n <p style={{ fontSize: '0.75rem', color: '#444', marginTop: '20px' }}>\r\n Credentials are never entered on this device.\r\n </p>\r\n </div>\r\n );\r\n};\r\n","import axios, { AxiosInstance } from 'axios';\r\nimport { QidConfig } from './types';\r\nimport { AuthModule } from './modules/auth';\r\nimport { DbModule } from './modules/db';\r\nimport { EdgeModule } from './modules/edge';\r\nimport { VaultModule } from './modules/vault';\r\nimport { LogsModule } from './modules/logs';\r\n\r\nexport class QidCloud {\r\n private config: QidConfig;\r\n public api: AxiosInstance;\r\n\r\n public auth: AuthModule;\r\n public db: DbModule;\r\n public edge: EdgeModule;\r\n public vault: VaultModule;\r\n public logs: LogsModule;\r\n\r\n constructor(config: QidConfig) {\r\n this.config = {\r\n baseUrl: 'https://api.qidcloud.com',\r\n ...config,\r\n };\r\n\r\n this.api = axios.create({\r\n baseURL: this.config.baseUrl,\r\n headers: {\r\n 'x-api-key': this.config.apiKey,\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n this.auth = new AuthModule(this);\r\n this.db = new DbModule(this);\r\n this.edge = new EdgeModule(this);\r\n this.vault = new VaultModule(this);\r\n this.logs = new LogsModule(this);\r\n }\r\n\r\n /**\r\n * Get the current project configuration\r\n */\r\n getConfig(): QidConfig {\r\n return { ...this.config };\r\n }\r\n\r\n // Modules will be initialized here\r\n // public auth = new AuthModule(this);\r\n // public db = new DbModule(this);\r\n // public storage = new StorageModule(this);\r\n // public edge = new EdgeModule(this);\r\n}\r\n\r\nexport default QidCloud;\r\nexport * from './types';\r\nexport { QidSignInButton } from './components/QidSignInButton';\r\nexport { QidCloudLogin } from './components/QidCloudLogin';\r\nexport { useQidAuth } from './hooks/useQidAuth';\r\n"],"names":["io","useState","useRef","useCallback","useEffect","QRCodeSVG"],"mappings":";;;;;;;;;MAIa,UAAU,CAAA;AACX,IAAA,GAAG;IACH,MAAM,GAAkB,IAAI;AAEpC,IAAA,WAAA,CAAY,GAAa,EAAA;AACrB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAClB;AAEA;;AAEG;AACH,IAAA,MAAM,aAAa,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC;QAC7D,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI;;AAGtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,SAAS;YACT,KAAK;AACL,YAAA,MAAM,EAAE,iBAAiB;AACzB,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG;AACtB,SAAA,CAAC;QAEF,OAAO;YACH,SAAS;YACT,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;SACjC;IACL;AAEA;;AAEG;AACH,IAAA,MAAM,CAAC,SAAiB,EAAE,YAAqC,EAAE,QAAgC,EAAA;AAC7F,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,IAAI,0BAA0B;AAC1E,YAAA,IAAI,CAAC,MAAM,GAAGA,kBAAE,CAAC,OAAO,CAAC;QAC7B;QAEA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;QAEnC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAa,KAAI;YAC9C,YAAY,CAAC,KAAK,CAAC;AACvB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAS,KAAI;;AAEhD,YAAA,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK;YAC1D,YAAY,CAAC,KAAK,CAAC;AACvB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,IAAS,KAAI;AAC5C,YAAA,IAAI,QAAQ;AAAE,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,sBAAsB,CAAC;AAClE,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACH,MAAM,MAAM,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,IAAI;YACA,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE;AACvC,gBAAA,OAAO,EAAE,EAAE,eAAe,EAAE,CAAA,OAAA,EAAU,KAAK,EAAE;AAChD,aAAA,CAAC;QACN;QAAE,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC;QAC5D;gBAAU;YACN,IAAI,CAAC,UAAU,EAAE;QACrB;IACJ;AAEA;;AAEG;IACH,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACtB;IACJ;AAEA;;AAEG;IACH,MAAM,UAAU,CAAC,KAAa,EAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;AAC3C,YAAA,OAAO,EAAE;gBACL,eAAe,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA;AACnC;AACJ,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACtB,OAAO;YACH,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC;SACd;IACL;AACH;;MCrGY,QAAQ,CAAA;AACX,IAAA,GAAG;AAEX,IAAA,WAAA,CAAY,GAAa,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAChB;AAEA;;;;;AAKG;IACH,MAAM,KAAK,CAAU,GAAW,EAAE,MAAA,GAAgB,EAAE,EAAE,SAAkB,EAAA;QACtE,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QAClD;QAEA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC,IAAI;IAClB;AAEA;;;AAGG;IACH,MAAM,KAAK,CAAC,SAAkB,EAAA;QAC5B,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QAClD;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC,IAAI;IAClB;AACD;;MCpCY,UAAU,CAAA;AACX,IAAA,GAAG;AAEX,IAAA,WAAA,CAAY,GAAa,EAAA;AACrB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAClB;AAEA;;;;;AAKG;IACH,MAAM,MAAM,CAAC,IAAY,EAAE,MAAA,GAAc,EAAE,EAAE,SAAkB,EAAA;QAC3D,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QACpD;QAEA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;AAEG;AACH,IAAA,MAAM,IAAI,GAAA;AACN,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACrD,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;;AAIG;AACH,IAAA,MAAM,OAAO,CAAC,IAAY,EAAE,SAAkB,EAAA;QAC1C,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;AAC/D,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,KAAA,CAAO,EAAE,EAAE,OAAO,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;AAEG;IACH,MAAM,cAAc,CAAC,SAAkB,EAAA;QACnC,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;AAC/D,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;AAEG;AACH,IAAA,MAAM,MAAM,CAAC,IAAY,EAAE,SAAkB,EAAA;QACzC,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;AAC/D,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;;AAIG;AACH,IAAA,MAAM,MAAM,CAAC,IAA0F,EAAE,SAAkB,EAAA;QACvH,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;AAC/D,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;AAEG;AACH,IAAA,MAAM,WAAW,GAAA;AACb,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACzD,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;;AAIG;AACH,IAAA,MAAM,aAAa,CAAC,OAAgB,EAAE,SAAkB,EAAA;QACpD,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QAC/D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC,IAAI;IACpB;AACH;;MC9FY,WAAW,CAAA;AACZ,IAAA,GAAG;AAEX,IAAA,WAAA,CAAY,GAAa,EAAA;AACrB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAClB;AAEA;;;;;;AAMG;IACH,MAAM,MAAM,CAAC,IAAS,EAAE,QAAgB,EAAE,QAAA,GAAgB,EAAE,EAAE,SAAkB,EAAA;AAC5E,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;QAC/B,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;AACvC,QAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAErD,QAAA,MAAM,OAAO,GAAQ;AACjB,YAAA,cAAc,EAAE;SACnB;QACD,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QACpD;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC;QAClF,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;AAGG;IACH,MAAM,IAAI,CAAC,SAAkB,EAAA;QACzB,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QACpD;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;;AAIG;AACH,IAAA,MAAM,QAAQ,CAAC,MAAc,EAAE,SAAkB,EAAA;QAC7C,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QACpD;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,aAAA,EAAgB,MAAM,EAAE,EAAE;YAC1D,OAAO;AACP,YAAA,YAAY,EAAE;AACjB,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;;AAIG;AACH,IAAA,MAAM,MAAM,CAAC,MAAc,EAAE,SAAkB,EAAA;QAC3C,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QACpD;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;AAGG;IACH,MAAM,WAAW,CAAC,SAAkB,EAAA;QAChC,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QACpD;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;;AAIG;AACH,IAAA,MAAM,OAAO,CAAC,MAAc,EAAE,SAAkB,EAAA;QAC5C,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QACpD;QAEA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,qBAAA,EAAwB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;;AAIG;AACH,IAAA,MAAM,KAAK,CAAC,MAAc,EAAE,SAAkB,EAAA;QAC1C,MAAM,OAAO,GAAQ,EAAE;QACvB,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;QACpD;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC,IAAI;IACpB;AACH;;MCzHY,UAAU,CAAA;AACX,IAAA,GAAG;AAEX,IAAA,WAAA,CAAY,GAAa,EAAA;AACrB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAClB;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,KAAK,CAAC,OAAe,EAAE,MAAA,GAAiB,KAAK,EAAE,KAAA,GAAgB,MAAM,EAAE,QAAA,GAAgB,EAAE,EAAA;QAC3F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC,IAAI;IACpB;AAEA;;;AAGG;AACH,IAAA,MAAM,KAAK,CAAC,KAAA,GAAa,EAAE,EAAA;AACvB,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC,IAAI;IACpB;AACH;;ACVD;;;AAGG;AACG,SAAU,UAAU,CAAC,GAAa,EAAA;IACpC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGC,cAAQ,CAAiB,IAAI,CAAC;IACtD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAgB,IAAI,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAwB,IAAI,CAAC;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAgB,IAAI,CAAC;IAEvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAS,CAAC,CAAC;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;;AAGjD,IAAA,MAAM,eAAe,GAAGC,YAAM,CAAgB,IAAI,CAAC;AACnD,IAAA,MAAM,QAAQ,GAAGA,YAAM,CAAwB,IAAI,CAAC;AAEpD,IAAA,MAAM,UAAU,GAAGC,iBAAW,CAAC,MAAK;AAChC,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AAClB,YAAA,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/B,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;QAC3B;IACJ,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,WAAW,GAAG,gBAAgB;;IAGpC,MAAM,YAAY,GAAGA,iBAAW,CAAC,OAAO,SAAiB,KAAI;QACzD,UAAU,CAAC,IAAI,CAAC;AAChB,QAAA,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACpD,QAAQ,CAAC,SAAS,CAAC;YACnB,OAAO,CAAC,OAAO,CAAC;AAChB,YAAA,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;QAChD;QAAE,OAAO,GAAQ,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC;YAChD,QAAQ,CAAC,iBAAiB,CAAC;AAC3B,YAAA,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC;YACd,OAAO,CAAC,IAAI,CAAC;QACjB;gBAAU;YACN,UAAU,CAAC,KAAK,CAAC;YACjB,eAAe,CAAC,KAAK,CAAC;QAC1B;AACJ,IAAA,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;IAGTC,eAAS,CAAC,MAAK;QACX,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;QACrD,IAAI,WAAW,EAAE;YACb,YAAY,CAAC,WAAW,CAAC;QAC7B;AACJ,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAElB,IAAA,MAAM,MAAM,GAAGD,iBAAW,CAAC,YAAW;QAClC,IAAI,KAAK,EAAE;YACP,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC;aAAO;AACH,YAAA,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;QACzB;AACA,QAAA,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC;QACd,UAAU,CAAC,IAAI,CAAC;QAChB,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,UAAU,EAAE;IAChB,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAE5B,IAAA,MAAM,MAAM,GAAGA,iBAAW,CAAC,MAAK;AAC5B,QAAA,eAAe,CAAC,OAAO,GAAG,IAAI;QAC9B,UAAU,CAAC,IAAI,CAAC;QAChB,eAAe,CAAC,KAAK,CAAC;QACtB,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,UAAU,EAAE;AACZ,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACzB,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAErB,IAAA,MAAM,KAAK,GAAGA,iBAAW,CAAC,YAAW;QACjC,eAAe,CAAC,IAAI,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC;QACd,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,UAAU,EAAE;AAEZ,QAAA,IAAI;YACA,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;YACjD,UAAU,CAAC,UAAU,CAAC;AACtB,YAAA,eAAe,CAAC,OAAO,GAAG,UAAU,CAAC,SAAS;;AAG9C,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;YAChE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;AAErE,YAAA,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC,MAAK;gBAChC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;gBAC1E,WAAW,CAAC,SAAS,CAAC;AAEtB,gBAAA,IAAI,SAAS,IAAI,CAAC,EAAE;oBAChB,YAAY,CAAC,IAAI,CAAC;AAClB,oBAAA,UAAU,EAAE;;gBAEhB;YACJ,CAAC,EAAE,IAAI,CAAC;AAER,YAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CACX,UAAU,CAAC,SAAS,EACpB,OAAO,aAAqB,KAAI;;AAE5B,gBAAA,IAAI,eAAe,CAAC,OAAO,KAAK,UAAU,CAAC,SAAS;oBAAE;AAEtD,gBAAA,UAAU,EAAE;AACZ,gBAAA,UAAU,CAAC,IAAI,CAAC,CAAC;;AAGjB,gBAAA,MAAM,YAAY,CAAC,aAAa,CAAC;AACrC,YAAA,CAAC,EACD,CAAC,GAAW,KAAI;AACZ,gBAAA,IAAI,eAAe,CAAC,OAAO,KAAK,UAAU,CAAC,SAAS;oBAAE;gBACtD,QAAQ,CAAC,GAAG,CAAC;gBACb,eAAe,CAAC,KAAK,CAAC;gBACtB,UAAU,CAAC,IAAI,CAAC;AAChB,gBAAA,UAAU,EAAE;AAChB,YAAA,CAAC,CACJ;QACL;QAAE,OAAO,GAAQ,EAAE;AACf,YAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,oCAAoC,CAAC;YAC7D,eAAe,CAAC,KAAK,CAAC;AACtB,YAAA,UAAU,EAAE;QAChB;IACJ,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;;IAGnCC,eAAS,CAAC,MAAK;AACX,QAAA,OAAO,MAAK;AACR,YAAA,UAAU,EAAE;AACZ,YAAA,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACzB,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAErB,OAAO;QACH,IAAI;QACJ,KAAK;QACL,OAAO;QACP,KAAK;QACL,OAAO;QACP,YAAY;QACZ,SAAS;QACT,QAAQ;QACR,KAAK;QACL,MAAM;QACN,MAAM;AACN,QAAA,gBAAgB,EAAE,CAAC,IAAa,EAAE,KAAa,KAAI;YAC/C,OAAO,CAAC,IAAI,CAAC;YACb,QAAQ,CAAC,KAAK,CAAC;AACf,YAAA,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;YACxC,eAAe,CAAC,KAAK,CAAC;QAC1B;KACH;AACL;;ACpKA;;AAEG;AACI,MAAM,eAAe,GAAmC,CAAC,EAC5D,GAAG,EACH,SAAS,EACT,OAAO,EACP,SAAS,EACT,UAAU,GAAG,qBAAqB,EACf,KAAI;IACvB,MAAM,EACF,IAAI,EACJ,KAAK,EACL,KAAK,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,MAAM,EACT,GAAG,UAAU,CAAC,GAAG,CAAC;AAEnB,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGrD,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACjB,QAAA,IAAI,IAAI,IAAI,KAAK,EAAE;AACf,YAAA,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;QAC1B;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;;AAG5B,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACjB,QAAA,IAAI,KAAK,IAAI,OAAO,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC;QAClB;AACJ,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAEpB,IAAA,QACI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACI,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,YAAY,IAAI,CAAC,CAAC,OAAO,EACnC,SAAS,EAAE,SAAS,IAAI,gBAAgB,EACxC,KAAK,EAAE;AACH,gBAAA,eAAe,EAAE,SAAS;AAC1B,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,YAAY,EAAE,MAAM;AACpB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,MAAM,EAAE,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,IAAI,aAAa,GAAG,SAAS;AAC/D,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,aAAa,EAAE,WAAW;AAC1B,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,aAAa,EAAE,OAAO;AACtB,gBAAA,SAAS,EAAE,mCAAmC;AAC9C,gBAAA,UAAU,EAAE;AACf,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;AACR,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,YAAY,EAAE,KAAK;AACnB,oBAAA,eAAe,EAAE,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,GAAG,MAAM;AAC9D,oBAAA,SAAS,EAAE,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,GAAG;iBACrD,EAAA,CAAI;AACJ,YAAA,YAAY,GAAG,wBAAwB,IAAI,OAAO,GAAG,kBAAkB,GAAG,UAAU,CAAC,CACjF;QAER,OAAO,KACJ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE;AACtC,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACpC,gBAAA,eAAe,EAAE,kBAAkB;AACnC,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,cAAc,EAAE,QAAQ;AACxB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,cAAc,EAAE;AACnB,aAAA,EAAA;AACG,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE;AACtC,oBAAA,eAAe,EAAE,SAAS;AAC1B,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,YAAY,EAAE,MAAM;AACpB,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,MAAM,EAAE,kCAAkC;AAC1C,oBAAA,SAAS,EAAE;AACd,iBAAA,EAAA;AACG,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAA;AAChC,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;AACR,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,eAAe,EAAE,wBAAwB;AACzC,4BAAA,MAAM,EAAE,kCAAkC;AAC1C,4BAAA,YAAY,EAAE;AACjB,yBAAA,EAAA;wBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,0BAA4B,CACxH;AACN,oBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA,EAAA,oBAAA,CAAyB;AAC7H,oBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,8EAElE,CACF;AAEN,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;AACR,wBAAA,eAAe,EAAE,MAAM;AACvB,wBAAA,OAAO,EAAE,MAAM;AACf,wBAAA,OAAO,EAAE,cAAc;AACvB,wBAAA,YAAY,EAAE,MAAM;AACpB,wBAAA,YAAY,EAAE,MAAM;AACpB,wBAAA,SAAS,EAAE;AACd,qBAAA,EAAA;AACG,oBAAA,KAAA,CAAA,aAAA,CAACC,sBAAS,EAAA,EACN,KAAK,EAAE,OAAO,CAAC,MAAM,EACrB,IAAI,EAAE,GAAG,EACT,KAAK,EAAC,GAAG,EACT,aAAa,EAAE,KAAK,EACpB,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,GAAG,GAAG,GAAG,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,EACnE,aAAa,EAAE;AACX,4BAAA,GAAG,EAAE,sCAAsC;AAC3C,4BAAA,CAAC,EAAE,SAAS;AACZ,4BAAA,CAAC,EAAE,SAAS;AACZ,4BAAA,MAAM,EAAE,EAAE;AACV,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,QAAQ,EAAE,IAAI;yBACjB,EAAA,CACH;AACD,oBAAA,SAAS,KACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;AACR,4BAAA,QAAQ,EAAE,UAAU;AACpB,4BAAA,GAAG,EAAE,KAAK;AACV,4BAAA,IAAI,EAAE,KAAK;AACX,4BAAA,SAAS,EAAE,uBAAuB;AAClC,4BAAA,KAAK,EAAE;AACV,yBAAA,EAAA;AACG,wBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,KAAK,EACd,KAAK,EAAE;AACH,gCAAA,eAAe,EAAE,SAAS;AAC1B,gCAAA,KAAK,EAAE,MAAM;AACb,gCAAA,MAAM,EAAE,MAAM;AACd,gCAAA,OAAO,EAAE,WAAW;AACpB,gCAAA,YAAY,EAAE,MAAM;AACpB,gCAAA,UAAU,EAAE,KAAK;AACjB,gCAAA,MAAM,EAAE,SAAS;AACjB,gCAAA,SAAS,EAAE,mCAAmC;AAC9C,gCAAA,QAAQ,EAAE;6BACb,EAAA,EAAA,YAAA,CAGI,CACP,CACT,CACC;gBAEL,SAAS,KACN,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAA,EAAA,kCAAA,CAExF,CACP;AAED,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAA;AAChC,oBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAA,EAAA,oBAAA,CAEpE;oBACJ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA;;wBAC3C,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA,gBAAA,CAA+B;+CACnC,CACF;AAEN,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAA;AAC3D,oBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;AAC5B,4BAAA,IAAI,EAAE,CAAC;AACP,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,eAAe,EAAE,aAAa;AAC9B,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,MAAM,EAAE,oCAAoC;AAC5C,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,MAAM,EAAE,SAAS;AACjB,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,UAAU,EAAE,UAAU;AACtB,4BAAA,QAAQ,EAAE;yBACb,EAAA,EAAA,QAAA,CAEQ;oBAGT,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,MAAK;4BACV,WAAW,CAAC,KAAK,CAAC;4BAClB,MAAM,QAAQ,GAAG,CAAA,+BAAA,EAAkC,OAAO,CAAC,SAAS,CAAA,CAAE,CAAC;;AAGvE,4BAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;AACxB,4BAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ;4BAE/B,UAAU,CAAC,MAAK;gCACZ,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,EAAE;oCAC3B,WAAW,CAAC,IAAI,CAAC;gCACrB;4BACJ,CAAC,EAAE,IAAI,CAAC;wBACZ,CAAC,EACD,KAAK,EAAE;AACH,4BAAA,IAAI,EAAE,CAAC;AACP,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,eAAe,EAAE,wBAAwB;AACzC,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,MAAM,EAAE,kCAAkC;AAC1C,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,MAAM,EAAE,SAAS;AACjB,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,UAAU,EAAE,QAAQ;AACpB,4BAAA,cAAc,EAAE,QAAQ;AACxB,4BAAA,UAAU,EAAE;yBACf,EACD,KAAK,EAAC,gCAAgC,EAAA;AAEtC,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA;4BAC5I,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAA,CAAG;AACzD,4BAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,CACzC,CACD,CACP;gBAEL,QAAQ,KACL,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAA,EAAA,kCAAA,CAErF,CACP;AAED,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA;;oBACvD,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACxC,oBAAA,KAAA,CAAA,CACJ,CACJ,CACT,CACF;AAEX;;ACvPA;;;;AAIG;AACI,MAAM,aAAa,GAAiC,CAAC,EACxD,GAAG,EACH,SAAS,EACT,OAAO,EACP,SAAS,EACZ,KAAI;IACD,QACI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,oBAAA,EAAuB,SAAS,IAAI,EAAE,CAAA,CAAE,EAAE,KAAK,EAAE;AAC7D,YAAA,UAAU,EAAE,qBAAqB;AACjC,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,SAAS,EAAE,6BAA6B;AACxC,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE;AACd,SAAA,EAAA;AACG,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAA;AAChC,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,EAAA,EAAA,gBAAA,CAE7F;AACL,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,iCAEtD,CACF;QAEN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAA;AAC3H,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAA;;gBAC5B,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA,cAAA,CAA6B;AACtF,gBAAA,GAAA,CAAA;YACJ,KAAA,CAAA,aAAA,CAAC,eAAe,IACZ,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAC,qBAAqB,EAChC,SAAS,EAAC,iBAAiB,EAAA,CAC7B,CACA;AAEN,QAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAA,EAAA,+CAAA,CAE/D,CACF;AAEd;;MCvDa,QAAQ,CAAA;AACT,IAAA,MAAM;AACP,IAAA,GAAG;AAEH,IAAA,IAAI;AACJ,IAAA,EAAE;AACF,IAAA,IAAI;AACJ,IAAA,KAAK;AACL,IAAA,IAAI;AAEX,IAAA,WAAA,CAAY,MAAiB,EAAA;QACzB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,OAAO,EAAE,0BAA0B;AACnC,YAAA,GAAG,MAAM;SACZ;AAED,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;AACpB,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC5B,YAAA,OAAO,EAAE;AACL,gBAAA,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC/B,gBAAA,cAAc,EAAE,kBAAkB;AACrC,aAAA;AACJ,SAAA,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;IACpC;AAEA;;AAEG;IACH,SAAS,GAAA;AACL,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;IAC7B;AAOH;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/modules/auth.ts","../../src/modules/db.ts","../../src/modules/edge.ts","../../src/modules/vault.ts","../../src/modules/logs.ts","../../src/modules/project.ts","../../src/modules/resource.ts","../../src/modules/sdk.ts","../../src/modules/billing.ts","../../src/hooks/useQidAuth.ts","../../src/components/QidSignInButton.tsx","../../src/components/QidCloudLogin.tsx","../../src/index.ts"],"sourcesContent":["import { io, Socket } from 'socket.io-client';\r\nimport { QidCloud } from '../index';\r\nimport { QidAuthSession, QidUser, QidSession } from '../types';\r\n\r\nexport class AuthModule {\r\n private sdk: QidCloud;\r\n private socket: Socket | null = null;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Initialize a new handshake session for QR login\r\n */\r\n async createSession(): Promise<QidAuthSession> {\r\n const resp = await this.sdk.api.post('/api/initiate-generic');\r\n const { sessionId, nonce } = resp.data;\r\n\r\n // Construct QR data (JSON format for mobile app)\r\n const qrData = JSON.stringify({\r\n sessionId,\r\n nonce,\r\n action: 'login-handshake',\r\n timestamp: Date.now()\r\n });\r\n\r\n return {\r\n sessionId,\r\n qrData,\r\n expiresAt: Date.now() + 120000 // 2 minutes\r\n };\r\n }\r\n\r\n /**\r\n * Listen for authorization events for a specific session\r\n */\r\n listen(sessionId: string, onAuthorized: (token: string) => void, onDenied?: (msg: string) => void) {\r\n if (!this.socket) {\r\n const baseUrl = this.sdk.getConfig().baseUrl || 'https://api.qidcloud.com';\r\n this.socket = io(baseUrl);\r\n }\r\n\r\n this.socket.emit('join', sessionId);\r\n\r\n this.socket.on('authenticated', (token: string) => {\r\n onAuthorized(token);\r\n });\r\n\r\n this.socket.on('identity_authorized', (data: any) => {\r\n // Some backend routes wrap the token in an object\r\n const token = typeof data === 'string' ? data : data.token;\r\n onAuthorized(token);\r\n });\r\n\r\n this.socket.on('identity_denied', (data: any) => {\r\n if (onDenied) onDenied(data.message || 'Authorization denied');\r\n });\r\n }\r\n\r\n /**\r\n * Terminate the session on the server\r\n */\r\n async logout(token: string): Promise<void> {\r\n if (!token) return;\r\n try {\r\n await this.sdk.api.post('/api/logout', {}, {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n } catch (e) {\r\n console.warn('Logout failed or session already expired');\r\n } finally {\r\n this.disconnect();\r\n }\r\n }\r\n\r\n /**\r\n * Stop listening and disconnect socket\r\n */\r\n disconnect() {\r\n if (this.socket) {\r\n this.socket.disconnect();\r\n this.socket = null;\r\n }\r\n }\r\n\r\n /**\r\n * Fetch user profile using a session token\r\n */\r\n async getProfile(token: string): Promise<QidUser> {\r\n const resp = await this.sdk.api.get('/api/me', {\r\n headers: {\r\n 'Authorization': `Bearer ${token}`\r\n }\r\n });\r\n const data = resp.data;\r\n return {\r\n userId: data.regUserId,\r\n regUserId: data.regUserId,\r\n username: data.username,\r\n email: data.email,\r\n role: data.role\r\n };\r\n }\r\n\r\n // --- Conventional Auth Methods ---\r\n\r\n /**\r\n * Login using username and password\r\n */\r\n async login(credentials: { username?: string; email?: string; password: string }): Promise<{ token: string; user: QidUser }> {\r\n const resp = await this.sdk.api.post('/api/login/conventional', credentials);\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Register a new user\r\n */\r\n async register(data: { username: string; email: string; password: string; fullName?: string }): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post('/api/register/conventional', data);\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Initiate registration (OTP based if configured)\r\n */\r\n async initiateRegistration(email: string): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post('/api/register/initiate', { email });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Verify OTP or mobile verification\r\n */\r\n async verify(data: { email?: string; otp?: string; token?: string }): Promise<{ success: boolean; token?: string }> {\r\n const resp = await this.sdk.api.post('/api/verify', data);\r\n return resp.data;\r\n }\r\n\r\n // --- Password & Account Management ---\r\n\r\n /**\r\n * Request a password reset link/OTP\r\n */\r\n async requestPasswordReset(email: string): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post('/api/password/reset/request', { email });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Confirm password reset with OTP and new password\r\n */\r\n async confirmPasswordReset(data: { email: string; otp: string; newPassword: string }): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post('/api/password/reset/confirm', data);\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Change current password (requires current token)\r\n */\r\n async changePassword(token: string, data: { currentPassword: string; newPassword: string }): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.post('/api/password/change', data, {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Delete user account\r\n */\r\n async deleteAccount(token: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.delete('/api/auth/account', {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n // --- MFA Management ---\r\n\r\n /**\r\n * Toggle MFA status (Enable/Disable)\r\n */\r\n async toggleMFA(token: string, data: { enabled: boolean; type: 'email' | 'totp' | 'mobile' }): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post('/api/auth/mfa/toggle', data, {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Verify MFA toggle request\r\n */\r\n async verifyMFA(token: string, otp: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.post('/api/auth/mfa/verify', { otp }, {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n // --- Session & Recovery ---\r\n\r\n /**\r\n * Refresh the current active session\r\n */\r\n async refreshSession(token: string): Promise<{ token: string }> {\r\n const resp = await this.sdk.api.post('/api/session/refresh', {}, {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * List all active sessions for the user\r\n */\r\n async getSessions(token: string): Promise<QidSession[]> {\r\n const resp = await this.sdk.api.get('/api/sessions', {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Revoke a specific session\r\n */\r\n async revokeSession(token: string, sessionToken: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.delete(`/api/sessions/${sessionToken}`, {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Initiate account recovery (password reset)\r\n */\r\n async initiateRecovery(email: string): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post('/api/recover', { email });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Verify recovery OTP and set new password\r\n */\r\n async verifyRecovery(data: { email: string; otp: string; newPassword: string }): Promise<{ success: boolean; token: string }> {\r\n const resp = await this.sdk.api.post('/api/recover/verify', data);\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Export all user data (GDPR requirement)\r\n */\r\n async exportUserData(token: string): Promise<any> {\r\n const resp = await this.sdk.api.get('/api/auth/account/export', {\r\n headers: { 'Authorization': `Bearer ${token}` }\r\n });\r\n return resp.data;\r\n }\r\n}\r\n\r\n","import { QidCloud } from '../index';\r\nimport { QidDbResponse, QidMigration, QidMigrateResult } from '../types';\r\n\r\nexport class DbModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Execute a SQL query against the project's enclave database\r\n * @param sql The SQL query string\r\n * @param params Parameterized values for the query\r\n * @param userToken Optional session token for user-scoped access\r\n */\r\n async query<T = any>(sql: string, params: any[] = [], userToken?: string): Promise<QidDbResponse<T>> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post('/api/db/query', { sql, params }, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Initialize the project's enclave database schema\r\n * Useful for first-time project setup\r\n */\r\n async setup(userToken?: string): Promise<{ success: boolean; schemaName: string }> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post('/api/db/setup', {}, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Run versioned migrations (Django-inspired).\r\n * Only applies migrations that haven't been applied yet.\r\n * Tracks applied migrations in a `_qid_migrations` table.\r\n * \r\n * @example\r\n * ```ts\r\n * await qid.db.migrate([\r\n * { version: '001', name: 'create_users', up: async () => { await qid.db.query('CREATE TABLE ...') } },\r\n * { version: '002', name: 'add_likes', up: async () => { await qid.db.query('ALTER TABLE ...') } },\r\n * ]);\r\n * ```\r\n * \r\n * @param migrations Ordered array of migrations to apply\r\n * @param userToken Optional session token\r\n * @returns Result with applied/skipped counts\r\n */\r\n async migrate(migrations: QidMigration[], userToken?: string): Promise<QidMigrateResult> {\r\n const result: QidMigrateResult = {\r\n success: true,\r\n applied: [],\r\n skipped: [],\r\n total: migrations.length,\r\n };\r\n\r\n try {\r\n // 1. Ensure the migrations tracking table exists\r\n await this.query(\r\n `CREATE TABLE IF NOT EXISTS _qid_migrations (\r\n version VARCHAR(50) PRIMARY KEY,\r\n name VARCHAR(255) NOT NULL,\r\n applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\r\n )`,\r\n [],\r\n userToken\r\n );\r\n\r\n // 2. Get already-applied migrations\r\n const appliedRes = await this.query<{ version: string }[]>(\r\n 'SELECT version FROM _qid_migrations ORDER BY version',\r\n [],\r\n userToken\r\n );\r\n const appliedVersions = new Set(\r\n ((appliedRes.data as any) || []).map((r: any) => r.version)\r\n );\r\n\r\n // 3. Run only new migrations, in order\r\n for (const migration of migrations) {\r\n if (appliedVersions.has(migration.version)) {\r\n result.skipped.push(migration.version);\r\n continue;\r\n }\r\n\r\n try {\r\n await migration.up();\r\n\r\n // Record as applied\r\n await this.query(\r\n 'INSERT INTO _qid_migrations (version, name) VALUES ($1, $2) ON CONFLICT (version) DO NOTHING',\r\n [migration.version, migration.name],\r\n userToken\r\n );\r\n\r\n result.applied.push(migration.version);\r\n } catch (migrationError: any) {\r\n result.success = false;\r\n result.failed = {\r\n version: migration.version,\r\n error: migrationError.message || 'Unknown error',\r\n };\r\n // Stop on first failure (like Django)\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n } catch (err: any) {\r\n return {\r\n success: false,\r\n applied: result.applied,\r\n skipped: result.skipped,\r\n failed: { version: 'init', error: err.message || 'Migration system init failed' },\r\n total: migrations.length,\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Get the current migration status\r\n * @param migrations The full list of registered migrations\r\n * @param userToken Optional session token\r\n */\r\n async migrateStatus(migrations: QidMigration[], userToken?: string): Promise<{\r\n applied: string[];\r\n pending: string[];\r\n total: number;\r\n }> {\r\n try {\r\n const appliedRes = await this.query<{ version: string }[]>(\r\n 'SELECT version FROM _qid_migrations ORDER BY version',\r\n [],\r\n userToken\r\n );\r\n const appliedVersions = new Set(\r\n ((appliedRes.data as any) || []).map((r: any) => r.version)\r\n );\r\n\r\n return {\r\n applied: migrations.filter(m => appliedVersions.has(m.version)).map(m => m.version),\r\n pending: migrations.filter(m => !appliedVersions.has(m.version)).map(m => m.version),\r\n total: migrations.length,\r\n };\r\n } catch {\r\n // Table doesn't exist yet = all pending\r\n return {\r\n applied: [],\r\n pending: migrations.map(m => m.version),\r\n total: migrations.length,\r\n };\r\n }\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\nimport { QidEdgeResponse } from '../types';\r\n\r\nexport class EdgeModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Invoke a serverless edge function\r\n * @param name Name of the function to invoke\r\n * @param params Arguments passed to the function\r\n * @param userToken Optional session token for user-scoped access\r\n */\r\n async invoke(name: string, params: any = {}, userToken?: string): Promise<QidEdgeResponse> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post('/api/edge/invoke', { name, params }, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * List all functions in the project enclave\r\n */\r\n async list(): Promise<any[]> {\r\n const resp = await this.sdk.api.get('/api/edge/list');\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get logs for a specific function\r\n * @param name Function name\r\n * @param userToken Optional session token\r\n */\r\n async getLogs(name: string, userToken?: string): Promise<any[]> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.get(`/api/edge/${name}/logs`, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get project-wide enclave logs\r\n */\r\n async getProjectLogs(userToken?: string): Promise<any[]> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.get('/api/edge/logs/project', { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Delete a function from the enclave\r\n */\r\n async delete(name: string, userToken?: string): Promise<{ success: boolean }> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.delete(`/api/edge/${name}`, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Deploy a new function or update an existing one\r\n * @param data Deployment data including name, code, and optional envVars\r\n * @param userToken Optional session token\r\n */\r\n async deploy(data: { name: string; code: string; runtime?: string; envVars?: any; overwrite?: boolean }, userToken?: string): Promise<{ success: boolean; message: string }> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.post('/api/edge/deploy', data, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get available serverless runtimes\r\n */\r\n async getRuntimes(): Promise<string[]> {\r\n const resp = await this.sdk.api.get('/api/edge/runtimes');\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Toggle centralized logging for the project's edge functions\r\n * @param enabled Whether to enable or disable logging\r\n * @param userToken Optional session token\r\n */\r\n async toggleLogging(enabled: boolean, userToken?: string): Promise<{ success: boolean; loggingEnabled: boolean }> {\r\n const headers: any = {};\r\n if (userToken) headers['Authorization'] = `Bearer ${userToken}`;\r\n const resp = await this.sdk.api.post('/api/edge/logs/settings', { enabled }, { headers });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\nimport { QidFile, QidUploadResponse, QidUploadProgress, QidUploadOptions } from '../types';\r\n\r\nconst DEFAULT_CHUNK_SIZE = 5 * 1024 * 1024; // 5MB\r\nconst CHUNKED_THRESHOLD = 10 * 1024 * 1024; // 10MB — above this, use chunked upload\r\n\r\nexport class VaultModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Upload a file to the project's secure enclave storage.\r\n * \r\n * Files < 10MB use single-shot upload.\r\n * Files >= 10MB automatically use chunked upload with progress tracking.\r\n * \r\n * @param file The file data (Buffer, Blob, or File)\r\n * @param fileName Name of the file\r\n * @param metadata Optional E2EE metadata or custom tags\r\n * @param userToken Session token for user-scoped storage\r\n * @param options Upload options (onProgress callback, custom chunk size)\r\n */\r\n async upload(\r\n file: any,\r\n fileName: string,\r\n metadata: any = {},\r\n userToken?: string,\r\n options?: QidUploadOptions\r\n ): Promise<QidUploadResponse> {\r\n const fileSize = file.size || file.length || file.byteLength || 0;\r\n\r\n // Auto-detect: use chunked upload for large files\r\n if (fileSize >= CHUNKED_THRESHOLD) {\r\n return this._chunkedUpload(file, fileName, fileSize, metadata, userToken, options);\r\n }\r\n\r\n // Small file — single-shot upload (existing behavior)\r\n return this._singleUpload(file, fileName, metadata, userToken);\r\n }\r\n\r\n /**\r\n * Single-shot upload for small files (< 10MB)\r\n */\r\n private async _singleUpload(file: any, fileName: string, metadata: any, userToken?: string): Promise<QidUploadResponse> {\r\n const formData = new FormData();\r\n formData.append('file', file, fileName);\r\n formData.append('metadata', JSON.stringify(metadata));\r\n\r\n const headers: any = {\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post('/api/storage/upload', formData, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Chunked upload for large files (>= 10MB)\r\n * Flow: init → upload chunks → complete\r\n */\r\n private async _chunkedUpload(\r\n file: any,\r\n fileName: string,\r\n fileSize: number,\r\n metadata: any,\r\n userToken?: string,\r\n options?: QidUploadOptions\r\n ): Promise<QidUploadResponse> {\r\n const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\r\n const totalChunks = Math.ceil(fileSize / chunkSize);\r\n const onProgress = options?.onProgress;\r\n\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n // 1. Initialize upload session\r\n const initResp = await this.sdk.api.post('/api/storage/upload/init', {\r\n fileName,\r\n fileSize,\r\n mimeType: file.type || 'application/octet-stream',\r\n totalChunks,\r\n metadata\r\n }, { headers });\r\n\r\n const { uploadId } = initResp.data;\r\n let uploadedChunks = 0;\r\n\r\n // 2. Upload chunks sequentially\r\n for (let i = 0; i < totalChunks; i++) {\r\n const start = i * chunkSize;\r\n const end = Math.min(start + chunkSize, fileSize);\r\n\r\n // Slice the chunk from the file\r\n let chunkData: any;\r\n if (file.slice) {\r\n // Blob or File object\r\n chunkData = file.slice(start, end);\r\n } else if (file.subarray) {\r\n // Buffer or Uint8Array\r\n chunkData = file.subarray(start, end);\r\n } else if (typeof file === 'object' && file.data) {\r\n // express-fileupload style\r\n chunkData = file.data.subarray(start, end);\r\n }\r\n\r\n // Build FormData for this chunk\r\n const chunkForm = new FormData();\r\n const chunkBlob = chunkData instanceof Blob ? chunkData : new Blob([chunkData]);\r\n chunkForm.append('chunk', chunkBlob, `chunk_${i}`);\r\n\r\n await this.sdk.api.put(\r\n `/api/storage/upload/${uploadId}/chunk/${i}`,\r\n chunkForm,\r\n {\r\n headers: {\r\n ...headers,\r\n 'Content-Type': 'multipart/form-data'\r\n }\r\n }\r\n );\r\n\r\n uploadedChunks++;\r\n\r\n // Report progress\r\n if (onProgress) {\r\n onProgress({\r\n percent: Math.round((uploadedChunks / totalChunks) * 100),\r\n uploadedChunks,\r\n totalChunks,\r\n uploadedBytes: Math.min(uploadedChunks * chunkSize, fileSize),\r\n totalBytes: fileSize\r\n });\r\n }\r\n }\r\n\r\n // 3. Complete upload — server reassembles, encrypts, stores\r\n const completeResp = await this.sdk.api.post(\r\n `/api/storage/upload/${uploadId}/complete`,\r\n { metadata },\r\n { headers }\r\n );\r\n\r\n // Final 100% progress\r\n if (onProgress) {\r\n onProgress({\r\n percent: 100,\r\n uploadedChunks: totalChunks,\r\n totalChunks,\r\n uploadedBytes: fileSize,\r\n totalBytes: fileSize\r\n });\r\n }\r\n\r\n return completeResp.data;\r\n }\r\n\r\n /**\r\n * Get the status of a chunked upload (for resume support)\r\n */\r\n async getUploadStatus(uploadId: string, userToken?: string): Promise<any> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.get(`/api/storage/upload/${uploadId}/status`, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Resume a partially completed chunked upload\r\n */\r\n async resumeUpload(\r\n uploadId: string,\r\n file: any,\r\n userToken?: string,\r\n options?: QidUploadOptions\r\n ): Promise<QidUploadResponse> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n // Get current status to find missing chunks\r\n const status = await this.getUploadStatus(uploadId, userToken);\r\n if (status.status !== 'uploading') {\r\n throw new Error(`Upload is in \"${status.status}\" state and cannot be resumed`);\r\n }\r\n\r\n const chunkSize = options?.chunkSize || status.chunkSize || DEFAULT_CHUNK_SIZE;\r\n const onProgress = options?.onProgress;\r\n const missingChunks: number[] = status.missingChunks;\r\n const totalChunks: number = status.totalChunks;\r\n const fileSize: number = status.fileSize;\r\n let uploadedChunks = status.receivedChunks.length;\r\n\r\n // Upload only the missing chunks\r\n for (const i of missingChunks) {\r\n const start = i * chunkSize;\r\n const end = Math.min(start + chunkSize, fileSize);\r\n\r\n let chunkData: any;\r\n if (file.slice) {\r\n chunkData = file.slice(start, end);\r\n } else if (file.subarray) {\r\n chunkData = file.subarray(start, end);\r\n }\r\n\r\n const chunkForm = new FormData();\r\n const chunkBlob = chunkData instanceof Blob ? chunkData : new Blob([chunkData]);\r\n chunkForm.append('chunk', chunkBlob, `chunk_${i}`);\r\n\r\n await this.sdk.api.put(\r\n `/api/storage/upload/${uploadId}/chunk/${i}`,\r\n chunkForm,\r\n {\r\n headers: {\r\n ...headers,\r\n 'Content-Type': 'multipart/form-data'\r\n }\r\n }\r\n );\r\n\r\n uploadedChunks++;\r\n\r\n if (onProgress) {\r\n onProgress({\r\n percent: Math.round((uploadedChunks / totalChunks) * 100),\r\n uploadedChunks,\r\n totalChunks,\r\n uploadedBytes: Math.min(uploadedChunks * chunkSize, fileSize),\r\n totalBytes: fileSize\r\n });\r\n }\r\n }\r\n\r\n // Complete\r\n const completeResp = await this.sdk.api.post(\r\n `/api/storage/upload/${uploadId}/complete`,\r\n {},\r\n { headers }\r\n );\r\n\r\n return completeResp.data;\r\n }\r\n\r\n /**\r\n * List files in the project enclave\r\n */\r\n async list(userToken?: string): Promise<QidFile[]> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.get('/api/storage/list', { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Download a file from storage\r\n */\r\n async download(fileId: string, userToken?: string): Promise<ArrayBuffer> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.get(`/api/storage/${fileId}`, {\r\n headers,\r\n responseType: 'arraybuffer'\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Delete a file from storage (Soft Delete)\r\n */\r\n async delete(fileId: string, userToken?: string): Promise<{ success: boolean; message: string }> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.delete(`/api/storage/${fileId}`, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * List deleted files in the project enclave (Recycle Bin)\r\n */\r\n async listDeleted(userToken?: string): Promise<QidFile[]> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.get('/api/storage/deleted', { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Restore a deleted file from the recycle bin\r\n */\r\n async restore(fileId: string, userToken?: string): Promise<{ success: boolean; message: string }> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.post(`/api/storage/restore/${fileId}`, {}, { headers });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Permanently purge a deleted file\r\n */\r\n async purge(fileId: string, userToken?: string): Promise<{ success: boolean; message: string }> {\r\n const headers: any = {};\r\n if (userToken) {\r\n headers['Authorization'] = `Bearer ${userToken}`;\r\n }\r\n\r\n const resp = await this.sdk.api.delete(`/api/storage/purge/${fileId}`, { headers });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\n\r\nexport class LogsModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Write a custom application log to the project enclave\r\n * @param message The log message\r\n * @param source The source of the log (e.g. 'auth-service', 'frontend')\r\n * @param level Log level (info, warn, error)\r\n * @param metadata Structured data for searching/filtering\r\n */\r\n async write(message: string, source: string = 'app', level: string = 'info', metadata: any = {}): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.post('/api/logs', { message, source, level, metadata });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Retrieve application logs for the project\r\n * @param query Filters (limit, level, etc.)\r\n */\r\n async fetch(query: any = {}): Promise<any[]> {\r\n const resp = await this.sdk.api.get('/api/logs', { params: query });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\nimport { QidProject, QidProjectSettings, QidUser } from '../types';\r\n\r\nexport class ProjectModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Get all projects owned by the currently authenticated user\r\n */\r\n async getMyProjects(userToken: string): Promise<QidProject[]> {\r\n const resp = await this.sdk.api.get('/api/projects/my-projects', {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Create a new project\r\n */\r\n async createProject(userToken: string, data: { name: string; tier?: string }): Promise<QidProject> {\r\n const resp = await this.sdk.api.post('/api/projects', data, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Update project basic details (e.g. rename)\r\n */\r\n async updateProject(userToken: string, tenantId: string, data: { name: string }): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.patch(`/api/projects/${tenantId}`, data, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Rotate the API key for a project\r\n */\r\n async rotateApiKey(userToken: string, tenantId: string): Promise<{ success: boolean; apiKey: string }> {\r\n const resp = await this.sdk.api.post(`/api/projects/${tenantId}/rotate-key`, {}, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get project specific settings\r\n */\r\n async getSettings(userToken: string, tenantId: string): Promise<QidProjectSettings> {\r\n const resp = await this.sdk.api.get(`/api/projects/${tenantId}/settings`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Update project settings\r\n */\r\n async updateSettings(userToken: string, tenantId: string, settings: QidProjectSettings): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.patch(`/api/projects/${tenantId}/settings`, settings, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Invite a new member to the project\r\n */\r\n async inviteMember(userToken: string, tenantId: string, data: { email: string; role: string }): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.post(`/api/projects/${tenantId}/invite`, data, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Remove a member from the project\r\n */\r\n async removeMember(userToken: string, tenantId: string, userId: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.delete(`/api/projects/${tenantId}/members/${userId}`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get all users/members associated with a project\r\n */\r\n async getProjectUsers(userToken: string, tenantId: string): Promise<any[]> {\r\n const resp = await this.sdk.api.get(`/api/projects/${tenantId}/users`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get all invitations for the currently authenticated user\r\n */\r\n async getMyInvitations(userToken: string): Promise<any[]> {\r\n const resp = await this.sdk.api.get('/api/projects/invitations', {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Accept or reject a project invitation\r\n */\r\n async handleInvitationAction(userToken: string, tenantId: string, action: 'accept' | 'reject'): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.post(`/api/projects/${tenantId}/invitations/${action}`, {}, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Update a member's permissions within a project\r\n */\r\n async updateMemberPermissions(userToken: string, tenantId: string, userId: string, permissions: any): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.patch(`/api/projects/${tenantId}/members/${userId}/permissions`, { permissions }, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Update a project user's status (active/suspended)\r\n */\r\n async updateProjectUserStatus(userToken: string, tenantId: string, regUserId: string, status: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.patch(`/api/projects/${tenantId}/users/${regUserId}/status`, { status }, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Unlink/Remove a user from the project identity enclave\r\n */\r\n async unlinkProjectUser(userToken: string, tenantId: string, regUserId: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.delete(`/api/projects/${tenantId}/users/${regUserId}`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Generate a new service key for the project\r\n */\r\n async generateServiceKey(userToken: string, tenantId: string, data: { name: string; permissions: any }): Promise<any> {\r\n const resp = await this.sdk.api.post(`/api/projects/${tenantId}/service-keys`, data, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Revoke an existing service key\r\n */\r\n async revokeServiceKey(userToken: string, tenantId: string, keyId: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.delete(`/api/projects/${tenantId}/service-keys/${keyId}`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Permanently wipe the project's identity enclave data\r\n */\r\n async wipeProjectEnclave(userToken: string, tenantId: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.post(`/api/projects/${tenantId}/wipe`, {}, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Retrieve security and audit logs for the project\r\n */\r\n async getProjectSecurityLogs(userToken: string, tenantId: string): Promise<any[]> {\r\n const resp = await this.sdk.api.get(`/api/projects/${tenantId}/logs`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\nimport { QidResourceStatus } from '../types';\r\n\r\nexport class ResourceModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Get the status of all resources for a specific tenant\r\n */\r\n async getStatus(userToken: string, tenantId: string): Promise<QidResourceStatus[]> {\r\n const resp = await this.sdk.api.get(`/api/resources/${tenantId}`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Provision a new resource type for a project\r\n * @param resourceType 'database' | 'storage' | 'edge'\r\n */\r\n async provision(userToken: string, tenantId: string, resourceType: string): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post(`/api/resources/${tenantId}/provision/${resourceType}`, {}, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Dissolve (delete) an existing resource from a project\r\n */\r\n async dissolve(userToken: string, tenantId: string, resourceType: string): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.delete(`/api/resources/${tenantId}/provision/${resourceType}`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\n\r\nexport class SdkModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Get allowed origins for a project\r\n */\r\n async getOrigins(userToken: string, tenantId: string): Promise<string[]> {\r\n const resp = await this.sdk.api.get(`/api/sdk/${tenantId}/origins`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Add an allowed origin for SDK requests\r\n */\r\n async addOrigin(userToken: string, tenantId: string, domain: string): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post(`/api/sdk/${tenantId}/origins`, { domain }, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Remove an allowed origin\r\n */\r\n async removeOrigin(userToken: string, tenantId: string, domain: string): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.delete(`/api/sdk/${tenantId}/origins/${domain}`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Test if an origin is allowed\r\n */\r\n async testOrigin(userToken: string, tenantId: string, domain: string): Promise<{ allowed: boolean }> {\r\n const resp = await this.sdk.api.post(`/api/sdk/${tenantId}/origins/test`, { domain }, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n}\r\n","import { QidCloud } from '../index';\r\nimport { QidBillingInfo, QidTransaction } from '../types';\r\n\r\nexport class BillingModule {\r\n private sdk: QidCloud;\r\n\r\n constructor(sdk: QidCloud) {\r\n this.sdk = sdk;\r\n }\r\n\r\n /**\r\n * Retrieve all available plans and their pricing\r\n */\r\n async getPlans(): Promise<any> {\r\n const resp = await this.sdk.api.get('/api/billing/plans');\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get detailed billing and usage info for a project\r\n */\r\n async getProjectBillingInfo(userToken: string, tenantId: string): Promise<QidBillingInfo> {\r\n const resp = await this.sdk.api.get(`/api/billing/${tenantId}`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Sync payment status after a successful Razorpay transaction\r\n * @param paymentId The Razorpay payment ID\r\n */\r\n async syncPaymentStatus(userToken: string, paymentId: string): Promise<{ success: boolean; message: string }> {\r\n const resp = await this.sdk.api.post('/api/billing/sync', { paymentId }, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get transaction history for the current user\r\n */\r\n async getTransactions(userToken: string): Promise<QidTransaction[]> {\r\n const resp = await this.sdk.api.get('/api/billing/history/transactions', {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get usage analytics and history\r\n */\r\n async getUsageAnalytics(userToken: string): Promise<any> {\r\n const resp = await this.sdk.api.get('/api/billing/history/analytics', {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Get billing alerts for a specific project\r\n */\r\n async getBillingAlerts(userToken: string, tenantId: string): Promise<any[]> {\r\n const resp = await this.sdk.api.get(`/api/billing/${tenantId}/alerts`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Create or update a billing alert\r\n */\r\n async createBillingAlert(userToken: string, tenantId: string, data: { resource: string; threshold: number }): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.post(`/api/billing/${tenantId}/alerts`, data, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Delete a billing alert\r\n */\r\n async deleteBillingAlert(userToken: string, alertId: string): Promise<{ success: boolean }> {\r\n const resp = await this.sdk.api.delete(`/api/billing/alerts/${alertId}`, {\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n\r\n /**\r\n * Generate a consolidated financial report\r\n */\r\n async getConsolidatedReport(userToken: string, query?: { year?: number; startDate?: string; endDate?: string }): Promise<any> {\r\n const resp = await this.sdk.api.get('/api/billing/report/consolidated', {\r\n params: query,\r\n headers: { 'Authorization': `Bearer ${userToken}` }\r\n });\r\n return resp.data;\r\n }\r\n}\r\n","import { useState, useCallback, useEffect, useRef } from 'react';\r\nimport { QidCloud } from '../index';\r\nimport { QidUser, QidAuthSession } from '../types';\r\n\r\nexport interface UseQidAuthReturn {\r\n user: QidUser | null;\r\n token: string | null;\r\n loading: boolean;\r\n error: string | null;\r\n session: QidAuthSession | null;\r\n initializing: boolean;\r\n isExpired: boolean;\r\n timeLeft: number;\r\n login: () => Promise<void>;\r\n logout: () => void;\r\n cancel: () => void;\r\n setAuthenticated: (user: QidUser, token: string) => void;\r\n}\r\n\r\n/**\r\n * A React hook for managing QidCloud authentication lifecycle.\r\n * Handles handshake initialization, WebSocket listeners, and profile fetching.\r\n */\r\nexport function useQidAuth(sdk: QidCloud): UseQidAuthReturn {\r\n const [user, setUser] = useState<QidUser | null>(null);\r\n const [token, setToken] = useState<string | null>(null);\r\n const [session, setSession] = useState<QidAuthSession | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [initializing, setInitializing] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const [timeLeft, setTimeLeft] = useState<number>(0);\r\n const [isExpired, setIsExpired] = useState(false);\r\n\r\n // Use ref to track if we should still be listening (to avoid state updates after unmount/cancel)\r\n const activeSessionId = useRef<string | null>(null);\r\n const timerRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n const clearTimer = useCallback(() => {\r\n if (timerRef.current) {\r\n clearInterval(timerRef.current);\r\n timerRef.current = null;\r\n }\r\n }, []);\r\n\r\n const STORAGE_KEY = 'qid_auth_token';\r\n\r\n // Helper to fetch profile\r\n const fetchProfile = useCallback(async (authToken: string) => {\r\n setLoading(true);\r\n try {\r\n const profile = await sdk.auth.getProfile(authToken);\r\n setToken(authToken);\r\n setUser(profile);\r\n localStorage.setItem(STORAGE_KEY, authToken);\r\n } catch (err: any) {\r\n console.error('Failed to restore session:', err);\r\n setError('Session expired');\r\n localStorage.removeItem(STORAGE_KEY);\r\n setToken(null);\r\n setUser(null);\r\n } finally {\r\n setLoading(false);\r\n setInitializing(false);\r\n }\r\n }, [sdk]);\r\n\r\n // Init: Check local storage\r\n useEffect(() => {\r\n const storedToken = localStorage.getItem(STORAGE_KEY);\r\n if (storedToken) {\r\n fetchProfile(storedToken);\r\n }\r\n }, [fetchProfile]);\r\n\r\n const logout = useCallback(async () => {\r\n if (token) {\r\n await sdk.auth.logout(token);\r\n } else {\r\n sdk.auth.disconnect();\r\n }\r\n localStorage.removeItem(STORAGE_KEY);\r\n setUser(null);\r\n setToken(null);\r\n setSession(null);\r\n setIsExpired(false);\r\n clearTimer();\r\n }, [sdk, token, clearTimer]);\r\n\r\n const cancel = useCallback(() => {\r\n activeSessionId.current = null;\r\n setSession(null);\r\n setInitializing(false);\r\n setIsExpired(false);\r\n clearTimer();\r\n sdk.auth.disconnect();\r\n }, [sdk, clearTimer]);\r\n\r\n const login = useCallback(async () => {\r\n setInitializing(true);\r\n setError(null);\r\n setIsExpired(false);\r\n clearTimer();\r\n\r\n try {\r\n const newSession = await sdk.auth.createSession();\r\n setSession(newSession);\r\n activeSessionId.current = newSession.sessionId;\r\n\r\n // Start Timer\r\n const expiresAt = newSession.expiresAt || (Date.now() + 120000); // Fallback 2m\r\n setTimeLeft(Math.max(0, Math.floor((expiresAt - Date.now()) / 1000)));\r\n\r\n timerRef.current = setInterval(() => {\r\n const remaining = Math.max(0, Math.floor((expiresAt - Date.now()) / 1000));\r\n setTimeLeft(remaining);\r\n\r\n if (remaining <= 0) {\r\n setIsExpired(true);\r\n clearTimer();\r\n // Don't nullify session immediately, let UI show expiry state\r\n }\r\n }, 1000);\r\n\r\n sdk.auth.listen(\r\n newSession.sessionId,\r\n async (receivedToken: string) => {\r\n // Safety check: is this still the active session?\r\n if (activeSessionId.current !== newSession.sessionId) return;\r\n\r\n clearTimer();\r\n setSession(null); // Clear QR session\r\n\r\n // Fetch profile and persist\r\n await fetchProfile(receivedToken);\r\n },\r\n (err: string) => {\r\n if (activeSessionId.current !== newSession.sessionId) return;\r\n setError(err);\r\n setInitializing(false);\r\n setSession(null);\r\n clearTimer();\r\n }\r\n );\r\n } catch (err: any) {\r\n setError(err.message || 'Failed to initiate login handshake');\r\n setInitializing(false);\r\n clearTimer();\r\n }\r\n }, [sdk, clearTimer, fetchProfile]);\r\n\r\n // Cleanup on unmount\r\n useEffect(() => {\r\n return () => {\r\n clearTimer();\r\n sdk.auth.disconnect();\r\n };\r\n }, [sdk, clearTimer]);\r\n\r\n return {\r\n user,\r\n token,\r\n loading,\r\n error,\r\n session,\r\n initializing,\r\n isExpired,\r\n timeLeft,\r\n login,\r\n logout,\r\n cancel,\r\n setAuthenticated: (user: QidUser, token: string) => {\r\n setUser(user);\r\n setToken(token);\r\n localStorage.setItem(STORAGE_KEY, token);\r\n setInitializing(false);\r\n }\r\n };\r\n}\r\n","import React from 'react';\r\nimport { QRCodeSVG } from 'qrcode.react';\r\nimport { QidCloud } from '../index';\r\nimport { QidUser } from '../types';\r\nimport { useQidAuth } from '../hooks/useQidAuth';\r\n\r\ninterface QidSignInButtonProps {\r\n sdk: QidCloud;\r\n onSuccess: (user: QidUser, token: string) => void;\r\n onError?: (error: string) => void;\r\n className?: string;\r\n buttonText?: string;\r\n}\r\n\r\n/**\r\n * A ready-to-use React component for QidCloud QR identity authentication.\r\n */\r\nexport const QidSignInButton: React.FC<QidSignInButtonProps> = ({\r\n sdk,\r\n onSuccess,\r\n onError,\r\n className,\r\n buttonText = 'LOGIN WITH QIDCLOUD'\r\n}: QidSignInButtonProps) => {\r\n const {\r\n user,\r\n token,\r\n error,\r\n session,\r\n initializing,\r\n isExpired,\r\n timeLeft,\r\n login,\r\n cancel\r\n } = useQidAuth(sdk);\r\n\r\n const [appError, setAppError] = React.useState(false);\r\n\r\n // Watch for success\r\n React.useEffect(() => {\r\n if (user && token) {\r\n onSuccess(user, token);\r\n }\r\n }, [user, token, onSuccess]);\r\n\r\n // Watch for errors\r\n React.useEffect(() => {\r\n if (error && onError) {\r\n onError(error);\r\n }\r\n }, [error, onError]);\r\n\r\n return (\r\n <>\r\n <button\r\n onClick={login}\r\n disabled={initializing || !!session}\r\n className={className || 'qid-signin-btn'}\r\n style={{\r\n backgroundColor: '#00e5ff',\r\n color: '#000',\r\n padding: '12px 24px',\r\n borderRadius: '12px',\r\n border: 'none',\r\n fontWeight: '900',\r\n cursor: (initializing || !!session) ? 'not-allowed' : 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '10px',\r\n textTransform: 'uppercase',\r\n fontSize: '0.85rem',\r\n letterSpacing: '0.5px',\r\n boxShadow: '0 4px 15px rgba(0, 229, 255, 0.3)',\r\n transition: 'all 0.2s'\r\n }}\r\n >\r\n <div style={{\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '50%',\r\n backgroundColor: (initializing || !!session) ? '#333' : '#000',\r\n boxShadow: (initializing || !!session) ? 'none' : '0 0 8px rgba(0,0,0,0.5)'\r\n }} />\r\n {initializing ? 'Preparing Handshake...' : (session ? 'Awaiting Scan...' : buttonText)}\r\n </button>\r\n\r\n {session && (\r\n <div className=\"qid-modal-overlay\" style={{\r\n position: 'fixed',\r\n top: 0, left: 0, right: 0, bottom: 0,\r\n backgroundColor: 'rgba(0,0,0,0.92)',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n zIndex: 9999,\r\n backdropFilter: 'blur(8px)'\r\n }}>\r\n <div className=\"qid-modal-content\" style={{\r\n backgroundColor: '#0a0a0a',\r\n padding: '40px',\r\n borderRadius: '28px',\r\n textAlign: 'center',\r\n color: '#fff',\r\n maxWidth: '420px',\r\n width: '90%',\r\n border: '1px solid rgba(0, 229, 255, 0.2)',\r\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)'\r\n }}>\r\n <div style={{ marginBottom: '25px' }}>\r\n <div style={{\r\n display: 'inline-block',\r\n padding: '12px 20px',\r\n borderRadius: '30px',\r\n backgroundColor: 'rgba(0, 229, 255, 0.1)',\r\n border: '1px solid rgba(0, 229, 255, 0.3)',\r\n marginBottom: '15px'\r\n }}>\r\n <span style={{ color: '#00e5ff', fontSize: '0.7rem', fontWeight: '900', letterSpacing: '2px' }}>PQC ENCLAVE SECURED</span>\r\n </div>\r\n <h2 style={{ fontSize: '1.75rem', fontWeight: '900', marginBottom: '10px', letterSpacing: '-0.5px' }}>Identity Handshake</h2>\r\n <p style={{ fontSize: '0.95rem', color: '#94a3b8', lineHeight: '1.6' }}>\r\n Scan this encrypted gateway with your QidCloud app to authorize access.\r\n </p>\r\n </div>\r\n\r\n <div style={{\r\n backgroundColor: '#fff',\r\n padding: '24px',\r\n display: 'inline-block',\r\n borderRadius: '24px',\r\n marginBottom: '30px',\r\n boxShadow: '0 10px 40px rgba(0,0,0,0.3)'\r\n }}>\r\n <QRCodeSVG\r\n value={session.qrData}\r\n size={220}\r\n level=\"H\"\r\n includeMargin={false}\r\n style={{ opacity: isExpired ? 0.1 : 1, transition: 'opacity 0.3s' }}\r\n imageSettings={{\r\n src: \"https://api.qidcloud.com/favicon.ico\",\r\n x: undefined,\r\n y: undefined,\r\n height: 40,\r\n width: 40,\r\n excavate: true,\r\n }}\r\n />\r\n {isExpired && (\r\n <div style={{\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width: '100%'\r\n }}>\r\n <button\r\n onClick={login}\r\n style={{\r\n backgroundColor: '#00e5ff',\r\n color: '#000',\r\n border: 'none',\r\n padding: '12px 20px',\r\n borderRadius: '12px',\r\n fontWeight: '900',\r\n cursor: 'pointer',\r\n boxShadow: '0 4px 15px rgba(0, 229, 255, 0.4)',\r\n fontSize: '0.8rem'\r\n }}\r\n >\r\n REFRESH QR\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {isExpired && (\r\n <p style={{ color: '#ef4444', fontSize: '0.85rem', marginBottom: '20px', fontWeight: '600' }}>\r\n Session expired. Please refresh.\r\n </p>\r\n )}\r\n\r\n <div style={{ marginBottom: '20px' }}>\r\n <p style={{ fontSize: '0.85rem', color: '#94a3b8', marginBottom: '8px' }}>\r\n Are you on mobile?\r\n </p>\r\n <p style={{ fontSize: '0.75rem', color: '#64748b' }}>\r\n Use <strong>One-Click Auth</strong> for instant access.\r\n </p>\r\n </div>\r\n\r\n <div style={{ display: 'flex', gap: '12px', marginTop: '10px' }}>\r\n <button onClick={cancel} style={{\r\n flex: 2,\r\n padding: '16px',\r\n backgroundColor: 'transparent',\r\n color: '#64748b',\r\n border: '1px solid rgba(148, 163, 184, 0.2)',\r\n borderRadius: '16px',\r\n cursor: 'pointer',\r\n fontWeight: '700',\r\n transition: 'all 0.2s',\r\n fontSize: '0.9rem'\r\n }}>\r\n Cancel\r\n </button>\r\n\r\n {/* Mobile Deep Link Button */}\r\n <button\r\n onClick={() => {\r\n setAppError(false);\r\n const deepLink = `qidcloud://authorize?sessionId=${session.sessionId}`; // Corrected format per docs\r\n\r\n // Timeout to check if app opened\r\n const start = Date.now();\r\n window.location.href = deepLink;\r\n\r\n setTimeout(() => {\r\n if (Date.now() - start < 1500) {\r\n setAppError(true);\r\n }\r\n }, 1000);\r\n }}\r\n style={{\r\n flex: 1,\r\n padding: '16px',\r\n backgroundColor: 'rgba(0, 229, 255, 0.1)',\r\n color: '#00e5ff',\r\n border: '1px solid rgba(0, 229, 255, 0.3)',\r\n borderRadius: '16px',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n transition: 'all 0.2s'\r\n }}\r\n title=\"Authenticate with QidCloud App\"\r\n >\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\" />\r\n <line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {appError && (\r\n <p style={{ color: '#f59e0b', fontSize: '0.75rem', marginTop: '12px', fontWeight: '600' }}>\r\n QidCloud App not found on device\r\n </p>\r\n )}\r\n\r\n <div style={{ marginTop: '25px', fontSize: '0.75rem', color: '#475569' }}>\r\n Session ID: {session.sessionId.slice(0, 8)}...\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { QidCloud } from '../index';\r\nimport { QidSignInButton } from './QidSignInButton';\r\nimport { QidUser } from '../types';\r\n\r\ninterface QidCloudLoginProps {\r\n sdk: QidCloud;\r\n onSuccess: (user: QidUser, token: string) => void;\r\n onError?: (error: string) => void;\r\n className?: string; // Wrapper class\r\n}\r\n\r\n/**\r\n * A comprehensive login component for QidCloud.\r\n * STRICT SECURITY: ONLY supports QR Scanning (Mobile App) for Post-Quantum security.\r\n * Conventional login is not available in the SDK to prevent password transmission in third-party apps.\r\n */\r\nexport const QidCloudLogin: React.FC<QidCloudLoginProps> = ({\r\n sdk,\r\n onSuccess,\r\n onError,\r\n className\r\n}) => {\r\n return (\r\n <div className={`qid-login-container ${className || ''}`} style={{\r\n fontFamily: \"'Inter', sans-serif\",\r\n maxWidth: '380px',\r\n margin: '0 auto',\r\n padding: '30px',\r\n backgroundColor: '#050505',\r\n borderRadius: '24px',\r\n border: '1px solid #333',\r\n boxShadow: '0 20px 80px rgba(0,0,0,0.8)',\r\n color: '#fff',\r\n textAlign: 'center'\r\n }}>\r\n <div style={{ marginBottom: '30px' }}>\r\n <h2 style={{ fontSize: '1.5rem', fontWeight: 700, margin: '0 0 10px 0', letterSpacing: '-0.02em' }}>\r\n QidCloud Login\r\n </h2>\r\n <p style={{ color: '#888', fontSize: '0.9rem', margin: 0 }}>\r\n Secure Post-Quantum Access\r\n </p>\r\n </div>\r\n\r\n <div style={{ marginBottom: '20px', padding: '10px', backgroundColor: '#111', borderRadius: '16px', border: '1px dashed #333' }}>\r\n <p style={{ fontSize: '0.85rem', color: '#888', marginBottom: '20px', lineHeight: '1.5' }}>\r\n Login instantly by scanning the secure QR code with your <strong>QidCloud App</strong>.\r\n </p>\r\n <QidSignInButton\r\n sdk={sdk}\r\n onSuccess={onSuccess}\r\n onError={onError}\r\n buttonText=\"Login with QIDCLOUD\"\r\n className=\"qid-qr-btn-full\"\r\n />\r\n </div>\r\n\r\n <p style={{ fontSize: '0.75rem', color: '#444', marginTop: '20px' }}>\r\n Credentials are never entered on this device.\r\n </p>\r\n </div>\r\n );\r\n};\r\n","import axios, { AxiosInstance } from 'axios';\r\nimport { QidConfig } from './types';\r\nimport { AuthModule } from './modules/auth';\r\nimport { DbModule } from './modules/db';\r\nimport { EdgeModule } from './modules/edge';\r\nimport { VaultModule } from './modules/vault';\r\nimport { LogsModule } from './modules/logs';\r\nimport { ProjectModule } from './modules/project';\r\nimport { ResourceModule } from './modules/resource';\r\nimport { SdkModule } from './modules/sdk';\r\nimport { BillingModule } from './modules/billing';\r\n\r\nexport class QidCloud {\r\n private config: QidConfig;\r\n public api: AxiosInstance;\r\n\r\n public auth: AuthModule;\r\n public db: DbModule;\r\n public edge: EdgeModule;\r\n public vault: VaultModule;\r\n public logs: LogsModule;\r\n public projects: ProjectModule;\r\n public resources: ResourceModule;\r\n public sdk: SdkModule;\r\n public billing: BillingModule;\r\n\r\n constructor(config: QidConfig) {\r\n this.config = {\r\n baseUrl: 'https://api.qidcloud.com',\r\n ...config,\r\n };\r\n\r\n this.api = axios.create({\r\n baseURL: this.config.baseUrl,\r\n headers: {\r\n 'x-api-key': this.config.apiKey,\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n this.auth = new AuthModule(this);\r\n this.db = new DbModule(this);\r\n this.edge = new EdgeModule(this);\r\n this.vault = new VaultModule(this);\r\n this.logs = new LogsModule(this);\r\n this.projects = new ProjectModule(this);\r\n this.resources = new ResourceModule(this);\r\n this.sdk = new SdkModule(this);\r\n this.billing = new BillingModule(this);\r\n }\r\n\r\n /**\r\n * Get the current project configuration\r\n */\r\n getConfig(): QidConfig {\r\n return { ...this.config };\r\n }\r\n}\r\n\r\nexport default QidCloud;\r\nexport * from './types';\r\nexport { QidSignInButton } from './components/QidSignInButton';\r\nexport { QidCloudLogin } from './components/QidCloudLogin';\r\nexport { useQidAuth } from './hooks/useQidAuth';\r\n"],"names":["io","useState","useRef","useCallback","useEffect","QRCodeSVG"],"mappings":"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"}