@@ -106,31 +106,49 @@ function App() {
106106 const resolveHandles = useCallback (
107107 async ( invitesList : InviteCode [ ] ) => {
108108 const didsToResolve = new Set < string > ( ) ;
109+ const emailsToResolve = new Set < string > ( ) ;
110+
109111 invitesList . forEach ( ( invite ) => {
110112 const usedBy = getUsedBy ( invite ) ;
111- if ( usedBy && usedBy . startsWith ( 'did:' ) && ! handles [ usedBy ] ) {
112- didsToResolve . add ( usedBy ) ;
113+ if ( usedBy && usedBy . startsWith ( 'did:' ) ) {
114+ if ( ! handles [ usedBy ] ) {
115+ didsToResolve . add ( usedBy ) ;
116+ }
117+ if ( ! emails [ usedBy ] ) {
118+ emailsToResolve . add ( usedBy ) ;
119+ }
113120 }
114121 } ) ;
115122
116- for ( const did of didsToResolve ) {
123+ // Resolve emails in batch first
124+ if ( emailsToResolve . size > 0 ) {
117125 try {
118- // Resolve email first if not already present
119- if ( ! emails [ did ] ) {
120- try {
121- const emailResponse = await activeService . getAccountEmail ( did ) ;
122- if ( emailResponse . data ?. email ) {
123- setEmails ( ( prev ) => ( { ...prev , [ did ] : emailResponse . data . email ! } ) ) ;
124- } else {
125- setEmails ( ( prev ) => ( { ...prev , [ did ] : '-' } ) ) ;
126- }
127- } catch ( err ) {
128- console . error ( `Failed to resolve email for DID: ${ did } ` , err ) ;
129- setEmails ( ( prev ) => ( { ...prev , [ did ] : '-' } ) ) ;
130- }
131- }
126+ const emailResponse = await activeService . getAccountEmails ( Array . from ( emailsToResolve ) ) ;
127+ const resolvedEmails = emailResponse . data ?. emails || { } ;
128+
129+ setEmails ( ( prev ) => {
130+ const next = { ...prev } ;
131+ emailsToResolve . forEach ( ( did ) => {
132+ next [ did ] = resolvedEmails [ did ] || '-' ;
133+ } ) ;
134+ return next ;
135+ } ) ;
136+ } catch ( err ) {
137+ console . error ( 'Failed to resolve emails in batch' , err ) ;
138+ // Fallback: mark as unresolved so we don't keep trying
139+ setEmails ( ( prev ) => {
140+ const next = { ...prev } ;
141+ emailsToResolve . forEach ( ( did ) => {
142+ next [ did ] = '-' ;
143+ } ) ;
144+ return next ;
145+ } ) ;
146+ }
147+ }
132148
133- // Then resolve handle
149+ // Then resolve handles individually (PLC directory doesn't seem to have a batch API)
150+ for ( const did of didsToResolve ) {
151+ try {
134152 const response = await activeService . resolveDid ( did ) ;
135153 // PLC directory response has 'alsoKnownAs' array with 'at://handle'
136154 const alsoKnownAs = response . data ?. alsoKnownAs || [ ] ;
0 commit comments