@calimero-network/mero-react 1.0.0-beta.1 → 1.0.2
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/README.md +201 -125
- package/dist/index.cjs +248 -660
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +61 -57
- package/dist/index.d.ts +61 -57
- package/dist/index.js +237 -657
- package/dist/index.js.map +1 -1
- package/package.json +23 -10
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/index.ts","../src/types.ts","../src/context/MeroContext.tsx","../src/components/LoginModal.tsx","../src/components/ConnectButton.tsx"],"names":["AppMode","ConnectionType","EventStreamMode","createContext","useState","useRef","useCallback","MeroJs","useEffect","useMemo","useContext","setNodeUrl","jsxs","Fragment","jsx","createPortal","MeroLogo"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Storage utilities for mero-react\n * \n * Provides localStorage-based token storage and other persistence utilities.\n */\n\nimport type { TokenStorage, TokenData } from '@calimero-network/mero-js';\n\n// Storage keys\nconst STORAGE_KEYS = {\n ACCESS_TOKEN: 'mero:access_token',\n REFRESH_TOKEN: 'mero:refresh_token',\n EXPIRES_AT: 'mero:expires_at',\n NODE_URL: 'mero:node_url',\n APPLICATION_ID: 'mero:application_id',\n CONTEXT_ID: 'mero:context_id',\n} as const;\n\n/**\n * Check if localStorage is available\n */\nfunction isLocalStorageAvailable(): boolean {\n try {\n if (typeof window === 'undefined' || !window.localStorage) {\n return false;\n }\n // Test that we can actually write to localStorage\n const testKey = '__mero_test__';\n localStorage.setItem(testKey, 'test');\n localStorage.removeItem(testKey);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * localStorage-based TokenStorage implementation for MeroJs\n */\nexport const localStorageTokenStorage: TokenStorage = {\n async get(): Promise<TokenData | null> {\n if (!isLocalStorageAvailable()) {\n return null;\n }\n\n try {\n const accessToken = localStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN);\n const refreshToken = localStorage.getItem(STORAGE_KEYS.REFRESH_TOKEN);\n const expiresAt = localStorage.getItem(STORAGE_KEYS.EXPIRES_AT);\n\n if (!accessToken || !refreshToken) {\n return null;\n }\n\n return {\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_at: expiresAt ? parseInt(expiresAt, 10) : Date.now() + 3600000,\n };\n } catch (e) {\n console.error('[mero-react] Failed to get token from storage:', e);\n return null;\n }\n },\n\n async set(token: TokenData): Promise<void> {\n if (!isLocalStorageAvailable()) {\n return;\n }\n\n try {\n localStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, token.access_token);\n localStorage.setItem(STORAGE_KEYS.REFRESH_TOKEN, token.refresh_token);\n localStorage.setItem(STORAGE_KEYS.EXPIRES_AT, token.expires_at.toString());\n } catch (e) {\n console.error('[mero-react] Failed to save token to storage:', e);\n }\n },\n\n async clear(): Promise<void> {\n if (!isLocalStorageAvailable()) {\n return;\n }\n\n try {\n localStorage.removeItem(STORAGE_KEYS.ACCESS_TOKEN);\n localStorage.removeItem(STORAGE_KEYS.REFRESH_TOKEN);\n localStorage.removeItem(STORAGE_KEYS.EXPIRES_AT);\n } catch (e) {\n console.error('[mero-react] Failed to clear token from storage:', e);\n }\n },\n};\n\n/**\n * Get the stored node URL\n */\nexport function getNodeUrl(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.NODE_URL);\n}\n\n/**\n * Set the node URL\n */\nexport function setNodeUrl(url: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.NODE_URL, url);\n}\n\n/**\n * Clear the node URL\n */\nexport function clearNodeUrl(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.NODE_URL);\n}\n\n/**\n * Get the stored application ID\n */\nexport function getApplicationId(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.APPLICATION_ID);\n}\n\n/**\n * Set the application ID\n */\nexport function setApplicationId(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.APPLICATION_ID, id);\n}\n\n/**\n * Clear the application ID\n */\nexport function clearApplicationId(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.APPLICATION_ID);\n}\n\n/**\n * Get the stored context ID\n */\nexport function getContextId(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.CONTEXT_ID);\n}\n\n/**\n * Set the context ID\n */\nexport function setContextId(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.CONTEXT_ID, id);\n}\n\n/**\n * Clear the context ID\n */\nexport function clearContextId(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.CONTEXT_ID);\n}\n\n/**\n * Clear all mero-react storage\n */\nexport function clearAllStorage(): void {\n if (!isLocalStorageAvailable()) return;\n Object.values(STORAGE_KEYS).forEach((key) => {\n localStorage.removeItem(key);\n });\n}\n\nexport { STORAGE_KEYS };\n","/**\n * Types for mero-react\n */\n\nimport type { MeroJs } from '@calimero-network/mero-js';\n\n/**\n * Application mode determines the permission scope\n */\nexport enum AppMode {\n /** Single-context: auth flow handles context selection */\n SingleContext = 'single-context',\n /** Multi-context: user can manage multiple contexts */\n MultiContext = 'multi-context',\n /** Admin: full administrative access */\n Admin = 'admin',\n}\n\n/**\n * Connection type for the login modal\n */\nexport enum ConnectionType {\n /** Show both local and remote options */\n RemoteAndLocal = 'remote-and-local',\n /** Show only remote option */\n Remote = 'remote',\n /** Show only local option */\n Local = 'local',\n /** Custom URL (skip modal) */\n Custom = 'custom',\n}\n\n/**\n * Custom connection configuration\n */\nexport interface CustomConnectionConfig {\n type: ConnectionType.Custom;\n url: string;\n}\n\n/**\n * Event streaming mode\n */\nexport enum EventStreamMode {\n WebSocket = 'websocket',\n SSE = 'sse',\n}\n\n/**\n * Context for an application\n */\nexport interface AppContext {\n contextId: string;\n executorId: string;\n applicationId: string;\n}\n\n/**\n * Result of an RPC execution\n */\nexport interface ExecutionResult<T = unknown> {\n success: boolean;\n result?: T;\n error?: string;\n}\n\n/**\n * Mero context value exposed by useMero hook\n */\nexport interface MeroContextValue {\n /** The MeroJs instance (null if not connected) */\n mero: MeroJs | null;\n /** Whether the user is authenticated */\n isAuthenticated: boolean;\n /** Whether the connection is online */\n isOnline: boolean;\n /** The current node URL */\n nodeUrl: string | null;\n /** The application ID */\n applicationId: string | null;\n /** The context ID (from auth flow) */\n contextId: string | null;\n /** Connect to a node URL and start auth flow */\n connectToNode: (url: string) => void;\n /** Logout and clear tokens */\n logout: () => void;\n /** Loading state */\n isLoading: boolean;\n}\n\n/**\n * MeroProvider configuration\n */\nexport interface MeroProviderConfig {\n /** Application mode */\n mode: AppMode;\n /** Package name (for registry-based apps) */\n packageName?: string;\n /** Package version (optional, defaults to latest) */\n packageVersion?: string;\n /** Registry URL (optional) */\n registryUrl?: string;\n /** Legacy: Application ID (hash-based) */\n applicationId?: string;\n /** Application path for auth callback */\n applicationPath?: string;\n /** Event streaming mode */\n eventStreamMode?: EventStreamMode;\n /** Request timeout in milliseconds */\n timeoutMs?: number;\n}\n","/**\n * MeroContext - React Context for MeroJs\n * \n * Provides MeroJs instance management, authentication state,\n * and connection handling through React Context.\n */\n\nimport React, {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n} from 'react';\nimport { MeroJs } from '@calimero-network/mero-js';\nimport {\n localStorageTokenStorage,\n getNodeUrl,\n setNodeUrl,\n getApplicationId,\n setApplicationId,\n getContextId,\n setContextId,\n clearAllStorage,\n} from '../storage';\nimport type {\n MeroContextValue,\n MeroProviderConfig,\n AppMode,\n} from '../types';\nimport { AppMode as AppModeEnum } from '../types';\n\n// Default context value\nconst defaultContextValue: MeroContextValue = {\n mero: null,\n isAuthenticated: false,\n isOnline: true,\n nodeUrl: null,\n applicationId: null,\n contextId: null,\n connectToNode: () => {},\n logout: () => {},\n isLoading: true,\n};\n\n// Create context\nconst MeroContext = createContext<MeroContextValue>(defaultContextValue);\n\n/**\n * Get permissions based on app mode\n */\nfunction getPermissionsForMode(mode: AppMode): string[] {\n switch (mode) {\n case AppModeEnum.SingleContext:\n return ['context:execute'];\n case AppModeEnum.MultiContext:\n return ['context:create', 'context:list', 'context:execute'];\n case AppModeEnum.Admin:\n return ['admin'];\n default:\n throw new Error(`Unsupported application mode: ${mode}`);\n }\n}\n\n/**\n * Redirect to auth login\n */\nfunction redirectToAuthLogin(params: {\n nodeUrl: string;\n callbackUrl: string;\n permissions: string[];\n mode: AppMode;\n packageName?: string;\n packageVersion?: string;\n registryUrl?: string;\n applicationId?: string;\n applicationPath?: string;\n}): void {\n const authParams = new URLSearchParams();\n authParams.append('callback-url', params.callbackUrl);\n authParams.append('permissions', params.permissions.join(','));\n authParams.append('mode', params.mode);\n\n if (params.packageName) {\n authParams.append('package-name', params.packageName);\n if (params.packageVersion) {\n authParams.append('package-version', params.packageVersion);\n }\n if (params.registryUrl) {\n authParams.append('registry-url', params.registryUrl);\n }\n } else if (params.applicationId) {\n authParams.append('application-id', params.applicationId);\n }\n\n if (params.applicationPath) {\n authParams.append('application-path', params.applicationPath);\n }\n\n // Store node URL for callback\n authParams.append('app-url', params.nodeUrl);\n\n window.location.href = `${params.nodeUrl}/auth/login?${authParams.toString()}`;\n}\n\n/**\n * MeroProvider Props\n */\nexport interface MeroProviderProps extends MeroProviderConfig {\n children: React.ReactNode;\n}\n\n/**\n * MeroProvider - Provides MeroJs instance and auth state to the app\n */\nexport function MeroProvider({\n children,\n mode,\n packageName,\n packageVersion,\n registryUrl,\n applicationId: propApplicationId,\n applicationPath,\n timeoutMs = 30000,\n}: MeroProviderProps) {\n // State\n const [mero, setMero] = useState<MeroJs | null>(null);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isOnline, setIsOnline] = useState(true);\n const [isLoading, setIsLoading] = useState(true);\n const [nodeUrl, setNodeUrlState] = useState<string | null>(() => getNodeUrl());\n const [applicationId, setApplicationIdState] = useState<string | null>(\n () => getApplicationId() || propApplicationId || null\n );\n const [contextId, setContextIdState] = useState<string | null>(() => getContextId());\n\n // Refs\n const meroRef = useRef<MeroJs | null>(null);\n\n /**\n * Create or update MeroJs instance\n */\n const createMeroInstance = useCallback(\n (url: string): MeroJs => {\n const instance = new MeroJs({\n baseUrl: url,\n tokenStorage: localStorageTokenStorage,\n timeoutMs,\n });\n meroRef.current = instance;\n return instance;\n },\n [timeoutMs]\n );\n\n /**\n * Check if authenticated by making a test API call\n */\n const checkAuth = useCallback(async (instance: MeroJs): Promise<boolean> => {\n try {\n await instance.admin.contexts.listContexts();\n return true;\n } catch {\n return false;\n }\n }, []);\n\n /**\n * Process auth callback from URL hash\n */\n const processAuthCallback = useCallback(() => {\n const url = new URL(window.location.href);\n const rawHash = url.hash;\n const hash = rawHash.slice(1); // Remove leading #\n \n console.log('========== AUTH CALLBACK DEBUG ==========');\n console.log('Raw URL:', window.location.href);\n console.log('Raw hash:', rawHash);\n console.log('Hash (without #):', hash);\n \n if (!hash) {\n console.log('No hash found, skipping auth callback');\n console.log('==========================================');\n return false;\n }\n\n const params = new URLSearchParams(hash);\n \n // Log ALL params received\n console.log('All hash params:');\n for (const [key, value] of params.entries()) {\n console.log(` ${key}: ${value.substring(0, 50)}${value.length > 50 ? '...' : ''}`);\n }\n console.log('==========================================');\n \n const accessToken = params.get('access_token');\n const refreshToken = params.get('refresh_token');\n // Try multiple parameter names for application ID\n const appId = params.get('application_id') || params.get('applicationId') || params.get('app_id');\n // Try multiple parameter names for context ID \n const ctxId = params.get('context_id') || params.get('contextId') || params.get('context');\n const expiresIn = params.get('expires_in');\n // Try multiple parameter names for node URL (for SSO from Tauri app)\n const nodeUrlParam = params.get('node_url') || params.get('nodeUrl') || params.get('node');\n\n if (!accessToken || !refreshToken) return false;\n\n // If node_url is provided, save it (SSO flow from Tauri)\n if (nodeUrlParam) {\n const decodedNodeUrl = decodeURIComponent(nodeUrlParam);\n setNodeUrl(decodedNodeUrl);\n setNodeUrlState(decodedNodeUrl);\n console.log('[mero-react] SSO: Node URL from hash params:', decodedNodeUrl);\n }\n\n try {\n // Decode tokens\n const decodedAccess = decodeURIComponent(accessToken);\n const decodedRefresh = decodeURIComponent(refreshToken);\n\n // Calculate expiry - try to extract from JWT or use provided expires_in\n let expiresAt = Date.now() + 3600000; // 1 hour default\n \n if (expiresIn) {\n // If expires_in is provided in callback, use it\n expiresAt = Date.now() + parseInt(expiresIn, 10) * 1000;\n } else {\n // Try to extract exp from JWT payload\n try {\n const parts = decodedAccess.split('.');\n if (parts.length === 3) {\n const payload = JSON.parse(atob(parts[1]));\n if (payload.exp) {\n expiresAt = payload.exp * 1000; // JWT exp is in seconds\n }\n }\n } catch {\n // JWT parsing failed, use default\n }\n }\n\n // Store tokens via TokenStorage\n localStorageTokenStorage.set({\n access_token: decodedAccess,\n refresh_token: decodedRefresh,\n expires_at: expiresAt,\n });\n\n // Store application ID if provided\n if (appId) {\n setApplicationId(appId);\n setApplicationIdState(appId);\n }\n\n // Store context ID if provided\n if (ctxId) {\n setContextId(ctxId);\n setContextIdState(ctxId);\n }\n\n // Clean URL - remove all auth params (handle various naming conventions)\n params.delete('access_token');\n params.delete('refresh_token');\n params.delete('application_id');\n params.delete('applicationId');\n params.delete('app_id');\n params.delete('context_id');\n params.delete('contextId');\n params.delete('context');\n params.delete('expires_in');\n params.delete('node_url');\n params.delete('nodeUrl');\n params.delete('node');\n const newHash = params.toString();\n url.hash = newHash ? `#${newHash}` : '';\n window.history.replaceState({}, document.title, url.toString());\n \n console.log('[mero-react] Stored contextId:', ctxId, 'applicationId:', appId);\n\n return true;\n } catch (e) {\n console.error('[mero-react] Failed to process auth callback:', e);\n return false;\n }\n }, []);\n\n /**\n * Connect to a node and start the auth flow\n */\n const connectToNode = useCallback(\n (url: string) => {\n // Save node URL\n setNodeUrl(url);\n setNodeUrlState(url);\n\n // Build callback URL (strip existing auth params)\n const callbackUrl = new URL(window.location.href);\n if (callbackUrl.hash) {\n const hashParams = new URLSearchParams(callbackUrl.hash.substring(1));\n hashParams.delete('access_token');\n hashParams.delete('refresh_token');\n hashParams.delete('application_id');\n callbackUrl.hash = hashParams.toString() ? `#${hashParams.toString()}` : '';\n }\n\n const permissions = getPermissionsForMode(mode);\n\n redirectToAuthLogin({\n nodeUrl: url,\n callbackUrl: callbackUrl.toString(),\n permissions,\n mode,\n packageName,\n packageVersion,\n registryUrl,\n applicationId: propApplicationId,\n applicationPath,\n });\n },\n [mode, packageName, packageVersion, registryUrl, propApplicationId, applicationPath]\n );\n\n /**\n * Logout function\n */\n const logout = useCallback(async () => {\n // Clear MeroJs tokens\n if (meroRef.current) {\n await meroRef.current.clearToken();\n }\n\n // Clear all storage\n clearAllStorage();\n\n // Reset state\n setMero(null);\n setIsAuthenticated(false);\n setNodeUrlState(null);\n setApplicationIdState(null);\n setContextIdState(null);\n meroRef.current = null;\n }, []);\n\n /**\n * Initialize on mount\n */\n useEffect(() => {\n const init = async () => {\n console.log('[mero-react] Init starting...');\n console.log('[mero-react] Current URL:', window.location.href);\n console.log('[mero-react] Stored nodeUrl:', getNodeUrl());\n console.log('[mero-react] Stored contextId:', getContextId());\n console.log('[mero-react] Stored applicationId:', getApplicationId());\n \n // Check for auth callback first\n const hasCallback = processAuthCallback();\n console.log('[mero-react] hasCallback:', hasCallback);\n\n const savedUrl = getNodeUrl();\n if (!savedUrl) {\n setIsLoading(false);\n return;\n }\n\n // Create MeroJs instance\n const instance = createMeroInstance(savedUrl);\n await instance.init();\n\n // Check if authenticated\n const authed = await checkAuth(instance);\n if (authed) {\n setMero(instance);\n setIsAuthenticated(true);\n setIsOnline(true);\n } else if (hasCallback) {\n // Had callback but auth failed - maybe token expired\n setMero(instance);\n setIsAuthenticated(false);\n }\n\n setIsLoading(false);\n };\n\n init();\n }, [createMeroInstance, checkAuth, processAuthCallback]);\n\n /**\n * Periodic health check\n */\n useEffect(() => {\n if (!isAuthenticated || !meroRef.current) return;\n\n const interval = setInterval(async () => {\n const instance = meroRef.current;\n if (!instance) return;\n\n const healthy = await checkAuth(instance);\n if (!healthy && isOnline) {\n setIsOnline(false);\n } else if (healthy && !isOnline) {\n setIsOnline(true);\n }\n }, 5000);\n\n return () => clearInterval(interval);\n }, [isAuthenticated, isOnline, checkAuth]);\n\n /**\n * Sync applicationId from props\n */\n useEffect(() => {\n if (propApplicationId && !applicationId) {\n setApplicationIdState(propApplicationId);\n }\n }, [propApplicationId, applicationId]);\n\n // Context value\n const contextValue = useMemo<MeroContextValue>(\n () => ({\n mero,\n isAuthenticated,\n isOnline,\n nodeUrl,\n applicationId,\n contextId,\n connectToNode,\n logout,\n isLoading,\n }),\n [mero, isAuthenticated, isOnline, nodeUrl, applicationId, contextId, connectToNode, logout, isLoading]\n );\n\n return (\n <MeroContext.Provider value={contextValue}>\n {children}\n </MeroContext.Provider>\n );\n}\n\n/**\n * useMero hook - Access MeroJs and auth state\n */\nexport function useMero(): MeroContextValue {\n const context = useContext(MeroContext);\n if (context === undefined) {\n throw new Error('useMero must be used within a MeroProvider');\n }\n return context;\n}\n\nexport { MeroContext };\n","/**\n * LoginModal - Modal for connecting to a Calimero node\n * \n * Allows users to select local or remote node connection.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { ConnectionType, CustomConnectionConfig } from '../types';\nimport { ConnectionType as ConnectionTypeEnum } from '../types';\n\nexport interface LoginModalProps {\n /** Callback when user connects */\n onConnect: (url: string) => void;\n /** Callback when modal is closed */\n onClose: () => void;\n /** Connection type determines what options to show */\n connectionType: ConnectionType | CustomConnectionConfig;\n /** Whether the modal is open */\n isOpen: boolean;\n}\n\n/**\n * Validate URL format\n */\nfunction isValidUrl(urlString: string): boolean {\n if (!urlString || urlString.trim() === '') {\n return false;\n }\n\n try {\n const urlToTest =\n urlString.startsWith('http://') || urlString.startsWith('https://')\n ? urlString\n : `https://${urlString}`;\n\n const url = new URL(urlToTest);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n return false;\n }\n\n if (!url.hostname) {\n return false;\n }\n\n const hostname = url.hostname;\n\n // Allow localhost\n if (hostname === 'localhost') {\n return true;\n }\n\n // Check for valid IP address\n const ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n if (ipv4Regex.test(hostname)) {\n const octets = hostname.split('.').map(Number);\n return octets.every((octet) => octet >= 0 && octet <= 255);\n }\n\n // Check for valid domain name\n const domainRegex =\n /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n return domainRegex.test(hostname);\n } catch {\n return false;\n }\n}\n\n// Inline styles for the modal\nconst styles = {\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.75)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n padding: '1rem',\n },\n content: {\n backgroundColor: '#1f2937',\n borderRadius: '12px',\n padding: '2rem',\n maxWidth: '400px',\n width: '100%',\n position: 'relative' as const,\n border: '1px solid #374151',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',\n },\n closeButton: {\n position: 'absolute' as const,\n top: '1rem',\n right: '1rem',\n background: 'none',\n border: 'none',\n fontSize: '1.5rem',\n color: '#9ca3af',\n cursor: 'pointer',\n padding: '0.25rem',\n lineHeight: 1,\n },\n header: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n gap: '0.75rem',\n marginBottom: '1.5rem',\n },\n title: {\n fontSize: '1.25rem',\n fontWeight: 600,\n color: '#f3f4f6',\n margin: 0,\n },\n info: {\n color: '#9ca3af',\n textAlign: 'center' as const,\n marginBottom: '1.5rem',\n fontSize: '0.875rem',\n },\n error: {\n color: '#ef4444',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n border: '1px solid rgba(239, 68, 68, 0.3)',\n borderRadius: '6px',\n padding: '0.75rem',\n marginBottom: '1rem',\n fontSize: '0.875rem',\n textAlign: 'center' as const,\n },\n radioGroup: {\n display: 'flex',\n gap: '1rem',\n marginBottom: '1rem',\n justifyContent: 'center',\n },\n radioLabel: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n color: '#e5e7eb',\n cursor: 'pointer',\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: '1px solid #374151',\n backgroundColor: '#111827',\n transition: 'all 0.2s',\n },\n radioLabelActive: {\n borderColor: '#3b82f6',\n backgroundColor: 'rgba(59, 130, 246, 0.1)',\n },\n input: {\n width: '100%',\n padding: '0.75rem 1rem',\n borderRadius: '6px',\n border: '1px solid #374151',\n backgroundColor: '#111827',\n color: '#f3f4f6',\n fontSize: '0.875rem',\n outline: 'none',\n marginBottom: '1rem',\n boxSizing: 'border-box' as const,\n },\n localInfo: {\n color: '#9ca3af',\n fontSize: '0.875rem',\n textAlign: 'center' as const,\n padding: '0.75rem',\n backgroundColor: '#111827',\n borderRadius: '6px',\n marginBottom: '1rem',\n },\n buttonGroup: {\n display: 'flex',\n justifyContent: 'center',\n },\n button: {\n padding: '0.75rem 2rem',\n borderRadius: '6px',\n border: 'none',\n fontSize: '0.875rem',\n fontWeight: 600,\n cursor: 'pointer',\n backgroundColor: '#3b82f6',\n color: 'white',\n transition: 'all 0.2s',\n },\n buttonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n loading: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n gap: '1rem',\n padding: '2rem',\n color: '#9ca3af',\n },\n spinner: {\n width: '2rem',\n height: '2rem',\n border: '3px solid #374151',\n borderTopColor: '#3b82f6',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n },\n};\n\n/**\n * LoginModal - Connection modal component\n */\nexport function LoginModal({\n onConnect,\n onClose,\n connectionType,\n isOpen,\n}: LoginModalProps) {\n const [nodeType, setNodeType] = useState<'local' | 'remote'>('local');\n const [nodeUrl, setNodeUrl] = useState<string>('');\n const [isValid, setIsValid] = useState<boolean>(true);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n // Determine what to show\n const shouldShowLocal =\n connectionType === ConnectionTypeEnum.RemoteAndLocal ||\n connectionType === ConnectionTypeEnum.Local;\n const shouldShowRemote =\n connectionType === ConnectionTypeEnum.RemoteAndLocal ||\n connectionType === ConnectionTypeEnum.Remote;\n const shouldShowRadioGroup = shouldShowLocal && shouldShowRemote;\n\n // Load saved URL\n useEffect(() => {\n const savedUrl = localStorage.getItem('mero:node_url');\n if (savedUrl) {\n setNodeUrl(savedUrl);\n }\n }, []);\n\n // Set initial node type\n useEffect(() => {\n if (connectionType === ConnectionTypeEnum.Local) {\n setNodeType('local');\n } else if (connectionType === ConnectionTypeEnum.Remote) {\n setNodeType('remote');\n }\n }, [connectionType]);\n\n // Validate URL\n useEffect(() => {\n if (nodeType === 'remote') {\n setIsValid(isValidUrl(nodeUrl));\n } else {\n setIsValid(true);\n }\n }, [nodeUrl, nodeType]);\n\n const handleConnect = useCallback(async () => {\n if (!isValid) return;\n\n setLoading(true);\n setError(null);\n\n const baseUrl =\n nodeType === 'local' ? 'http://node1.127.0.0.1.nip.io' : nodeUrl;\n\n try {\n // Test connection\n const response = await fetch(\n new URL('admin-api/is-authed', baseUrl).toString()\n );\n\n if (response.ok || response.status === 401) {\n setLoading(false);\n const normalizedUrl = baseUrl.replace(/\\/+$/, '');\n onConnect(normalizedUrl);\n } else {\n throw new Error(`Connection failed: ${response.statusText}`);\n }\n } catch (err) {\n console.error('Connection failed:', err);\n setError('Failed to connect. Please check the URL and try again.');\n setLoading(false);\n }\n }, [isValid, nodeType, nodeUrl, onConnect]);\n\n if (!isOpen) {\n return null;\n }\n\n const modalContent = (\n <>\n {/* Inject keyframes for spinner */}\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.content} onClick={(e) => e.stopPropagation()}>\n <button style={styles.closeButton} onClick={onClose}>\n ×\n </button>\n\n <div style={styles.header}>\n <MeroLogo />\n <h1 style={styles.title}>Connect to Calimero</h1>\n </div>\n\n {loading ? (\n <div style={styles.loading}>\n <p>Connecting to node...</p>\n <div style={styles.spinner} />\n </div>\n ) : (\n <>\n <p style={styles.info}>\n {shouldShowRadioGroup\n ? 'Select your Calimero node type to continue.'\n : connectionType === ConnectionTypeEnum.Local\n ? 'Connect to your local Calimero node.'\n : 'Enter your remote Calimero node URL.'}\n </p>\n\n {error && <p style={styles.error}>{error}</p>}\n\n {shouldShowRadioGroup && (\n <div style={styles.radioGroup}>\n <label\n style={{\n ...styles.radioLabel,\n ...(nodeType === 'local' ? styles.radioLabelActive : {}),\n }}\n onClick={() => setNodeType('local')}\n >\n <input\n type=\"radio\"\n value=\"local\"\n checked={nodeType === 'local'}\n onChange={() => setNodeType('local')}\n style={{ display: 'none' }}\n />\n 🏠 Local\n </label>\n <label\n style={{\n ...styles.radioLabel,\n ...(nodeType === 'remote' ? styles.radioLabelActive : {}),\n }}\n onClick={() => setNodeType('remote')}\n >\n <input\n type=\"radio\"\n value=\"remote\"\n checked={nodeType === 'remote'}\n onChange={() => setNodeType('remote')}\n style={{ display: 'none' }}\n />\n 🌐 Remote\n </label>\n </div>\n )}\n\n <div>\n {shouldShowRemote && nodeType === 'remote' ? (\n <input\n type=\"text\"\n value={nodeUrl}\n onChange={(e) => setNodeUrl(e.target.value)}\n placeholder=\"https://your-node-url.calimero.network\"\n style={styles.input}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && isValid) {\n handleConnect();\n }\n }}\n />\n ) : shouldShowLocal ? (\n <p style={styles.localInfo}>\n Using default local node: <br />\n <code style={{ color: '#60a5fa' }}>http://node1.127.0.0.1.nip.io</code>\n </p>\n ) : null}\n </div>\n\n <div style={styles.buttonGroup}>\n <button\n onClick={handleConnect}\n disabled={!isValid || loading}\n style={{\n ...styles.button,\n ...(!isValid || loading ? styles.buttonDisabled : {}),\n }}\n >\n Connect\n </button>\n </div>\n </>\n )}\n </div>\n </div>\n </>\n );\n\n // Use portal to render at document root, outside any container styling\n return createPortal(modalContent, document.body);\n}\n\n/**\n * Simple Calimero logo\n */\nfunction MeroLogo() {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"#3b82f6\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n );\n}\n\nexport default LoginModal;\n","/**\n * ConnectButton - A button component for connecting to Calimero\n * \n * Shows connection status and provides login/logout functionality.\n * Includes built-in LoginModal for node selection.\n */\n\nimport React, { useState, useEffect, useRef, useMemo } from 'react';\nimport { useMero } from '../context';\nimport { LoginModal } from './LoginModal';\nimport type { ConnectionType, CustomConnectionConfig } from '../types';\nimport { ConnectionType as ConnectionTypeEnum } from '../types';\n\nexport interface ConnectButtonProps {\n /** Connection type for login modal */\n connectionType?: ConnectionType | CustomConnectionConfig;\n /** Custom class name */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\n/**\n * ConnectButton - Displays connection status and handles login/logout\n */\nexport function ConnectButton({\n connectionType = ConnectionTypeEnum.RemoteAndLocal,\n className,\n style,\n}: ConnectButtonProps) {\n const { isAuthenticated, connectToNode, logout, nodeUrl, isOnline } = useMero();\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const dashboardUrl = useMemo(() => {\n if (!isAuthenticated || !nodeUrl) return '#';\n return new URL('admin-dashboard/', nodeUrl).toString();\n }, [isAuthenticated, nodeUrl]);\n\n const handleConnect = () => {\n // If Custom type with URL, connect directly\n if (\n typeof connectionType === 'object' &&\n connectionType.type === ConnectionTypeEnum.Custom\n ) {\n connectToNode(connectionType.url);\n return;\n }\n\n // Otherwise, open modal\n setIsModalOpen(true);\n };\n\n const handleModalConnect = (url: string) => {\n setIsModalOpen(false);\n connectToNode(url);\n };\n\n // Reconnecting state\n if (isAuthenticated && !isOnline) {\n return (\n <button\n className={`mero-connect-button mero-reconnecting ${className || ''}`}\n style={style}\n disabled\n >\n <MeroLogo />\n Reconnecting...\n </button>\n );\n }\n\n // Connected state\n if (isAuthenticated) {\n return (\n <div ref={dropdownRef} className=\"mero-connect-container\" style={{ position: 'relative', display: 'inline-block' }}>\n <button\n className={`mero-connect-button mero-connected ${className || ''}`}\n style={style}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n >\n <MeroLogo />\n Connected\n </button>\n {isDropdownOpen && (\n <div className=\"mero-dropdown\">\n <div className=\"mero-dropdown-info\" title={nodeUrl || ''}>\n {nodeUrl}\n </div>\n <a\n href={dashboardUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mero-dropdown-item\"\n >\n Dashboard\n </a>\n <button\n className=\"mero-dropdown-item\"\n onClick={() => {\n setIsDropdownOpen(false);\n logout();\n }}\n >\n Log out\n </button>\n </div>\n )}\n </div>\n );\n }\n\n // Disconnected state\n return (\n <>\n <button\n className={`mero-connect-button ${className || ''}`}\n style={style}\n onClick={handleConnect}\n >\n <MeroLogo />\n Connect\n </button>\n <LoginModal\n isOpen={isModalOpen}\n onConnect={handleModalConnect}\n onClose={() => setIsModalOpen(false)}\n connectionType={typeof connectionType === 'object' ? ConnectionTypeEnum.RemoteAndLocal : connectionType}\n />\n </>\n );\n}\n\n/**\n * Simple Calimero logo component\n */\nfunction MeroLogo() {\n return (\n <svg\n className=\"mero-logo\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n );\n}\n\nexport default ConnectButton;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/storage/index.ts","../src/context/MeroContext.tsx","../src/hooks/index.ts"],"names":["AppMode","ConnectionType","createContext","LocalStorageTokenStore","useState","useRef","parseAuthCallback","useCallback","MeroJs","buildAuthLoginUrl","useEffect","useMemo","useContext"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Types for mero-react\n */\n\nimport type { MeroJs } from '@calimero-network/mero-js';\n\n/**\n * Application mode determines the permission scope\n */\nexport enum AppMode {\n /** Single-context: auth flow handles context selection */\n SingleContext = 'single-context',\n /** Multi-context: user can manage multiple contexts */\n MultiContext = 'multi-context',\n /** Admin: full administrative access */\n Admin = 'admin',\n}\n\n/**\n * Connection type for the login modal\n */\nexport enum ConnectionType {\n /** Show both local and remote options */\n RemoteAndLocal = 'remote-and-local',\n /** Show only remote option */\n Remote = 'remote',\n /** Show only local option */\n Local = 'local',\n /** Custom URL (skip modal) */\n Custom = 'custom',\n}\n\n/**\n * Custom connection configuration\n */\nexport interface CustomConnectionConfig {\n type: ConnectionType.Custom;\n url: string;\n}\n\n/**\n * Context for an application\n */\nexport interface AppContext {\n contextId: string;\n executorId: string;\n applicationId: string;\n}\n\n/**\n * Result of an RPC execution\n */\nexport interface ExecutionResult<T = unknown> {\n success: boolean;\n result?: T;\n error?: string;\n}\n\n/**\n * Mero context value exposed by useMero hook\n */\nexport interface MeroContextValue {\n /** The MeroJs instance (null if not connected) */\n mero: MeroJs | null;\n /** Whether the user is authenticated */\n isAuthenticated: boolean;\n /** Whether the connection is online */\n isOnline: boolean;\n /** The current node URL */\n nodeUrl: string | null;\n /** The application ID */\n applicationId: string | null;\n /** The context ID (from auth flow) */\n contextId: string | null;\n /** The context identity / executor public key (from auth flow) */\n contextIdentity: string | null;\n /** Connect to a node URL and start auth flow */\n connectToNode: (url: string) => void;\n /** Logout and clear tokens */\n logout: () => void;\n /** Loading state */\n isLoading: boolean;\n}\n\n/**\n * MeroProvider configuration\n */\nexport interface MeroProviderConfig {\n /** Application mode */\n mode: AppMode;\n /** Package name (for registry-based apps) */\n packageName?: string;\n /** Package version (optional, defaults to latest) */\n packageVersion?: string;\n /** Registry URL (optional) */\n registryUrl?: string;\n /** Request timeout in milliseconds */\n timeoutMs?: number;\n}\n","/**\n * Storage utilities for mero-react\n * \n * Provides localStorage-based token storage and other persistence utilities.\n */\n\nimport type { TokenData } from '@calimero-network/mero-js';\n\n// Storage keys\nconst STORAGE_KEYS = {\n ACCESS_TOKEN: 'mero:access_token',\n REFRESH_TOKEN: 'mero:refresh_token',\n EXPIRES_AT: 'mero:expires_at',\n NODE_URL: 'mero:node_url',\n APPLICATION_ID: 'mero:application_id',\n CONTEXT_ID: 'mero:context_id',\n CONTEXT_IDENTITY: 'mero:context_identity',\n} as const;\n\nlet _storageAvailable: boolean | null = null;\n\nfunction isLocalStorageAvailable(): boolean {\n if (_storageAvailable !== null) return _storageAvailable;\n try {\n if (typeof window === 'undefined' || !window.localStorage) {\n _storageAvailable = false;\n return false;\n }\n const testKey = '__mero_test__';\n localStorage.setItem(testKey, 'test');\n localStorage.removeItem(testKey);\n _storageAvailable = true;\n } catch {\n _storageAvailable = false;\n }\n return _storageAvailable;\n}\n\nexport const localStorageTokenStorage = {\n async get(): Promise<TokenData | null> {\n if (!isLocalStorageAvailable()) {\n return null;\n }\n\n try {\n const accessToken = localStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN);\n const refreshToken = localStorage.getItem(STORAGE_KEYS.REFRESH_TOKEN);\n const expiresAt = localStorage.getItem(STORAGE_KEYS.EXPIRES_AT);\n\n if (!accessToken || !refreshToken) {\n return null;\n }\n\n return {\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_at: expiresAt ? parseInt(expiresAt, 10) : Date.now() + 3600000,\n };\n } catch (e) {\n console.error('[mero-react] Failed to get token from storage:', e);\n return null;\n }\n },\n\n async set(token: TokenData): Promise<void> {\n if (!isLocalStorageAvailable()) {\n return;\n }\n\n try {\n localStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, token.access_token);\n localStorage.setItem(STORAGE_KEYS.REFRESH_TOKEN, token.refresh_token);\n localStorage.setItem(STORAGE_KEYS.EXPIRES_AT, token.expires_at.toString());\n } catch (e) {\n console.error('[mero-react] Failed to save token to storage:', e);\n }\n },\n\n async clear(): Promise<void> {\n if (!isLocalStorageAvailable()) {\n return;\n }\n\n try {\n localStorage.removeItem(STORAGE_KEYS.ACCESS_TOKEN);\n localStorage.removeItem(STORAGE_KEYS.REFRESH_TOKEN);\n localStorage.removeItem(STORAGE_KEYS.EXPIRES_AT);\n } catch (e) {\n console.error('[mero-react] Failed to clear token from storage:', e);\n }\n },\n};\n\n/**\n * Get the stored node URL\n */\nexport function getNodeUrl(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.NODE_URL);\n}\n\n/**\n * Set the node URL\n */\nexport function setNodeUrl(url: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.NODE_URL, url);\n}\n\n/**\n * Clear the node URL\n */\nexport function clearNodeUrl(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.NODE_URL);\n}\n\n/**\n * Get the stored application ID\n */\nexport function getApplicationId(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.APPLICATION_ID);\n}\n\n/**\n * Set the application ID\n */\nexport function setApplicationId(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.APPLICATION_ID, id);\n}\n\n/**\n * Clear the application ID\n */\nexport function clearApplicationId(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.APPLICATION_ID);\n}\n\n/**\n * Get the stored context ID\n */\nexport function getContextId(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.CONTEXT_ID);\n}\n\n/**\n * Set the context ID\n */\nexport function setContextId(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.CONTEXT_ID, id);\n}\n\n/**\n * Clear the context ID\n */\nexport function clearContextId(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.CONTEXT_ID);\n}\n\n/**\n * Get the stored context identity\n */\nexport function getContextIdentity(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.CONTEXT_IDENTITY);\n}\n\n/**\n * Set the context identity\n */\nexport function setContextIdentity(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.CONTEXT_IDENTITY, id);\n}\n\n/**\n * Clear the context identity\n */\nexport function clearContextIdentity(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.CONTEXT_IDENTITY);\n}\n\n/**\n * Clear all mero-react storage\n */\nexport function clearAllStorage(): void {\n if (!isLocalStorageAvailable()) return;\n Object.values(STORAGE_KEYS).forEach((key) => {\n localStorage.removeItem(key);\n });\n}\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n} from 'react';\nimport {\n MeroJs,\n LocalStorageTokenStore,\n parseAuthCallback,\n buildAuthLoginUrl,\n} from '@calimero-network/mero-js';\nimport { AppMode } from '../types';\nimport type { AuthCallbackResult } from '@calimero-network/mero-js';\nimport {\n getNodeUrl,\n setNodeUrl,\n getApplicationId,\n setApplicationId,\n getContextId,\n setContextId,\n getContextIdentity,\n setContextIdentity,\n clearAllStorage,\n} from '../storage';\nimport type { MeroContextValue, MeroProviderConfig } from '../types';\n\nconst MeroContext = createContext<MeroContextValue | null>(null);\n\nconst isBrowser = typeof window !== 'undefined';\n\nlet _tokenStore: LocalStorageTokenStore | null = null;\nfunction getTokenStore(): LocalStorageTokenStore {\n if (!_tokenStore) {\n _tokenStore = new LocalStorageTokenStore();\n }\n return _tokenStore;\n}\n\nfunction getPermissionsForMode(mode: AppMode): string[] {\n switch (mode) {\n case AppMode.SingleContext:\n return ['context:execute'];\n case AppMode.MultiContext:\n return ['context:create', 'context:list', 'context:execute'];\n case AppMode.Admin:\n return ['admin'];\n default:\n throw new Error(`Unsupported application mode: ${mode}`);\n }\n}\n\nfunction parseJwtExpiry(token: string): number {\n try {\n const parts = token.split('.');\n if (parts.length === 3) {\n let b64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n while (b64.length % 4) b64 += '=';\n const payload: { exp?: number } = JSON.parse(atob(b64));\n if (payload.exp && payload.exp > 0) {\n return payload.exp * 1000;\n }\n }\n } catch {\n // fall through\n }\n return Date.now() + 3_600_000;\n}\n\nexport interface MeroProviderProps extends MeroProviderConfig {\n children: React.ReactNode;\n}\n\nexport function MeroProvider({\n children,\n mode,\n packageName,\n packageVersion,\n registryUrl,\n timeoutMs = 30000,\n}: MeroProviderProps) {\n const [mero, setMero] = useState<MeroJs | null>(null);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isOnline, setIsOnline] = useState(true);\n const [isLoading, setIsLoading] = useState(true);\n const [nodeUrl, setNodeUrlState] = useState<string | null>(() => getNodeUrl());\n const [applicationId, setApplicationIdState] = useState<string | null>(\n () => getApplicationId() || null,\n );\n const [contextId, setContextIdState] = useState<string | null>(() => getContextId());\n const [contextIdentity, setContextIdentityState] = useState<string | null>(() => getContextIdentity());\n\n const meroRef = useRef<MeroJs | null>(null);\n\n // Parse auth callback ONCE in a ref (StrictMode-safe: refs persist across unmount/remount)\n const callbackRef = useRef<AuthCallbackResult | null | undefined>(undefined);\n if (callbackRef.current === undefined && isBrowser) {\n callbackRef.current = parseAuthCallback(window.location.href);\n }\n\n const createMeroInstance = useCallback(\n (url: string): MeroJs => {\n if (meroRef.current) {\n meroRef.current.close();\n }\n const instance = new MeroJs({\n baseUrl: url,\n tokenStore: getTokenStore(),\n timeoutMs,\n });\n meroRef.current = instance;\n return instance;\n },\n [timeoutMs],\n );\n\n const checkAuth = useCallback(async (instance: MeroJs): Promise<boolean> => {\n try {\n await instance.admin.getContexts();\n return true;\n } catch {\n return false;\n }\n }, []);\n\n const connectToNode = useCallback(\n (url: string) => {\n if (!isBrowser) return;\n setNodeUrl(url);\n setNodeUrlState(url);\n\n const callbackUrl = new URL(window.location.href);\n callbackUrl.hash = '';\n\n const loginUrl = buildAuthLoginUrl(url, {\n callbackUrl: callbackUrl.toString(),\n permissions: getPermissionsForMode(mode),\n mode,\n packageName,\n packageVersion,\n registryUrl,\n });\n\n window.location.href = loginUrl;\n },\n [mode, packageName, packageVersion, registryUrl],\n );\n\n const logout = useCallback(() => {\n if (meroRef.current) {\n meroRef.current.clearToken();\n meroRef.current.close();\n }\n clearAllStorage();\n setMero(null);\n setIsAuthenticated(false);\n setNodeUrlState(null);\n setApplicationIdState(null);\n setContextIdState(null);\n setContextIdentityState(null);\n meroRef.current = null;\n }, []);\n\n // Initialization effect\n useEffect(() => {\n let active = true;\n\n const init = async () => {\n const callback = callbackRef.current;\n if (callback) {\n getTokenStore().setTokens({\n access_token: callback.accessToken,\n refresh_token: callback.refreshToken,\n expires_at: parseJwtExpiry(callback.accessToken),\n });\n\n if (callback.applicationId) {\n setApplicationId(callback.applicationId);\n if (active) setApplicationIdState(callback.applicationId);\n }\n if (callback.contextId) {\n setContextId(callback.contextId);\n if (active) setContextIdState(callback.contextId);\n }\n if (callback.contextIdentity) {\n setContextIdentity(callback.contextIdentity);\n if (active) setContextIdentityState(callback.contextIdentity);\n }\n if (callback.nodeUrl) {\n setNodeUrl(callback.nodeUrl);\n if (active) setNodeUrlState(callback.nodeUrl);\n }\n\n if (isBrowser) {\n window.history.replaceState({}, '', window.location.pathname + window.location.search);\n }\n callbackRef.current = null;\n }\n\n const savedUrl = callback?.nodeUrl || getNodeUrl();\n if (!savedUrl) {\n if (active) setIsLoading(false);\n return;\n }\n\n const instance = createMeroInstance(savedUrl);\n const authed = await checkAuth(instance);\n\n if (!active) return;\n\n if (authed) {\n setMero(instance);\n setIsAuthenticated(true);\n setIsOnline(true);\n } else if (callback) {\n setMero(instance);\n }\n\n setIsLoading(false);\n };\n\n init().catch((err) => {\n console.error('[MeroProvider] Initialization failed:', err);\n if (active) setIsLoading(false);\n });\n\n return () => {\n active = false;\n };\n }, [createMeroInstance, checkAuth]);\n\n // SSE connection for online/offline detection — no polling.\n useEffect(() => {\n if (!isAuthenticated || !meroRef.current) return;\n\n let active = true;\n const sse = meroRef.current.events;\n\n const onConnect = () => { if (active) setIsOnline(true); };\n const onError = (err: Error) => {\n if (!active) return;\n setIsOnline(false);\n if (err.message.includes('401')) {\n logout();\n }\n };\n\n sse.on('connect', onConnect);\n sse.on('error', onError);\n sse.connect().catch(() => { if (active) setIsOnline(false); });\n\n return () => {\n active = false;\n sse.off('connect', onConnect);\n sse.off('error', onError);\n };\n }, [isAuthenticated, mero]);\n\n const contextValue = useMemo<MeroContextValue>(\n () => ({\n mero,\n isAuthenticated,\n isOnline,\n nodeUrl,\n applicationId,\n contextId,\n contextIdentity,\n connectToNode,\n logout,\n isLoading,\n }),\n [mero, isAuthenticated, isOnline, nodeUrl, applicationId, contextId, contextIdentity, connectToNode, logout, isLoading],\n );\n\n return (\n <MeroContext.Provider value={contextValue}>\n {children}\n </MeroContext.Provider>\n );\n}\n\nexport function useMero(): MeroContextValue {\n const context = useContext(MeroContext);\n if (!context) {\n throw new Error('useMero must be used within a MeroProvider');\n }\n return context;\n}\n\nexport { MeroContext };\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { useMero } from '../context';\nimport type { SseEventData } from '@calimero-network/mero-js';\n\nexport { useMero } from '../context';\n\n/**\n * Execute RPC methods against a context.\n * Tracks loading/error state. Unmount-safe.\n */\nexport function useExecute(contextId: string | null, executorId: string | null) {\n const { mero } = useMero();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => { mountedRef.current = false; };\n }, []);\n\n const execute = useCallback(\n async <T = unknown>(method: string, params?: Record<string, unknown>): Promise<T | null> => {\n if (!mero || !contextId || !executorId) {\n if (mountedRef.current) setError(new Error('Not connected'));\n return null;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n try {\n const result = await mero.rpc.execute<T>({\n contextId,\n method,\n argsJson: params,\n executorPublicKey: executorId,\n });\n return result;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n if (mountedRef.current) setError(e);\n return null;\n } finally {\n if (mountedRef.current) setLoading(false);\n }\n },\n [mero, contextId, executorId],\n );\n\n return { execute, loading, error };\n}\n\n/**\n * Subscribe to SSE events for context IDs.\n * StrictMode-safe: tracks the SseClient instance in a ref to avoid\n * double-connect on mount/unmount/remount cycles.\n */\nexport function useSubscription(\n contextIds: string[],\n callback: (event: SseEventData) => void,\n) {\n const { mero } = useMero();\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n const contextIdsKey = JSON.stringify(contextIds);\n\n useEffect(() => {\n if (!mero || contextIds.length === 0) return;\n\n const sse = mero.events;\n\n const handler = (event: SseEventData) => {\n callbackRef.current(event);\n };\n\n sse.on('event', handler);\n sse.connect().catch(() => {});\n sse.subscribe(contextIds).catch(() => {});\n\n return () => {\n sse.off('event', handler);\n };\n }, [mero, contextIdsKey]);\n}\n\n/**\n * Fetch contexts for the current node, optionally filtered by application ID.\n */\nexport function useContexts(applicationId?: string | null) {\n const { mero } = useMero();\n const [contexts, setContexts] = useState<\n Array<{ contextId: string; applicationId: string }>\n >([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => { mountedRef.current = false; };\n }, []);\n\n const refetch = useCallback(async () => {\n if (!mero) return;\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n try {\n const response = await mero.admin.getContexts();\n let list = (response.contexts ?? []).map((c) => ({ contextId: c.id, applicationId: c.applicationId }));\n if (applicationId) {\n list = list.filter((c) => c.applicationId === applicationId);\n }\n if (mountedRef.current) setContexts(list);\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n if (mountedRef.current) setError(e);\n } finally {\n if (mountedRef.current) setLoading(false);\n }\n }, [mero, applicationId]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { contexts, loading, error, refetch };\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export { MeroJs, TokenData, TokenStorage } from '@calimero-network/mero-js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { MeroJs, SseEventData, TokenData } from '@calimero-network/mero-js';
|
|
4
|
+
export * from '@calimero-network/mero-js';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* Types for mero-react
|
|
@@ -39,13 +38,6 @@ interface CustomConnectionConfig {
|
|
|
39
38
|
type: ConnectionType.Custom;
|
|
40
39
|
url: string;
|
|
41
40
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Event streaming mode
|
|
44
|
-
*/
|
|
45
|
-
declare enum EventStreamMode {
|
|
46
|
-
WebSocket = "websocket",
|
|
47
|
-
SSE = "sse"
|
|
48
|
-
}
|
|
49
41
|
/**
|
|
50
42
|
* Context for an application
|
|
51
43
|
*/
|
|
@@ -78,6 +70,8 @@ interface MeroContextValue {
|
|
|
78
70
|
applicationId: string | null;
|
|
79
71
|
/** The context ID (from auth flow) */
|
|
80
72
|
contextId: string | null;
|
|
73
|
+
/** The context identity / executor public key (from auth flow) */
|
|
74
|
+
contextIdentity: string | null;
|
|
81
75
|
/** Connect to a node URL and start auth flow */
|
|
82
76
|
connectToNode: (url: string) => void;
|
|
83
77
|
/** Logout and clear tokens */
|
|
@@ -97,59 +91,44 @@ interface MeroProviderConfig {
|
|
|
97
91
|
packageVersion?: string;
|
|
98
92
|
/** Registry URL (optional) */
|
|
99
93
|
registryUrl?: string;
|
|
100
|
-
/** Legacy: Application ID (hash-based) */
|
|
101
|
-
applicationId?: string;
|
|
102
|
-
/** Application path for auth callback */
|
|
103
|
-
applicationPath?: string;
|
|
104
|
-
/** Event streaming mode */
|
|
105
|
-
eventStreamMode?: EventStreamMode;
|
|
106
94
|
/** Request timeout in milliseconds */
|
|
107
95
|
timeoutMs?: number;
|
|
108
96
|
}
|
|
109
97
|
|
|
110
|
-
declare const MeroContext:
|
|
111
|
-
/**
|
|
112
|
-
* MeroProvider Props
|
|
113
|
-
*/
|
|
98
|
+
declare const MeroContext: React.Context<MeroContextValue | null>;
|
|
114
99
|
interface MeroProviderProps extends MeroProviderConfig {
|
|
115
|
-
children:
|
|
100
|
+
children: React.ReactNode;
|
|
116
101
|
}
|
|
117
|
-
|
|
118
|
-
* MeroProvider - Provides MeroJs instance and auth state to the app
|
|
119
|
-
*/
|
|
120
|
-
declare function MeroProvider({ children, mode, packageName, packageVersion, registryUrl, applicationId: propApplicationId, applicationPath, timeoutMs, }: MeroProviderProps): react_jsx_runtime.JSX.Element;
|
|
121
|
-
/**
|
|
122
|
-
* useMero hook - Access MeroJs and auth state
|
|
123
|
-
*/
|
|
102
|
+
declare function MeroProvider({ children, mode, packageName, packageVersion, registryUrl, timeoutMs, }: MeroProviderProps): react_jsx_runtime.JSX.Element;
|
|
124
103
|
declare function useMero(): MeroContextValue;
|
|
125
104
|
|
|
126
|
-
interface ConnectButtonProps {
|
|
127
|
-
/** Connection type for login modal */
|
|
128
|
-
connectionType?: ConnectionType | CustomConnectionConfig;
|
|
129
|
-
/** Custom class name */
|
|
130
|
-
className?: string;
|
|
131
|
-
/** Custom styles */
|
|
132
|
-
style?: React__default.CSSProperties;
|
|
133
|
-
}
|
|
134
105
|
/**
|
|
135
|
-
*
|
|
106
|
+
* Execute RPC methods against a context.
|
|
107
|
+
* Tracks loading/error state. Unmount-safe.
|
|
136
108
|
*/
|
|
137
|
-
declare function
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
109
|
+
declare function useExecute(contextId: string | null, executorId: string | null): {
|
|
110
|
+
execute: <T = unknown>(method: string, params?: Record<string, unknown>) => Promise<T | null>;
|
|
111
|
+
loading: boolean;
|
|
112
|
+
error: Error | null;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Subscribe to SSE events for context IDs.
|
|
116
|
+
* StrictMode-safe: tracks the SseClient instance in a ref to avoid
|
|
117
|
+
* double-connect on mount/unmount/remount cycles.
|
|
118
|
+
*/
|
|
119
|
+
declare function useSubscription(contextIds: string[], callback: (event: SseEventData) => void): void;
|
|
149
120
|
/**
|
|
150
|
-
*
|
|
121
|
+
* Fetch contexts for the current node, optionally filtered by application ID.
|
|
151
122
|
*/
|
|
152
|
-
declare function
|
|
123
|
+
declare function useContexts(applicationId?: string | null): {
|
|
124
|
+
contexts: {
|
|
125
|
+
contextId: string;
|
|
126
|
+
applicationId: string;
|
|
127
|
+
}[];
|
|
128
|
+
loading: boolean;
|
|
129
|
+
error: Error | null;
|
|
130
|
+
refetch: () => Promise<void>;
|
|
131
|
+
};
|
|
153
132
|
|
|
154
133
|
/**
|
|
155
134
|
* Storage utilities for mero-react
|
|
@@ -157,10 +136,11 @@ declare function LoginModal({ onConnect, onClose, connectionType, isOpen, }: Log
|
|
|
157
136
|
* Provides localStorage-based token storage and other persistence utilities.
|
|
158
137
|
*/
|
|
159
138
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
139
|
+
declare const localStorageTokenStorage: {
|
|
140
|
+
get(): Promise<TokenData | null>;
|
|
141
|
+
set(token: TokenData): Promise<void>;
|
|
142
|
+
clear(): Promise<void>;
|
|
143
|
+
};
|
|
164
144
|
/**
|
|
165
145
|
* Get the stored node URL
|
|
166
146
|
*/
|
|
@@ -185,9 +165,33 @@ declare function setApplicationId(id: string): void;
|
|
|
185
165
|
* Clear the application ID
|
|
186
166
|
*/
|
|
187
167
|
declare function clearApplicationId(): void;
|
|
168
|
+
/**
|
|
169
|
+
* Get the stored context ID
|
|
170
|
+
*/
|
|
171
|
+
declare function getContextId(): string | null;
|
|
172
|
+
/**
|
|
173
|
+
* Set the context ID
|
|
174
|
+
*/
|
|
175
|
+
declare function setContextId(id: string): void;
|
|
176
|
+
/**
|
|
177
|
+
* Clear the context ID
|
|
178
|
+
*/
|
|
179
|
+
declare function clearContextId(): void;
|
|
180
|
+
/**
|
|
181
|
+
* Get the stored context identity
|
|
182
|
+
*/
|
|
183
|
+
declare function getContextIdentity(): string | null;
|
|
184
|
+
/**
|
|
185
|
+
* Set the context identity
|
|
186
|
+
*/
|
|
187
|
+
declare function setContextIdentity(id: string): void;
|
|
188
|
+
/**
|
|
189
|
+
* Clear the context identity
|
|
190
|
+
*/
|
|
191
|
+
declare function clearContextIdentity(): void;
|
|
188
192
|
/**
|
|
189
193
|
* Clear all mero-react storage
|
|
190
194
|
*/
|
|
191
195
|
declare function clearAllStorage(): void;
|
|
192
196
|
|
|
193
|
-
export { type AppContext, AppMode,
|
|
197
|
+
export { type AppContext, AppMode, ConnectionType, type CustomConnectionConfig, type ExecutionResult, MeroContext, type MeroContextValue, MeroProvider, type MeroProviderConfig, type MeroProviderProps, clearAllStorage, clearApplicationId, clearContextId, clearContextIdentity, clearNodeUrl, getApplicationId, getContextId, getContextIdentity, getNodeUrl, localStorageTokenStorage, setApplicationId, setContextId, setContextIdentity, setNodeUrl, useContexts, useExecute, useMero, useSubscription };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export { MeroJs, TokenData, TokenStorage } from '@calimero-network/mero-js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { MeroJs, SseEventData, TokenData } from '@calimero-network/mero-js';
|
|
4
|
+
export * from '@calimero-network/mero-js';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* Types for mero-react
|
|
@@ -39,13 +38,6 @@ interface CustomConnectionConfig {
|
|
|
39
38
|
type: ConnectionType.Custom;
|
|
40
39
|
url: string;
|
|
41
40
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Event streaming mode
|
|
44
|
-
*/
|
|
45
|
-
declare enum EventStreamMode {
|
|
46
|
-
WebSocket = "websocket",
|
|
47
|
-
SSE = "sse"
|
|
48
|
-
}
|
|
49
41
|
/**
|
|
50
42
|
* Context for an application
|
|
51
43
|
*/
|
|
@@ -78,6 +70,8 @@ interface MeroContextValue {
|
|
|
78
70
|
applicationId: string | null;
|
|
79
71
|
/** The context ID (from auth flow) */
|
|
80
72
|
contextId: string | null;
|
|
73
|
+
/** The context identity / executor public key (from auth flow) */
|
|
74
|
+
contextIdentity: string | null;
|
|
81
75
|
/** Connect to a node URL and start auth flow */
|
|
82
76
|
connectToNode: (url: string) => void;
|
|
83
77
|
/** Logout and clear tokens */
|
|
@@ -97,59 +91,44 @@ interface MeroProviderConfig {
|
|
|
97
91
|
packageVersion?: string;
|
|
98
92
|
/** Registry URL (optional) */
|
|
99
93
|
registryUrl?: string;
|
|
100
|
-
/** Legacy: Application ID (hash-based) */
|
|
101
|
-
applicationId?: string;
|
|
102
|
-
/** Application path for auth callback */
|
|
103
|
-
applicationPath?: string;
|
|
104
|
-
/** Event streaming mode */
|
|
105
|
-
eventStreamMode?: EventStreamMode;
|
|
106
94
|
/** Request timeout in milliseconds */
|
|
107
95
|
timeoutMs?: number;
|
|
108
96
|
}
|
|
109
97
|
|
|
110
|
-
declare const MeroContext:
|
|
111
|
-
/**
|
|
112
|
-
* MeroProvider Props
|
|
113
|
-
*/
|
|
98
|
+
declare const MeroContext: React.Context<MeroContextValue | null>;
|
|
114
99
|
interface MeroProviderProps extends MeroProviderConfig {
|
|
115
|
-
children:
|
|
100
|
+
children: React.ReactNode;
|
|
116
101
|
}
|
|
117
|
-
|
|
118
|
-
* MeroProvider - Provides MeroJs instance and auth state to the app
|
|
119
|
-
*/
|
|
120
|
-
declare function MeroProvider({ children, mode, packageName, packageVersion, registryUrl, applicationId: propApplicationId, applicationPath, timeoutMs, }: MeroProviderProps): react_jsx_runtime.JSX.Element;
|
|
121
|
-
/**
|
|
122
|
-
* useMero hook - Access MeroJs and auth state
|
|
123
|
-
*/
|
|
102
|
+
declare function MeroProvider({ children, mode, packageName, packageVersion, registryUrl, timeoutMs, }: MeroProviderProps): react_jsx_runtime.JSX.Element;
|
|
124
103
|
declare function useMero(): MeroContextValue;
|
|
125
104
|
|
|
126
|
-
interface ConnectButtonProps {
|
|
127
|
-
/** Connection type for login modal */
|
|
128
|
-
connectionType?: ConnectionType | CustomConnectionConfig;
|
|
129
|
-
/** Custom class name */
|
|
130
|
-
className?: string;
|
|
131
|
-
/** Custom styles */
|
|
132
|
-
style?: React__default.CSSProperties;
|
|
133
|
-
}
|
|
134
105
|
/**
|
|
135
|
-
*
|
|
106
|
+
* Execute RPC methods against a context.
|
|
107
|
+
* Tracks loading/error state. Unmount-safe.
|
|
136
108
|
*/
|
|
137
|
-
declare function
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
109
|
+
declare function useExecute(contextId: string | null, executorId: string | null): {
|
|
110
|
+
execute: <T = unknown>(method: string, params?: Record<string, unknown>) => Promise<T | null>;
|
|
111
|
+
loading: boolean;
|
|
112
|
+
error: Error | null;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Subscribe to SSE events for context IDs.
|
|
116
|
+
* StrictMode-safe: tracks the SseClient instance in a ref to avoid
|
|
117
|
+
* double-connect on mount/unmount/remount cycles.
|
|
118
|
+
*/
|
|
119
|
+
declare function useSubscription(contextIds: string[], callback: (event: SseEventData) => void): void;
|
|
149
120
|
/**
|
|
150
|
-
*
|
|
121
|
+
* Fetch contexts for the current node, optionally filtered by application ID.
|
|
151
122
|
*/
|
|
152
|
-
declare function
|
|
123
|
+
declare function useContexts(applicationId?: string | null): {
|
|
124
|
+
contexts: {
|
|
125
|
+
contextId: string;
|
|
126
|
+
applicationId: string;
|
|
127
|
+
}[];
|
|
128
|
+
loading: boolean;
|
|
129
|
+
error: Error | null;
|
|
130
|
+
refetch: () => Promise<void>;
|
|
131
|
+
};
|
|
153
132
|
|
|
154
133
|
/**
|
|
155
134
|
* Storage utilities for mero-react
|
|
@@ -157,10 +136,11 @@ declare function LoginModal({ onConnect, onClose, connectionType, isOpen, }: Log
|
|
|
157
136
|
* Provides localStorage-based token storage and other persistence utilities.
|
|
158
137
|
*/
|
|
159
138
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
139
|
+
declare const localStorageTokenStorage: {
|
|
140
|
+
get(): Promise<TokenData | null>;
|
|
141
|
+
set(token: TokenData): Promise<void>;
|
|
142
|
+
clear(): Promise<void>;
|
|
143
|
+
};
|
|
164
144
|
/**
|
|
165
145
|
* Get the stored node URL
|
|
166
146
|
*/
|
|
@@ -185,9 +165,33 @@ declare function setApplicationId(id: string): void;
|
|
|
185
165
|
* Clear the application ID
|
|
186
166
|
*/
|
|
187
167
|
declare function clearApplicationId(): void;
|
|
168
|
+
/**
|
|
169
|
+
* Get the stored context ID
|
|
170
|
+
*/
|
|
171
|
+
declare function getContextId(): string | null;
|
|
172
|
+
/**
|
|
173
|
+
* Set the context ID
|
|
174
|
+
*/
|
|
175
|
+
declare function setContextId(id: string): void;
|
|
176
|
+
/**
|
|
177
|
+
* Clear the context ID
|
|
178
|
+
*/
|
|
179
|
+
declare function clearContextId(): void;
|
|
180
|
+
/**
|
|
181
|
+
* Get the stored context identity
|
|
182
|
+
*/
|
|
183
|
+
declare function getContextIdentity(): string | null;
|
|
184
|
+
/**
|
|
185
|
+
* Set the context identity
|
|
186
|
+
*/
|
|
187
|
+
declare function setContextIdentity(id: string): void;
|
|
188
|
+
/**
|
|
189
|
+
* Clear the context identity
|
|
190
|
+
*/
|
|
191
|
+
declare function clearContextIdentity(): void;
|
|
188
192
|
/**
|
|
189
193
|
* Clear all mero-react storage
|
|
190
194
|
*/
|
|
191
195
|
declare function clearAllStorage(): void;
|
|
192
196
|
|
|
193
|
-
export { type AppContext, AppMode,
|
|
197
|
+
export { type AppContext, AppMode, ConnectionType, type CustomConnectionConfig, type ExecutionResult, MeroContext, type MeroContextValue, MeroProvider, type MeroProviderConfig, type MeroProviderProps, clearAllStorage, clearApplicationId, clearContextId, clearContextIdentity, clearNodeUrl, getApplicationId, getContextId, getContextIdentity, getNodeUrl, localStorageTokenStorage, setApplicationId, setContextId, setContextIdentity, setNodeUrl, useContexts, useExecute, useMero, useSubscription };
|