@treza/react 1.2.2 → 1.3.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/dist/index.d.ts +45 -2
- package/dist/index.esm.js +68 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -338,6 +338,49 @@ interface UseVerificationFlowResult {
|
|
|
338
338
|
* Hook for managing the complete verification flow
|
|
339
339
|
*/
|
|
340
340
|
declare function useVerificationFlow(provider?: ethers.Provider, signer?: ethers.Signer): UseVerificationFlowResult;
|
|
341
|
+
interface PIIAccessEvent {
|
|
342
|
+
eventId: string;
|
|
343
|
+
workflowId: string;
|
|
344
|
+
workflowRunId: string;
|
|
345
|
+
stepId: string;
|
|
346
|
+
stepName: string;
|
|
347
|
+
piiFieldsPresent: string[];
|
|
348
|
+
piiFieldsAllowed: string[];
|
|
349
|
+
piiFieldsStripped: string[];
|
|
350
|
+
hadViolation: boolean;
|
|
351
|
+
timestamp: string;
|
|
352
|
+
walletAddress?: string;
|
|
353
|
+
}
|
|
354
|
+
interface PIIAuditSummary {
|
|
355
|
+
total: number;
|
|
356
|
+
violations: number;
|
|
357
|
+
workflows: string[];
|
|
358
|
+
}
|
|
359
|
+
interface UsePIIAuditResult {
|
|
360
|
+
events: PIIAccessEvent[];
|
|
361
|
+
summary: PIIAuditSummary | null;
|
|
362
|
+
isLoading: boolean;
|
|
363
|
+
error: string | null;
|
|
364
|
+
refresh: () => void;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Hook for querying PII audit events from the Treza backend.
|
|
368
|
+
* Polls the /api/pii/audit endpoint and returns events for the given filters.
|
|
369
|
+
*
|
|
370
|
+
* The endpoint requires authentication: pass a Treza API key with the
|
|
371
|
+
* `pii:audit` permission (or a Privy access token) as `authToken`. Results
|
|
372
|
+
* are always scoped to the authenticated account.
|
|
373
|
+
*/
|
|
374
|
+
declare function usePIIAudit(options?: {
|
|
375
|
+
apiBaseUrl?: string;
|
|
376
|
+
workflowId?: string;
|
|
377
|
+
walletAddress?: string;
|
|
378
|
+
violationsOnly?: boolean;
|
|
379
|
+
limit?: number;
|
|
380
|
+
pollIntervalMs?: number;
|
|
381
|
+
/** Bearer token: Treza API key (pii:audit) or Privy access token. */
|
|
382
|
+
authToken?: string;
|
|
383
|
+
}): UsePIIAuditResult;
|
|
341
384
|
|
|
342
385
|
/**
|
|
343
386
|
* @treza/react - React components for TREZA SDK
|
|
@@ -347,5 +390,5 @@ declare function useVerificationFlow(provider?: ethers.Provider, signer?: ethers
|
|
|
347
390
|
|
|
348
391
|
declare const VERSION = "1.0.0";
|
|
349
392
|
|
|
350
|
-
export { ComplianceProvider, ComplianceService, ComplianceStatusDisplay, ComplianceVerification, GovernanceEligibility, VERSION, WalletService, complianceStyles, getComplianceService, getWalletService, resetComplianceService, resetWalletService, useCompliance, useComplianceContext, useTreza, useVerificationFlow, useWallet };
|
|
351
|
-
export type { ComplianceServiceConfig, UseComplianceResult, UseTrezaResult, UseVerificationFlowResult, UseWalletResult, WalletConnectionResult, WalletInfo };
|
|
393
|
+
export { ComplianceProvider, ComplianceService, ComplianceStatusDisplay, ComplianceVerification, GovernanceEligibility, VERSION, WalletService, complianceStyles, getComplianceService, getWalletService, resetComplianceService, resetWalletService, useCompliance, useComplianceContext, usePIIAudit, useTreza, useVerificationFlow, useWallet };
|
|
394
|
+
export type { ComplianceServiceConfig, PIIAccessEvent, PIIAuditSummary, UseComplianceResult, UsePIIAuditResult, UseTrezaResult, UseVerificationFlowResult, UseWalletResult, WalletConnectionResult, WalletInfo };
|
package/dist/index.esm.js
CHANGED
|
@@ -1031,6 +1031,73 @@ function useVerificationFlow(provider, signer) {
|
|
|
1031
1031
|
reset
|
|
1032
1032
|
};
|
|
1033
1033
|
}
|
|
1034
|
+
/**
|
|
1035
|
+
* Hook for querying PII audit events from the Treza backend.
|
|
1036
|
+
* Polls the /api/pii/audit endpoint and returns events for the given filters.
|
|
1037
|
+
*
|
|
1038
|
+
* The endpoint requires authentication: pass a Treza API key with the
|
|
1039
|
+
* `pii:audit` permission (or a Privy access token) as `authToken`. Results
|
|
1040
|
+
* are always scoped to the authenticated account.
|
|
1041
|
+
*/
|
|
1042
|
+
function usePIIAudit(options = {}) {
|
|
1043
|
+
const { apiBaseUrl = '', workflowId, walletAddress, violationsOnly = false, limit = 100, pollIntervalMs, authToken, } = options;
|
|
1044
|
+
const [events, setEvents] = useState([]);
|
|
1045
|
+
const [summary, setSummary] = useState(null);
|
|
1046
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
1047
|
+
const [error, setError] = useState(null);
|
|
1048
|
+
const [refreshKey, setRefreshKey] = useState(0);
|
|
1049
|
+
const refresh = useCallback(() => setRefreshKey(k => k + 1), []);
|
|
1050
|
+
useEffect(() => {
|
|
1051
|
+
let cancelled = false;
|
|
1052
|
+
const fetchAudit = async () => {
|
|
1053
|
+
setIsLoading(true);
|
|
1054
|
+
setError(null);
|
|
1055
|
+
try {
|
|
1056
|
+
const params = new URLSearchParams();
|
|
1057
|
+
if (workflowId)
|
|
1058
|
+
params.set('workflowId', workflowId);
|
|
1059
|
+
if (walletAddress)
|
|
1060
|
+
params.set('walletAddress', walletAddress);
|
|
1061
|
+
if (violationsOnly)
|
|
1062
|
+
params.set('violations', 'true');
|
|
1063
|
+
params.set('limit', String(limit));
|
|
1064
|
+
const headers = {};
|
|
1065
|
+
if (authToken)
|
|
1066
|
+
headers.Authorization = `Bearer ${authToken}`;
|
|
1067
|
+
if (walletAddress)
|
|
1068
|
+
headers['x-treza-account'] = walletAddress;
|
|
1069
|
+
const res = await fetch(`${apiBaseUrl}/api/pii/audit?${params.toString()}`, { headers });
|
|
1070
|
+
if (!res.ok)
|
|
1071
|
+
throw new Error(`${res.status} ${res.statusText}`);
|
|
1072
|
+
const data = await res.json();
|
|
1073
|
+
if (!cancelled) {
|
|
1074
|
+
setEvents(data.events ?? []);
|
|
1075
|
+
setSummary(data.summary ?? null);
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
catch (err) {
|
|
1079
|
+
if (!cancelled) {
|
|
1080
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
finally {
|
|
1084
|
+
if (!cancelled)
|
|
1085
|
+
setIsLoading(false);
|
|
1086
|
+
}
|
|
1087
|
+
};
|
|
1088
|
+
fetchAudit();
|
|
1089
|
+
let intervalId;
|
|
1090
|
+
if (pollIntervalMs && pollIntervalMs > 0) {
|
|
1091
|
+
intervalId = setInterval(fetchAudit, pollIntervalMs);
|
|
1092
|
+
}
|
|
1093
|
+
return () => {
|
|
1094
|
+
cancelled = true;
|
|
1095
|
+
if (intervalId !== undefined)
|
|
1096
|
+
clearInterval(intervalId);
|
|
1097
|
+
};
|
|
1098
|
+
}, [apiBaseUrl, workflowId, walletAddress, violationsOnly, limit, pollIntervalMs, refreshKey, authToken]);
|
|
1099
|
+
return { events, summary, isLoading, error, refresh };
|
|
1100
|
+
}
|
|
1034
1101
|
|
|
1035
1102
|
/**
|
|
1036
1103
|
* @treza/react - React components for TREZA SDK
|
|
@@ -1041,5 +1108,5 @@ function useVerificationFlow(provider, signer) {
|
|
|
1041
1108
|
// Version
|
|
1042
1109
|
const VERSION = '1.0.0';
|
|
1043
1110
|
|
|
1044
|
-
export { ComplianceProvider, ComplianceService, ComplianceStatusDisplay, ComplianceVerification, GovernanceEligibility, VERSION, WalletService, complianceStyles, getComplianceService, getWalletService, resetComplianceService, resetWalletService, useCompliance, useComplianceContext, useTreza, useVerificationFlow, useWallet };
|
|
1111
|
+
export { ComplianceProvider, ComplianceService, ComplianceStatusDisplay, ComplianceVerification, GovernanceEligibility, VERSION, WalletService, complianceStyles, getComplianceService, getWalletService, resetComplianceService, resetWalletService, useCompliance, useComplianceContext, usePIIAudit, useTreza, useVerificationFlow, useWallet };
|
|
1045
1112
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/react-components.tsx","../src/services/compliance-service.ts","../src/services/wallet-service.ts","../src/services/hooks.ts","../src/index.ts"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { ethers } from 'ethers';\nimport { TrezaComplianceSDK, ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\n\n/**\n * React Components for TREZA Compliance Integration\n * \n * These components provide easy-to-use React integration for DApps\n * that want to add ZKPassport compliance features.\n */\n\ninterface ComplianceProviderProps {\n provider: ethers.Provider;\n signer?: ethers.Signer;\n children: React.ReactNode;\n verificationMode?: 'fallback' | 'oracle' | 'attestation' | 'hybrid';\n zkVerifyOracleAddress?: string;\n attestationSystemAddress?: string;\n transactionValueThreshold?: string;\n}\n\ninterface ComplianceContextType {\n sdk: TrezaComplianceSDK | null;\n isLoading: boolean;\n error: string | null;\n}\n\n// Context for compliance SDK\nconst ComplianceContext = React.createContext<ComplianceContextType>({\n sdk: null,\n isLoading: true,\n error: null\n});\n\n/**\n * Provider component that initializes the compliance SDK\n */\nexport const ComplianceProvider: React.FC<ComplianceProviderProps> = ({\n provider,\n signer,\n children,\n verificationMode = 'hybrid',\n zkVerifyOracleAddress,\n attestationSystemAddress,\n transactionValueThreshold = '100'\n}) => {\n const [sdk, setSdk] = useState<TrezaComplianceSDK | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n \n useEffect(() => {\n try {\n const config = {\n zkPassportDomain: \"trezalabs.com\",\n zkVerifyEndpoint: \"https://api.zkverify.io\",\n trezaTokenAddress: process.env.REACT_APP_TREZA_TOKEN_ADDRESS || \"0x8278d4FbfaB7dac14eC0295421D0a2733b4504E5\",\n complianceVerifierAddress: process.env.REACT_APP_COMPLIANCE_VERIFIER_ADDRESS || \"0x8c0C6e0Eaf6bc693745A1A3a722e2c9028BBe874\",\n complianceIntegrationAddress: process.env.REACT_APP_COMPLIANCE_INTEGRATION_ADDRESS || \"0xf3ecfC409761D715F137Bfe7078Acec6d7F55428\",\n zkVerifyOracleAddress: zkVerifyOracleAddress || process.env.REACT_APP_ZKVERIFY_ORACLE_ADDRESS,\n attestationSystemAddress: attestationSystemAddress || process.env.REACT_APP_ATTESTATION_SYSTEM_ADDRESS,\n verificationMode,\n transactionValueThreshold,\n provider,\n signer\n };\n \n const complianceSDK = new TrezaComplianceSDK(config);\n setSdk(complianceSDK);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to initialize compliance SDK');\n } finally {\n setIsLoading(false);\n }\n }, [provider, signer]);\n \n return (\n <ComplianceContext.Provider value={{ sdk, isLoading, error }}>\n {children}\n </ComplianceContext.Provider>\n );\n};\n\n/**\n * Hook to use compliance context (for use within ComplianceProvider)\n */\nexport const useComplianceContext = () => {\n const context = React.useContext(ComplianceContext);\n if (!context) {\n throw new Error('useComplianceContext must be used within a ComplianceProvider');\n }\n return context;\n};\n\n/**\n * Props for ComplianceVerification component\n */\ninterface ComplianceVerificationProps {\n userAddress: string;\n requirements?: ComplianceRequirements;\n onVerificationComplete?: (result: VerificationResult) => void;\n onError?: (error: string) => void;\n className?: string;\n}\n\n/**\n * Main compliance verification component\n */\nexport const ComplianceVerification: React.FC<ComplianceVerificationProps> = ({\n userAddress,\n requirements,\n onVerificationComplete,\n onError,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [verificationUrl, setVerificationUrl] = useState<string>(\"\");\n const [qrCode, setQrCode] = useState<string>(\"\");\n const [isGenerating, setIsGenerating] = useState(false);\n const [status, setStatus] = useState<'idle' | 'generating' | 'waiting' | 'processing' | 'complete' | 'error'>('idle');\n const [error, setError] = useState<string>(\"\");\n \n const initiateVerification = useCallback(async () => {\n if (!sdk) return;\n \n setIsGenerating(true);\n setStatus('generating');\n setError(\"\");\n \n try {\n const url = await sdk.initiateVerification(requirements);\n setVerificationUrl(url);\n \n const qr = await sdk.generateQRCode(url);\n setQrCode(qr);\n \n setStatus('waiting');\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to initiate verification';\n setError(errorMessage);\n setStatus('error');\n onError?.(errorMessage);\n } finally {\n setIsGenerating(false);\n }\n }, [sdk, requirements, onError]);\n \n const handleVerificationResult = useCallback(async (zkPassportResult: any) => {\n if (!sdk) return;\n \n setStatus('processing');\n \n try {\n const result = await sdk.processVerificationResult(zkPassportResult, userAddress);\n setStatus('complete');\n onVerificationComplete?.(result);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to process verification';\n setError(errorMessage);\n setStatus('error');\n onError?.(errorMessage);\n }\n }, [sdk, userAddress, onVerificationComplete, onError]);\n \n return (\n <div className={`treza-compliance-verification ${className}`}>\n <div className=\"verification-header\">\n <h3>🛡️ Identity Verification</h3>\n <p>Verify your identity to access TREZA features while keeping your personal data private.</p>\n </div>\n \n {status === 'idle' && (\n <div className=\"verification-start\">\n <button \n onClick={initiateVerification}\n disabled={isGenerating}\n className=\"btn-primary\"\n >\n {isGenerating ? 'Generating...' : 'Start Verification'}\n </button>\n </div>\n )}\n \n {status === 'generating' && (\n <div className=\"verification-generating\">\n <div className=\"spinner\"></div>\n <p>Generating verification request...</p>\n </div>\n )}\n \n {status === 'waiting' && (\n <div className=\"verification-waiting\">\n <div className=\"qr-code-section\">\n <h4>📱 Scan with ZKPassport App</h4>\n {qrCode && (\n <img \n src={qrCode} \n alt=\"Verification QR Code\"\n className=\"qr-code\"\n />\n )}\n <p>Scan this QR code with the ZKPassport mobile app to verify your identity.</p>\n <a \n href={verificationUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"verification-link\"\n >\n Or open verification link directly\n </a>\n </div>\n \n <div className=\"verification-instructions\">\n <h5>Instructions:</h5>\n <ol>\n <li>Download the ZKPassport app if you haven't already</li>\n <li>Scan the QR code above</li>\n <li>Follow the app instructions to verify your government ID</li>\n <li>Your verification will be processed automatically</li>\n </ol>\n </div>\n </div>\n )}\n \n {status === 'processing' && (\n <div className=\"verification-processing\">\n <div className=\"spinner\"></div>\n <p>Processing your verification...</p>\n </div>\n )}\n \n {status === 'complete' && (\n <div className=\"verification-complete\">\n <div className=\"success-icon\">✅</div>\n <h4>Verification Complete!</h4>\n <p>Your identity has been verified successfully. You now have access to TREZA compliance features.</p>\n </div>\n )}\n \n {status === 'error' && (\n <div className=\"verification-error\">\n <div className=\"error-icon\">❌</div>\n <h4>Verification Error</h4>\n <p>{error}</p>\n <button \n onClick={() => setStatus('idle')}\n className=\"btn-secondary\"\n >\n Try Again\n </button>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Props for ComplianceStatus component\n */\ninterface ComplianceStatusProps {\n userAddress: string;\n showDetails?: boolean;\n className?: string;\n}\n\n/**\n * Component to display current compliance status\n */\nexport const ComplianceStatusDisplay: React.FC<ComplianceStatusProps> = ({\n userAddress,\n showDetails = false,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [status, setStatus] = useState<ComplianceStatus | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string>(\"\");\n \n useEffect(() => {\n const checkStatus = async () => {\n if (!sdk || !userAddress) return;\n \n setIsLoading(true);\n try {\n const complianceStatus = await sdk.checkComplianceStatus(userAddress);\n setStatus(complianceStatus);\n setError(\"\");\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to check compliance status');\n } finally {\n setIsLoading(false);\n }\n };\n \n checkStatus();\n }, [sdk, userAddress]);\n \n if (isLoading) {\n return (\n <div className={`compliance-status loading ${className}`}>\n <div className=\"spinner\"></div>\n <span>Checking compliance status...</span>\n </div>\n );\n }\n \n if (error) {\n return (\n <div className={`compliance-status error ${className}`}>\n <span className=\"status-icon\">⚠️</span>\n <span>Error: {error}</span>\n </div>\n );\n }\n \n if (!status) {\n return (\n <div className={`compliance-status unknown ${className}`}>\n <span className=\"status-icon\">❓</span>\n <span>Status unknown</span>\n </div>\n );\n }\n \n return (\n <div className={`compliance-status ${status.isCompliant ? 'compliant' : 'non-compliant'} ${className}`}>\n <div className=\"status-header\">\n <span className=\"status-icon\">\n {status.isCompliant ? '✅' : '❌'}\n </span>\n <span className=\"status-text\">\n {status.isCompliant ? 'Verified' : 'Not Verified'}\n </span>\n </div>\n \n {showDetails && status.isCompliant && (\n <div className=\"status-details\">\n <div className=\"detail-item\">\n <span className=\"label\">Level:</span>\n <span className=\"value\">{status.verificationLevel}</span>\n </div>\n <div className=\"detail-item\">\n <span className=\"label\">Expires:</span>\n <span className=\"value\">\n {new Date(status.expirationTime).toLocaleDateString()}\n </span>\n </div>\n <div className=\"detail-item\">\n <span className=\"label\">Attributes:</span>\n <div className=\"attributes\">\n {status.attributes.ageVerified && <span className=\"attribute\">Age ✓</span>}\n {status.attributes.nationalityVerified && <span className=\"attribute\">Nationality ✓</span>}\n {status.attributes.uniquenessVerified && <span className=\"attribute\">Uniqueness ✓</span>}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Props for GovernanceEligibility component\n */\ninterface GovernanceEligibilityProps {\n userAddress: string;\n proposalId: number;\n className?: string;\n}\n\n/**\n * Component to display governance eligibility\n */\nexport const GovernanceEligibility: React.FC<GovernanceEligibilityProps> = ({\n userAddress,\n proposalId,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [eligibility, setEligibility] = useState<{\n canParticipate: boolean;\n votingWeight: number;\n complianceLevel: string;\n } | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n \n useEffect(() => {\n const checkEligibility = async () => {\n if (!sdk || !userAddress) return;\n \n setIsLoading(true);\n try {\n const result = await sdk.checkGovernanceEligibility(userAddress, proposalId);\n setEligibility(result);\n } catch (err) {\n console.error('Error checking governance eligibility:', err);\n } finally {\n setIsLoading(false);\n }\n };\n \n checkEligibility();\n }, [sdk, userAddress, proposalId]);\n \n if (isLoading) {\n return (\n <div className={`governance-eligibility loading ${className}`}>\n <div className=\"spinner\"></div>\n <span>Checking eligibility...</span>\n </div>\n );\n }\n \n if (!eligibility) {\n return (\n <div className={`governance-eligibility error ${className}`}>\n <span>Unable to check eligibility</span>\n </div>\n );\n }\n \n return (\n <div className={`governance-eligibility ${eligibility.canParticipate ? 'eligible' : 'ineligible'} ${className}`}>\n <div className=\"eligibility-status\">\n <span className=\"status-icon\">\n {eligibility.canParticipate ? '🗳️' : '🚫'}\n </span>\n <span className=\"status-text\">\n {eligibility.canParticipate ? 'Eligible to Vote' : 'Not Eligible'}\n </span>\n </div>\n \n {eligibility.canParticipate && (\n <div className=\"voting-details\">\n <div className=\"voting-weight\">\n <span className=\"label\">Voting Weight:</span>\n <span className=\"value\">{eligibility.votingWeight}x</span>\n </div>\n <div className=\"compliance-level\">\n <span className=\"label\">Compliance Level:</span>\n <span className=\"value\">{eligibility.complianceLevel}</span>\n </div>\n </div>\n )}\n </div>\n );\n};\n\n// CSS styles (you would typically put this in a separate CSS file)\nexport const complianceStyles = `\n.treza-compliance-verification {\n max-width: 500px;\n margin: 0 auto;\n padding: 20px;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n background: #fff;\n}\n\n.verification-header h3 {\n margin: 0 0 10px 0;\n color: #333;\n}\n\n.verification-header p {\n margin: 0 0 20px 0;\n color: #666;\n font-size: 14px;\n}\n\n.btn-primary, .btn-secondary {\n padding: 12px 24px;\n border: none;\n border-radius: 6px;\n font-size: 16px;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.btn-primary {\n background: #007bff;\n color: white;\n}\n\n.btn-primary:hover {\n background: #0056b3;\n}\n\n.btn-primary:disabled {\n background: #ccc;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: #6c757d;\n color: white;\n}\n\n.qr-code {\n max-width: 200px;\n height: auto;\n margin: 10px 0;\n}\n\n.spinner {\n width: 20px;\n height: 20px;\n border: 2px solid #f3f3f3;\n border-top: 2px solid #007bff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n display: inline-block;\n margin-right: 10px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.compliance-status {\n display: flex;\n align-items: center;\n padding: 10px;\n border-radius: 6px;\n margin: 10px 0;\n}\n\n.compliance-status.compliant {\n background: #d4edda;\n color: #155724;\n border: 1px solid #c3e6cb;\n}\n\n.compliance-status.non-compliant {\n background: #f8d7da;\n color: #721c24;\n border: 1px solid #f5c6cb;\n}\n\n.status-icon {\n margin-right: 8px;\n font-size: 18px;\n}\n\n.status-details {\n margin-top: 10px;\n font-size: 14px;\n}\n\n.detail-item {\n margin: 5px 0;\n}\n\n.label {\n font-weight: bold;\n margin-right: 8px;\n}\n\n.attributes {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.attribute {\n background: #e9ecef;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 12px;\n}\n`;\n","import { TrezaComplianceSDK, ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\nimport { ethers } from 'ethers';\n\n/**\n * React-specific service wrapper for TREZA Compliance SDK\n * \n * This service provides React-optimized methods for compliance operations\n * with proper error handling and state management integration.\n */\n\nexport interface ComplianceServiceConfig {\n zkPassportDomain?: string;\n zkVerifyEndpoint?: string;\n zkVerifyApiKey?: string;\n trezaTokenAddress?: string;\n complianceVerifierAddress?: string;\n complianceIntegrationAddress?: string;\n}\n\nexport class ComplianceService {\n private sdk: TrezaComplianceSDK | null = null;\n private config: ComplianceServiceConfig;\n\n constructor(config: ComplianceServiceConfig = {}) {\n this.config = {\n zkPassportDomain: \"trezalabs.com\",\n zkVerifyEndpoint: \"https://api.zkverify.io\",\n trezaTokenAddress: process.env.REACT_APP_TREZA_TOKEN_ADDRESS || \"0x8278d4FbfaB7dac14eC0295421D0a2733b4504E5\",\n complianceVerifierAddress: process.env.REACT_APP_COMPLIANCE_VERIFIER_ADDRESS || \"0x8c0C6e0Eaf6bc693745A1A3a722e2c9028BBe874\",\n complianceIntegrationAddress: process.env.REACT_APP_COMPLIANCE_INTEGRATION_ADDRESS || \"0xf3ecfC409761D715F137Bfe7078Acec6d7F55428\",\n ...config\n };\n }\n\n /**\n * Initialize the compliance SDK with provider and signer\n */\n async initialize(provider: ethers.Provider, signer?: ethers.Signer): Promise<void> {\n try {\n this.sdk = new TrezaComplianceSDK({\n zkPassportDomain: this.config.zkPassportDomain!,\n zkVerifyEndpoint: this.config.zkVerifyEndpoint!,\n zkVerifyApiKey: this.config.zkVerifyApiKey,\n trezaTokenAddress: this.config.trezaTokenAddress!,\n complianceVerifierAddress: this.config.complianceVerifierAddress!,\n complianceIntegrationAddress: this.config.complianceIntegrationAddress!,\n provider,\n signer\n });\n } catch (error) {\n console.error('Failed to initialize compliance service:', error);\n throw error;\n }\n }\n\n /**\n * Get the initialized SDK instance\n */\n getSDK(): TrezaComplianceSDK {\n if (!this.sdk) {\n throw new Error('Compliance service not initialized. Call initialize() first.');\n }\n return this.sdk;\n }\n\n /**\n * Check if the service is initialized\n */\n isInitialized(): boolean {\n return this.sdk !== null;\n }\n\n /**\n * Initiate verification with React-friendly error handling\n */\n async initiateVerification(requirements?: ComplianceRequirements): Promise<{\n success: boolean;\n url?: string;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const url = await this.sdk.initiateVerification(requirements);\n return { success: true, url };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Process verification result with React-friendly error handling\n */\n async processVerificationResult(\n zkPassportResult: any,\n userAddress: string\n ): Promise<{\n success: boolean;\n result?: VerificationResult;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const result = await this.sdk.processVerificationResult(zkPassportResult, userAddress);\n return { success: true, result };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Check compliance status with React-friendly error handling\n */\n async checkComplianceStatus(userAddress: string): Promise<{\n success: boolean;\n status?: ComplianceStatus;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const status = await this.sdk.checkComplianceStatus(userAddress);\n return { success: true, status };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Generate QR code for verification URL\n */\n async generateQRCode(url: string): Promise<{\n success: boolean;\n qrCode?: string;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const qrCode = await this.sdk.generateQRCode(url);\n return { success: true, qrCode };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Batch check compliance for multiple users\n */\n async batchCheckCompliance(userAddresses: string[]): Promise<{\n success: boolean;\n results?: ComplianceStatus[];\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const results = await this.sdk.batchCheckCompliance(userAddresses);\n return { success: true, results };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Check governance eligibility\n */\n async checkGovernanceEligibility(userAddress: string, proposalId?: string): Promise<{\n success: boolean;\n eligibility?: any;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n if (!proposalId) {\n throw new Error('Proposal ID is required');\n }\n\n const proposalIdNum = parseInt(proposalId, 10);\n if (isNaN(proposalIdNum)) {\n throw new Error('Invalid proposal ID: must be a number');\n }\n\n const eligibility = await this.sdk.checkGovernanceEligibility(userAddress, proposalIdNum);\n return { success: true, eligibility };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.sdk = null;\n }\n}\n\n// Singleton instance for React apps\nlet complianceServiceInstance: ComplianceService | null = null;\n\n/**\n * Get or create the global compliance service instance\n */\nexport function getComplianceService(config?: ComplianceServiceConfig): ComplianceService {\n if (!complianceServiceInstance) {\n complianceServiceInstance = new ComplianceService(config);\n }\n return complianceServiceInstance;\n}\n\n/**\n * Reset the global compliance service instance\n */\nexport function resetComplianceService(): void {\n if (complianceServiceInstance) {\n complianceServiceInstance.destroy();\n complianceServiceInstance = null;\n }\n}\n","import { ethers } from 'ethers';\n\n/**\n * Wallet Service for React applications\n * \n * Provides React-friendly wallet connection and management utilities\n * with proper error handling and state management integration.\n */\n\nexport interface WalletConnectionResult {\n success: boolean;\n provider?: ethers.Provider;\n signer?: ethers.Signer;\n address?: string;\n chainId?: number;\n error?: string;\n}\n\nexport interface WalletInfo {\n address: string;\n chainId: number;\n balance: string;\n isConnected: boolean;\n}\n\nexport class WalletService {\n private provider: ethers.Provider | null = null;\n private signer: ethers.Signer | null = null;\n private currentAddress: string | null = null;\n\n /**\n * Connect to MetaMask or other Web3 wallet\n */\n async connectWallet(): Promise<WalletConnectionResult> {\n try {\n // Check if Web3 is available\n if (typeof window === 'undefined' || !window.ethereum) {\n return {\n success: false,\n error: 'Web3 wallet not found. Please install MetaMask or another Web3 wallet.'\n };\n }\n\n // Request account access\n await window.ethereum.request({ method: 'eth_requestAccounts' });\n\n // Create provider and signer\n const provider = new ethers.BrowserProvider(window.ethereum);\n const signer = await provider.getSigner();\n const address = await signer.getAddress();\n const network = await provider.getNetwork();\n\n // Store references\n this.provider = provider;\n this.signer = signer;\n this.currentAddress = address;\n\n return {\n success: true,\n provider,\n signer,\n address,\n chainId: Number(network.chainId)\n };\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to connect wallet';\n return {\n success: false,\n error: errorMessage\n };\n }\n }\n\n /**\n * Disconnect wallet\n */\n disconnect(): void {\n this.provider = null;\n this.signer = null;\n this.currentAddress = null;\n }\n\n /**\n * Get current wallet info\n */\n async getWalletInfo(): Promise<WalletInfo | null> {\n if (!this.provider || !this.currentAddress) {\n return null;\n }\n\n try {\n const balance = await this.provider.getBalance(this.currentAddress);\n const network = await this.provider.getNetwork();\n\n return {\n address: this.currentAddress,\n chainId: Number(network.chainId),\n balance: ethers.formatEther(balance),\n isConnected: true\n };\n } catch (error) {\n console.error('Failed to get wallet info:', error);\n return null;\n }\n }\n\n /**\n * Switch to a specific network\n */\n async switchNetwork(chainId: number): Promise<{ success: boolean; error?: string }> {\n try {\n if (!window.ethereum) {\n return { success: false, error: 'Web3 wallet not found' };\n }\n\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId.toString(16)}` }],\n });\n\n return { success: true };\n } catch (error: any) {\n // If the chain hasn't been added to MetaMask\n if (error.code === 4902) {\n return { success: false, error: 'Network not added to wallet' };\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Failed to switch network';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Add a custom network to the wallet\n */\n async addNetwork(networkConfig: {\n chainId: number;\n chainName: string;\n rpcUrls: string[];\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n blockExplorerUrls?: string[];\n }): Promise<{ success: boolean; error?: string }> {\n try {\n if (!window.ethereum) {\n return { success: false, error: 'Web3 wallet not found' };\n }\n\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{\n chainId: `0x${networkConfig.chainId.toString(16)}`,\n chainName: networkConfig.chainName,\n rpcUrls: networkConfig.rpcUrls,\n nativeCurrency: networkConfig.nativeCurrency,\n blockExplorerUrls: networkConfig.blockExplorerUrls\n }],\n });\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to add network';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Sign a message\n */\n async signMessage(message: string): Promise<{ success: boolean; signature?: string; error?: string }> {\n try {\n if (!this.signer) {\n return { success: false, error: 'Wallet not connected' };\n }\n\n const signature = await this.signer.signMessage(message);\n return { success: true, signature };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to sign message';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Get current provider\n */\n getProvider(): ethers.Provider | null {\n return this.provider;\n }\n\n /**\n * Get current signer\n */\n getSigner(): ethers.Signer | null {\n return this.signer;\n }\n\n /**\n * Get current address\n */\n getCurrentAddress(): string | null {\n return this.currentAddress;\n }\n\n /**\n * Check if wallet is connected\n */\n isConnected(): boolean {\n return this.provider !== null && this.signer !== null && this.currentAddress !== null;\n }\n\n /**\n * Listen for account changes\n */\n onAccountsChanged(callback: (accounts: string[]) => void): void {\n if (window.ethereum) {\n window.ethereum.on('accountsChanged', callback);\n }\n }\n\n /**\n * Listen for chain changes\n */\n onChainChanged(callback: (chainId: string) => void): void {\n if (window.ethereum) {\n window.ethereum.on('chainChanged', callback);\n }\n }\n\n /**\n * Remove event listeners\n */\n removeAllListeners(): void {\n if (window.ethereum) {\n window.ethereum.removeAllListeners('accountsChanged');\n window.ethereum.removeAllListeners('chainChanged');\n }\n }\n}\n\n// Singleton instance for React apps\nlet walletServiceInstance: WalletService | null = null;\n\n/**\n * Get or create the global wallet service instance\n */\nexport function getWalletService(): WalletService {\n if (!walletServiceInstance) {\n walletServiceInstance = new WalletService();\n }\n return walletServiceInstance;\n}\n\n/**\n * Reset the global wallet service instance\n */\nexport function resetWalletService(): void {\n if (walletServiceInstance) {\n walletServiceInstance.removeAllListeners();\n walletServiceInstance.disconnect();\n walletServiceInstance = null;\n }\n}\n\n// Type declarations for window.ethereum\ndeclare global {\n interface Window {\n ethereum?: {\n request: (args: { method: string; params?: any[] }) => Promise<any>;\n on: (event: string, callback: (...args: any[]) => void) => void;\n removeAllListeners: (event: string) => void;\n };\n }\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { ethers } from 'ethers';\nimport { ComplianceService, getComplianceService } from './compliance-service';\nimport { WalletService, getWalletService, WalletInfo } from './wallet-service';\nimport { ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\n\n/**\n * Custom React hooks for TREZA SDK integration\n * \n * These hooks provide easy-to-use React integration for compliance and wallet functionality\n */\n\n// =========================================================================\n// WALLET HOOKS\n// =========================================================================\n\nexport interface UseWalletResult {\n isConnected: boolean;\n isConnecting: boolean;\n walletInfo: WalletInfo | null;\n provider: ethers.Provider | null;\n signer: ethers.Signer | null;\n address: string | null;\n error: string | null;\n connect: () => Promise<void>;\n disconnect: () => void;\n switchNetwork: (chainId: number) => Promise<void>;\n}\n\n/**\n * Hook for wallet connection and management\n */\nexport function useWallet(): UseWalletResult {\n const [isConnected, setIsConnected] = useState(false);\n const [isConnecting, setIsConnecting] = useState(false);\n const [walletInfo, setWalletInfo] = useState<WalletInfo | null>(null);\n const [provider, setProvider] = useState<ethers.Provider | null>(null);\n const [signer, setSigner] = useState<ethers.Signer | null>(null);\n const [address, setAddress] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n \n const walletService = useRef<WalletService>(getWalletService());\n\n const connect = useCallback(async () => {\n setIsConnecting(true);\n setError(null);\n\n try {\n const result = await walletService.current.connectWallet();\n \n if (result.success) {\n setIsConnected(true);\n setProvider(result.provider || null);\n setSigner(result.signer || null);\n setAddress(result.address || null);\n \n // Get wallet info\n const info = await walletService.current.getWalletInfo();\n setWalletInfo(info);\n } else {\n setError(result.error || 'Failed to connect wallet');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to connect wallet');\n } finally {\n setIsConnecting(false);\n }\n }, []);\n\n const disconnect = useCallback(() => {\n walletService.current.disconnect();\n setIsConnected(false);\n setProvider(null);\n setSigner(null);\n setAddress(null);\n setWalletInfo(null);\n setError(null);\n }, []);\n\n const switchNetwork = useCallback(async (chainId: number) => {\n setError(null);\n \n try {\n const result = await walletService.current.switchNetwork(chainId);\n if (!result.success) {\n setError(result.error || 'Failed to switch network');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to switch network');\n }\n }, []);\n\n // Set up event listeners\n useEffect(() => {\n const handleAccountsChanged = (accounts: string[]) => {\n if (accounts.length === 0) {\n disconnect();\n } else {\n setAddress(accounts[0]);\n }\n };\n\n const handleChainChanged = () => {\n // Reload wallet info when chain changes\n if (isConnected) {\n walletService.current.getWalletInfo().then(setWalletInfo);\n }\n };\n\n walletService.current.onAccountsChanged(handleAccountsChanged);\n walletService.current.onChainChanged(handleChainChanged);\n\n return () => {\n walletService.current.removeAllListeners();\n };\n }, [isConnected, disconnect]);\n\n return {\n isConnected,\n isConnecting,\n walletInfo,\n provider,\n signer,\n address,\n error,\n connect,\n disconnect,\n switchNetwork\n };\n}\n\n// =========================================================================\n// COMPLIANCE HOOKS\n// =========================================================================\n\nexport interface UseComplianceResult {\n isInitialized: boolean;\n isLoading: boolean;\n error: string | null;\n initiateVerification: (requirements?: ComplianceRequirements) => Promise<string | null>;\n processVerification: (zkPassportResult: any, userAddress: string) => Promise<VerificationResult | null>;\n checkCompliance: (userAddress: string) => Promise<ComplianceStatus | null>;\n generateQRCode: (url: string) => Promise<string | null>;\n}\n\n/**\n * Hook for compliance operations\n */\nexport function useCompliance(provider?: ethers.Provider, signer?: ethers.Signer): UseComplianceResult {\n const [isInitialized, setIsInitialized] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n \n const complianceService = useRef<ComplianceService>(getComplianceService());\n\n // Initialize service when provider/signer changes\n useEffect(() => {\n if (provider) {\n setIsLoading(true);\n complianceService.current.initialize(provider, signer)\n .then(() => {\n setIsInitialized(true);\n setError(null);\n })\n .catch((err) => {\n setError(err instanceof Error ? err.message : 'Failed to initialize compliance');\n setIsInitialized(false);\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setIsInitialized(false);\n }\n }, [provider, signer]);\n\n const initiateVerification = useCallback(async (requirements?: ComplianceRequirements): Promise<string | null> => {\n setError(null);\n const result = await complianceService.current.initiateVerification(requirements);\n \n if (result.success) {\n return result.url || null;\n } else {\n setError(result.error || 'Failed to initiate verification');\n return null;\n }\n }, []);\n\n const processVerification = useCallback(async (\n zkPassportResult: any, \n userAddress: string\n ): Promise<VerificationResult | null> => {\n setError(null);\n const result = await complianceService.current.processVerificationResult(zkPassportResult, userAddress);\n \n if (result.success) {\n return result.result || null;\n } else {\n setError(result.error || 'Failed to process verification');\n return null;\n }\n }, []);\n\n const checkCompliance = useCallback(async (userAddress: string): Promise<ComplianceStatus | null> => {\n setError(null);\n const result = await complianceService.current.checkComplianceStatus(userAddress);\n \n if (result.success) {\n return result.status || null;\n } else {\n setError(result.error || 'Failed to check compliance');\n return null;\n }\n }, []);\n\n const generateQRCode = useCallback(async (url: string): Promise<string | null> => {\n setError(null);\n const result = await complianceService.current.generateQRCode(url);\n \n if (result.success) {\n return result.qrCode || null;\n } else {\n setError(result.error || 'Failed to generate QR code');\n return null;\n }\n }, []);\n\n return {\n isInitialized,\n isLoading,\n error,\n initiateVerification,\n processVerification,\n checkCompliance,\n generateQRCode\n };\n}\n\n// =========================================================================\n// COMBINED HOOKS\n// =========================================================================\n\nexport interface UseTrezaResult {\n wallet: UseWalletResult;\n compliance: UseComplianceResult;\n isReady: boolean;\n}\n\n/**\n * Combined hook for wallet and compliance functionality\n */\nexport function useTreza(): UseTrezaResult {\n const wallet = useWallet();\n const compliance = useCompliance(wallet.provider || undefined, wallet.signer || undefined);\n\n const isReady = wallet.isConnected && compliance.isInitialized;\n\n return {\n wallet,\n compliance,\n isReady\n };\n}\n\n// =========================================================================\n// VERIFICATION FLOW HOOK\n// =========================================================================\n\nexport interface UseVerificationFlowResult {\n status: 'idle' | 'generating' | 'waiting' | 'processing' | 'completed' | 'error';\n verificationUrl: string | null;\n qrCode: string | null;\n result: VerificationResult | null;\n error: string | null;\n startVerification: (userAddress: string, requirements?: ComplianceRequirements) => Promise<void>;\n processResult: (zkPassportResult: any) => Promise<void>;\n reset: () => void;\n}\n\n/**\n * Hook for managing the complete verification flow\n */\nexport function useVerificationFlow(provider?: ethers.Provider, signer?: ethers.Signer): UseVerificationFlowResult {\n const [status, setStatus] = useState<'idle' | 'generating' | 'waiting' | 'processing' | 'completed' | 'error'>('idle');\n const [verificationUrl, setVerificationUrl] = useState<string | null>(null);\n const [qrCode, setQrCode] = useState<string | null>(null);\n const [result, setResult] = useState<VerificationResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [currentUserAddress, setCurrentUserAddress] = useState<string | null>(null);\n\n const compliance = useCompliance(provider, signer);\n\n const startVerification = useCallback(async (userAddress: string, requirements?: ComplianceRequirements) => {\n setStatus('generating');\n setError(null);\n setResult(null);\n setCurrentUserAddress(userAddress);\n\n try {\n const url = await compliance.initiateVerification(requirements);\n if (url) {\n setVerificationUrl(url);\n \n const qr = await compliance.generateQRCode(url);\n if (qr) {\n setQrCode(qr);\n setStatus('waiting');\n } else {\n throw new Error('Failed to generate QR code');\n }\n } else {\n throw new Error('Failed to initiate verification');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Verification failed');\n setStatus('error');\n }\n }, [compliance]);\n\n const processResult = useCallback(async (zkPassportResult: any) => {\n if (!currentUserAddress) {\n setError('No user address set');\n setStatus('error');\n return;\n }\n\n setStatus('processing');\n setError(null);\n\n try {\n const verificationResult = await compliance.processVerification(zkPassportResult, currentUserAddress);\n if (verificationResult) {\n setResult(verificationResult);\n setStatus('completed');\n } else {\n throw new Error('Failed to process verification result');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Processing failed');\n setStatus('error');\n }\n }, [compliance, currentUserAddress]);\n\n const reset = useCallback(() => {\n setStatus('idle');\n setVerificationUrl(null);\n setQrCode(null);\n setResult(null);\n setError(null);\n setCurrentUserAddress(null);\n }, []);\n\n return {\n status,\n verificationUrl,\n qrCode,\n result,\n error,\n startVerification,\n processResult,\n reset\n };\n}\n","/**\n * @treza/react - React components for TREZA SDK\n * \n * Privacy-first DeFi UI components with zero-knowledge compliance\n */\n\n// Component exports\nexport {\n ComplianceProvider,\n ComplianceVerification,\n ComplianceStatusDisplay,\n GovernanceEligibility,\n useComplianceContext\n} from './components/react-components';\n\n// Style exports\nexport { complianceStyles } from './components/react-components';\n\n// Service exports\nexport {\n ComplianceService,\n getComplianceService,\n resetComplianceService,\n WalletService,\n getWalletService,\n resetWalletService\n} from './services';\n\n// Hook exports\nexport {\n useWallet,\n useCompliance,\n useTreza,\n useVerificationFlow\n} from './services';\n\n// Service type exports\nexport type {\n ComplianceServiceConfig,\n WalletConnectionResult,\n WalletInfo,\n UseWalletResult,\n UseComplianceResult,\n UseTrezaResult,\n UseVerificationFlowResult\n} from './services';\n\n// Re-export core types for convenience\nexport type {\n TrezaComplianceConfig,\n ComplianceRequirements,\n ComplianceStatus,\n VerificationResult\n} from '@treza/sdk';\n\n// Version\nexport const VERSION = '1.0.0';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/react-components.tsx","../src/services/compliance-service.ts","../src/services/wallet-service.ts","../src/services/hooks.ts","../src/index.ts"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { ethers } from 'ethers';\nimport { TrezaComplianceSDK, ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\n\n/**\n * React Components for TREZA Compliance Integration\n * \n * These components provide easy-to-use React integration for DApps\n * that want to add ZKPassport compliance features.\n */\n\ninterface ComplianceProviderProps {\n provider: ethers.Provider;\n signer?: ethers.Signer;\n children: React.ReactNode;\n verificationMode?: 'fallback' | 'oracle' | 'attestation' | 'hybrid';\n zkVerifyOracleAddress?: string;\n attestationSystemAddress?: string;\n transactionValueThreshold?: string;\n}\n\ninterface ComplianceContextType {\n sdk: TrezaComplianceSDK | null;\n isLoading: boolean;\n error: string | null;\n}\n\n// Context for compliance SDK\nconst ComplianceContext = React.createContext<ComplianceContextType>({\n sdk: null,\n isLoading: true,\n error: null\n});\n\n/**\n * Provider component that initializes the compliance SDK\n */\nexport const ComplianceProvider: React.FC<ComplianceProviderProps> = ({\n provider,\n signer,\n children,\n verificationMode = 'hybrid',\n zkVerifyOracleAddress,\n attestationSystemAddress,\n transactionValueThreshold = '100'\n}) => {\n const [sdk, setSdk] = useState<TrezaComplianceSDK | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n \n useEffect(() => {\n try {\n const config = {\n zkPassportDomain: \"trezalabs.com\",\n zkVerifyEndpoint: \"https://api.zkverify.io\",\n trezaTokenAddress: process.env.REACT_APP_TREZA_TOKEN_ADDRESS || \"0x8278d4FbfaB7dac14eC0295421D0a2733b4504E5\",\n complianceVerifierAddress: process.env.REACT_APP_COMPLIANCE_VERIFIER_ADDRESS || \"0x8c0C6e0Eaf6bc693745A1A3a722e2c9028BBe874\",\n complianceIntegrationAddress: process.env.REACT_APP_COMPLIANCE_INTEGRATION_ADDRESS || \"0xf3ecfC409761D715F137Bfe7078Acec6d7F55428\",\n zkVerifyOracleAddress: zkVerifyOracleAddress || process.env.REACT_APP_ZKVERIFY_ORACLE_ADDRESS,\n attestationSystemAddress: attestationSystemAddress || process.env.REACT_APP_ATTESTATION_SYSTEM_ADDRESS,\n verificationMode,\n transactionValueThreshold,\n provider,\n signer\n };\n \n const complianceSDK = new TrezaComplianceSDK(config);\n setSdk(complianceSDK);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to initialize compliance SDK');\n } finally {\n setIsLoading(false);\n }\n }, [provider, signer]);\n \n return (\n <ComplianceContext.Provider value={{ sdk, isLoading, error }}>\n {children}\n </ComplianceContext.Provider>\n );\n};\n\n/**\n * Hook to use compliance context (for use within ComplianceProvider)\n */\nexport const useComplianceContext = () => {\n const context = React.useContext(ComplianceContext);\n if (!context) {\n throw new Error('useComplianceContext must be used within a ComplianceProvider');\n }\n return context;\n};\n\n/**\n * Props for ComplianceVerification component\n */\ninterface ComplianceVerificationProps {\n userAddress: string;\n requirements?: ComplianceRequirements;\n onVerificationComplete?: (result: VerificationResult) => void;\n onError?: (error: string) => void;\n className?: string;\n}\n\n/**\n * Main compliance verification component\n */\nexport const ComplianceVerification: React.FC<ComplianceVerificationProps> = ({\n userAddress,\n requirements,\n onVerificationComplete,\n onError,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [verificationUrl, setVerificationUrl] = useState<string>(\"\");\n const [qrCode, setQrCode] = useState<string>(\"\");\n const [isGenerating, setIsGenerating] = useState(false);\n const [status, setStatus] = useState<'idle' | 'generating' | 'waiting' | 'processing' | 'complete' | 'error'>('idle');\n const [error, setError] = useState<string>(\"\");\n \n const initiateVerification = useCallback(async () => {\n if (!sdk) return;\n \n setIsGenerating(true);\n setStatus('generating');\n setError(\"\");\n \n try {\n const url = await sdk.initiateVerification(requirements);\n setVerificationUrl(url);\n \n const qr = await sdk.generateQRCode(url);\n setQrCode(qr);\n \n setStatus('waiting');\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to initiate verification';\n setError(errorMessage);\n setStatus('error');\n onError?.(errorMessage);\n } finally {\n setIsGenerating(false);\n }\n }, [sdk, requirements, onError]);\n \n const handleVerificationResult = useCallback(async (zkPassportResult: any) => {\n if (!sdk) return;\n \n setStatus('processing');\n \n try {\n const result = await sdk.processVerificationResult(zkPassportResult, userAddress);\n setStatus('complete');\n onVerificationComplete?.(result);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to process verification';\n setError(errorMessage);\n setStatus('error');\n onError?.(errorMessage);\n }\n }, [sdk, userAddress, onVerificationComplete, onError]);\n \n return (\n <div className={`treza-compliance-verification ${className}`}>\n <div className=\"verification-header\">\n <h3>🛡️ Identity Verification</h3>\n <p>Verify your identity to access TREZA features while keeping your personal data private.</p>\n </div>\n \n {status === 'idle' && (\n <div className=\"verification-start\">\n <button \n onClick={initiateVerification}\n disabled={isGenerating}\n className=\"btn-primary\"\n >\n {isGenerating ? 'Generating...' : 'Start Verification'}\n </button>\n </div>\n )}\n \n {status === 'generating' && (\n <div className=\"verification-generating\">\n <div className=\"spinner\"></div>\n <p>Generating verification request...</p>\n </div>\n )}\n \n {status === 'waiting' && (\n <div className=\"verification-waiting\">\n <div className=\"qr-code-section\">\n <h4>📱 Scan with ZKPassport App</h4>\n {qrCode && (\n <img \n src={qrCode} \n alt=\"Verification QR Code\"\n className=\"qr-code\"\n />\n )}\n <p>Scan this QR code with the ZKPassport mobile app to verify your identity.</p>\n <a \n href={verificationUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"verification-link\"\n >\n Or open verification link directly\n </a>\n </div>\n \n <div className=\"verification-instructions\">\n <h5>Instructions:</h5>\n <ol>\n <li>Download the ZKPassport app if you haven't already</li>\n <li>Scan the QR code above</li>\n <li>Follow the app instructions to verify your government ID</li>\n <li>Your verification will be processed automatically</li>\n </ol>\n </div>\n </div>\n )}\n \n {status === 'processing' && (\n <div className=\"verification-processing\">\n <div className=\"spinner\"></div>\n <p>Processing your verification...</p>\n </div>\n )}\n \n {status === 'complete' && (\n <div className=\"verification-complete\">\n <div className=\"success-icon\">✅</div>\n <h4>Verification Complete!</h4>\n <p>Your identity has been verified successfully. You now have access to TREZA compliance features.</p>\n </div>\n )}\n \n {status === 'error' && (\n <div className=\"verification-error\">\n <div className=\"error-icon\">❌</div>\n <h4>Verification Error</h4>\n <p>{error}</p>\n <button \n onClick={() => setStatus('idle')}\n className=\"btn-secondary\"\n >\n Try Again\n </button>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Props for ComplianceStatus component\n */\ninterface ComplianceStatusProps {\n userAddress: string;\n showDetails?: boolean;\n className?: string;\n}\n\n/**\n * Component to display current compliance status\n */\nexport const ComplianceStatusDisplay: React.FC<ComplianceStatusProps> = ({\n userAddress,\n showDetails = false,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [status, setStatus] = useState<ComplianceStatus | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string>(\"\");\n \n useEffect(() => {\n const checkStatus = async () => {\n if (!sdk || !userAddress) return;\n \n setIsLoading(true);\n try {\n const complianceStatus = await sdk.checkComplianceStatus(userAddress);\n setStatus(complianceStatus);\n setError(\"\");\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to check compliance status');\n } finally {\n setIsLoading(false);\n }\n };\n \n checkStatus();\n }, [sdk, userAddress]);\n \n if (isLoading) {\n return (\n <div className={`compliance-status loading ${className}`}>\n <div className=\"spinner\"></div>\n <span>Checking compliance status...</span>\n </div>\n );\n }\n \n if (error) {\n return (\n <div className={`compliance-status error ${className}`}>\n <span className=\"status-icon\">⚠️</span>\n <span>Error: {error}</span>\n </div>\n );\n }\n \n if (!status) {\n return (\n <div className={`compliance-status unknown ${className}`}>\n <span className=\"status-icon\">❓</span>\n <span>Status unknown</span>\n </div>\n );\n }\n \n return (\n <div className={`compliance-status ${status.isCompliant ? 'compliant' : 'non-compliant'} ${className}`}>\n <div className=\"status-header\">\n <span className=\"status-icon\">\n {status.isCompliant ? '✅' : '❌'}\n </span>\n <span className=\"status-text\">\n {status.isCompliant ? 'Verified' : 'Not Verified'}\n </span>\n </div>\n \n {showDetails && status.isCompliant && (\n <div className=\"status-details\">\n <div className=\"detail-item\">\n <span className=\"label\">Level:</span>\n <span className=\"value\">{status.verificationLevel}</span>\n </div>\n <div className=\"detail-item\">\n <span className=\"label\">Expires:</span>\n <span className=\"value\">\n {new Date(status.expirationTime).toLocaleDateString()}\n </span>\n </div>\n <div className=\"detail-item\">\n <span className=\"label\">Attributes:</span>\n <div className=\"attributes\">\n {status.attributes.ageVerified && <span className=\"attribute\">Age ✓</span>}\n {status.attributes.nationalityVerified && <span className=\"attribute\">Nationality ✓</span>}\n {status.attributes.uniquenessVerified && <span className=\"attribute\">Uniqueness ✓</span>}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Props for GovernanceEligibility component\n */\ninterface GovernanceEligibilityProps {\n userAddress: string;\n proposalId: number;\n className?: string;\n}\n\n/**\n * Component to display governance eligibility\n */\nexport const GovernanceEligibility: React.FC<GovernanceEligibilityProps> = ({\n userAddress,\n proposalId,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [eligibility, setEligibility] = useState<{\n canParticipate: boolean;\n votingWeight: number;\n complianceLevel: string;\n } | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n \n useEffect(() => {\n const checkEligibility = async () => {\n if (!sdk || !userAddress) return;\n \n setIsLoading(true);\n try {\n const result = await sdk.checkGovernanceEligibility(userAddress, proposalId);\n setEligibility(result);\n } catch (err) {\n console.error('Error checking governance eligibility:', err);\n } finally {\n setIsLoading(false);\n }\n };\n \n checkEligibility();\n }, [sdk, userAddress, proposalId]);\n \n if (isLoading) {\n return (\n <div className={`governance-eligibility loading ${className}`}>\n <div className=\"spinner\"></div>\n <span>Checking eligibility...</span>\n </div>\n );\n }\n \n if (!eligibility) {\n return (\n <div className={`governance-eligibility error ${className}`}>\n <span>Unable to check eligibility</span>\n </div>\n );\n }\n \n return (\n <div className={`governance-eligibility ${eligibility.canParticipate ? 'eligible' : 'ineligible'} ${className}`}>\n <div className=\"eligibility-status\">\n <span className=\"status-icon\">\n {eligibility.canParticipate ? '🗳️' : '🚫'}\n </span>\n <span className=\"status-text\">\n {eligibility.canParticipate ? 'Eligible to Vote' : 'Not Eligible'}\n </span>\n </div>\n \n {eligibility.canParticipate && (\n <div className=\"voting-details\">\n <div className=\"voting-weight\">\n <span className=\"label\">Voting Weight:</span>\n <span className=\"value\">{eligibility.votingWeight}x</span>\n </div>\n <div className=\"compliance-level\">\n <span className=\"label\">Compliance Level:</span>\n <span className=\"value\">{eligibility.complianceLevel}</span>\n </div>\n </div>\n )}\n </div>\n );\n};\n\n// CSS styles (you would typically put this in a separate CSS file)\nexport const complianceStyles = `\n.treza-compliance-verification {\n max-width: 500px;\n margin: 0 auto;\n padding: 20px;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n background: #fff;\n}\n\n.verification-header h3 {\n margin: 0 0 10px 0;\n color: #333;\n}\n\n.verification-header p {\n margin: 0 0 20px 0;\n color: #666;\n font-size: 14px;\n}\n\n.btn-primary, .btn-secondary {\n padding: 12px 24px;\n border: none;\n border-radius: 6px;\n font-size: 16px;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.btn-primary {\n background: #007bff;\n color: white;\n}\n\n.btn-primary:hover {\n background: #0056b3;\n}\n\n.btn-primary:disabled {\n background: #ccc;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: #6c757d;\n color: white;\n}\n\n.qr-code {\n max-width: 200px;\n height: auto;\n margin: 10px 0;\n}\n\n.spinner {\n width: 20px;\n height: 20px;\n border: 2px solid #f3f3f3;\n border-top: 2px solid #007bff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n display: inline-block;\n margin-right: 10px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.compliance-status {\n display: flex;\n align-items: center;\n padding: 10px;\n border-radius: 6px;\n margin: 10px 0;\n}\n\n.compliance-status.compliant {\n background: #d4edda;\n color: #155724;\n border: 1px solid #c3e6cb;\n}\n\n.compliance-status.non-compliant {\n background: #f8d7da;\n color: #721c24;\n border: 1px solid #f5c6cb;\n}\n\n.status-icon {\n margin-right: 8px;\n font-size: 18px;\n}\n\n.status-details {\n margin-top: 10px;\n font-size: 14px;\n}\n\n.detail-item {\n margin: 5px 0;\n}\n\n.label {\n font-weight: bold;\n margin-right: 8px;\n}\n\n.attributes {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.attribute {\n background: #e9ecef;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 12px;\n}\n`;\n","import { TrezaComplianceSDK, ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\nimport { ethers } from 'ethers';\n\n/**\n * React-specific service wrapper for TREZA Compliance SDK\n * \n * This service provides React-optimized methods for compliance operations\n * with proper error handling and state management integration.\n */\n\nexport interface ComplianceServiceConfig {\n zkPassportDomain?: string;\n zkVerifyEndpoint?: string;\n zkVerifyApiKey?: string;\n trezaTokenAddress?: string;\n complianceVerifierAddress?: string;\n complianceIntegrationAddress?: string;\n}\n\nexport class ComplianceService {\n private sdk: TrezaComplianceSDK | null = null;\n private config: ComplianceServiceConfig;\n\n constructor(config: ComplianceServiceConfig = {}) {\n this.config = {\n zkPassportDomain: \"trezalabs.com\",\n zkVerifyEndpoint: \"https://api.zkverify.io\",\n trezaTokenAddress: process.env.REACT_APP_TREZA_TOKEN_ADDRESS || \"0x8278d4FbfaB7dac14eC0295421D0a2733b4504E5\",\n complianceVerifierAddress: process.env.REACT_APP_COMPLIANCE_VERIFIER_ADDRESS || \"0x8c0C6e0Eaf6bc693745A1A3a722e2c9028BBe874\",\n complianceIntegrationAddress: process.env.REACT_APP_COMPLIANCE_INTEGRATION_ADDRESS || \"0xf3ecfC409761D715F137Bfe7078Acec6d7F55428\",\n ...config\n };\n }\n\n /**\n * Initialize the compliance SDK with provider and signer\n */\n async initialize(provider: ethers.Provider, signer?: ethers.Signer): Promise<void> {\n try {\n this.sdk = new TrezaComplianceSDK({\n zkPassportDomain: this.config.zkPassportDomain!,\n zkVerifyEndpoint: this.config.zkVerifyEndpoint!,\n zkVerifyApiKey: this.config.zkVerifyApiKey,\n trezaTokenAddress: this.config.trezaTokenAddress!,\n complianceVerifierAddress: this.config.complianceVerifierAddress!,\n complianceIntegrationAddress: this.config.complianceIntegrationAddress!,\n provider,\n signer\n });\n } catch (error) {\n console.error('Failed to initialize compliance service:', error);\n throw error;\n }\n }\n\n /**\n * Get the initialized SDK instance\n */\n getSDK(): TrezaComplianceSDK {\n if (!this.sdk) {\n throw new Error('Compliance service not initialized. Call initialize() first.');\n }\n return this.sdk;\n }\n\n /**\n * Check if the service is initialized\n */\n isInitialized(): boolean {\n return this.sdk !== null;\n }\n\n /**\n * Initiate verification with React-friendly error handling\n */\n async initiateVerification(requirements?: ComplianceRequirements): Promise<{\n success: boolean;\n url?: string;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const url = await this.sdk.initiateVerification(requirements);\n return { success: true, url };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Process verification result with React-friendly error handling\n */\n async processVerificationResult(\n zkPassportResult: any,\n userAddress: string\n ): Promise<{\n success: boolean;\n result?: VerificationResult;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const result = await this.sdk.processVerificationResult(zkPassportResult, userAddress);\n return { success: true, result };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Check compliance status with React-friendly error handling\n */\n async checkComplianceStatus(userAddress: string): Promise<{\n success: boolean;\n status?: ComplianceStatus;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const status = await this.sdk.checkComplianceStatus(userAddress);\n return { success: true, status };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Generate QR code for verification URL\n */\n async generateQRCode(url: string): Promise<{\n success: boolean;\n qrCode?: string;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const qrCode = await this.sdk.generateQRCode(url);\n return { success: true, qrCode };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Batch check compliance for multiple users\n */\n async batchCheckCompliance(userAddresses: string[]): Promise<{\n success: boolean;\n results?: ComplianceStatus[];\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const results = await this.sdk.batchCheckCompliance(userAddresses);\n return { success: true, results };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Check governance eligibility\n */\n async checkGovernanceEligibility(userAddress: string, proposalId?: string): Promise<{\n success: boolean;\n eligibility?: any;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n if (!proposalId) {\n throw new Error('Proposal ID is required');\n }\n\n const proposalIdNum = parseInt(proposalId, 10);\n if (isNaN(proposalIdNum)) {\n throw new Error('Invalid proposal ID: must be a number');\n }\n\n const eligibility = await this.sdk.checkGovernanceEligibility(userAddress, proposalIdNum);\n return { success: true, eligibility };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.sdk = null;\n }\n}\n\n// Singleton instance for React apps\nlet complianceServiceInstance: ComplianceService | null = null;\n\n/**\n * Get or create the global compliance service instance\n */\nexport function getComplianceService(config?: ComplianceServiceConfig): ComplianceService {\n if (!complianceServiceInstance) {\n complianceServiceInstance = new ComplianceService(config);\n }\n return complianceServiceInstance;\n}\n\n/**\n * Reset the global compliance service instance\n */\nexport function resetComplianceService(): void {\n if (complianceServiceInstance) {\n complianceServiceInstance.destroy();\n complianceServiceInstance = null;\n }\n}\n","import { ethers } from 'ethers';\n\n/**\n * Wallet Service for React applications\n * \n * Provides React-friendly wallet connection and management utilities\n * with proper error handling and state management integration.\n */\n\nexport interface WalletConnectionResult {\n success: boolean;\n provider?: ethers.Provider;\n signer?: ethers.Signer;\n address?: string;\n chainId?: number;\n error?: string;\n}\n\nexport interface WalletInfo {\n address: string;\n chainId: number;\n balance: string;\n isConnected: boolean;\n}\n\nexport class WalletService {\n private provider: ethers.Provider | null = null;\n private signer: ethers.Signer | null = null;\n private currentAddress: string | null = null;\n\n /**\n * Connect to MetaMask or other Web3 wallet\n */\n async connectWallet(): Promise<WalletConnectionResult> {\n try {\n // Check if Web3 is available\n if (typeof window === 'undefined' || !window.ethereum) {\n return {\n success: false,\n error: 'Web3 wallet not found. Please install MetaMask or another Web3 wallet.'\n };\n }\n\n // Request account access\n await window.ethereum.request({ method: 'eth_requestAccounts' });\n\n // Create provider and signer\n const provider = new ethers.BrowserProvider(window.ethereum);\n const signer = await provider.getSigner();\n const address = await signer.getAddress();\n const network = await provider.getNetwork();\n\n // Store references\n this.provider = provider;\n this.signer = signer;\n this.currentAddress = address;\n\n return {\n success: true,\n provider,\n signer,\n address,\n chainId: Number(network.chainId)\n };\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to connect wallet';\n return {\n success: false,\n error: errorMessage\n };\n }\n }\n\n /**\n * Disconnect wallet\n */\n disconnect(): void {\n this.provider = null;\n this.signer = null;\n this.currentAddress = null;\n }\n\n /**\n * Get current wallet info\n */\n async getWalletInfo(): Promise<WalletInfo | null> {\n if (!this.provider || !this.currentAddress) {\n return null;\n }\n\n try {\n const balance = await this.provider.getBalance(this.currentAddress);\n const network = await this.provider.getNetwork();\n\n return {\n address: this.currentAddress,\n chainId: Number(network.chainId),\n balance: ethers.formatEther(balance),\n isConnected: true\n };\n } catch (error) {\n console.error('Failed to get wallet info:', error);\n return null;\n }\n }\n\n /**\n * Switch to a specific network\n */\n async switchNetwork(chainId: number): Promise<{ success: boolean; error?: string }> {\n try {\n if (!window.ethereum) {\n return { success: false, error: 'Web3 wallet not found' };\n }\n\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId.toString(16)}` }],\n });\n\n return { success: true };\n } catch (error: any) {\n // If the chain hasn't been added to MetaMask\n if (error.code === 4902) {\n return { success: false, error: 'Network not added to wallet' };\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Failed to switch network';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Add a custom network to the wallet\n */\n async addNetwork(networkConfig: {\n chainId: number;\n chainName: string;\n rpcUrls: string[];\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n blockExplorerUrls?: string[];\n }): Promise<{ success: boolean; error?: string }> {\n try {\n if (!window.ethereum) {\n return { success: false, error: 'Web3 wallet not found' };\n }\n\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{\n chainId: `0x${networkConfig.chainId.toString(16)}`,\n chainName: networkConfig.chainName,\n rpcUrls: networkConfig.rpcUrls,\n nativeCurrency: networkConfig.nativeCurrency,\n blockExplorerUrls: networkConfig.blockExplorerUrls\n }],\n });\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to add network';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Sign a message\n */\n async signMessage(message: string): Promise<{ success: boolean; signature?: string; error?: string }> {\n try {\n if (!this.signer) {\n return { success: false, error: 'Wallet not connected' };\n }\n\n const signature = await this.signer.signMessage(message);\n return { success: true, signature };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to sign message';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Get current provider\n */\n getProvider(): ethers.Provider | null {\n return this.provider;\n }\n\n /**\n * Get current signer\n */\n getSigner(): ethers.Signer | null {\n return this.signer;\n }\n\n /**\n * Get current address\n */\n getCurrentAddress(): string | null {\n return this.currentAddress;\n }\n\n /**\n * Check if wallet is connected\n */\n isConnected(): boolean {\n return this.provider !== null && this.signer !== null && this.currentAddress !== null;\n }\n\n /**\n * Listen for account changes\n */\n onAccountsChanged(callback: (accounts: string[]) => void): void {\n if (window.ethereum) {\n window.ethereum.on('accountsChanged', callback);\n }\n }\n\n /**\n * Listen for chain changes\n */\n onChainChanged(callback: (chainId: string) => void): void {\n if (window.ethereum) {\n window.ethereum.on('chainChanged', callback);\n }\n }\n\n /**\n * Remove event listeners\n */\n removeAllListeners(): void {\n if (window.ethereum) {\n window.ethereum.removeAllListeners('accountsChanged');\n window.ethereum.removeAllListeners('chainChanged');\n }\n }\n}\n\n// Singleton instance for React apps\nlet walletServiceInstance: WalletService | null = null;\n\n/**\n * Get or create the global wallet service instance\n */\nexport function getWalletService(): WalletService {\n if (!walletServiceInstance) {\n walletServiceInstance = new WalletService();\n }\n return walletServiceInstance;\n}\n\n/**\n * Reset the global wallet service instance\n */\nexport function resetWalletService(): void {\n if (walletServiceInstance) {\n walletServiceInstance.removeAllListeners();\n walletServiceInstance.disconnect();\n walletServiceInstance = null;\n }\n}\n\n// Type declarations for window.ethereum\ndeclare global {\n interface Window {\n ethereum?: {\n request: (args: { method: string; params?: any[] }) => Promise<any>;\n on: (event: string, callback: (...args: any[]) => void) => void;\n removeAllListeners: (event: string) => void;\n };\n }\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { ethers } from 'ethers';\nimport { ComplianceService, getComplianceService } from './compliance-service';\nimport { WalletService, getWalletService, WalletInfo } from './wallet-service';\nimport { ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\n\n/**\n * Custom React hooks for TREZA SDK integration\n * \n * These hooks provide easy-to-use React integration for compliance and wallet functionality\n */\n\n// =========================================================================\n// WALLET HOOKS\n// =========================================================================\n\nexport interface UseWalletResult {\n isConnected: boolean;\n isConnecting: boolean;\n walletInfo: WalletInfo | null;\n provider: ethers.Provider | null;\n signer: ethers.Signer | null;\n address: string | null;\n error: string | null;\n connect: () => Promise<void>;\n disconnect: () => void;\n switchNetwork: (chainId: number) => Promise<void>;\n}\n\n/**\n * Hook for wallet connection and management\n */\nexport function useWallet(): UseWalletResult {\n const [isConnected, setIsConnected] = useState(false);\n const [isConnecting, setIsConnecting] = useState(false);\n const [walletInfo, setWalletInfo] = useState<WalletInfo | null>(null);\n const [provider, setProvider] = useState<ethers.Provider | null>(null);\n const [signer, setSigner] = useState<ethers.Signer | null>(null);\n const [address, setAddress] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n \n const walletService = useRef<WalletService>(getWalletService());\n\n const connect = useCallback(async () => {\n setIsConnecting(true);\n setError(null);\n\n try {\n const result = await walletService.current.connectWallet();\n \n if (result.success) {\n setIsConnected(true);\n setProvider(result.provider || null);\n setSigner(result.signer || null);\n setAddress(result.address || null);\n \n // Get wallet info\n const info = await walletService.current.getWalletInfo();\n setWalletInfo(info);\n } else {\n setError(result.error || 'Failed to connect wallet');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to connect wallet');\n } finally {\n setIsConnecting(false);\n }\n }, []);\n\n const disconnect = useCallback(() => {\n walletService.current.disconnect();\n setIsConnected(false);\n setProvider(null);\n setSigner(null);\n setAddress(null);\n setWalletInfo(null);\n setError(null);\n }, []);\n\n const switchNetwork = useCallback(async (chainId: number) => {\n setError(null);\n \n try {\n const result = await walletService.current.switchNetwork(chainId);\n if (!result.success) {\n setError(result.error || 'Failed to switch network');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to switch network');\n }\n }, []);\n\n // Set up event listeners\n useEffect(() => {\n const handleAccountsChanged = (accounts: string[]) => {\n if (accounts.length === 0) {\n disconnect();\n } else {\n setAddress(accounts[0]);\n }\n };\n\n const handleChainChanged = () => {\n // Reload wallet info when chain changes\n if (isConnected) {\n walletService.current.getWalletInfo().then(setWalletInfo);\n }\n };\n\n walletService.current.onAccountsChanged(handleAccountsChanged);\n walletService.current.onChainChanged(handleChainChanged);\n\n return () => {\n walletService.current.removeAllListeners();\n };\n }, [isConnected, disconnect]);\n\n return {\n isConnected,\n isConnecting,\n walletInfo,\n provider,\n signer,\n address,\n error,\n connect,\n disconnect,\n switchNetwork\n };\n}\n\n// =========================================================================\n// COMPLIANCE HOOKS\n// =========================================================================\n\nexport interface UseComplianceResult {\n isInitialized: boolean;\n isLoading: boolean;\n error: string | null;\n initiateVerification: (requirements?: ComplianceRequirements) => Promise<string | null>;\n processVerification: (zkPassportResult: any, userAddress: string) => Promise<VerificationResult | null>;\n checkCompliance: (userAddress: string) => Promise<ComplianceStatus | null>;\n generateQRCode: (url: string) => Promise<string | null>;\n}\n\n/**\n * Hook for compliance operations\n */\nexport function useCompliance(provider?: ethers.Provider, signer?: ethers.Signer): UseComplianceResult {\n const [isInitialized, setIsInitialized] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n \n const complianceService = useRef<ComplianceService>(getComplianceService());\n\n // Initialize service when provider/signer changes\n useEffect(() => {\n if (provider) {\n setIsLoading(true);\n complianceService.current.initialize(provider, signer)\n .then(() => {\n setIsInitialized(true);\n setError(null);\n })\n .catch((err) => {\n setError(err instanceof Error ? err.message : 'Failed to initialize compliance');\n setIsInitialized(false);\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setIsInitialized(false);\n }\n }, [provider, signer]);\n\n const initiateVerification = useCallback(async (requirements?: ComplianceRequirements): Promise<string | null> => {\n setError(null);\n const result = await complianceService.current.initiateVerification(requirements);\n \n if (result.success) {\n return result.url || null;\n } else {\n setError(result.error || 'Failed to initiate verification');\n return null;\n }\n }, []);\n\n const processVerification = useCallback(async (\n zkPassportResult: any, \n userAddress: string\n ): Promise<VerificationResult | null> => {\n setError(null);\n const result = await complianceService.current.processVerificationResult(zkPassportResult, userAddress);\n \n if (result.success) {\n return result.result || null;\n } else {\n setError(result.error || 'Failed to process verification');\n return null;\n }\n }, []);\n\n const checkCompliance = useCallback(async (userAddress: string): Promise<ComplianceStatus | null> => {\n setError(null);\n const result = await complianceService.current.checkComplianceStatus(userAddress);\n \n if (result.success) {\n return result.status || null;\n } else {\n setError(result.error || 'Failed to check compliance');\n return null;\n }\n }, []);\n\n const generateQRCode = useCallback(async (url: string): Promise<string | null> => {\n setError(null);\n const result = await complianceService.current.generateQRCode(url);\n \n if (result.success) {\n return result.qrCode || null;\n } else {\n setError(result.error || 'Failed to generate QR code');\n return null;\n }\n }, []);\n\n return {\n isInitialized,\n isLoading,\n error,\n initiateVerification,\n processVerification,\n checkCompliance,\n generateQRCode\n };\n}\n\n// =========================================================================\n// COMBINED HOOKS\n// =========================================================================\n\nexport interface UseTrezaResult {\n wallet: UseWalletResult;\n compliance: UseComplianceResult;\n isReady: boolean;\n}\n\n/**\n * Combined hook for wallet and compliance functionality\n */\nexport function useTreza(): UseTrezaResult {\n const wallet = useWallet();\n const compliance = useCompliance(wallet.provider || undefined, wallet.signer || undefined);\n\n const isReady = wallet.isConnected && compliance.isInitialized;\n\n return {\n wallet,\n compliance,\n isReady\n };\n}\n\n// =========================================================================\n// VERIFICATION FLOW HOOK\n// =========================================================================\n\nexport interface UseVerificationFlowResult {\n status: 'idle' | 'generating' | 'waiting' | 'processing' | 'completed' | 'error';\n verificationUrl: string | null;\n qrCode: string | null;\n result: VerificationResult | null;\n error: string | null;\n startVerification: (userAddress: string, requirements?: ComplianceRequirements) => Promise<void>;\n processResult: (zkPassportResult: any) => Promise<void>;\n reset: () => void;\n}\n\n/**\n * Hook for managing the complete verification flow\n */\nexport function useVerificationFlow(provider?: ethers.Provider, signer?: ethers.Signer): UseVerificationFlowResult {\n const [status, setStatus] = useState<'idle' | 'generating' | 'waiting' | 'processing' | 'completed' | 'error'>('idle');\n const [verificationUrl, setVerificationUrl] = useState<string | null>(null);\n const [qrCode, setQrCode] = useState<string | null>(null);\n const [result, setResult] = useState<VerificationResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [currentUserAddress, setCurrentUserAddress] = useState<string | null>(null);\n\n const compliance = useCompliance(provider, signer);\n\n const startVerification = useCallback(async (userAddress: string, requirements?: ComplianceRequirements) => {\n setStatus('generating');\n setError(null);\n setResult(null);\n setCurrentUserAddress(userAddress);\n\n try {\n const url = await compliance.initiateVerification(requirements);\n if (url) {\n setVerificationUrl(url);\n \n const qr = await compliance.generateQRCode(url);\n if (qr) {\n setQrCode(qr);\n setStatus('waiting');\n } else {\n throw new Error('Failed to generate QR code');\n }\n } else {\n throw new Error('Failed to initiate verification');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Verification failed');\n setStatus('error');\n }\n }, [compliance]);\n\n const processResult = useCallback(async (zkPassportResult: any) => {\n if (!currentUserAddress) {\n setError('No user address set');\n setStatus('error');\n return;\n }\n\n setStatus('processing');\n setError(null);\n\n try {\n const verificationResult = await compliance.processVerification(zkPassportResult, currentUserAddress);\n if (verificationResult) {\n setResult(verificationResult);\n setStatus('completed');\n } else {\n throw new Error('Failed to process verification result');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Processing failed');\n setStatus('error');\n }\n }, [compliance, currentUserAddress]);\n\n const reset = useCallback(() => {\n setStatus('idle');\n setVerificationUrl(null);\n setQrCode(null);\n setResult(null);\n setError(null);\n setCurrentUserAddress(null);\n }, []);\n\n return {\n status,\n verificationUrl,\n qrCode,\n result,\n error,\n startVerification,\n processResult,\n reset\n };\n}\n\n// =========================================================================\n// PII AUDIT HOOK\n// =========================================================================\n\nexport interface PIIAccessEvent {\n eventId: string;\n workflowId: string;\n workflowRunId: string;\n stepId: string;\n stepName: string;\n piiFieldsPresent: string[];\n piiFieldsAllowed: string[];\n piiFieldsStripped: string[];\n hadViolation: boolean;\n timestamp: string;\n walletAddress?: string;\n}\n\nexport interface PIIAuditSummary {\n total: number;\n violations: number;\n workflows: string[];\n}\n\nexport interface UsePIIAuditResult {\n events: PIIAccessEvent[];\n summary: PIIAuditSummary | null;\n isLoading: boolean;\n error: string | null;\n refresh: () => void;\n}\n\n/**\n * Hook for querying PII audit events from the Treza backend.\n * Polls the /api/pii/audit endpoint and returns events for the given filters.\n *\n * The endpoint requires authentication: pass a Treza API key with the\n * `pii:audit` permission (or a Privy access token) as `authToken`. Results\n * are always scoped to the authenticated account.\n */\nexport function usePIIAudit(options: {\n apiBaseUrl?: string;\n workflowId?: string;\n walletAddress?: string;\n violationsOnly?: boolean;\n limit?: number;\n pollIntervalMs?: number;\n /** Bearer token: Treza API key (pii:audit) or Privy access token. */\n authToken?: string;\n} = {}): UsePIIAuditResult {\n const {\n apiBaseUrl = '',\n workflowId,\n walletAddress,\n violationsOnly = false,\n limit = 100,\n pollIntervalMs,\n authToken,\n } = options;\n\n const [events, setEvents] = useState<PIIAccessEvent[]>([]);\n const [summary, setSummary] = useState<PIIAuditSummary | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [refreshKey, setRefreshKey] = useState(0);\n\n const refresh = useCallback(() => setRefreshKey(k => k + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n\n const fetchAudit = async () => {\n setIsLoading(true);\n setError(null);\n try {\n const params = new URLSearchParams();\n if (workflowId) params.set('workflowId', workflowId);\n if (walletAddress) params.set('walletAddress', walletAddress);\n if (violationsOnly) params.set('violations', 'true');\n params.set('limit', String(limit));\n\n const headers: Record<string, string> = {};\n if (authToken) headers.Authorization = `Bearer ${authToken}`;\n if (walletAddress) headers['x-treza-account'] = walletAddress;\n\n const res = await fetch(`${apiBaseUrl}/api/pii/audit?${params.toString()}`, { headers });\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);\n const data = await res.json();\n if (!cancelled) {\n setEvents(data.events ?? []);\n setSummary(data.summary ?? null);\n }\n } catch (err) {\n if (!cancelled) {\n setError(err instanceof Error ? err.message : String(err));\n }\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n };\n\n fetchAudit();\n\n let intervalId: ReturnType<typeof setInterval> | undefined;\n if (pollIntervalMs && pollIntervalMs > 0) {\n intervalId = setInterval(fetchAudit, pollIntervalMs);\n }\n\n return () => {\n cancelled = true;\n if (intervalId !== undefined) clearInterval(intervalId);\n };\n }, [apiBaseUrl, workflowId, walletAddress, violationsOnly, limit, pollIntervalMs, refreshKey, authToken]);\n\n return { events, summary, isLoading, error, refresh };\n}\n","/**\n * @treza/react - React components for TREZA SDK\n * \n * Privacy-first DeFi UI components with zero-knowledge compliance\n */\n\n// Component exports\nexport {\n ComplianceProvider,\n ComplianceVerification,\n ComplianceStatusDisplay,\n GovernanceEligibility,\n useComplianceContext\n} from './components/react-components';\n\n// Style exports\nexport { complianceStyles } from './components/react-components';\n\n// Service exports\nexport {\n ComplianceService,\n getComplianceService,\n resetComplianceService,\n WalletService,\n getWalletService,\n resetWalletService\n} from './services';\n\n// Hook exports\nexport {\n useWallet,\n useCompliance,\n useTreza,\n useVerificationFlow,\n usePIIAudit,\n} from './services';\n\n// Service type exports\nexport type {\n ComplianceServiceConfig,\n WalletConnectionResult,\n WalletInfo,\n UseWalletResult,\n UseComplianceResult,\n UseTrezaResult,\n UseVerificationFlowResult,\n UsePIIAuditResult,\n PIIAccessEvent,\n PIIAuditSummary,\n} from './services';\n\n// Re-export core types for convenience\nexport type {\n TrezaComplianceConfig,\n ComplianceRequirements,\n ComplianceStatus,\n VerificationResult\n} from '@treza/sdk';\n\n// Version\nexport const VERSION = '1.0.0';\n"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1033,6 +1033,73 @@ function useVerificationFlow(provider, signer) {
|
|
|
1033
1033
|
reset
|
|
1034
1034
|
};
|
|
1035
1035
|
}
|
|
1036
|
+
/**
|
|
1037
|
+
* Hook for querying PII audit events from the Treza backend.
|
|
1038
|
+
* Polls the /api/pii/audit endpoint and returns events for the given filters.
|
|
1039
|
+
*
|
|
1040
|
+
* The endpoint requires authentication: pass a Treza API key with the
|
|
1041
|
+
* `pii:audit` permission (or a Privy access token) as `authToken`. Results
|
|
1042
|
+
* are always scoped to the authenticated account.
|
|
1043
|
+
*/
|
|
1044
|
+
function usePIIAudit(options = {}) {
|
|
1045
|
+
const { apiBaseUrl = '', workflowId, walletAddress, violationsOnly = false, limit = 100, pollIntervalMs, authToken, } = options;
|
|
1046
|
+
const [events, setEvents] = React.useState([]);
|
|
1047
|
+
const [summary, setSummary] = React.useState(null);
|
|
1048
|
+
const [isLoading, setIsLoading] = React.useState(false);
|
|
1049
|
+
const [error, setError] = React.useState(null);
|
|
1050
|
+
const [refreshKey, setRefreshKey] = React.useState(0);
|
|
1051
|
+
const refresh = React.useCallback(() => setRefreshKey(k => k + 1), []);
|
|
1052
|
+
React.useEffect(() => {
|
|
1053
|
+
let cancelled = false;
|
|
1054
|
+
const fetchAudit = async () => {
|
|
1055
|
+
setIsLoading(true);
|
|
1056
|
+
setError(null);
|
|
1057
|
+
try {
|
|
1058
|
+
const params = new URLSearchParams();
|
|
1059
|
+
if (workflowId)
|
|
1060
|
+
params.set('workflowId', workflowId);
|
|
1061
|
+
if (walletAddress)
|
|
1062
|
+
params.set('walletAddress', walletAddress);
|
|
1063
|
+
if (violationsOnly)
|
|
1064
|
+
params.set('violations', 'true');
|
|
1065
|
+
params.set('limit', String(limit));
|
|
1066
|
+
const headers = {};
|
|
1067
|
+
if (authToken)
|
|
1068
|
+
headers.Authorization = `Bearer ${authToken}`;
|
|
1069
|
+
if (walletAddress)
|
|
1070
|
+
headers['x-treza-account'] = walletAddress;
|
|
1071
|
+
const res = await fetch(`${apiBaseUrl}/api/pii/audit?${params.toString()}`, { headers });
|
|
1072
|
+
if (!res.ok)
|
|
1073
|
+
throw new Error(`${res.status} ${res.statusText}`);
|
|
1074
|
+
const data = await res.json();
|
|
1075
|
+
if (!cancelled) {
|
|
1076
|
+
setEvents(data.events ?? []);
|
|
1077
|
+
setSummary(data.summary ?? null);
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
catch (err) {
|
|
1081
|
+
if (!cancelled) {
|
|
1082
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
finally {
|
|
1086
|
+
if (!cancelled)
|
|
1087
|
+
setIsLoading(false);
|
|
1088
|
+
}
|
|
1089
|
+
};
|
|
1090
|
+
fetchAudit();
|
|
1091
|
+
let intervalId;
|
|
1092
|
+
if (pollIntervalMs && pollIntervalMs > 0) {
|
|
1093
|
+
intervalId = setInterval(fetchAudit, pollIntervalMs);
|
|
1094
|
+
}
|
|
1095
|
+
return () => {
|
|
1096
|
+
cancelled = true;
|
|
1097
|
+
if (intervalId !== undefined)
|
|
1098
|
+
clearInterval(intervalId);
|
|
1099
|
+
};
|
|
1100
|
+
}, [apiBaseUrl, workflowId, walletAddress, violationsOnly, limit, pollIntervalMs, refreshKey, authToken]);
|
|
1101
|
+
return { events, summary, isLoading, error, refresh };
|
|
1102
|
+
}
|
|
1036
1103
|
|
|
1037
1104
|
/**
|
|
1038
1105
|
* @treza/react - React components for TREZA SDK
|
|
@@ -1057,6 +1124,7 @@ exports.resetComplianceService = resetComplianceService;
|
|
|
1057
1124
|
exports.resetWalletService = resetWalletService;
|
|
1058
1125
|
exports.useCompliance = useCompliance;
|
|
1059
1126
|
exports.useComplianceContext = useComplianceContext;
|
|
1127
|
+
exports.usePIIAudit = usePIIAudit;
|
|
1060
1128
|
exports.useTreza = useTreza;
|
|
1061
1129
|
exports.useVerificationFlow = useVerificationFlow;
|
|
1062
1130
|
exports.useWallet = useWallet;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/react-components.tsx","../src/services/compliance-service.ts","../src/services/wallet-service.ts","../src/services/hooks.ts","../src/index.ts"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { ethers } from 'ethers';\nimport { TrezaComplianceSDK, ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\n\n/**\n * React Components for TREZA Compliance Integration\n * \n * These components provide easy-to-use React integration for DApps\n * that want to add ZKPassport compliance features.\n */\n\ninterface ComplianceProviderProps {\n provider: ethers.Provider;\n signer?: ethers.Signer;\n children: React.ReactNode;\n verificationMode?: 'fallback' | 'oracle' | 'attestation' | 'hybrid';\n zkVerifyOracleAddress?: string;\n attestationSystemAddress?: string;\n transactionValueThreshold?: string;\n}\n\ninterface ComplianceContextType {\n sdk: TrezaComplianceSDK | null;\n isLoading: boolean;\n error: string | null;\n}\n\n// Context for compliance SDK\nconst ComplianceContext = React.createContext<ComplianceContextType>({\n sdk: null,\n isLoading: true,\n error: null\n});\n\n/**\n * Provider component that initializes the compliance SDK\n */\nexport const ComplianceProvider: React.FC<ComplianceProviderProps> = ({\n provider,\n signer,\n children,\n verificationMode = 'hybrid',\n zkVerifyOracleAddress,\n attestationSystemAddress,\n transactionValueThreshold = '100'\n}) => {\n const [sdk, setSdk] = useState<TrezaComplianceSDK | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n \n useEffect(() => {\n try {\n const config = {\n zkPassportDomain: \"trezalabs.com\",\n zkVerifyEndpoint: \"https://api.zkverify.io\",\n trezaTokenAddress: process.env.REACT_APP_TREZA_TOKEN_ADDRESS || \"0x8278d4FbfaB7dac14eC0295421D0a2733b4504E5\",\n complianceVerifierAddress: process.env.REACT_APP_COMPLIANCE_VERIFIER_ADDRESS || \"0x8c0C6e0Eaf6bc693745A1A3a722e2c9028BBe874\",\n complianceIntegrationAddress: process.env.REACT_APP_COMPLIANCE_INTEGRATION_ADDRESS || \"0xf3ecfC409761D715F137Bfe7078Acec6d7F55428\",\n zkVerifyOracleAddress: zkVerifyOracleAddress || process.env.REACT_APP_ZKVERIFY_ORACLE_ADDRESS,\n attestationSystemAddress: attestationSystemAddress || process.env.REACT_APP_ATTESTATION_SYSTEM_ADDRESS,\n verificationMode,\n transactionValueThreshold,\n provider,\n signer\n };\n \n const complianceSDK = new TrezaComplianceSDK(config);\n setSdk(complianceSDK);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to initialize compliance SDK');\n } finally {\n setIsLoading(false);\n }\n }, [provider, signer]);\n \n return (\n <ComplianceContext.Provider value={{ sdk, isLoading, error }}>\n {children}\n </ComplianceContext.Provider>\n );\n};\n\n/**\n * Hook to use compliance context (for use within ComplianceProvider)\n */\nexport const useComplianceContext = () => {\n const context = React.useContext(ComplianceContext);\n if (!context) {\n throw new Error('useComplianceContext must be used within a ComplianceProvider');\n }\n return context;\n};\n\n/**\n * Props for ComplianceVerification component\n */\ninterface ComplianceVerificationProps {\n userAddress: string;\n requirements?: ComplianceRequirements;\n onVerificationComplete?: (result: VerificationResult) => void;\n onError?: (error: string) => void;\n className?: string;\n}\n\n/**\n * Main compliance verification component\n */\nexport const ComplianceVerification: React.FC<ComplianceVerificationProps> = ({\n userAddress,\n requirements,\n onVerificationComplete,\n onError,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [verificationUrl, setVerificationUrl] = useState<string>(\"\");\n const [qrCode, setQrCode] = useState<string>(\"\");\n const [isGenerating, setIsGenerating] = useState(false);\n const [status, setStatus] = useState<'idle' | 'generating' | 'waiting' | 'processing' | 'complete' | 'error'>('idle');\n const [error, setError] = useState<string>(\"\");\n \n const initiateVerification = useCallback(async () => {\n if (!sdk) return;\n \n setIsGenerating(true);\n setStatus('generating');\n setError(\"\");\n \n try {\n const url = await sdk.initiateVerification(requirements);\n setVerificationUrl(url);\n \n const qr = await sdk.generateQRCode(url);\n setQrCode(qr);\n \n setStatus('waiting');\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to initiate verification';\n setError(errorMessage);\n setStatus('error');\n onError?.(errorMessage);\n } finally {\n setIsGenerating(false);\n }\n }, [sdk, requirements, onError]);\n \n const handleVerificationResult = useCallback(async (zkPassportResult: any) => {\n if (!sdk) return;\n \n setStatus('processing');\n \n try {\n const result = await sdk.processVerificationResult(zkPassportResult, userAddress);\n setStatus('complete');\n onVerificationComplete?.(result);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to process verification';\n setError(errorMessage);\n setStatus('error');\n onError?.(errorMessage);\n }\n }, [sdk, userAddress, onVerificationComplete, onError]);\n \n return (\n <div className={`treza-compliance-verification ${className}`}>\n <div className=\"verification-header\">\n <h3>🛡️ Identity Verification</h3>\n <p>Verify your identity to access TREZA features while keeping your personal data private.</p>\n </div>\n \n {status === 'idle' && (\n <div className=\"verification-start\">\n <button \n onClick={initiateVerification}\n disabled={isGenerating}\n className=\"btn-primary\"\n >\n {isGenerating ? 'Generating...' : 'Start Verification'}\n </button>\n </div>\n )}\n \n {status === 'generating' && (\n <div className=\"verification-generating\">\n <div className=\"spinner\"></div>\n <p>Generating verification request...</p>\n </div>\n )}\n \n {status === 'waiting' && (\n <div className=\"verification-waiting\">\n <div className=\"qr-code-section\">\n <h4>📱 Scan with ZKPassport App</h4>\n {qrCode && (\n <img \n src={qrCode} \n alt=\"Verification QR Code\"\n className=\"qr-code\"\n />\n )}\n <p>Scan this QR code with the ZKPassport mobile app to verify your identity.</p>\n <a \n href={verificationUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"verification-link\"\n >\n Or open verification link directly\n </a>\n </div>\n \n <div className=\"verification-instructions\">\n <h5>Instructions:</h5>\n <ol>\n <li>Download the ZKPassport app if you haven't already</li>\n <li>Scan the QR code above</li>\n <li>Follow the app instructions to verify your government ID</li>\n <li>Your verification will be processed automatically</li>\n </ol>\n </div>\n </div>\n )}\n \n {status === 'processing' && (\n <div className=\"verification-processing\">\n <div className=\"spinner\"></div>\n <p>Processing your verification...</p>\n </div>\n )}\n \n {status === 'complete' && (\n <div className=\"verification-complete\">\n <div className=\"success-icon\">✅</div>\n <h4>Verification Complete!</h4>\n <p>Your identity has been verified successfully. You now have access to TREZA compliance features.</p>\n </div>\n )}\n \n {status === 'error' && (\n <div className=\"verification-error\">\n <div className=\"error-icon\">❌</div>\n <h4>Verification Error</h4>\n <p>{error}</p>\n <button \n onClick={() => setStatus('idle')}\n className=\"btn-secondary\"\n >\n Try Again\n </button>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Props for ComplianceStatus component\n */\ninterface ComplianceStatusProps {\n userAddress: string;\n showDetails?: boolean;\n className?: string;\n}\n\n/**\n * Component to display current compliance status\n */\nexport const ComplianceStatusDisplay: React.FC<ComplianceStatusProps> = ({\n userAddress,\n showDetails = false,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [status, setStatus] = useState<ComplianceStatus | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string>(\"\");\n \n useEffect(() => {\n const checkStatus = async () => {\n if (!sdk || !userAddress) return;\n \n setIsLoading(true);\n try {\n const complianceStatus = await sdk.checkComplianceStatus(userAddress);\n setStatus(complianceStatus);\n setError(\"\");\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to check compliance status');\n } finally {\n setIsLoading(false);\n }\n };\n \n checkStatus();\n }, [sdk, userAddress]);\n \n if (isLoading) {\n return (\n <div className={`compliance-status loading ${className}`}>\n <div className=\"spinner\"></div>\n <span>Checking compliance status...</span>\n </div>\n );\n }\n \n if (error) {\n return (\n <div className={`compliance-status error ${className}`}>\n <span className=\"status-icon\">⚠️</span>\n <span>Error: {error}</span>\n </div>\n );\n }\n \n if (!status) {\n return (\n <div className={`compliance-status unknown ${className}`}>\n <span className=\"status-icon\">❓</span>\n <span>Status unknown</span>\n </div>\n );\n }\n \n return (\n <div className={`compliance-status ${status.isCompliant ? 'compliant' : 'non-compliant'} ${className}`}>\n <div className=\"status-header\">\n <span className=\"status-icon\">\n {status.isCompliant ? '✅' : '❌'}\n </span>\n <span className=\"status-text\">\n {status.isCompliant ? 'Verified' : 'Not Verified'}\n </span>\n </div>\n \n {showDetails && status.isCompliant && (\n <div className=\"status-details\">\n <div className=\"detail-item\">\n <span className=\"label\">Level:</span>\n <span className=\"value\">{status.verificationLevel}</span>\n </div>\n <div className=\"detail-item\">\n <span className=\"label\">Expires:</span>\n <span className=\"value\">\n {new Date(status.expirationTime).toLocaleDateString()}\n </span>\n </div>\n <div className=\"detail-item\">\n <span className=\"label\">Attributes:</span>\n <div className=\"attributes\">\n {status.attributes.ageVerified && <span className=\"attribute\">Age ✓</span>}\n {status.attributes.nationalityVerified && <span className=\"attribute\">Nationality ✓</span>}\n {status.attributes.uniquenessVerified && <span className=\"attribute\">Uniqueness ✓</span>}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Props for GovernanceEligibility component\n */\ninterface GovernanceEligibilityProps {\n userAddress: string;\n proposalId: number;\n className?: string;\n}\n\n/**\n * Component to display governance eligibility\n */\nexport const GovernanceEligibility: React.FC<GovernanceEligibilityProps> = ({\n userAddress,\n proposalId,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [eligibility, setEligibility] = useState<{\n canParticipate: boolean;\n votingWeight: number;\n complianceLevel: string;\n } | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n \n useEffect(() => {\n const checkEligibility = async () => {\n if (!sdk || !userAddress) return;\n \n setIsLoading(true);\n try {\n const result = await sdk.checkGovernanceEligibility(userAddress, proposalId);\n setEligibility(result);\n } catch (err) {\n console.error('Error checking governance eligibility:', err);\n } finally {\n setIsLoading(false);\n }\n };\n \n checkEligibility();\n }, [sdk, userAddress, proposalId]);\n \n if (isLoading) {\n return (\n <div className={`governance-eligibility loading ${className}`}>\n <div className=\"spinner\"></div>\n <span>Checking eligibility...</span>\n </div>\n );\n }\n \n if (!eligibility) {\n return (\n <div className={`governance-eligibility error ${className}`}>\n <span>Unable to check eligibility</span>\n </div>\n );\n }\n \n return (\n <div className={`governance-eligibility ${eligibility.canParticipate ? 'eligible' : 'ineligible'} ${className}`}>\n <div className=\"eligibility-status\">\n <span className=\"status-icon\">\n {eligibility.canParticipate ? '🗳️' : '🚫'}\n </span>\n <span className=\"status-text\">\n {eligibility.canParticipate ? 'Eligible to Vote' : 'Not Eligible'}\n </span>\n </div>\n \n {eligibility.canParticipate && (\n <div className=\"voting-details\">\n <div className=\"voting-weight\">\n <span className=\"label\">Voting Weight:</span>\n <span className=\"value\">{eligibility.votingWeight}x</span>\n </div>\n <div className=\"compliance-level\">\n <span className=\"label\">Compliance Level:</span>\n <span className=\"value\">{eligibility.complianceLevel}</span>\n </div>\n </div>\n )}\n </div>\n );\n};\n\n// CSS styles (you would typically put this in a separate CSS file)\nexport const complianceStyles = `\n.treza-compliance-verification {\n max-width: 500px;\n margin: 0 auto;\n padding: 20px;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n background: #fff;\n}\n\n.verification-header h3 {\n margin: 0 0 10px 0;\n color: #333;\n}\n\n.verification-header p {\n margin: 0 0 20px 0;\n color: #666;\n font-size: 14px;\n}\n\n.btn-primary, .btn-secondary {\n padding: 12px 24px;\n border: none;\n border-radius: 6px;\n font-size: 16px;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.btn-primary {\n background: #007bff;\n color: white;\n}\n\n.btn-primary:hover {\n background: #0056b3;\n}\n\n.btn-primary:disabled {\n background: #ccc;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: #6c757d;\n color: white;\n}\n\n.qr-code {\n max-width: 200px;\n height: auto;\n margin: 10px 0;\n}\n\n.spinner {\n width: 20px;\n height: 20px;\n border: 2px solid #f3f3f3;\n border-top: 2px solid #007bff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n display: inline-block;\n margin-right: 10px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.compliance-status {\n display: flex;\n align-items: center;\n padding: 10px;\n border-radius: 6px;\n margin: 10px 0;\n}\n\n.compliance-status.compliant {\n background: #d4edda;\n color: #155724;\n border: 1px solid #c3e6cb;\n}\n\n.compliance-status.non-compliant {\n background: #f8d7da;\n color: #721c24;\n border: 1px solid #f5c6cb;\n}\n\n.status-icon {\n margin-right: 8px;\n font-size: 18px;\n}\n\n.status-details {\n margin-top: 10px;\n font-size: 14px;\n}\n\n.detail-item {\n margin: 5px 0;\n}\n\n.label {\n font-weight: bold;\n margin-right: 8px;\n}\n\n.attributes {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.attribute {\n background: #e9ecef;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 12px;\n}\n`;\n","import { TrezaComplianceSDK, ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\nimport { ethers } from 'ethers';\n\n/**\n * React-specific service wrapper for TREZA Compliance SDK\n * \n * This service provides React-optimized methods for compliance operations\n * with proper error handling and state management integration.\n */\n\nexport interface ComplianceServiceConfig {\n zkPassportDomain?: string;\n zkVerifyEndpoint?: string;\n zkVerifyApiKey?: string;\n trezaTokenAddress?: string;\n complianceVerifierAddress?: string;\n complianceIntegrationAddress?: string;\n}\n\nexport class ComplianceService {\n private sdk: TrezaComplianceSDK | null = null;\n private config: ComplianceServiceConfig;\n\n constructor(config: ComplianceServiceConfig = {}) {\n this.config = {\n zkPassportDomain: \"trezalabs.com\",\n zkVerifyEndpoint: \"https://api.zkverify.io\",\n trezaTokenAddress: process.env.REACT_APP_TREZA_TOKEN_ADDRESS || \"0x8278d4FbfaB7dac14eC0295421D0a2733b4504E5\",\n complianceVerifierAddress: process.env.REACT_APP_COMPLIANCE_VERIFIER_ADDRESS || \"0x8c0C6e0Eaf6bc693745A1A3a722e2c9028BBe874\",\n complianceIntegrationAddress: process.env.REACT_APP_COMPLIANCE_INTEGRATION_ADDRESS || \"0xf3ecfC409761D715F137Bfe7078Acec6d7F55428\",\n ...config\n };\n }\n\n /**\n * Initialize the compliance SDK with provider and signer\n */\n async initialize(provider: ethers.Provider, signer?: ethers.Signer): Promise<void> {\n try {\n this.sdk = new TrezaComplianceSDK({\n zkPassportDomain: this.config.zkPassportDomain!,\n zkVerifyEndpoint: this.config.zkVerifyEndpoint!,\n zkVerifyApiKey: this.config.zkVerifyApiKey,\n trezaTokenAddress: this.config.trezaTokenAddress!,\n complianceVerifierAddress: this.config.complianceVerifierAddress!,\n complianceIntegrationAddress: this.config.complianceIntegrationAddress!,\n provider,\n signer\n });\n } catch (error) {\n console.error('Failed to initialize compliance service:', error);\n throw error;\n }\n }\n\n /**\n * Get the initialized SDK instance\n */\n getSDK(): TrezaComplianceSDK {\n if (!this.sdk) {\n throw new Error('Compliance service not initialized. Call initialize() first.');\n }\n return this.sdk;\n }\n\n /**\n * Check if the service is initialized\n */\n isInitialized(): boolean {\n return this.sdk !== null;\n }\n\n /**\n * Initiate verification with React-friendly error handling\n */\n async initiateVerification(requirements?: ComplianceRequirements): Promise<{\n success: boolean;\n url?: string;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const url = await this.sdk.initiateVerification(requirements);\n return { success: true, url };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Process verification result with React-friendly error handling\n */\n async processVerificationResult(\n zkPassportResult: any,\n userAddress: string\n ): Promise<{\n success: boolean;\n result?: VerificationResult;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const result = await this.sdk.processVerificationResult(zkPassportResult, userAddress);\n return { success: true, result };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Check compliance status with React-friendly error handling\n */\n async checkComplianceStatus(userAddress: string): Promise<{\n success: boolean;\n status?: ComplianceStatus;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const status = await this.sdk.checkComplianceStatus(userAddress);\n return { success: true, status };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Generate QR code for verification URL\n */\n async generateQRCode(url: string): Promise<{\n success: boolean;\n qrCode?: string;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const qrCode = await this.sdk.generateQRCode(url);\n return { success: true, qrCode };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Batch check compliance for multiple users\n */\n async batchCheckCompliance(userAddresses: string[]): Promise<{\n success: boolean;\n results?: ComplianceStatus[];\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const results = await this.sdk.batchCheckCompliance(userAddresses);\n return { success: true, results };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Check governance eligibility\n */\n async checkGovernanceEligibility(userAddress: string, proposalId?: string): Promise<{\n success: boolean;\n eligibility?: any;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n if (!proposalId) {\n throw new Error('Proposal ID is required');\n }\n\n const proposalIdNum = parseInt(proposalId, 10);\n if (isNaN(proposalIdNum)) {\n throw new Error('Invalid proposal ID: must be a number');\n }\n\n const eligibility = await this.sdk.checkGovernanceEligibility(userAddress, proposalIdNum);\n return { success: true, eligibility };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.sdk = null;\n }\n}\n\n// Singleton instance for React apps\nlet complianceServiceInstance: ComplianceService | null = null;\n\n/**\n * Get or create the global compliance service instance\n */\nexport function getComplianceService(config?: ComplianceServiceConfig): ComplianceService {\n if (!complianceServiceInstance) {\n complianceServiceInstance = new ComplianceService(config);\n }\n return complianceServiceInstance;\n}\n\n/**\n * Reset the global compliance service instance\n */\nexport function resetComplianceService(): void {\n if (complianceServiceInstance) {\n complianceServiceInstance.destroy();\n complianceServiceInstance = null;\n }\n}\n","import { ethers } from 'ethers';\n\n/**\n * Wallet Service for React applications\n * \n * Provides React-friendly wallet connection and management utilities\n * with proper error handling and state management integration.\n */\n\nexport interface WalletConnectionResult {\n success: boolean;\n provider?: ethers.Provider;\n signer?: ethers.Signer;\n address?: string;\n chainId?: number;\n error?: string;\n}\n\nexport interface WalletInfo {\n address: string;\n chainId: number;\n balance: string;\n isConnected: boolean;\n}\n\nexport class WalletService {\n private provider: ethers.Provider | null = null;\n private signer: ethers.Signer | null = null;\n private currentAddress: string | null = null;\n\n /**\n * Connect to MetaMask or other Web3 wallet\n */\n async connectWallet(): Promise<WalletConnectionResult> {\n try {\n // Check if Web3 is available\n if (typeof window === 'undefined' || !window.ethereum) {\n return {\n success: false,\n error: 'Web3 wallet not found. Please install MetaMask or another Web3 wallet.'\n };\n }\n\n // Request account access\n await window.ethereum.request({ method: 'eth_requestAccounts' });\n\n // Create provider and signer\n const provider = new ethers.BrowserProvider(window.ethereum);\n const signer = await provider.getSigner();\n const address = await signer.getAddress();\n const network = await provider.getNetwork();\n\n // Store references\n this.provider = provider;\n this.signer = signer;\n this.currentAddress = address;\n\n return {\n success: true,\n provider,\n signer,\n address,\n chainId: Number(network.chainId)\n };\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to connect wallet';\n return {\n success: false,\n error: errorMessage\n };\n }\n }\n\n /**\n * Disconnect wallet\n */\n disconnect(): void {\n this.provider = null;\n this.signer = null;\n this.currentAddress = null;\n }\n\n /**\n * Get current wallet info\n */\n async getWalletInfo(): Promise<WalletInfo | null> {\n if (!this.provider || !this.currentAddress) {\n return null;\n }\n\n try {\n const balance = await this.provider.getBalance(this.currentAddress);\n const network = await this.provider.getNetwork();\n\n return {\n address: this.currentAddress,\n chainId: Number(network.chainId),\n balance: ethers.formatEther(balance),\n isConnected: true\n };\n } catch (error) {\n console.error('Failed to get wallet info:', error);\n return null;\n }\n }\n\n /**\n * Switch to a specific network\n */\n async switchNetwork(chainId: number): Promise<{ success: boolean; error?: string }> {\n try {\n if (!window.ethereum) {\n return { success: false, error: 'Web3 wallet not found' };\n }\n\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId.toString(16)}` }],\n });\n\n return { success: true };\n } catch (error: any) {\n // If the chain hasn't been added to MetaMask\n if (error.code === 4902) {\n return { success: false, error: 'Network not added to wallet' };\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Failed to switch network';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Add a custom network to the wallet\n */\n async addNetwork(networkConfig: {\n chainId: number;\n chainName: string;\n rpcUrls: string[];\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n blockExplorerUrls?: string[];\n }): Promise<{ success: boolean; error?: string }> {\n try {\n if (!window.ethereum) {\n return { success: false, error: 'Web3 wallet not found' };\n }\n\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{\n chainId: `0x${networkConfig.chainId.toString(16)}`,\n chainName: networkConfig.chainName,\n rpcUrls: networkConfig.rpcUrls,\n nativeCurrency: networkConfig.nativeCurrency,\n blockExplorerUrls: networkConfig.blockExplorerUrls\n }],\n });\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to add network';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Sign a message\n */\n async signMessage(message: string): Promise<{ success: boolean; signature?: string; error?: string }> {\n try {\n if (!this.signer) {\n return { success: false, error: 'Wallet not connected' };\n }\n\n const signature = await this.signer.signMessage(message);\n return { success: true, signature };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to sign message';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Get current provider\n */\n getProvider(): ethers.Provider | null {\n return this.provider;\n }\n\n /**\n * Get current signer\n */\n getSigner(): ethers.Signer | null {\n return this.signer;\n }\n\n /**\n * Get current address\n */\n getCurrentAddress(): string | null {\n return this.currentAddress;\n }\n\n /**\n * Check if wallet is connected\n */\n isConnected(): boolean {\n return this.provider !== null && this.signer !== null && this.currentAddress !== null;\n }\n\n /**\n * Listen for account changes\n */\n onAccountsChanged(callback: (accounts: string[]) => void): void {\n if (window.ethereum) {\n window.ethereum.on('accountsChanged', callback);\n }\n }\n\n /**\n * Listen for chain changes\n */\n onChainChanged(callback: (chainId: string) => void): void {\n if (window.ethereum) {\n window.ethereum.on('chainChanged', callback);\n }\n }\n\n /**\n * Remove event listeners\n */\n removeAllListeners(): void {\n if (window.ethereum) {\n window.ethereum.removeAllListeners('accountsChanged');\n window.ethereum.removeAllListeners('chainChanged');\n }\n }\n}\n\n// Singleton instance for React apps\nlet walletServiceInstance: WalletService | null = null;\n\n/**\n * Get or create the global wallet service instance\n */\nexport function getWalletService(): WalletService {\n if (!walletServiceInstance) {\n walletServiceInstance = new WalletService();\n }\n return walletServiceInstance;\n}\n\n/**\n * Reset the global wallet service instance\n */\nexport function resetWalletService(): void {\n if (walletServiceInstance) {\n walletServiceInstance.removeAllListeners();\n walletServiceInstance.disconnect();\n walletServiceInstance = null;\n }\n}\n\n// Type declarations for window.ethereum\ndeclare global {\n interface Window {\n ethereum?: {\n request: (args: { method: string; params?: any[] }) => Promise<any>;\n on: (event: string, callback: (...args: any[]) => void) => void;\n removeAllListeners: (event: string) => void;\n };\n }\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { ethers } from 'ethers';\nimport { ComplianceService, getComplianceService } from './compliance-service';\nimport { WalletService, getWalletService, WalletInfo } from './wallet-service';\nimport { ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\n\n/**\n * Custom React hooks for TREZA SDK integration\n * \n * These hooks provide easy-to-use React integration for compliance and wallet functionality\n */\n\n// =========================================================================\n// WALLET HOOKS\n// =========================================================================\n\nexport interface UseWalletResult {\n isConnected: boolean;\n isConnecting: boolean;\n walletInfo: WalletInfo | null;\n provider: ethers.Provider | null;\n signer: ethers.Signer | null;\n address: string | null;\n error: string | null;\n connect: () => Promise<void>;\n disconnect: () => void;\n switchNetwork: (chainId: number) => Promise<void>;\n}\n\n/**\n * Hook for wallet connection and management\n */\nexport function useWallet(): UseWalletResult {\n const [isConnected, setIsConnected] = useState(false);\n const [isConnecting, setIsConnecting] = useState(false);\n const [walletInfo, setWalletInfo] = useState<WalletInfo | null>(null);\n const [provider, setProvider] = useState<ethers.Provider | null>(null);\n const [signer, setSigner] = useState<ethers.Signer | null>(null);\n const [address, setAddress] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n \n const walletService = useRef<WalletService>(getWalletService());\n\n const connect = useCallback(async () => {\n setIsConnecting(true);\n setError(null);\n\n try {\n const result = await walletService.current.connectWallet();\n \n if (result.success) {\n setIsConnected(true);\n setProvider(result.provider || null);\n setSigner(result.signer || null);\n setAddress(result.address || null);\n \n // Get wallet info\n const info = await walletService.current.getWalletInfo();\n setWalletInfo(info);\n } else {\n setError(result.error || 'Failed to connect wallet');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to connect wallet');\n } finally {\n setIsConnecting(false);\n }\n }, []);\n\n const disconnect = useCallback(() => {\n walletService.current.disconnect();\n setIsConnected(false);\n setProvider(null);\n setSigner(null);\n setAddress(null);\n setWalletInfo(null);\n setError(null);\n }, []);\n\n const switchNetwork = useCallback(async (chainId: number) => {\n setError(null);\n \n try {\n const result = await walletService.current.switchNetwork(chainId);\n if (!result.success) {\n setError(result.error || 'Failed to switch network');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to switch network');\n }\n }, []);\n\n // Set up event listeners\n useEffect(() => {\n const handleAccountsChanged = (accounts: string[]) => {\n if (accounts.length === 0) {\n disconnect();\n } else {\n setAddress(accounts[0]);\n }\n };\n\n const handleChainChanged = () => {\n // Reload wallet info when chain changes\n if (isConnected) {\n walletService.current.getWalletInfo().then(setWalletInfo);\n }\n };\n\n walletService.current.onAccountsChanged(handleAccountsChanged);\n walletService.current.onChainChanged(handleChainChanged);\n\n return () => {\n walletService.current.removeAllListeners();\n };\n }, [isConnected, disconnect]);\n\n return {\n isConnected,\n isConnecting,\n walletInfo,\n provider,\n signer,\n address,\n error,\n connect,\n disconnect,\n switchNetwork\n };\n}\n\n// =========================================================================\n// COMPLIANCE HOOKS\n// =========================================================================\n\nexport interface UseComplianceResult {\n isInitialized: boolean;\n isLoading: boolean;\n error: string | null;\n initiateVerification: (requirements?: ComplianceRequirements) => Promise<string | null>;\n processVerification: (zkPassportResult: any, userAddress: string) => Promise<VerificationResult | null>;\n checkCompliance: (userAddress: string) => Promise<ComplianceStatus | null>;\n generateQRCode: (url: string) => Promise<string | null>;\n}\n\n/**\n * Hook for compliance operations\n */\nexport function useCompliance(provider?: ethers.Provider, signer?: ethers.Signer): UseComplianceResult {\n const [isInitialized, setIsInitialized] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n \n const complianceService = useRef<ComplianceService>(getComplianceService());\n\n // Initialize service when provider/signer changes\n useEffect(() => {\n if (provider) {\n setIsLoading(true);\n complianceService.current.initialize(provider, signer)\n .then(() => {\n setIsInitialized(true);\n setError(null);\n })\n .catch((err) => {\n setError(err instanceof Error ? err.message : 'Failed to initialize compliance');\n setIsInitialized(false);\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setIsInitialized(false);\n }\n }, [provider, signer]);\n\n const initiateVerification = useCallback(async (requirements?: ComplianceRequirements): Promise<string | null> => {\n setError(null);\n const result = await complianceService.current.initiateVerification(requirements);\n \n if (result.success) {\n return result.url || null;\n } else {\n setError(result.error || 'Failed to initiate verification');\n return null;\n }\n }, []);\n\n const processVerification = useCallback(async (\n zkPassportResult: any, \n userAddress: string\n ): Promise<VerificationResult | null> => {\n setError(null);\n const result = await complianceService.current.processVerificationResult(zkPassportResult, userAddress);\n \n if (result.success) {\n return result.result || null;\n } else {\n setError(result.error || 'Failed to process verification');\n return null;\n }\n }, []);\n\n const checkCompliance = useCallback(async (userAddress: string): Promise<ComplianceStatus | null> => {\n setError(null);\n const result = await complianceService.current.checkComplianceStatus(userAddress);\n \n if (result.success) {\n return result.status || null;\n } else {\n setError(result.error || 'Failed to check compliance');\n return null;\n }\n }, []);\n\n const generateQRCode = useCallback(async (url: string): Promise<string | null> => {\n setError(null);\n const result = await complianceService.current.generateQRCode(url);\n \n if (result.success) {\n return result.qrCode || null;\n } else {\n setError(result.error || 'Failed to generate QR code');\n return null;\n }\n }, []);\n\n return {\n isInitialized,\n isLoading,\n error,\n initiateVerification,\n processVerification,\n checkCompliance,\n generateQRCode\n };\n}\n\n// =========================================================================\n// COMBINED HOOKS\n// =========================================================================\n\nexport interface UseTrezaResult {\n wallet: UseWalletResult;\n compliance: UseComplianceResult;\n isReady: boolean;\n}\n\n/**\n * Combined hook for wallet and compliance functionality\n */\nexport function useTreza(): UseTrezaResult {\n const wallet = useWallet();\n const compliance = useCompliance(wallet.provider || undefined, wallet.signer || undefined);\n\n const isReady = wallet.isConnected && compliance.isInitialized;\n\n return {\n wallet,\n compliance,\n isReady\n };\n}\n\n// =========================================================================\n// VERIFICATION FLOW HOOK\n// =========================================================================\n\nexport interface UseVerificationFlowResult {\n status: 'idle' | 'generating' | 'waiting' | 'processing' | 'completed' | 'error';\n verificationUrl: string | null;\n qrCode: string | null;\n result: VerificationResult | null;\n error: string | null;\n startVerification: (userAddress: string, requirements?: ComplianceRequirements) => Promise<void>;\n processResult: (zkPassportResult: any) => Promise<void>;\n reset: () => void;\n}\n\n/**\n * Hook for managing the complete verification flow\n */\nexport function useVerificationFlow(provider?: ethers.Provider, signer?: ethers.Signer): UseVerificationFlowResult {\n const [status, setStatus] = useState<'idle' | 'generating' | 'waiting' | 'processing' | 'completed' | 'error'>('idle');\n const [verificationUrl, setVerificationUrl] = useState<string | null>(null);\n const [qrCode, setQrCode] = useState<string | null>(null);\n const [result, setResult] = useState<VerificationResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [currentUserAddress, setCurrentUserAddress] = useState<string | null>(null);\n\n const compliance = useCompliance(provider, signer);\n\n const startVerification = useCallback(async (userAddress: string, requirements?: ComplianceRequirements) => {\n setStatus('generating');\n setError(null);\n setResult(null);\n setCurrentUserAddress(userAddress);\n\n try {\n const url = await compliance.initiateVerification(requirements);\n if (url) {\n setVerificationUrl(url);\n \n const qr = await compliance.generateQRCode(url);\n if (qr) {\n setQrCode(qr);\n setStatus('waiting');\n } else {\n throw new Error('Failed to generate QR code');\n }\n } else {\n throw new Error('Failed to initiate verification');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Verification failed');\n setStatus('error');\n }\n }, [compliance]);\n\n const processResult = useCallback(async (zkPassportResult: any) => {\n if (!currentUserAddress) {\n setError('No user address set');\n setStatus('error');\n return;\n }\n\n setStatus('processing');\n setError(null);\n\n try {\n const verificationResult = await compliance.processVerification(zkPassportResult, currentUserAddress);\n if (verificationResult) {\n setResult(verificationResult);\n setStatus('completed');\n } else {\n throw new Error('Failed to process verification result');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Processing failed');\n setStatus('error');\n }\n }, [compliance, currentUserAddress]);\n\n const reset = useCallback(() => {\n setStatus('idle');\n setVerificationUrl(null);\n setQrCode(null);\n setResult(null);\n setError(null);\n setCurrentUserAddress(null);\n }, []);\n\n return {\n status,\n verificationUrl,\n qrCode,\n result,\n error,\n startVerification,\n processResult,\n reset\n };\n}\n","/**\n * @treza/react - React components for TREZA SDK\n * \n * Privacy-first DeFi UI components with zero-knowledge compliance\n */\n\n// Component exports\nexport {\n ComplianceProvider,\n ComplianceVerification,\n ComplianceStatusDisplay,\n GovernanceEligibility,\n useComplianceContext\n} from './components/react-components';\n\n// Style exports\nexport { complianceStyles } from './components/react-components';\n\n// Service exports\nexport {\n ComplianceService,\n getComplianceService,\n resetComplianceService,\n WalletService,\n getWalletService,\n resetWalletService\n} from './services';\n\n// Hook exports\nexport {\n useWallet,\n useCompliance,\n useTreza,\n useVerificationFlow\n} from './services';\n\n// Service type exports\nexport type {\n ComplianceServiceConfig,\n WalletConnectionResult,\n WalletInfo,\n UseWalletResult,\n UseComplianceResult,\n UseTrezaResult,\n UseVerificationFlowResult\n} from './services';\n\n// Re-export core types for convenience\nexport type {\n TrezaComplianceConfig,\n ComplianceRequirements,\n ComplianceStatus,\n VerificationResult\n} from '@treza/sdk';\n\n// Version\nexport const VERSION = '1.0.0';\n"],"names":["sdk","useState","useEffect","TrezaComplianceSDK","useCallback","ethers","useRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/react-components.tsx","../src/services/compliance-service.ts","../src/services/wallet-service.ts","../src/services/hooks.ts","../src/index.ts"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { ethers } from 'ethers';\nimport { TrezaComplianceSDK, ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\n\n/**\n * React Components for TREZA Compliance Integration\n * \n * These components provide easy-to-use React integration for DApps\n * that want to add ZKPassport compliance features.\n */\n\ninterface ComplianceProviderProps {\n provider: ethers.Provider;\n signer?: ethers.Signer;\n children: React.ReactNode;\n verificationMode?: 'fallback' | 'oracle' | 'attestation' | 'hybrid';\n zkVerifyOracleAddress?: string;\n attestationSystemAddress?: string;\n transactionValueThreshold?: string;\n}\n\ninterface ComplianceContextType {\n sdk: TrezaComplianceSDK | null;\n isLoading: boolean;\n error: string | null;\n}\n\n// Context for compliance SDK\nconst ComplianceContext = React.createContext<ComplianceContextType>({\n sdk: null,\n isLoading: true,\n error: null\n});\n\n/**\n * Provider component that initializes the compliance SDK\n */\nexport const ComplianceProvider: React.FC<ComplianceProviderProps> = ({\n provider,\n signer,\n children,\n verificationMode = 'hybrid',\n zkVerifyOracleAddress,\n attestationSystemAddress,\n transactionValueThreshold = '100'\n}) => {\n const [sdk, setSdk] = useState<TrezaComplianceSDK | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n \n useEffect(() => {\n try {\n const config = {\n zkPassportDomain: \"trezalabs.com\",\n zkVerifyEndpoint: \"https://api.zkverify.io\",\n trezaTokenAddress: process.env.REACT_APP_TREZA_TOKEN_ADDRESS || \"0x8278d4FbfaB7dac14eC0295421D0a2733b4504E5\",\n complianceVerifierAddress: process.env.REACT_APP_COMPLIANCE_VERIFIER_ADDRESS || \"0x8c0C6e0Eaf6bc693745A1A3a722e2c9028BBe874\",\n complianceIntegrationAddress: process.env.REACT_APP_COMPLIANCE_INTEGRATION_ADDRESS || \"0xf3ecfC409761D715F137Bfe7078Acec6d7F55428\",\n zkVerifyOracleAddress: zkVerifyOracleAddress || process.env.REACT_APP_ZKVERIFY_ORACLE_ADDRESS,\n attestationSystemAddress: attestationSystemAddress || process.env.REACT_APP_ATTESTATION_SYSTEM_ADDRESS,\n verificationMode,\n transactionValueThreshold,\n provider,\n signer\n };\n \n const complianceSDK = new TrezaComplianceSDK(config);\n setSdk(complianceSDK);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to initialize compliance SDK');\n } finally {\n setIsLoading(false);\n }\n }, [provider, signer]);\n \n return (\n <ComplianceContext.Provider value={{ sdk, isLoading, error }}>\n {children}\n </ComplianceContext.Provider>\n );\n};\n\n/**\n * Hook to use compliance context (for use within ComplianceProvider)\n */\nexport const useComplianceContext = () => {\n const context = React.useContext(ComplianceContext);\n if (!context) {\n throw new Error('useComplianceContext must be used within a ComplianceProvider');\n }\n return context;\n};\n\n/**\n * Props for ComplianceVerification component\n */\ninterface ComplianceVerificationProps {\n userAddress: string;\n requirements?: ComplianceRequirements;\n onVerificationComplete?: (result: VerificationResult) => void;\n onError?: (error: string) => void;\n className?: string;\n}\n\n/**\n * Main compliance verification component\n */\nexport const ComplianceVerification: React.FC<ComplianceVerificationProps> = ({\n userAddress,\n requirements,\n onVerificationComplete,\n onError,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [verificationUrl, setVerificationUrl] = useState<string>(\"\");\n const [qrCode, setQrCode] = useState<string>(\"\");\n const [isGenerating, setIsGenerating] = useState(false);\n const [status, setStatus] = useState<'idle' | 'generating' | 'waiting' | 'processing' | 'complete' | 'error'>('idle');\n const [error, setError] = useState<string>(\"\");\n \n const initiateVerification = useCallback(async () => {\n if (!sdk) return;\n \n setIsGenerating(true);\n setStatus('generating');\n setError(\"\");\n \n try {\n const url = await sdk.initiateVerification(requirements);\n setVerificationUrl(url);\n \n const qr = await sdk.generateQRCode(url);\n setQrCode(qr);\n \n setStatus('waiting');\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to initiate verification';\n setError(errorMessage);\n setStatus('error');\n onError?.(errorMessage);\n } finally {\n setIsGenerating(false);\n }\n }, [sdk, requirements, onError]);\n \n const handleVerificationResult = useCallback(async (zkPassportResult: any) => {\n if (!sdk) return;\n \n setStatus('processing');\n \n try {\n const result = await sdk.processVerificationResult(zkPassportResult, userAddress);\n setStatus('complete');\n onVerificationComplete?.(result);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to process verification';\n setError(errorMessage);\n setStatus('error');\n onError?.(errorMessage);\n }\n }, [sdk, userAddress, onVerificationComplete, onError]);\n \n return (\n <div className={`treza-compliance-verification ${className}`}>\n <div className=\"verification-header\">\n <h3>🛡️ Identity Verification</h3>\n <p>Verify your identity to access TREZA features while keeping your personal data private.</p>\n </div>\n \n {status === 'idle' && (\n <div className=\"verification-start\">\n <button \n onClick={initiateVerification}\n disabled={isGenerating}\n className=\"btn-primary\"\n >\n {isGenerating ? 'Generating...' : 'Start Verification'}\n </button>\n </div>\n )}\n \n {status === 'generating' && (\n <div className=\"verification-generating\">\n <div className=\"spinner\"></div>\n <p>Generating verification request...</p>\n </div>\n )}\n \n {status === 'waiting' && (\n <div className=\"verification-waiting\">\n <div className=\"qr-code-section\">\n <h4>📱 Scan with ZKPassport App</h4>\n {qrCode && (\n <img \n src={qrCode} \n alt=\"Verification QR Code\"\n className=\"qr-code\"\n />\n )}\n <p>Scan this QR code with the ZKPassport mobile app to verify your identity.</p>\n <a \n href={verificationUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"verification-link\"\n >\n Or open verification link directly\n </a>\n </div>\n \n <div className=\"verification-instructions\">\n <h5>Instructions:</h5>\n <ol>\n <li>Download the ZKPassport app if you haven't already</li>\n <li>Scan the QR code above</li>\n <li>Follow the app instructions to verify your government ID</li>\n <li>Your verification will be processed automatically</li>\n </ol>\n </div>\n </div>\n )}\n \n {status === 'processing' && (\n <div className=\"verification-processing\">\n <div className=\"spinner\"></div>\n <p>Processing your verification...</p>\n </div>\n )}\n \n {status === 'complete' && (\n <div className=\"verification-complete\">\n <div className=\"success-icon\">✅</div>\n <h4>Verification Complete!</h4>\n <p>Your identity has been verified successfully. You now have access to TREZA compliance features.</p>\n </div>\n )}\n \n {status === 'error' && (\n <div className=\"verification-error\">\n <div className=\"error-icon\">❌</div>\n <h4>Verification Error</h4>\n <p>{error}</p>\n <button \n onClick={() => setStatus('idle')}\n className=\"btn-secondary\"\n >\n Try Again\n </button>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Props for ComplianceStatus component\n */\ninterface ComplianceStatusProps {\n userAddress: string;\n showDetails?: boolean;\n className?: string;\n}\n\n/**\n * Component to display current compliance status\n */\nexport const ComplianceStatusDisplay: React.FC<ComplianceStatusProps> = ({\n userAddress,\n showDetails = false,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [status, setStatus] = useState<ComplianceStatus | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string>(\"\");\n \n useEffect(() => {\n const checkStatus = async () => {\n if (!sdk || !userAddress) return;\n \n setIsLoading(true);\n try {\n const complianceStatus = await sdk.checkComplianceStatus(userAddress);\n setStatus(complianceStatus);\n setError(\"\");\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to check compliance status');\n } finally {\n setIsLoading(false);\n }\n };\n \n checkStatus();\n }, [sdk, userAddress]);\n \n if (isLoading) {\n return (\n <div className={`compliance-status loading ${className}`}>\n <div className=\"spinner\"></div>\n <span>Checking compliance status...</span>\n </div>\n );\n }\n \n if (error) {\n return (\n <div className={`compliance-status error ${className}`}>\n <span className=\"status-icon\">⚠️</span>\n <span>Error: {error}</span>\n </div>\n );\n }\n \n if (!status) {\n return (\n <div className={`compliance-status unknown ${className}`}>\n <span className=\"status-icon\">❓</span>\n <span>Status unknown</span>\n </div>\n );\n }\n \n return (\n <div className={`compliance-status ${status.isCompliant ? 'compliant' : 'non-compliant'} ${className}`}>\n <div className=\"status-header\">\n <span className=\"status-icon\">\n {status.isCompliant ? '✅' : '❌'}\n </span>\n <span className=\"status-text\">\n {status.isCompliant ? 'Verified' : 'Not Verified'}\n </span>\n </div>\n \n {showDetails && status.isCompliant && (\n <div className=\"status-details\">\n <div className=\"detail-item\">\n <span className=\"label\">Level:</span>\n <span className=\"value\">{status.verificationLevel}</span>\n </div>\n <div className=\"detail-item\">\n <span className=\"label\">Expires:</span>\n <span className=\"value\">\n {new Date(status.expirationTime).toLocaleDateString()}\n </span>\n </div>\n <div className=\"detail-item\">\n <span className=\"label\">Attributes:</span>\n <div className=\"attributes\">\n {status.attributes.ageVerified && <span className=\"attribute\">Age ✓</span>}\n {status.attributes.nationalityVerified && <span className=\"attribute\">Nationality ✓</span>}\n {status.attributes.uniquenessVerified && <span className=\"attribute\">Uniqueness ✓</span>}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Props for GovernanceEligibility component\n */\ninterface GovernanceEligibilityProps {\n userAddress: string;\n proposalId: number;\n className?: string;\n}\n\n/**\n * Component to display governance eligibility\n */\nexport const GovernanceEligibility: React.FC<GovernanceEligibilityProps> = ({\n userAddress,\n proposalId,\n className = \"\"\n}) => {\n const { sdk } = useComplianceContext();\n const [eligibility, setEligibility] = useState<{\n canParticipate: boolean;\n votingWeight: number;\n complianceLevel: string;\n } | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n \n useEffect(() => {\n const checkEligibility = async () => {\n if (!sdk || !userAddress) return;\n \n setIsLoading(true);\n try {\n const result = await sdk.checkGovernanceEligibility(userAddress, proposalId);\n setEligibility(result);\n } catch (err) {\n console.error('Error checking governance eligibility:', err);\n } finally {\n setIsLoading(false);\n }\n };\n \n checkEligibility();\n }, [sdk, userAddress, proposalId]);\n \n if (isLoading) {\n return (\n <div className={`governance-eligibility loading ${className}`}>\n <div className=\"spinner\"></div>\n <span>Checking eligibility...</span>\n </div>\n );\n }\n \n if (!eligibility) {\n return (\n <div className={`governance-eligibility error ${className}`}>\n <span>Unable to check eligibility</span>\n </div>\n );\n }\n \n return (\n <div className={`governance-eligibility ${eligibility.canParticipate ? 'eligible' : 'ineligible'} ${className}`}>\n <div className=\"eligibility-status\">\n <span className=\"status-icon\">\n {eligibility.canParticipate ? '🗳️' : '🚫'}\n </span>\n <span className=\"status-text\">\n {eligibility.canParticipate ? 'Eligible to Vote' : 'Not Eligible'}\n </span>\n </div>\n \n {eligibility.canParticipate && (\n <div className=\"voting-details\">\n <div className=\"voting-weight\">\n <span className=\"label\">Voting Weight:</span>\n <span className=\"value\">{eligibility.votingWeight}x</span>\n </div>\n <div className=\"compliance-level\">\n <span className=\"label\">Compliance Level:</span>\n <span className=\"value\">{eligibility.complianceLevel}</span>\n </div>\n </div>\n )}\n </div>\n );\n};\n\n// CSS styles (you would typically put this in a separate CSS file)\nexport const complianceStyles = `\n.treza-compliance-verification {\n max-width: 500px;\n margin: 0 auto;\n padding: 20px;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n background: #fff;\n}\n\n.verification-header h3 {\n margin: 0 0 10px 0;\n color: #333;\n}\n\n.verification-header p {\n margin: 0 0 20px 0;\n color: #666;\n font-size: 14px;\n}\n\n.btn-primary, .btn-secondary {\n padding: 12px 24px;\n border: none;\n border-radius: 6px;\n font-size: 16px;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.btn-primary {\n background: #007bff;\n color: white;\n}\n\n.btn-primary:hover {\n background: #0056b3;\n}\n\n.btn-primary:disabled {\n background: #ccc;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: #6c757d;\n color: white;\n}\n\n.qr-code {\n max-width: 200px;\n height: auto;\n margin: 10px 0;\n}\n\n.spinner {\n width: 20px;\n height: 20px;\n border: 2px solid #f3f3f3;\n border-top: 2px solid #007bff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n display: inline-block;\n margin-right: 10px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.compliance-status {\n display: flex;\n align-items: center;\n padding: 10px;\n border-radius: 6px;\n margin: 10px 0;\n}\n\n.compliance-status.compliant {\n background: #d4edda;\n color: #155724;\n border: 1px solid #c3e6cb;\n}\n\n.compliance-status.non-compliant {\n background: #f8d7da;\n color: #721c24;\n border: 1px solid #f5c6cb;\n}\n\n.status-icon {\n margin-right: 8px;\n font-size: 18px;\n}\n\n.status-details {\n margin-top: 10px;\n font-size: 14px;\n}\n\n.detail-item {\n margin: 5px 0;\n}\n\n.label {\n font-weight: bold;\n margin-right: 8px;\n}\n\n.attributes {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.attribute {\n background: #e9ecef;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 12px;\n}\n`;\n","import { TrezaComplianceSDK, ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\nimport { ethers } from 'ethers';\n\n/**\n * React-specific service wrapper for TREZA Compliance SDK\n * \n * This service provides React-optimized methods for compliance operations\n * with proper error handling and state management integration.\n */\n\nexport interface ComplianceServiceConfig {\n zkPassportDomain?: string;\n zkVerifyEndpoint?: string;\n zkVerifyApiKey?: string;\n trezaTokenAddress?: string;\n complianceVerifierAddress?: string;\n complianceIntegrationAddress?: string;\n}\n\nexport class ComplianceService {\n private sdk: TrezaComplianceSDK | null = null;\n private config: ComplianceServiceConfig;\n\n constructor(config: ComplianceServiceConfig = {}) {\n this.config = {\n zkPassportDomain: \"trezalabs.com\",\n zkVerifyEndpoint: \"https://api.zkverify.io\",\n trezaTokenAddress: process.env.REACT_APP_TREZA_TOKEN_ADDRESS || \"0x8278d4FbfaB7dac14eC0295421D0a2733b4504E5\",\n complianceVerifierAddress: process.env.REACT_APP_COMPLIANCE_VERIFIER_ADDRESS || \"0x8c0C6e0Eaf6bc693745A1A3a722e2c9028BBe874\",\n complianceIntegrationAddress: process.env.REACT_APP_COMPLIANCE_INTEGRATION_ADDRESS || \"0xf3ecfC409761D715F137Bfe7078Acec6d7F55428\",\n ...config\n };\n }\n\n /**\n * Initialize the compliance SDK with provider and signer\n */\n async initialize(provider: ethers.Provider, signer?: ethers.Signer): Promise<void> {\n try {\n this.sdk = new TrezaComplianceSDK({\n zkPassportDomain: this.config.zkPassportDomain!,\n zkVerifyEndpoint: this.config.zkVerifyEndpoint!,\n zkVerifyApiKey: this.config.zkVerifyApiKey,\n trezaTokenAddress: this.config.trezaTokenAddress!,\n complianceVerifierAddress: this.config.complianceVerifierAddress!,\n complianceIntegrationAddress: this.config.complianceIntegrationAddress!,\n provider,\n signer\n });\n } catch (error) {\n console.error('Failed to initialize compliance service:', error);\n throw error;\n }\n }\n\n /**\n * Get the initialized SDK instance\n */\n getSDK(): TrezaComplianceSDK {\n if (!this.sdk) {\n throw new Error('Compliance service not initialized. Call initialize() first.');\n }\n return this.sdk;\n }\n\n /**\n * Check if the service is initialized\n */\n isInitialized(): boolean {\n return this.sdk !== null;\n }\n\n /**\n * Initiate verification with React-friendly error handling\n */\n async initiateVerification(requirements?: ComplianceRequirements): Promise<{\n success: boolean;\n url?: string;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const url = await this.sdk.initiateVerification(requirements);\n return { success: true, url };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Process verification result with React-friendly error handling\n */\n async processVerificationResult(\n zkPassportResult: any,\n userAddress: string\n ): Promise<{\n success: boolean;\n result?: VerificationResult;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const result = await this.sdk.processVerificationResult(zkPassportResult, userAddress);\n return { success: true, result };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Check compliance status with React-friendly error handling\n */\n async checkComplianceStatus(userAddress: string): Promise<{\n success: boolean;\n status?: ComplianceStatus;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const status = await this.sdk.checkComplianceStatus(userAddress);\n return { success: true, status };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Generate QR code for verification URL\n */\n async generateQRCode(url: string): Promise<{\n success: boolean;\n qrCode?: string;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const qrCode = await this.sdk.generateQRCode(url);\n return { success: true, qrCode };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Batch check compliance for multiple users\n */\n async batchCheckCompliance(userAddresses: string[]): Promise<{\n success: boolean;\n results?: ComplianceStatus[];\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n const results = await this.sdk.batchCheckCompliance(userAddresses);\n return { success: true, results };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Check governance eligibility\n */\n async checkGovernanceEligibility(userAddress: string, proposalId?: string): Promise<{\n success: boolean;\n eligibility?: any;\n error?: string;\n }> {\n try {\n if (!this.sdk) {\n throw new Error('Service not initialized');\n }\n\n if (!proposalId) {\n throw new Error('Proposal ID is required');\n }\n\n const proposalIdNum = parseInt(proposalId, 10);\n if (isNaN(proposalIdNum)) {\n throw new Error('Invalid proposal ID: must be a number');\n }\n\n const eligibility = await this.sdk.checkGovernanceEligibility(userAddress, proposalIdNum);\n return { success: true, eligibility };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.sdk = null;\n }\n}\n\n// Singleton instance for React apps\nlet complianceServiceInstance: ComplianceService | null = null;\n\n/**\n * Get or create the global compliance service instance\n */\nexport function getComplianceService(config?: ComplianceServiceConfig): ComplianceService {\n if (!complianceServiceInstance) {\n complianceServiceInstance = new ComplianceService(config);\n }\n return complianceServiceInstance;\n}\n\n/**\n * Reset the global compliance service instance\n */\nexport function resetComplianceService(): void {\n if (complianceServiceInstance) {\n complianceServiceInstance.destroy();\n complianceServiceInstance = null;\n }\n}\n","import { ethers } from 'ethers';\n\n/**\n * Wallet Service for React applications\n * \n * Provides React-friendly wallet connection and management utilities\n * with proper error handling and state management integration.\n */\n\nexport interface WalletConnectionResult {\n success: boolean;\n provider?: ethers.Provider;\n signer?: ethers.Signer;\n address?: string;\n chainId?: number;\n error?: string;\n}\n\nexport interface WalletInfo {\n address: string;\n chainId: number;\n balance: string;\n isConnected: boolean;\n}\n\nexport class WalletService {\n private provider: ethers.Provider | null = null;\n private signer: ethers.Signer | null = null;\n private currentAddress: string | null = null;\n\n /**\n * Connect to MetaMask or other Web3 wallet\n */\n async connectWallet(): Promise<WalletConnectionResult> {\n try {\n // Check if Web3 is available\n if (typeof window === 'undefined' || !window.ethereum) {\n return {\n success: false,\n error: 'Web3 wallet not found. Please install MetaMask or another Web3 wallet.'\n };\n }\n\n // Request account access\n await window.ethereum.request({ method: 'eth_requestAccounts' });\n\n // Create provider and signer\n const provider = new ethers.BrowserProvider(window.ethereum);\n const signer = await provider.getSigner();\n const address = await signer.getAddress();\n const network = await provider.getNetwork();\n\n // Store references\n this.provider = provider;\n this.signer = signer;\n this.currentAddress = address;\n\n return {\n success: true,\n provider,\n signer,\n address,\n chainId: Number(network.chainId)\n };\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to connect wallet';\n return {\n success: false,\n error: errorMessage\n };\n }\n }\n\n /**\n * Disconnect wallet\n */\n disconnect(): void {\n this.provider = null;\n this.signer = null;\n this.currentAddress = null;\n }\n\n /**\n * Get current wallet info\n */\n async getWalletInfo(): Promise<WalletInfo | null> {\n if (!this.provider || !this.currentAddress) {\n return null;\n }\n\n try {\n const balance = await this.provider.getBalance(this.currentAddress);\n const network = await this.provider.getNetwork();\n\n return {\n address: this.currentAddress,\n chainId: Number(network.chainId),\n balance: ethers.formatEther(balance),\n isConnected: true\n };\n } catch (error) {\n console.error('Failed to get wallet info:', error);\n return null;\n }\n }\n\n /**\n * Switch to a specific network\n */\n async switchNetwork(chainId: number): Promise<{ success: boolean; error?: string }> {\n try {\n if (!window.ethereum) {\n return { success: false, error: 'Web3 wallet not found' };\n }\n\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId.toString(16)}` }],\n });\n\n return { success: true };\n } catch (error: any) {\n // If the chain hasn't been added to MetaMask\n if (error.code === 4902) {\n return { success: false, error: 'Network not added to wallet' };\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Failed to switch network';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Add a custom network to the wallet\n */\n async addNetwork(networkConfig: {\n chainId: number;\n chainName: string;\n rpcUrls: string[];\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n blockExplorerUrls?: string[];\n }): Promise<{ success: boolean; error?: string }> {\n try {\n if (!window.ethereum) {\n return { success: false, error: 'Web3 wallet not found' };\n }\n\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{\n chainId: `0x${networkConfig.chainId.toString(16)}`,\n chainName: networkConfig.chainName,\n rpcUrls: networkConfig.rpcUrls,\n nativeCurrency: networkConfig.nativeCurrency,\n blockExplorerUrls: networkConfig.blockExplorerUrls\n }],\n });\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to add network';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Sign a message\n */\n async signMessage(message: string): Promise<{ success: boolean; signature?: string; error?: string }> {\n try {\n if (!this.signer) {\n return { success: false, error: 'Wallet not connected' };\n }\n\n const signature = await this.signer.signMessage(message);\n return { success: true, signature };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to sign message';\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Get current provider\n */\n getProvider(): ethers.Provider | null {\n return this.provider;\n }\n\n /**\n * Get current signer\n */\n getSigner(): ethers.Signer | null {\n return this.signer;\n }\n\n /**\n * Get current address\n */\n getCurrentAddress(): string | null {\n return this.currentAddress;\n }\n\n /**\n * Check if wallet is connected\n */\n isConnected(): boolean {\n return this.provider !== null && this.signer !== null && this.currentAddress !== null;\n }\n\n /**\n * Listen for account changes\n */\n onAccountsChanged(callback: (accounts: string[]) => void): void {\n if (window.ethereum) {\n window.ethereum.on('accountsChanged', callback);\n }\n }\n\n /**\n * Listen for chain changes\n */\n onChainChanged(callback: (chainId: string) => void): void {\n if (window.ethereum) {\n window.ethereum.on('chainChanged', callback);\n }\n }\n\n /**\n * Remove event listeners\n */\n removeAllListeners(): void {\n if (window.ethereum) {\n window.ethereum.removeAllListeners('accountsChanged');\n window.ethereum.removeAllListeners('chainChanged');\n }\n }\n}\n\n// Singleton instance for React apps\nlet walletServiceInstance: WalletService | null = null;\n\n/**\n * Get or create the global wallet service instance\n */\nexport function getWalletService(): WalletService {\n if (!walletServiceInstance) {\n walletServiceInstance = new WalletService();\n }\n return walletServiceInstance;\n}\n\n/**\n * Reset the global wallet service instance\n */\nexport function resetWalletService(): void {\n if (walletServiceInstance) {\n walletServiceInstance.removeAllListeners();\n walletServiceInstance.disconnect();\n walletServiceInstance = null;\n }\n}\n\n// Type declarations for window.ethereum\ndeclare global {\n interface Window {\n ethereum?: {\n request: (args: { method: string; params?: any[] }) => Promise<any>;\n on: (event: string, callback: (...args: any[]) => void) => void;\n removeAllListeners: (event: string) => void;\n };\n }\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { ethers } from 'ethers';\nimport { ComplianceService, getComplianceService } from './compliance-service';\nimport { WalletService, getWalletService, WalletInfo } from './wallet-service';\nimport { ComplianceStatus, VerificationResult, ComplianceRequirements } from '@treza/sdk';\n\n/**\n * Custom React hooks for TREZA SDK integration\n * \n * These hooks provide easy-to-use React integration for compliance and wallet functionality\n */\n\n// =========================================================================\n// WALLET HOOKS\n// =========================================================================\n\nexport interface UseWalletResult {\n isConnected: boolean;\n isConnecting: boolean;\n walletInfo: WalletInfo | null;\n provider: ethers.Provider | null;\n signer: ethers.Signer | null;\n address: string | null;\n error: string | null;\n connect: () => Promise<void>;\n disconnect: () => void;\n switchNetwork: (chainId: number) => Promise<void>;\n}\n\n/**\n * Hook for wallet connection and management\n */\nexport function useWallet(): UseWalletResult {\n const [isConnected, setIsConnected] = useState(false);\n const [isConnecting, setIsConnecting] = useState(false);\n const [walletInfo, setWalletInfo] = useState<WalletInfo | null>(null);\n const [provider, setProvider] = useState<ethers.Provider | null>(null);\n const [signer, setSigner] = useState<ethers.Signer | null>(null);\n const [address, setAddress] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n \n const walletService = useRef<WalletService>(getWalletService());\n\n const connect = useCallback(async () => {\n setIsConnecting(true);\n setError(null);\n\n try {\n const result = await walletService.current.connectWallet();\n \n if (result.success) {\n setIsConnected(true);\n setProvider(result.provider || null);\n setSigner(result.signer || null);\n setAddress(result.address || null);\n \n // Get wallet info\n const info = await walletService.current.getWalletInfo();\n setWalletInfo(info);\n } else {\n setError(result.error || 'Failed to connect wallet');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to connect wallet');\n } finally {\n setIsConnecting(false);\n }\n }, []);\n\n const disconnect = useCallback(() => {\n walletService.current.disconnect();\n setIsConnected(false);\n setProvider(null);\n setSigner(null);\n setAddress(null);\n setWalletInfo(null);\n setError(null);\n }, []);\n\n const switchNetwork = useCallback(async (chainId: number) => {\n setError(null);\n \n try {\n const result = await walletService.current.switchNetwork(chainId);\n if (!result.success) {\n setError(result.error || 'Failed to switch network');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to switch network');\n }\n }, []);\n\n // Set up event listeners\n useEffect(() => {\n const handleAccountsChanged = (accounts: string[]) => {\n if (accounts.length === 0) {\n disconnect();\n } else {\n setAddress(accounts[0]);\n }\n };\n\n const handleChainChanged = () => {\n // Reload wallet info when chain changes\n if (isConnected) {\n walletService.current.getWalletInfo().then(setWalletInfo);\n }\n };\n\n walletService.current.onAccountsChanged(handleAccountsChanged);\n walletService.current.onChainChanged(handleChainChanged);\n\n return () => {\n walletService.current.removeAllListeners();\n };\n }, [isConnected, disconnect]);\n\n return {\n isConnected,\n isConnecting,\n walletInfo,\n provider,\n signer,\n address,\n error,\n connect,\n disconnect,\n switchNetwork\n };\n}\n\n// =========================================================================\n// COMPLIANCE HOOKS\n// =========================================================================\n\nexport interface UseComplianceResult {\n isInitialized: boolean;\n isLoading: boolean;\n error: string | null;\n initiateVerification: (requirements?: ComplianceRequirements) => Promise<string | null>;\n processVerification: (zkPassportResult: any, userAddress: string) => Promise<VerificationResult | null>;\n checkCompliance: (userAddress: string) => Promise<ComplianceStatus | null>;\n generateQRCode: (url: string) => Promise<string | null>;\n}\n\n/**\n * Hook for compliance operations\n */\nexport function useCompliance(provider?: ethers.Provider, signer?: ethers.Signer): UseComplianceResult {\n const [isInitialized, setIsInitialized] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n \n const complianceService = useRef<ComplianceService>(getComplianceService());\n\n // Initialize service when provider/signer changes\n useEffect(() => {\n if (provider) {\n setIsLoading(true);\n complianceService.current.initialize(provider, signer)\n .then(() => {\n setIsInitialized(true);\n setError(null);\n })\n .catch((err) => {\n setError(err instanceof Error ? err.message : 'Failed to initialize compliance');\n setIsInitialized(false);\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setIsInitialized(false);\n }\n }, [provider, signer]);\n\n const initiateVerification = useCallback(async (requirements?: ComplianceRequirements): Promise<string | null> => {\n setError(null);\n const result = await complianceService.current.initiateVerification(requirements);\n \n if (result.success) {\n return result.url || null;\n } else {\n setError(result.error || 'Failed to initiate verification');\n return null;\n }\n }, []);\n\n const processVerification = useCallback(async (\n zkPassportResult: any, \n userAddress: string\n ): Promise<VerificationResult | null> => {\n setError(null);\n const result = await complianceService.current.processVerificationResult(zkPassportResult, userAddress);\n \n if (result.success) {\n return result.result || null;\n } else {\n setError(result.error || 'Failed to process verification');\n return null;\n }\n }, []);\n\n const checkCompliance = useCallback(async (userAddress: string): Promise<ComplianceStatus | null> => {\n setError(null);\n const result = await complianceService.current.checkComplianceStatus(userAddress);\n \n if (result.success) {\n return result.status || null;\n } else {\n setError(result.error || 'Failed to check compliance');\n return null;\n }\n }, []);\n\n const generateQRCode = useCallback(async (url: string): Promise<string | null> => {\n setError(null);\n const result = await complianceService.current.generateQRCode(url);\n \n if (result.success) {\n return result.qrCode || null;\n } else {\n setError(result.error || 'Failed to generate QR code');\n return null;\n }\n }, []);\n\n return {\n isInitialized,\n isLoading,\n error,\n initiateVerification,\n processVerification,\n checkCompliance,\n generateQRCode\n };\n}\n\n// =========================================================================\n// COMBINED HOOKS\n// =========================================================================\n\nexport interface UseTrezaResult {\n wallet: UseWalletResult;\n compliance: UseComplianceResult;\n isReady: boolean;\n}\n\n/**\n * Combined hook for wallet and compliance functionality\n */\nexport function useTreza(): UseTrezaResult {\n const wallet = useWallet();\n const compliance = useCompliance(wallet.provider || undefined, wallet.signer || undefined);\n\n const isReady = wallet.isConnected && compliance.isInitialized;\n\n return {\n wallet,\n compliance,\n isReady\n };\n}\n\n// =========================================================================\n// VERIFICATION FLOW HOOK\n// =========================================================================\n\nexport interface UseVerificationFlowResult {\n status: 'idle' | 'generating' | 'waiting' | 'processing' | 'completed' | 'error';\n verificationUrl: string | null;\n qrCode: string | null;\n result: VerificationResult | null;\n error: string | null;\n startVerification: (userAddress: string, requirements?: ComplianceRequirements) => Promise<void>;\n processResult: (zkPassportResult: any) => Promise<void>;\n reset: () => void;\n}\n\n/**\n * Hook for managing the complete verification flow\n */\nexport function useVerificationFlow(provider?: ethers.Provider, signer?: ethers.Signer): UseVerificationFlowResult {\n const [status, setStatus] = useState<'idle' | 'generating' | 'waiting' | 'processing' | 'completed' | 'error'>('idle');\n const [verificationUrl, setVerificationUrl] = useState<string | null>(null);\n const [qrCode, setQrCode] = useState<string | null>(null);\n const [result, setResult] = useState<VerificationResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [currentUserAddress, setCurrentUserAddress] = useState<string | null>(null);\n\n const compliance = useCompliance(provider, signer);\n\n const startVerification = useCallback(async (userAddress: string, requirements?: ComplianceRequirements) => {\n setStatus('generating');\n setError(null);\n setResult(null);\n setCurrentUserAddress(userAddress);\n\n try {\n const url = await compliance.initiateVerification(requirements);\n if (url) {\n setVerificationUrl(url);\n \n const qr = await compliance.generateQRCode(url);\n if (qr) {\n setQrCode(qr);\n setStatus('waiting');\n } else {\n throw new Error('Failed to generate QR code');\n }\n } else {\n throw new Error('Failed to initiate verification');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Verification failed');\n setStatus('error');\n }\n }, [compliance]);\n\n const processResult = useCallback(async (zkPassportResult: any) => {\n if (!currentUserAddress) {\n setError('No user address set');\n setStatus('error');\n return;\n }\n\n setStatus('processing');\n setError(null);\n\n try {\n const verificationResult = await compliance.processVerification(zkPassportResult, currentUserAddress);\n if (verificationResult) {\n setResult(verificationResult);\n setStatus('completed');\n } else {\n throw new Error('Failed to process verification result');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Processing failed');\n setStatus('error');\n }\n }, [compliance, currentUserAddress]);\n\n const reset = useCallback(() => {\n setStatus('idle');\n setVerificationUrl(null);\n setQrCode(null);\n setResult(null);\n setError(null);\n setCurrentUserAddress(null);\n }, []);\n\n return {\n status,\n verificationUrl,\n qrCode,\n result,\n error,\n startVerification,\n processResult,\n reset\n };\n}\n\n// =========================================================================\n// PII AUDIT HOOK\n// =========================================================================\n\nexport interface PIIAccessEvent {\n eventId: string;\n workflowId: string;\n workflowRunId: string;\n stepId: string;\n stepName: string;\n piiFieldsPresent: string[];\n piiFieldsAllowed: string[];\n piiFieldsStripped: string[];\n hadViolation: boolean;\n timestamp: string;\n walletAddress?: string;\n}\n\nexport interface PIIAuditSummary {\n total: number;\n violations: number;\n workflows: string[];\n}\n\nexport interface UsePIIAuditResult {\n events: PIIAccessEvent[];\n summary: PIIAuditSummary | null;\n isLoading: boolean;\n error: string | null;\n refresh: () => void;\n}\n\n/**\n * Hook for querying PII audit events from the Treza backend.\n * Polls the /api/pii/audit endpoint and returns events for the given filters.\n *\n * The endpoint requires authentication: pass a Treza API key with the\n * `pii:audit` permission (or a Privy access token) as `authToken`. Results\n * are always scoped to the authenticated account.\n */\nexport function usePIIAudit(options: {\n apiBaseUrl?: string;\n workflowId?: string;\n walletAddress?: string;\n violationsOnly?: boolean;\n limit?: number;\n pollIntervalMs?: number;\n /** Bearer token: Treza API key (pii:audit) or Privy access token. */\n authToken?: string;\n} = {}): UsePIIAuditResult {\n const {\n apiBaseUrl = '',\n workflowId,\n walletAddress,\n violationsOnly = false,\n limit = 100,\n pollIntervalMs,\n authToken,\n } = options;\n\n const [events, setEvents] = useState<PIIAccessEvent[]>([]);\n const [summary, setSummary] = useState<PIIAuditSummary | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [refreshKey, setRefreshKey] = useState(0);\n\n const refresh = useCallback(() => setRefreshKey(k => k + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n\n const fetchAudit = async () => {\n setIsLoading(true);\n setError(null);\n try {\n const params = new URLSearchParams();\n if (workflowId) params.set('workflowId', workflowId);\n if (walletAddress) params.set('walletAddress', walletAddress);\n if (violationsOnly) params.set('violations', 'true');\n params.set('limit', String(limit));\n\n const headers: Record<string, string> = {};\n if (authToken) headers.Authorization = `Bearer ${authToken}`;\n if (walletAddress) headers['x-treza-account'] = walletAddress;\n\n const res = await fetch(`${apiBaseUrl}/api/pii/audit?${params.toString()}`, { headers });\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);\n const data = await res.json();\n if (!cancelled) {\n setEvents(data.events ?? []);\n setSummary(data.summary ?? null);\n }\n } catch (err) {\n if (!cancelled) {\n setError(err instanceof Error ? err.message : String(err));\n }\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n };\n\n fetchAudit();\n\n let intervalId: ReturnType<typeof setInterval> | undefined;\n if (pollIntervalMs && pollIntervalMs > 0) {\n intervalId = setInterval(fetchAudit, pollIntervalMs);\n }\n\n return () => {\n cancelled = true;\n if (intervalId !== undefined) clearInterval(intervalId);\n };\n }, [apiBaseUrl, workflowId, walletAddress, violationsOnly, limit, pollIntervalMs, refreshKey, authToken]);\n\n return { events, summary, isLoading, error, refresh };\n}\n","/**\n * @treza/react - React components for TREZA SDK\n * \n * Privacy-first DeFi UI components with zero-knowledge compliance\n */\n\n// Component exports\nexport {\n ComplianceProvider,\n ComplianceVerification,\n ComplianceStatusDisplay,\n GovernanceEligibility,\n useComplianceContext\n} from './components/react-components';\n\n// Style exports\nexport { complianceStyles } from './components/react-components';\n\n// Service exports\nexport {\n ComplianceService,\n getComplianceService,\n resetComplianceService,\n WalletService,\n getWalletService,\n resetWalletService\n} from './services';\n\n// Hook exports\nexport {\n useWallet,\n useCompliance,\n useTreza,\n useVerificationFlow,\n usePIIAudit,\n} from './services';\n\n// Service type exports\nexport type {\n ComplianceServiceConfig,\n WalletConnectionResult,\n WalletInfo,\n UseWalletResult,\n UseComplianceResult,\n UseTrezaResult,\n UseVerificationFlowResult,\n UsePIIAuditResult,\n PIIAccessEvent,\n PIIAuditSummary,\n} from './services';\n\n// Re-export core types for convenience\nexport type {\n TrezaComplianceConfig,\n ComplianceRequirements,\n ComplianceStatus,\n VerificationResult\n} from '@treza/sdk';\n\n// Version\nexport const VERSION = '1.0.0';\n"],"names":["sdk","useState","useEffect","TrezaComplianceSDK","useCallback","ethers","useRef"],"mappings":"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"}
|