@use-handled/ipaas-react-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +218 -0
- package/dist/index.d.mts +284 -0
- package/dist/index.d.ts +284 -0
- package/dist/index.js +1091 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1085 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/client.ts","../src/components/HandledProvider.tsx","../src/components/ConnectionModal.tsx","../src/components/IntegrationHub.tsx","../src/hooks/useHandled.ts"],"names":["createContext","useState","useMemo","useRef","useCallback","useEffect","useContext","jsxs","jsx","Fragment","Spinner"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n HandledConfig,\n Integration,\n Connection,\n ConnectResponse,\n} from '../types'\n\nconst DEFAULT_API_BASE_URL = 'https://api.usehandled.io'\n\nexport class HandledApiClient {\n private config: HandledConfig\n\n constructor(config: HandledConfig) {\n this.config = config\n }\n\n private get baseUrl(): string {\n return this.config.apiBaseUrl || DEFAULT_API_BASE_URL\n }\n\n private get headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n 'X-Client-Id': this.config.clientId,\n 'X-Account-Id': this.config.accountId,\n }\n }\n\n private async request<T>(\n method: string,\n path: string,\n options: { body?: unknown; params?: Record<string, string | number | undefined> } = {}\n ): Promise<T> {\n let url = `${this.baseUrl}/api/v1/ipaas${path}`\n\n if (options.params) {\n const searchParams = new URLSearchParams()\n Object.entries(options.params).forEach(([key, value]) => {\n if (value !== undefined) {\n searchParams.append(key, String(value))\n }\n })\n const queryString = searchParams.toString()\n if (queryString) {\n url += `?${queryString}`\n }\n }\n\n const response = await fetch(url, {\n method,\n headers: this.headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n })\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: 'Request failed' }))\n throw new Error(error.message || error.error || `Request failed with status ${response.status}`)\n }\n\n if (response.status === 204) {\n return undefined as T\n }\n\n return response.json()\n }\n\n // ============================================\n // Integrations API\n // ============================================\n\n /**\n * Get list of available integrations\n */\n async getIntegrations(): Promise<Integration[]> {\n const response = await this.request<{ integrations: Integration[] }>('GET', '/integrations')\n return response.integrations\n }\n\n // ============================================\n // Connections API\n // ============================================\n\n /**\n * Get list of connections for the current account\n */\n async getConnections(): Promise<Connection[]> {\n const response = await this.request<{ connections: Connection[] }>(\n 'GET',\n `/accounts/${this.config.accountId}/connections`\n )\n return response.connections\n }\n\n /**\n * Initiate connection to an integration\n * Returns an auth URL to open in a popup for OAuth, or creates connection directly for other auth types\n */\n async connect(\n integrationId: number | string,\n options?: {\n credentials?: Record<string, string>\n accountIntegrationName?: string\n redirectUrl?: string\n }\n ): Promise<ConnectResponse> {\n return this.request<ConnectResponse>(\n 'POST',\n `/accounts/${this.config.accountId}/connections`,\n {\n body: {\n integration_id: integrationId,\n redirect_url: options?.redirectUrl || window.location.href,\n credentials: options?.credentials,\n account_integration_name: options?.accountIntegrationName,\n },\n }\n )\n }\n\n /**\n * Disconnect an integration\n */\n async disconnect(connectionId: number): Promise<void> {\n return this.request<void>(\n 'DELETE',\n `/accounts/${this.config.accountId}/connections/${connectionId}`\n )\n }\n\n /**\n * Get a specific connection\n */\n async getConnection(connectionId: number): Promise<Connection> {\n return this.request<Connection>(\n 'GET',\n `/accounts/${this.config.accountId}/connections/${connectionId}`\n )\n }\n\n /**\n * Check connection status (used after OAuth popup closes)\n */\n async checkConnectionStatus(connectionId: number): Promise<Connection> {\n return this.request<Connection>(\n 'GET',\n `/accounts/${this.config.accountId}/connections/${connectionId}/status`\n )\n }\n}\n","import React, { createContext, useContext, useEffect, useState, useCallback, useMemo, useRef } from 'react'\nimport type {\n HandledConfig,\n HandledContextValue,\n Integration,\n Connection,\n ConnectResult,\n} from '../types'\nimport { HandledApiClient } from '../api/client'\n\nconst HandledContext = createContext<HandledContextValue | null>(null)\n\nexport interface HandledProviderProps {\n /** Developer's iPaaS client ID */\n clientId: string\n /** Brand's account ID in Handled */\n accountId: string\n /** Custom API base URL (defaults to https://api.usehandled.io) */\n apiBaseUrl?: string\n /** Called when an integration is connected */\n onConnect?: (connection: Connection) => void\n /** Called when an integration is disconnected */\n onDisconnect?: (connectionId: number) => void\n /** Called when an error occurs */\n onError?: (error: Error) => void\n /** React children */\n children: React.ReactNode\n}\n\n// Popup window management\nconst POPUP_WIDTH = 600\nconst POPUP_HEIGHT = 700\n\nfunction openPopup(url: string, name: string): Window | null {\n const left = window.screenX + (window.outerWidth - POPUP_WIDTH) / 2\n const top = window.screenY + (window.outerHeight - POPUP_HEIGHT) / 2\n\n return window.open(\n url,\n name,\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},toolbar=no,menubar=no,scrollbars=yes,resizable=yes`\n )\n}\n\nexport function HandledProvider({\n clientId,\n accountId,\n apiBaseUrl,\n onConnect,\n onDisconnect,\n onError,\n children,\n}: HandledProviderProps) {\n const [isReady, setIsReady] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n const [integrations, setIntegrations] = useState<Integration[]>([])\n const [connections, setConnections] = useState<Connection[]>([])\n const [error, setError] = useState<Error | null>(null)\n\n const config: HandledConfig = useMemo(\n () => ({ clientId, accountId, apiBaseUrl }),\n [clientId, accountId, apiBaseUrl]\n )\n\n const apiClientRef = useRef<HandledApiClient | null>(null)\n\n // Initialize API client\n const getApiClient = useCallback(() => {\n if (!apiClientRef.current) {\n apiClientRef.current = new HandledApiClient(config)\n }\n return apiClientRef.current\n }, [config])\n\n // Fetch integrations and connections on mount\n useEffect(() => {\n const initialize = async () => {\n setIsLoading(true)\n try {\n const client = getApiClient()\n const [integrationsData, connectionsData] = await Promise.all([\n client.getIntegrations(),\n client.getConnections(),\n ])\n setIntegrations(integrationsData)\n setConnections(connectionsData)\n setError(null)\n } catch (err) {\n const initError = err instanceof Error ? err : new Error('Failed to initialize')\n setError(initError)\n onError?.(initError)\n } finally {\n setIsLoading(false)\n setIsReady(true)\n }\n }\n\n initialize()\n }, [getApiClient, onError])\n\n // Refresh connections\n const refreshConnections = useCallback(async () => {\n try {\n const client = getApiClient()\n const connectionsData = await client.getConnections()\n setConnections(connectionsData)\n } catch (err) {\n const refreshError = err instanceof Error ? err : new Error('Failed to refresh connections')\n setError(refreshError)\n onError?.(refreshError)\n }\n }, [getApiClient, onError])\n\n // Connect to an integration\n const connect = useCallback(\n async (\n integrationId: number | string,\n options?: { credentials?: Record<string, string>; accountIntegrationName?: string }\n ): Promise<ConnectResult> => {\n setIsLoading(true)\n setError(null)\n\n try {\n const client = getApiClient()\n\n // Find the integration to check auth type\n const integration = integrations.find(\n (i) => i.id === integrationId || i.type === integrationId\n )\n\n const isOAuth = integration?.authType === 'oauth' ||\n integration?.authType === 'oauth2' ||\n integration?.authType === 'oauth1'\n\n const response = await client.connect(integrationId, {\n credentials: options?.credentials,\n accountIntegrationName: options?.accountIntegrationName,\n })\n\n // For non-OAuth, the connection is created directly\n if (!isOAuth) {\n setIsLoading(false)\n\n if (response.success && (response.connection || response.account_integration)) {\n const connection = response.connection || response.account_integration!\n setConnections((prev) => [...prev, connection])\n onConnect?.(connection)\n return { success: true, connection }\n } else {\n const errorMsg = response.message || 'Failed to connect'\n const connError = new Error(errorMsg)\n setError(connError)\n onError?.(connError)\n return { success: false, error: errorMsg }\n }\n }\n\n // For OAuth, open popup\n const authUrl = response.authUrl || response.redirect_url\n if (!authUrl) {\n throw new Error('No authorization URL received')\n }\n\n const popup = openPopup(authUrl, 'handled-connect')\n\n if (!popup) {\n throw new Error('Popup blocked. Please allow popups for this site.')\n }\n\n // Poll for popup close and check connection status\n return new Promise((resolve) => {\n const pollInterval = setInterval(async () => {\n if (popup.closed) {\n clearInterval(pollInterval)\n setIsLoading(false)\n\n try {\n // Check if connection was successful\n if (response.connectionId) {\n const connection = await client.checkConnectionStatus(response.connectionId)\n\n if (connection.status === 'active') {\n setConnections((prev) => [...prev, connection])\n onConnect?.(connection)\n resolve({ success: true, connection })\n } else if (connection.status === 'error') {\n const connError = new Error(connection.error || 'Connection failed')\n setError(connError)\n onError?.(connError)\n resolve({ success: false, error: connection.error })\n } else {\n // Pending or other status - refresh to get latest\n await refreshConnections()\n resolve({ success: true, connection })\n }\n } else {\n // No connection ID - refresh connections to find the new one\n await refreshConnections()\n resolve({ success: true })\n }\n } catch (err) {\n // Connection might have been cancelled\n resolve({ success: false, error: 'Connection was cancelled or failed' })\n }\n }\n }, 500)\n\n // Timeout after 10 minutes\n setTimeout(() => {\n clearInterval(pollInterval)\n if (!popup.closed) {\n popup.close()\n }\n setIsLoading(false)\n resolve({ success: false, error: 'Connection timed out' })\n }, 10 * 60 * 1000)\n })\n } catch (err) {\n const connectError = err instanceof Error ? err : new Error('Failed to connect')\n setError(connectError)\n onError?.(connectError)\n setIsLoading(false)\n return { success: false, error: connectError.message }\n }\n },\n [getApiClient, integrations, onConnect, onError, refreshConnections]\n )\n\n // Disconnect an integration\n const disconnect = useCallback(\n async (connectionId: number) => {\n setIsLoading(true)\n try {\n const client = getApiClient()\n await client.disconnect(connectionId)\n setConnections((prev) => prev.filter((c) => c.id !== connectionId))\n onDisconnect?.(connectionId)\n setError(null)\n } catch (err) {\n const disconnectError = err instanceof Error ? err : new Error('Failed to disconnect')\n setError(disconnectError)\n onError?.(disconnectError)\n throw disconnectError\n } finally {\n setIsLoading(false)\n }\n },\n [getApiClient, onDisconnect, onError]\n )\n\n const contextValue: HandledContextValue = useMemo(\n () => ({\n isReady,\n isLoading,\n integrations,\n connections,\n connect,\n disconnect,\n refreshConnections,\n error,\n accountId,\n }),\n [isReady, isLoading, integrations, connections, connect, disconnect, refreshConnections, error, accountId]\n )\n\n return <HandledContext.Provider value={contextValue}>{children}</HandledContext.Provider>\n}\n\nexport function useHandledContext(): HandledContextValue {\n const context = useContext(HandledContext)\n if (!context) {\n throw new Error('useHandled must be used within a HandledProvider')\n }\n return context\n}\n","import React, { useState, useEffect } from 'react'\nimport type { Integration, Connection, ConnectionModalProps } from '../types'\nimport { useHandledContext } from './HandledProvider'\n\n// ============================================\n// Styles\n// ============================================\n\nconst modalStyles = {\n overlay: {\n position: 'fixed' as const,\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n padding: '16px',\n },\n modal: {\n backgroundColor: '#ffffff',\n borderRadius: '16px',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n width: '100%',\n maxWidth: '480px',\n maxHeight: '90vh',\n overflow: 'auto',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n header: {\n padding: '24px 24px 0',\n },\n titleRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n },\n logo: {\n width: '40px',\n height: '40px',\n borderRadius: '8px',\n objectFit: 'contain' as const,\n },\n logoPlaceholder: {\n width: '40px',\n height: '40px',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '18px',\n fontWeight: 600,\n color: '#6b7280',\n },\n title: {\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n margin: 0,\n },\n description: {\n fontSize: '14px',\n color: '#6b7280',\n marginTop: '8px',\n lineHeight: 1.5,\n },\n body: {\n padding: '24px',\n },\n oauthMessage: {\n textAlign: 'center' as const,\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '16px',\n },\n oauthText: {\n fontSize: '14px',\n color: '#6b7280',\n margin: 0,\n },\n infoBox: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '12px',\n backgroundColor: '#eff6ff',\n border: '1px solid #bfdbfe',\n borderRadius: '8px',\n marginBottom: '16px',\n },\n infoIcon: {\n flexShrink: 0,\n width: '20px',\n height: '20px',\n color: '#3b82f6',\n },\n infoContent: {\n flex: 1,\n },\n infoTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: '#1e40af',\n margin: 0,\n },\n infoText: {\n fontSize: '13px',\n color: '#1e40af',\n margin: '4px 0 0',\n },\n fieldGroup: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '16px',\n },\n field: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '6px',\n },\n label: {\n fontSize: '14px',\n fontWeight: 500,\n color: '#374151',\n },\n required: {\n color: '#ef4444',\n },\n input: {\n padding: '10px 12px',\n fontSize: '14px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n outline: 'none',\n transition: 'border-color 0.2s, box-shadow 0.2s',\n },\n inputFocus: {\n borderColor: '#3b82f6',\n boxShadow: '0 0 0 3px rgba(59, 130, 246, 0.1)',\n },\n fieldDescription: {\n fontSize: '12px',\n color: '#6b7280',\n },\n select: {\n padding: '10px 12px',\n fontSize: '14px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n },\n actions: {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '12px',\n padding: '16px 24px 24px',\n borderTop: '1px solid #e5e7eb',\n },\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '10px 20px',\n fontSize: '14px',\n fontWeight: 500,\n borderRadius: '8px',\n border: 'none',\n cursor: 'pointer',\n transition: 'background-color 0.2s, opacity 0.2s',\n },\n buttonCancel: {\n backgroundColor: '#f3f4f6',\n color: '#374151',\n },\n buttonPrimary: {\n backgroundColor: '#3b82f6',\n color: '#ffffff',\n },\n buttonDisabled: {\n opacity: 0.6,\n cursor: 'not-allowed',\n },\n error: {\n padding: '12px',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: '8px',\n color: '#dc2626',\n fontSize: '14px',\n marginBottom: '16px',\n },\n spinner: {\n width: '16px',\n height: '16px',\n border: '2px solid rgba(255, 255, 255, 0.3)',\n borderTopColor: '#ffffff',\n borderRadius: '50%',\n animation: 'handled-spin 0.6s linear infinite',\n },\n}\n\n// Icons\nconst InfoIcon: React.FC = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n)\n\nconst ExternalLinkIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n)\n\nconst CloseIcon: React.FC = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n)\n\nconst Spinner: React.FC = () => (\n <div style={modalStyles.spinner}>\n <style>{`@keyframes handled-spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n)\n\n/**\n * Modal component for connecting to an integration.\n * Handles OAuth and credential-based authentication flows.\n */\nexport function ConnectionModal({\n isOpen,\n onClose,\n integration,\n onSuccess,\n onError,\n}: ConnectionModalProps) {\n const { connect } = useHandledContext()\n const [formData, setFormData] = useState<Record<string, string>>({})\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n // Check if OAuth\n const isOAuth = integration.authType === 'oauth' ||\n integration.authType === 'oauth2' ||\n integration.authType === 'oauth1'\n\n // Reset form when integration changes\n useEffect(() => {\n if (integration) {\n const initialFormData: Record<string, string> = {}\n if (integration.inputFields) {\n Object.entries(integration.inputFields).forEach(([fieldName, fieldConfig]) => {\n initialFormData[fieldName] = fieldConfig.default || ''\n })\n }\n setFormData(initialFormData)\n setError(null)\n }\n }, [integration])\n\n // Don't render if not open\n if (!isOpen) return null\n\n const displayName = integration.displayName || integration.name\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {\n const { name, value } = e.target\n setFormData((prev) => ({\n ...prev,\n [name]: value,\n }))\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true)\n setError(null)\n\n try {\n const result = await connect(integration.id, {\n credentials: formData,\n accountIntegrationName: formData['account_integration_name'],\n })\n\n if (result.success && result.connection) {\n onSuccess(result.connection)\n onClose()\n } else {\n const errorMsg = result.error || 'Failed to connect'\n setError(errorMsg)\n onError(errorMsg)\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'Connection failed'\n setError(errorMsg)\n onError(errorMsg)\n } finally {\n setLoading(false)\n }\n }\n\n // Render form fields for non-OAuth integrations\n const renderFormFields = () => {\n if (!integration.inputFields) return null\n\n return Object.entries(integration.inputFields)\n .sort(([, a], [, b]) => (a.sort_order || 0) - (b.sort_order || 0))\n .map(([fieldName, fieldConfig]) => {\n const {\n label = fieldName,\n type = 'text',\n required = false,\n placeholder = '',\n description = '',\n options,\n } = fieldConfig\n\n return (\n <div key={fieldName} style={modalStyles.field}>\n <label style={modalStyles.label}>\n {label} {required && <span style={modalStyles.required}>*</span>}\n </label>\n {type === 'select' && options ? (\n <select\n name={fieldName}\n value={formData[fieldName] || ''}\n onChange={handleInputChange}\n required={required}\n style={modalStyles.select}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.name}\n </option>\n ))}\n </select>\n ) : (\n <input\n type={type === 'password' ? 'password' : type === 'email' ? 'email' : 'text'}\n name={fieldName}\n value={formData[fieldName] || ''}\n onChange={handleInputChange}\n placeholder={placeholder}\n required={required}\n style={modalStyles.input}\n />\n )}\n {description && <span style={modalStyles.fieldDescription}>{description}</span>}\n </div>\n )\n })\n }\n\n return (\n <div style={modalStyles.overlay} onClick={onClose}>\n <div style={modalStyles.modal} onClick={(e) => e.stopPropagation()}>\n {/* Header */}\n <div style={modalStyles.header}>\n <div style={modalStyles.titleRow}>\n {integration.logoUrl ? (\n <img src={integration.logoUrl} alt={displayName} style={modalStyles.logo} />\n ) : (\n <div style={modalStyles.logoPlaceholder}>{displayName.charAt(0)}</div>\n )}\n <h2 style={modalStyles.title}>\n Connect to {displayName}\n </h2>\n </div>\n {integration.description && (\n <p style={modalStyles.description}>{integration.description}</p>\n )}\n </div>\n\n {/* Form */}\n <form onSubmit={handleSubmit}>\n <div style={modalStyles.body}>\n {/* Error message */}\n {error && <div style={modalStyles.error}>{error}</div>}\n\n {/* API Key info box */}\n {integration.authType === 'api_key' && (\n <div style={modalStyles.infoBox}>\n <InfoIcon />\n <div style={modalStyles.infoContent}>\n <h4 style={modalStyles.infoTitle}>Where to find your API key</h4>\n <p style={modalStyles.infoText}>\n Find your API key in your {displayName} account settings or developer section.\n </p>\n </div>\n </div>\n )}\n\n {/* OAuth message */}\n {isOAuth && (\n <div style={modalStyles.oauthMessage}>\n <p style={modalStyles.oauthText}>\n You'll be redirected to {displayName} to authorize access to your account.\n No credentials will be stored in our system.\n </p>\n </div>\n )}\n\n <div style={modalStyles.fieldGroup}>\n {/* Integration name field - always shown */}\n <div style={modalStyles.field}>\n <label style={modalStyles.label}>\n Integration Name <span style={modalStyles.required}>*</span>\n </label>\n <input\n type=\"text\"\n name=\"account_integration_name\"\n placeholder={`My ${displayName} Store`}\n value={formData['account_integration_name'] || ''}\n onChange={handleInputChange}\n required\n autoFocus\n style={modalStyles.input}\n />\n </div>\n\n {/* Additional fields for non-OAuth */}\n {!isOAuth && renderFormFields()}\n </div>\n </div>\n\n {/* Actions */}\n <div style={modalStyles.actions}>\n <button\n type=\"button\"\n onClick={onClose}\n disabled={loading}\n style={{\n ...modalStyles.button,\n ...modalStyles.buttonCancel,\n ...(loading ? modalStyles.buttonDisabled : {}),\n }}\n >\n Cancel\n </button>\n <button\n type=\"submit\"\n disabled={loading}\n style={{\n ...modalStyles.button,\n ...modalStyles.buttonPrimary,\n ...(loading ? modalStyles.buttonDisabled : {}),\n }}\n >\n {loading ? (\n <>\n <Spinner />\n Connecting...\n </>\n ) : isOAuth ? (\n <>\n <ExternalLinkIcon />\n Connect with {displayName}\n </>\n ) : (\n 'Connect'\n )}\n </button>\n </div>\n </form>\n </div>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport { useHandledContext } from './HandledProvider'\nimport { ConnectionModal } from './ConnectionModal'\nimport type { Integration, Connection, IntegrationHubProps } from '../types'\n\n// ============================================\n// Styles\n// ============================================\n\nconst styles = {\n container: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n maxWidth: '800px',\n margin: '0 auto',\n } as React.CSSProperties,\n header: {\n marginBottom: '24px',\n } as React.CSSProperties,\n title: {\n fontSize: '24px',\n fontWeight: 600,\n color: '#111827',\n margin: 0,\n } as React.CSSProperties,\n description: {\n fontSize: '14px',\n color: '#6b7280',\n marginTop: '8px',\n } as React.CSSProperties,\n section: {\n marginBottom: '32px',\n } as React.CSSProperties,\n sectionTitle: {\n fontSize: '14px',\n fontWeight: 600,\n color: '#374151',\n marginBottom: '16px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n } as React.CSSProperties,\n grid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))',\n gap: '16px',\n } as React.CSSProperties,\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '20px',\n backgroundColor: '#ffffff',\n transition: 'border-color 0.2s, box-shadow 0.2s',\n cursor: 'pointer',\n } as React.CSSProperties,\n cardHover: {\n borderColor: '#3b82f6',\n boxShadow: '0 4px 12px rgba(59, 130, 246, 0.15)',\n } as React.CSSProperties,\n cardConnected: {\n borderColor: '#10b981',\n backgroundColor: '#f0fdf4',\n } as React.CSSProperties,\n cardLogo: {\n width: '48px',\n height: '48px',\n borderRadius: '8px',\n objectFit: 'contain' as const,\n marginBottom: '12px',\n backgroundColor: '#f3f4f6',\n } as React.CSSProperties,\n cardLogoPlaceholder: {\n width: '48px',\n height: '48px',\n borderRadius: '8px',\n backgroundColor: '#e5e7eb',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: '12px',\n fontSize: '20px',\n fontWeight: 600,\n color: '#6b7280',\n } as React.CSSProperties,\n cardName: {\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '4px',\n } as React.CSSProperties,\n cardDescription: {\n fontSize: '13px',\n color: '#6b7280',\n marginBottom: '12px',\n lineHeight: 1.4,\n } as React.CSSProperties,\n cardStatus: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '12px',\n color: '#10b981',\n fontWeight: 500,\n } as React.CSSProperties,\n cardStoreName: {\n fontSize: '12px',\n color: '#6b7280',\n marginTop: '4px',\n } as React.CSSProperties,\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '8px 16px',\n fontSize: '14px',\n fontWeight: 500,\n borderRadius: '8px',\n border: 'none',\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n } as React.CSSProperties,\n buttonPrimary: {\n backgroundColor: '#3b82f6',\n color: '#ffffff',\n } as React.CSSProperties,\n buttonSecondary: {\n backgroundColor: '#f3f4f6',\n color: '#374151',\n } as React.CSSProperties,\n buttonDanger: {\n backgroundColor: '#fef2f2',\n color: '#dc2626',\n } as React.CSSProperties,\n buttonDisabled: {\n opacity: 0.6,\n cursor: 'not-allowed',\n } as React.CSSProperties,\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n fontSize: '11px',\n fontWeight: 500,\n borderRadius: '9999px',\n } as React.CSSProperties,\n badgeSuccess: {\n backgroundColor: '#dcfce7',\n color: '#166534',\n } as React.CSSProperties,\n badgeBeta: {\n backgroundColor: '#fef3c7',\n color: '#92400e',\n } as React.CSSProperties,\n badgeComingSoon: {\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n } as React.CSSProperties,\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '48px',\n color: '#6b7280',\n } as React.CSSProperties,\n spinner: {\n width: '24px',\n height: '24px',\n border: '3px solid #e5e7eb',\n borderTopColor: '#3b82f6',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n } as React.CSSProperties,\n emptyState: {\n textAlign: 'center' as const,\n padding: '48px',\n color: '#6b7280',\n } as React.CSSProperties,\n}\n\n// ============================================\n// Icons\n// ============================================\n\nconst CheckIcon: React.FC<{ size?: number }> = ({ size = 16 }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n)\n\nconst LinkIcon: React.FC<{ size?: number }> = ({ size = 16 }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n)\n\nconst TrashIcon: React.FC<{ size?: number }> = ({ size = 16 }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </svg>\n)\n\nconst Spinner: React.FC = () => (\n <div style={styles.spinner}>\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n)\n\n// ============================================\n// Integration Card Component\n// ============================================\n\ninterface IntegrationCardInternalProps {\n integration: Integration\n connection?: Connection\n onConnect: () => void\n onDisconnect: () => void\n isLoading: boolean\n}\n\nfunction IntegrationCard({\n integration,\n connection,\n onConnect,\n onDisconnect,\n isLoading,\n}: IntegrationCardInternalProps) {\n const [isHovered, setIsHovered] = useState(false)\n const isConnected = !!connection\n const isComingSoon = integration.status === 'coming_soon'\n const isBeta = integration.status === 'beta'\n\n const cardStyle = {\n ...styles.card,\n ...(isHovered && !isConnected && !isComingSoon ? styles.cardHover : {}),\n ...(isConnected ? styles.cardConnected : {}),\n ...(isComingSoon ? { opacity: 0.6, cursor: 'default' } : {}),\n }\n\n return (\n <div\n style={cardStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {integration.logoUrl ? (\n <img src={integration.logoUrl} alt={integration.name} style={styles.cardLogo} />\n ) : (\n <div style={styles.cardLogoPlaceholder}>{integration.name.charAt(0)}</div>\n )}\n\n <div style={styles.cardName}>\n {integration.name}\n {isBeta && <span style={{ ...styles.badge, ...styles.badgeBeta, marginLeft: '8px' }}>Beta</span>}\n {isComingSoon && (\n <span style={{ ...styles.badge, ...styles.badgeComingSoon, marginLeft: '8px' }}>Coming Soon</span>\n )}\n </div>\n\n {integration.description && <div style={styles.cardDescription}>{integration.description}</div>}\n\n {isConnected ? (\n <div>\n <div style={styles.cardStatus}>\n <CheckIcon size={14} />\n Connected\n </div>\n {connection.storeName && <div style={styles.cardStoreName}>{connection.storeName}</div>}\n <button\n onClick={(e) => {\n e.stopPropagation()\n onDisconnect()\n }}\n disabled={isLoading}\n style={{\n ...styles.button,\n ...styles.buttonDanger,\n ...(isLoading ? styles.buttonDisabled : {}),\n marginTop: '12px',\n width: '100%',\n }}\n >\n <TrashIcon size={14} />\n Disconnect\n </button>\n </div>\n ) : (\n <button\n onClick={onConnect}\n disabled={isLoading || isComingSoon}\n style={{\n ...styles.button,\n ...styles.buttonPrimary,\n ...((isLoading || isComingSoon) ? styles.buttonDisabled : {}),\n width: '100%',\n }}\n >\n <LinkIcon size={14} />\n Connect\n </button>\n )}\n </div>\n )\n}\n\n// ============================================\n// Main IntegrationHub Component\n// ============================================\n\n/**\n * Pre-built UI component for managing integrations.\n * Displays available integrations and connected accounts.\n *\n * @example\n * ```tsx\n * <HandledProvider clientId=\"xxx\" accountId=\"123\">\n * <IntegrationHub\n * onConnect={(conn) => console.log('Connected:', conn)}\n * onDisconnect={(id) => console.log('Disconnected:', id)}\n * />\n * </HandledProvider>\n * ```\n */\nexport function IntegrationHub({\n onConnect,\n onDisconnect,\n onError,\n className,\n style,\n categories,\n integrationIds,\n hideConnected,\n title = 'Integrations',\n description = 'Connect your e-commerce platforms to sync data automatically.',\n}: IntegrationHubProps) {\n const {\n isReady,\n isLoading,\n integrations,\n connections,\n connect,\n disconnect,\n error,\n } = useHandledContext()\n\n const [loadingIntegrationId, setLoadingIntegrationId] = useState<number | null>(null)\n const [selectedIntegration, setSelectedIntegration] = useState<Integration | null>(null)\n const [showConnectionModal, setShowConnectionModal] = useState(false)\n\n // Filter integrations\n const filteredIntegrations = integrations.filter((integration) => {\n if (integrationIds && !integrationIds.includes(integration.id)) {\n return false\n }\n if (categories && !categories.includes(integration.category)) {\n return false\n }\n return true\n })\n\n // Get connection for an integration\n const getConnection = (integrationId: number): Connection | undefined => {\n return connections.find((c) => c.integrationId === integrationId)\n }\n\n // Handle connect - opens the connection modal\n const handleConnect = (integration: Integration) => {\n setSelectedIntegration(integration)\n setShowConnectionModal(true)\n }\n\n // Handle modal success\n const handleConnectionSuccess = (connection: Connection) => {\n setShowConnectionModal(false)\n setSelectedIntegration(null)\n onConnect?.(connection)\n }\n\n // Handle modal error\n const handleConnectionError = (errorMsg: string) => {\n onError?.(new Error(errorMsg))\n }\n\n // Handle modal close\n const handleModalClose = () => {\n setShowConnectionModal(false)\n setSelectedIntegration(null)\n }\n\n // Handle disconnect\n const handleDisconnect = async (connectionId: number) => {\n setLoadingIntegrationId(connectionId)\n try {\n await disconnect(connectionId)\n onDisconnect?.(connectionId)\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error('Disconnect failed'))\n } finally {\n setLoadingIntegrationId(null)\n }\n }\n\n // Loading state\n if (!isReady) {\n return (\n <div style={{ ...styles.container, ...style }} className={className}>\n <div style={styles.loading}>\n <Spinner />\n </div>\n </div>\n )\n }\n\n // Error state\n if (error && integrations.length === 0) {\n return (\n <div style={{ ...styles.container, ...style }} className={className}>\n <div style={styles.emptyState}>\n <p>Failed to load integrations. Please try again.</p>\n </div>\n </div>\n )\n }\n\n // Connected integrations\n const connectedIntegrations = filteredIntegrations.filter((i) => getConnection(i.id))\n const availableIntegrations = filteredIntegrations.filter((i) => !getConnection(i.id))\n\n return (\n <div style={{ ...styles.container, ...style }} className={className}>\n <div style={styles.header}>\n <h2 style={styles.title}>{title}</h2>\n {description && <p style={styles.description}>{description}</p>}\n </div>\n\n {/* Connected Integrations */}\n {!hideConnected && connectedIntegrations.length > 0 && (\n <div style={styles.section}>\n <h3 style={styles.sectionTitle}>Connected</h3>\n <div style={styles.grid}>\n {connectedIntegrations.map((integration) => {\n const connection = getConnection(integration.id)!\n return (\n <IntegrationCard\n key={integration.id}\n integration={integration}\n connection={connection}\n onConnect={() => handleConnect(integration)}\n onDisconnect={() => handleDisconnect(connection.id)}\n isLoading={isLoading || loadingIntegrationId === connection.id}\n />\n )\n })}\n </div>\n </div>\n )}\n\n {/* Available Integrations */}\n <div style={styles.section}>\n <h3 style={styles.sectionTitle}>\n {connectedIntegrations.length > 0 ? 'Available' : 'All Integrations'}\n </h3>\n {availableIntegrations.length > 0 ? (\n <div style={styles.grid}>\n {availableIntegrations.map((integration) => (\n <IntegrationCard\n key={integration.id}\n integration={integration}\n onConnect={() => handleConnect(integration)}\n onDisconnect={() => {}}\n isLoading={isLoading || loadingIntegrationId === integration.id}\n />\n ))}\n </div>\n ) : (\n <div style={styles.emptyState}>\n <p>All available integrations are connected!</p>\n </div>\n )}\n </div>\n\n {/* Connection Modal */}\n {selectedIntegration && (\n <ConnectionModal\n isOpen={showConnectionModal}\n onClose={handleModalClose}\n integration={selectedIntegration}\n onSuccess={handleConnectionSuccess}\n onError={handleConnectionError}\n />\n )}\n </div>\n )\n}\n","import { useHandledContext } from '../components/HandledProvider'\nimport type { HandledContextValue } from '../types'\n\n/**\n * Hook to access the Handled SDK context.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { integrations, connections, connect, disconnect } = useHandled()\n *\n * return (\n * <div>\n * <h2>Available Integrations</h2>\n * {integrations.map(integration => (\n * <button\n * key={integration.id}\n * onClick={() => connect(integration.id)}\n * >\n * Connect {integration.name}\n * </button>\n * ))}\n *\n * <h2>Connected</h2>\n * {connections.map(connection => (\n * <div key={connection.id}>\n * {connection.integration.name}\n * <button onClick={() => disconnect(connection.id)}>\n * Disconnect\n * </button>\n * </div>\n * ))}\n * </div>\n * )\n * }\n * ```\n */\nexport function useHandled(): HandledContextValue {\n return useHandledContext()\n}\n"]}
|