@calimero-network/mero-react 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storage/index.ts","../src/types.ts","../src/context/MeroContext.tsx","../src/components/LoginModal.tsx","../src/components/ConnectButton.tsx"],"names":["AppMode","ConnectionType","EventStreamMode","useState","setNodeUrl","useEffect","useCallback","jsx","useRef","useMemo","jsxs","MeroLogo","Fragment"],"mappings":"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","file":"index.js","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 &times;\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"]}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@calimero-network/mero-react",
3
+ "version": "1.0.0-beta.1",
4
+ "description": "React bindings for MeroJs - Calimero Network SDK",
5
+ "type": "module",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsup",
21
+ "dev": "tsup --watch",
22
+ "lint": "eslint src --ext .ts,.tsx",
23
+ "typecheck": "tsc --noEmit",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest"
26
+ },
27
+ "dependencies": {
28
+ "@calimero-network/mero-js": "^2.0.0-beta.1"
29
+ },
30
+ "peerDependencies": {
31
+ "react": "^18.0.0 || ^19.0.0",
32
+ "react-dom": "^18.0.0 || ^19.0.0"
33
+ },
34
+ "devDependencies": {
35
+ "@types/react": "^18.2.0",
36
+ "@types/react-dom": "^18.2.0",
37
+ "react": "^18.2.0",
38
+ "react-dom": "^18.2.0",
39
+ "tsup": "^8.0.0",
40
+ "typescript": "^5.3.0",
41
+ "vitest": "^1.0.0",
42
+ "@testing-library/react": "^14.0.0"
43
+ },
44
+ "keywords": [
45
+ "calimero",
46
+ "mero",
47
+ "react",
48
+ "web3",
49
+ "blockchain"
50
+ ],
51
+ "license": "MIT",
52
+ "author": "Calimero Ltd",
53
+ "repository": {
54
+ "type": "git",
55
+ "url": "git+https://github.com/calimero-network/mero-react.git"
56
+ },
57
+ "publishConfig": {
58
+ "access": "public",
59
+ "registry": "https://registry.npmjs.org/"
60
+ }
61
+ }