From 619c914e1b5257699b4e77d00bdd5215377b48b2 Mon Sep 17 00:00:00 2001 From: Danish Arora Date: Tue, 23 Sep 2025 17:35:25 +0530 Subject: [PATCH] remove env logs --- packages/core/src/lib/delegation/storage.ts | 8 -- .../src/lib/services/UserIdentityService.ts | 27 +----- .../core/src/lib/waku/core/WakuNodeManager.ts | 4 +- packages/core/src/lib/wallet/index.ts | 4 - packages/react/src/contexts/AuthContext.tsx | 8 +- .../react/src/contexts/IdentityContext.tsx | 95 ------------------- .../react/src/hooks/core/useUserDisplay.ts | 38 ++++---- packages/react/src/hooks/index.ts | 1 + packages/react/src/index.ts | 1 + .../react/src/provider/OpChanProvider.tsx | 13 +-- 10 files changed, 35 insertions(+), 164 deletions(-) delete mode 100644 packages/react/src/contexts/IdentityContext.tsx diff --git a/packages/core/src/lib/delegation/storage.ts b/packages/core/src/lib/delegation/storage.ts index 1ba986c..a340bbf 100644 --- a/packages/core/src/lib/delegation/storage.ts +++ b/packages/core/src/lib/delegation/storage.ts @@ -7,11 +7,6 @@ export class DelegationStorage { * Store delegation information in IndexedDB */ static async store(delegation: DelegationInfo): Promise { - // Reduce verbose logging in production; keep minimal signal - if (!environment.isProduction) { - console.log('DelegationStorage.store'); - } - try { await localDatabase.storeDelegation(delegation); } catch (e) { @@ -25,9 +20,6 @@ export class DelegationStorage { static async retrieve(): Promise { try { const delegation = await localDatabase.loadDelegation(); - if (!environment.isProduction) { - console.log('DelegationStorage.retrieve'); - } return delegation; } catch (e) { console.error('Failed to retrieve delegation information', e); diff --git a/packages/core/src/lib/services/UserIdentityService.ts b/packages/core/src/lib/services/UserIdentityService.ts index 916656a..47ee6b8 100644 --- a/packages/core/src/lib/services/UserIdentityService.ts +++ b/packages/core/src/lib/services/UserIdentityService.ts @@ -9,7 +9,6 @@ import { MessageService } from './MessageService'; import messageManager from '../waku'; import { localDatabase } from '../database/LocalDatabase'; import { WalletManager } from '../wallet'; -import { environment } from '../utils/environment'; export interface UserIdentity { address: string; @@ -62,9 +61,6 @@ export class UserIdentityService { // Check internal cache first if (this.userIdentityCache[address]) { const cached = this.userIdentityCache[address]; - if (environment.isDev) { - console.debug('UserIdentityService: cache hit (internal)'); - } // Enrich with ENS name if missing and ETH address if (!cached.ensName && address.startsWith('0x')) { const ensName = await this.resolveENSName(address); @@ -144,9 +140,6 @@ export class UserIdentityService { messageManager.messageCache.userIdentities[address]; if (cacheServiceData) { - if (environment.isDev) { - console.debug('UserIdentityService: cache hit (message cache)'); - } // Store in internal cache for future use this.userIdentityCache[address] = { @@ -191,9 +184,6 @@ export class UserIdentityService { return result; } - if (environment.isDev) { - console.debug('UserIdentityService: cache miss, resolving'); - } // Try to resolve identity from various sources const identity = await this.resolveUserIdentity(address); @@ -226,9 +216,6 @@ export class UserIdentityService { * Useful for explicit verification flows where we must hit upstream resolvers. */ async getUserIdentityFresh(address: string): Promise { - if (environment.isDev) { - console.debug('UserIdentityService: fresh resolve requested'); - } const identity = await this.resolveUserIdentity(address); if (identity) { // Update in-memory cache to reflect the fresh result @@ -278,9 +265,6 @@ export class UserIdentityService { displayPreference: EDisplayPreference ): Promise { try { - if (environment.isDev) { - console.debug('UserIdentityService: updating profile', { address }); - } const timestamp = Date.now(); const unsignedMessage: UnsignedUserProfileUpdateMessage = { @@ -295,19 +279,10 @@ export class UserIdentityService { unsignedMessage.callSign = callSign.trim(); } - if (environment.isDev) { - console.debug('UserIdentityService: created unsigned message'); - } - const signedMessage = await this.messageService.signAndBroadcastMessage(unsignedMessage); - if (environment.isDev) { - console.debug( - 'UserIdentityService: message broadcast result', - !!signedMessage - ); - } + // If broadcast was successful, immediately update local cache if (signedMessage) { diff --git a/packages/core/src/lib/waku/core/WakuNodeManager.ts b/packages/core/src/lib/waku/core/WakuNodeManager.ts index a169902..77acd46 100644 --- a/packages/core/src/lib/waku/core/WakuNodeManager.ts +++ b/packages/core/src/lib/waku/core/WakuNodeManager.ts @@ -33,9 +33,7 @@ export class WakuNodeManager { const health = event.detail; this._currentHealth = health; - if (environment.isDev) { - console.debug(`Waku health status: ${health}`); - } + const wasReady = this._isReady; this._isReady = diff --git a/packages/core/src/lib/wallet/index.ts b/packages/core/src/lib/wallet/index.ts index 19e9435..6933327 100644 --- a/packages/core/src/lib/wallet/index.ts +++ b/packages/core/src/lib/wallet/index.ts @@ -201,10 +201,6 @@ export class WalletManager { walletType: 'bitcoin' | 'ethereum' ): Promise { try { - if (environment.isDev) { - // Keep this lightweight in dev; avoid logging full message/signature repeatedly - console.debug('WalletManager.verifySignature', { walletType }); - } if (walletType === 'ethereum') { return await verifyEthereumMessage(config, { address: walletAddress as `0x${string}`, diff --git a/packages/react/src/contexts/AuthContext.tsx b/packages/react/src/contexts/AuthContext.tsx index 5ba92bf..f227dae 100644 --- a/packages/react/src/contexts/AuthContext.tsx +++ b/packages/react/src/contexts/AuthContext.tsx @@ -1,6 +1,6 @@ import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; import { User, EVerificationStatus, EDisplayPreference } from '@opchan/core'; -import { delegationManager, type messageManager, localDatabase } from '@opchan/core'; +import { delegationManager, localDatabase } from '@opchan/core'; import { DelegationDuration } from '@opchan/core'; import { useAppKitAccount } from '@reown/appkit/react'; import { useClient } from './ClientContext'; @@ -19,7 +19,11 @@ export interface AuthContextValue { getDelegationStatus: () => ReturnType; clearDelegation: () => Promise; - signMessage: typeof messageManager.sendMessage; + signMessage: (message: unknown, statusCallback?: { + onSent?: (messageId: string) => void; + onAcknowledged?: (messageId: string) => void; + onError?: (messageId: string, error: string) => void; + }) => Promise; verifyMessage: (message: unknown) => Promise; } diff --git a/packages/react/src/contexts/IdentityContext.tsx b/packages/react/src/contexts/IdentityContext.tsx deleted file mode 100644 index fcae5ac..0000000 --- a/packages/react/src/contexts/IdentityContext.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import React, { createContext, useContext, useEffect, useMemo, useState } from 'react'; -import { OpChanClient, type EVerificationStatus } from '@opchan/core'; - -export interface IdentityRecord { - address: string; - displayName: string; - callSign: string | null; - ensName: string | null; - ordinalDetails: string | null; - verificationStatus: EVerificationStatus; - lastUpdated: number; -} - -export interface IdentityContextValue { - getIdentity: (address: string) => IdentityRecord | null; - getDisplayName: (address: string) => string; -} - -const IdentityContext = createContext(null); - -export const IdentityProvider: React.FC<{ client: OpChanClient; children: React.ReactNode }> = ({ client, children }) => { - const [cache, setCache] = useState>({}); - - useEffect(() => { - let mounted = true; - const seedFromService = async () => { - try { - // Warm snapshot of any already-cached identities - const identities = client.userIdentityService.getAllUserIdentities(); - if (!mounted) return; - const next: Record = {}; - identities.forEach(id => { - next[id.address] = { - address: id.address, - displayName: client.userIdentityService.getDisplayName(id.address), - callSign: id.callSign ?? null, - ensName: id.ensName ?? null, - ordinalDetails: id.ordinalDetails?.ordinalDetails ?? null, - verificationStatus: id.verificationStatus, - lastUpdated: id.lastUpdated, - }; - }); - setCache(next); - } catch {} - }; - seedFromService(); - - // Subscribe to identity refresh events for live updates - const off = client.userIdentityService.addRefreshListener(async (address: string) => { - try { - const fresh = await client.userIdentityService.getUserIdentity(address); - if (!fresh) return; - setCache(prev => ({ - ...prev, - [address]: { - address, - displayName: client.userIdentityService.getDisplayName(address), - callSign: fresh.callSign ?? null, - ensName: fresh.ensName ?? null, - ordinalDetails: fresh.ordinalDetails?.ordinalDetails ?? null, - verificationStatus: fresh.verificationStatus, - lastUpdated: fresh.lastUpdated, - }, - })); - } catch {} - }); - - return () => { - try { off && off(); } catch {} - mounted = false; - }; - }, [client]); - - const getIdentity = useMemo(() => { - return (address: string): IdentityRecord | null => cache[address] ?? null; - }, [cache]); - - const getDisplayName = useMemo(() => { - return (address: string): string => client.userIdentityService.getDisplayName(address); - }, [client]); - - const value: IdentityContextValue = useMemo(() => ({ getIdentity, getDisplayName }), [getIdentity, getDisplayName]); - - return {children}; -}; - -export function useIdentity(): IdentityContextValue { - const ctx = useContext(IdentityContext); - if (!ctx) throw new Error('useIdentity must be used within OpChanProvider'); - return ctx; -} - -export { IdentityContext }; - - diff --git a/packages/react/src/hooks/core/useUserDisplay.ts b/packages/react/src/hooks/core/useUserDisplay.ts index 2a7fc15..bd94427 100644 --- a/packages/react/src/hooks/core/useUserDisplay.ts +++ b/packages/react/src/hooks/core/useUserDisplay.ts @@ -1,7 +1,6 @@ import { EDisplayPreference, EVerificationStatus } from '@opchan/core'; import { useEffect, useState } from 'react'; import { useClient } from '../../contexts/ClientContext'; -import { useIdentity } from '../../contexts/IdentityContext'; export interface UserDisplayInfo { displayName: string; @@ -19,7 +18,7 @@ export interface UserDisplayInfo { */ export function useUserDisplay(address: string): UserDisplayInfo { const client = useClient(); - const { getIdentity, getDisplayName } = useIdentity(); + const getDisplayName = (addr: string) => client.userIdentityService.getDisplayName(addr); const [displayInfo, setDisplayInfo] = useState({ displayName: `${address.slice(0, 6)}...${address.slice(-4)}`, callSign: null, @@ -30,7 +29,7 @@ export function useUserDisplay(address: string): UserDisplayInfo { isLoading: true, error: null, }); - // Subscribe via IdentityContext by relying on its internal listener + // Subscribe to identity service refresh events directly useEffect(() => { let cancelled = false; const prime = async () => { @@ -69,24 +68,27 @@ export function useUserDisplay(address: string): UserDisplayInfo { }; prime(); return () => { cancelled = true; }; - }, [address, client.userIdentityService, getDisplayName]); + }, [address, client, getDisplayName]); - // Reactively reflect IdentityContext cache changes useEffect(() => { if (!address) return; - const id = getIdentity(address); - if (!id) return; - setDisplayInfo(prev => ({ - ...prev, - displayName: getDisplayName(address), - callSign: id.callSign, - ensName: id.ensName, - ordinalDetails: id.ordinalDetails, - verificationLevel: id.verificationStatus, - isLoading: false, - error: null, - })); - }, [address, getIdentity, getDisplayName]); + const off = client.userIdentityService.addRefreshListener(async (changed) => { + if (changed !== address) return; + const identity = await client.userIdentityService.getUserIdentity(address); + if (!identity) return; + setDisplayInfo(prev => ({ + ...prev, + displayName: getDisplayName(address), + callSign: identity.callSign || null, + ensName: identity.ensName || null, + ordinalDetails: identity.ordinalDetails ? identity.ordinalDetails.ordinalDetails : null, + verificationLevel: identity.verificationStatus, + isLoading: false, + error: null, + })); + }); + return () => { try { off && off(); } catch {} }; + }, [address, client, getDisplayName]); return displayInfo; } diff --git a/packages/react/src/hooks/index.ts b/packages/react/src/hooks/index.ts index 7b1e0ba..7eeef7b 100644 --- a/packages/react/src/hooks/index.ts +++ b/packages/react/src/hooks/index.ts @@ -6,6 +6,7 @@ export { useForumApi } from './useForum'; export { useForumData } from './core/useForumData'; export { usePermissions } from './core/usePermissions'; export { useUserDisplay } from './core/useUserDisplay'; +export { useIdentity } from './useIdentity'; // Derived hooks (data slicing utilities) export { useCell } from './derived/useCell'; diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index f24da62..194b620 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -3,6 +3,7 @@ export { ClientProvider, useClient } from './contexts/ClientContext'; export { AuthProvider, useAuth } from './contexts/AuthContext'; export { ForumProvider, useForum as useForumContext } from './contexts/ForumContext'; export { ModerationProvider, useModeration } from './contexts/ModerationContext'; +export { useIdentity } from './hooks/useIdentity'; export * from './hooks'; export { useForumApi as useForum } from './hooks/useForum'; diff --git a/packages/react/src/provider/OpChanProvider.tsx b/packages/react/src/provider/OpChanProvider.tsx index 66432ee..0129631 100644 --- a/packages/react/src/provider/OpChanProvider.tsx +++ b/packages/react/src/provider/OpChanProvider.tsx @@ -5,7 +5,6 @@ import { ClientProvider } from '../contexts/ClientContext'; import { AuthProvider } from '../contexts/AuthContext'; import { ForumProvider } from '../contexts/ForumContext'; import { ModerationProvider } from '../contexts/ModerationContext'; -import { IdentityProvider } from '../contexts/IdentityContext'; export interface OpChanProviderProps { ordiscanApiKey: string; @@ -56,13 +55,11 @@ export const OpChanProvider: React.FC = ({ if (!isReady || !clientRef.current) return null; return ( - - - - {children} - - - + + + {children} + + ); }, [isReady, children]);