@ -134,7 +134,7 @@ async function processExpireRequestResponse(
async function expireOnNodes (
async function expireOnNodes (
targetNode : Snode ,
targetNode : Snode ,
expireRequest : UpdateExpiryOnNodeSubRequest
expireRequest : UpdateExpiryOnNodeSubRequest
) : Promise < number | null > {
) : Promise < number > {
try {
try {
const result = await doSnodeBatchRequest (
const result = await doSnodeBatchRequest (
[ expireRequest ] ,
[ expireRequest ] ,
@ -145,12 +145,11 @@ async function expireOnNodes(
) ;
) ;
if ( ! result || result . length !== 1 ) {
if ( ! result || result . length !== 1 ) {
window ? . log ? . warn (
throw Error (
` WIP: [expireOnNodes] There was an issue with the results. sessionRpc ${ targetNode . ip } : ${
` There was an issue with the results. sessionRpc ${ targetNode . ip } : ${
targetNode . port
targetNode . port
} expireRequest $ { JSON . stringify ( expireRequest ) } `
} expireRequest $ { JSON . stringify ( expireRequest ) } `
) ;
) ;
return null ;
}
}
// TODOLATER make sure that this code still works once disappearing messages is merged
// TODOLATER make sure that this code still works once disappearing messages is merged
@ -158,11 +157,9 @@ async function expireOnNodes(
const firstResult = result [ 0 ] ;
const firstResult = result [ 0 ] ;
if ( firstResult . code !== 200 ) {
if ( firstResult . code !== 200 ) {
window ? . log ? . warn ( ` WIP: [expireOnNodes] result is not 200 but ${ firstResult . code } ` ) ;
throw Error ( ` result is not 200 but ${ firstResult . code } ` ) ;
return null ;
}
}
try {
const bodyFirstResult = firstResult . body ;
const bodyFirstResult = firstResult . body ;
const expirationResults = await processExpireRequestResponse (
const expirationResults = await processExpireRequestResponse (
expireRequest . params . pubkey ,
expireRequest . params . pubkey ,
@ -172,9 +169,6 @@ async function expireOnNodes(
) ;
) ;
const firstExpirationResult = Object . entries ( expirationResults ) . at ( 0 ) ;
const firstExpirationResult = Object . entries ( expirationResults ) . at ( 0 ) ;
if ( ! firstExpirationResult ) {
if ( ! firstExpirationResult ) {
window ? . log ? . warn (
'WIP: [expireOnNodes] failed to parse "swarm" result. firstExpirationResult is null'
) ;
throw new Error ( 'firstExpirationResult is null' ) ;
throw new Error ( 'firstExpirationResult is null' ) ;
}
}
@ -196,17 +190,18 @@ async function expireOnNodes(
// );
// );
return expiry ;
return expiry ;
} catch ( e ) {
} catch ( err ) {
window ? . log ? . warn ( 'WIP: [expireOnNodes] Failed to parse "swarm" result: ' , e ) ;
}
return null ;
} catch ( e ) {
window ? . log ? . warn (
window ? . log ? . warn (
'WIP: [expireOnNodes] - send error: ',
'WIP: [expireOnNodes]' ,
e ,
err . message || err ,
` destination ${ targetNode . ip } : ${ targetNode . port } `
` destination ${ targetNode . ip } : ${ targetNode . port } `
) ;
) ;
throw e ;
// NOTE batch requests have their own retry logic which includes abort errors that will break our retry logic so we need to catch them and throw regular errors
if ( err instanceof pRetry . AbortError ) {
throw Error ( err . message ) ;
}
throw err ;
}
}
}
}
@ -299,38 +294,19 @@ export async function expireMessageOnSnode(
let snode : Snode | undefined ;
let snode : Snode | undefined ;
await pRetry (
async ( ) = > {
const swarm = await getSwarmFor ( ourPubKey ) ;
snode = sample ( swarm ) ;
if ( ! snode ) {
throw new EmptySwarmError ( ourPubKey , 'Ran out of swarm nodes to query' ) ;
}
} ,
{
retries : 3 ,
factor : 2 ,
minTimeout : SeedNodeAPI.getMinTimeout ( ) ,
onFailedAttempt : e = > {
window ? . log ? . warn (
` WIP: [expireMessageOnSnode] get snode attempt # ${ e . attemptNumber } failed. ${ e . retriesLeft } retries left... Error: ${ e . message } `
) ;
} ,
}
) ;
try {
try {
const expireRequestParams = await buildExpireRequest ( props ) ;
const expireRequestParams = await buildExpireRequest ( props ) ;
if ( ! expireRequestParams ) {
if ( ! expireRequestParams ) {
throw new Error ( ` Failed to build expire request ${ JSON . stringify ( props ) } ` ) ;
throw new Error ( ` Failed to build expire request ${ JSON . stringify ( props ) } ` ) ;
}
}
let newTTL = null ;
let newTTL = null ;
await pRetry (
await pRetry (
async ( ) = > {
async ( ) = > {
const swarm = await getSwarmFor ( ourPubKey ) ;
snode = sample ( swarm ) ;
if ( ! snode ) {
if ( ! snode ) {
throw new Error ( ` No snode found. \ n ${ JSON . stringify ( props ) } ` ) ;
throw new EmptySwarmError ( ourPubKey , 'Ran out of swarm nodes to query' ) ;
}
}
newTTL = await expireOnNodes ( snode , expireRequestParams ) ;
newTTL = await expireOnNodes ( snode , expireRequestParams ) ;
} ,
} ,
@ -350,9 +326,8 @@ export async function expireMessageOnSnode(
} catch ( e ) {
} catch ( e ) {
const snodeStr = snode ? ` ${ snode . ip } : ${ snode . port } ` : 'null' ;
const snodeStr = snode ? ` ${ snode . ip } : ${ snode . port } ` : 'null' ;
window ? . log ? . warn (
window ? . log ? . warn (
` WIP: [expireMessageOnSnode] ${ e . code ? ` ${ e . code } ` : '' } ${
` WIP: [expireMessageOnSnode] ${ e . code ? ` ${ e . code } ` : '' } ${ e . message ||
e . message
e } by $ { ourPubKey } for $ { messageHash } via snode :$ { snodeStr } `
} by $ { ourPubKey } for $ { messageHash } via snode :$ { snodeStr } `
) ;
) ;
throw e ;
throw e ;
}
}