diff --git a/preload.js b/preload.js index 5381b0526..d9072725b 100644 --- a/preload.js +++ b/preload.js @@ -29,6 +29,11 @@ window.sessionFeatureFlags = { useTestNet: Boolean( process.env.NODE_APP_INSTANCE && process.env.NODE_APP_INSTANCE.includes('testnet') ), + debug: { + debugFileServerRequests: false, + debugNonSnodeRequests: false, + debugOnionRequests: false, + }, }; window.versionInfo = { diff --git a/ts/interactions/conversations/unsendingInteractions.ts b/ts/interactions/conversations/unsendingInteractions.ts index 64a1c4c8f..777997400 100644 --- a/ts/interactions/conversations/unsendingInteractions.ts +++ b/ts/interactions/conversations/unsendingInteractions.ts @@ -245,8 +245,9 @@ const doDeleteSelectedMessagesInSOGS = async ( //#region open group v2 deletion // Get our Moderator status const isAdmin = conversation.isAdmin(ourDevicePubkey); + const isModerator = conversation.isModerator(ourDevicePubkey); - if (!isAllOurs && !isAdmin) { + if (!isAllOurs && !(isAdmin || isModerator)) { ToastUtils.pushMessageDeleteForbidden(); window.inboxStore?.dispatch(resetSelectedMessageIds()); return; diff --git a/ts/session/apis/file_server_api/FileServerApi.ts b/ts/session/apis/file_server_api/FileServerApi.ts index 5d12ad4e3..5d8b0cefa 100644 --- a/ts/session/apis/file_server_api/FileServerApi.ts +++ b/ts/session/apis/file_server_api/FileServerApi.ts @@ -73,12 +73,18 @@ export const downloadFileFromFileServer = async ( return null; } + const urlToGet = `${POST_GET_FILE_ENDPOINT}/${fileId}`; + if (window.sessionFeatureFlags?.debug.debugFileServerRequests) { + window.log.info(`about to try to download fsv2: "${urlToGet}"`); + } const result = await OnionSending.getBinaryViaOnionV4FromFileServer({ abortSignal: new AbortController().signal, - endpoint: `${POST_GET_FILE_ENDPOINT}/${fileId}`, + endpoint: urlToGet, method: 'GET', }); - + if (window.sessionFeatureFlags?.debug.debugFileServerRequests) { + window.log.info(`download fsv2: "${urlToGet} got result:`, JSON.stringify(result)); + } if (!result) { return null; } diff --git a/ts/session/apis/snode_api/onions.ts b/ts/session/apis/snode_api/onions.ts index bdd2d29c2..5180debe7 100644 --- a/ts/session/apis/snode_api/onions.ts +++ b/ts/session/apis/snode_api/onions.ts @@ -782,6 +782,16 @@ async function sendOnionRequestHandlingSnodeEject({ abortSignal, useV4, }); + + if (window.sessionFeatureFlags?.debug.debugOnionRequests) { + window.log.info( + `sendOnionRequestHandlingSnodeEject: sendOnionRequestNoRetries: useV4:${useV4} destSnodeX25519:${destSnodeX25519}; \nfinalDestOptions:${JSON.stringify( + finalDestOptions + )}; \nfinalRelayOptions:${JSON.stringify(finalRelayOptions)}\n\n result: ${JSON.stringify( + result + )}` + ); + } response = result.response; if ( !isEmpty(finalRelayOptions) && diff --git a/ts/session/onions/onionSend.ts b/ts/session/onions/onionSend.ts index 88925dc93..7b710bb22 100644 --- a/ts/session/onions/onionSend.ts +++ b/ts/session/onions/onionSend.ts @@ -102,6 +102,13 @@ const sendViaOnionV4ToNonSnodeWithRetries = async ( } const payloadObj = buildSendViaOnionPayload(url, fetchOptions); + + if (window.sessionFeatureFlags?.debug.debugNonSnodeRequests) { + window.log.info( + 'sendViaOnionV4ToNonSnodeWithRetries: buildSendViaOnionPayload returned ', + JSON.stringify(payloadObj) + ); + } // if protocol is forced to 'http:' => just use http (without the ':'). // otherwise use https as protocol (this is the default) const forcedHttp = url.protocol === PROTOCOLS.HTTP; @@ -121,7 +128,12 @@ const sendViaOnionV4ToNonSnodeWithRetries = async ( result = await pRetry( async () => { const pathNodes = await OnionSending.getOnionPathForSending(); - + if (window.sessionFeatureFlags?.debug.debugNonSnodeRequests) { + window.log.info( + 'sendViaOnionV4ToNonSnodeWithRetries: getOnionPathForSending returned', + JSON.stringify(pathNodes) + ); + } if (!pathNodes) { throw new Error('getOnionPathForSending is emtpy'); } @@ -140,6 +152,12 @@ const sendViaOnionV4ToNonSnodeWithRetries = async ( useV4: true, throwErrors, }); + if (window.sessionFeatureFlags?.debug.debugNonSnodeRequests) { + window.log.info( + 'sendViaOnionV4ToNonSnodeWithRetries: sendOnionRequestHandlingSnodeEject returned: ', + JSON.stringify(onionV4Response) + ); + } if (abortSignal?.aborted) { // if the request was aborted, we just want to stop retries. @@ -175,6 +193,12 @@ const sendViaOnionV4ToNonSnodeWithRetries = async ( bodyBinary: decodedV4?.bodyBinary || null, }; } + if (foundStatusCode === 404) { + // this is most likely that a 404 won't fix itself. So just stop right here retries by throwing a non retryable error + throw new pRetry.AbortError( + `Got 404 while sendViaOnionV4ToNonSnodeWithRetries with url:${url}. Stopping retries` + ); + } // we consider those cases as an error, and trigger a retry (if possible), by throwing a non-abortable error throw new Error( `sendViaOnionV4ToNonSnodeWithRetries failed with status code: ${foundStatusCode}. Retrying...` @@ -419,6 +443,9 @@ async function getBinaryViaOnionV4FromFileServer(sendOptions: { } const builtUrl = new URL(`${fileServerURL}${endpoint}`); + if (window.sessionFeatureFlags?.debug.debugFileServerRequests) { + window.log.info(`getBinaryViaOnionV4FromFileServer fsv2: "${builtUrl} `); + } const res = await OnionSending.sendViaOnionV4ToNonSnodeWithRetries( fileServerPubKey, builtUrl, @@ -432,6 +459,12 @@ async function getBinaryViaOnionV4FromFileServer(sendOptions: { abortSignal ); + if (window.sessionFeatureFlags?.debug.debugFileServerRequests) { + window.log.info( + `getBinaryViaOnionV4FromFileServer fsv2: "${builtUrl}; got:`, + JSON.stringify(res) + ); + } return res as OnionV4BinarySnodeResponse; } diff --git a/ts/window.d.ts b/ts/window.d.ts index 71d0ce995..c07742648 100644 --- a/ts/window.d.ts +++ b/ts/window.d.ts @@ -38,6 +38,11 @@ declare global { sessionFeatureFlags: { useOnionRequests: boolean; useTestNet: boolean; + debug: { + debugFileServerRequests: boolean; + debugNonSnodeRequests: boolean; + debugOnionRequests: boolean; + }; }; SessionSnodeAPI: SessionSnodeAPI; onLogin: any;