diff --git a/keyserver/src/services/blob.js b/keyserver/src/services/blob.js --- a/keyserver/src/services/blob.js +++ b/keyserver/src/services/blob.js @@ -1,10 +1,9 @@ // @flow -import blobService from 'lib/facts/blob-service.js'; import type { BlobHashAndHolder } from 'lib/types/holder-types.js'; import { - makeBlobServiceEndpointURL, downloadBlob, + removeBlobHolder, assignBlobHolder, } from 'lib/utils/blob-service.js'; import { @@ -107,19 +106,9 @@ } async function deleteBlob(params: BlobDescriptor, instant?: boolean) { - const { hash, holder } = params; - const endpoint = blobService.httpEndpoints.DELETE_BLOB; - const url = makeBlobServiceEndpointURL(endpoint); + const { hash: blobHash, holder } = params; const headers = await createRequestHeaders(); - await fetch(url, { - method: endpoint.method, - body: JSON.stringify({ - holder, - blob_hash: hash, - instant_delete: !!instant, - }), - headers, - }); + await removeBlobHolder({ blobHash, holder }, headers, instant); } async function removeBlobHolders(holders: $ReadOnlyArray) { diff --git a/lib/utils/blob-service.js b/lib/utils/blob-service.js --- a/lib/utils/blob-service.js +++ b/lib/utils/blob-service.js @@ -171,6 +171,34 @@ return { success: true, response }; } +async function removeBlobHolder( + blobInfo: BlobInfo, + headers: { [string]: string }, + instantDelete?: boolean, +): Promise { + const { blobHash, holder } = blobInfo; + const endpoint = blobServiceConfig.httpEndpoints.DELETE_BLOB; + const response = await fetch(makeBlobServiceEndpointURL(endpoint), { + method: endpoint.method, + body: JSON.stringify({ + holder, + blob_hash: blobHash, + instant_delete: !!instantDelete, + }), + headers: { + ...headers, + 'content-type': 'application/json', + }, + }); + + if (!response.ok) { + const { status, statusText } = response; + return { success: false, reason: 'OTHER', status, statusText }; + } + + return { success: true, response }; +} + async function assignMultipleHolders( holders: $ReadOnlyArray, headers: { [string]: string }, @@ -273,6 +301,7 @@ downloadBlob, uploadBlob, assignBlobHolder, + removeBlobHolder, assignMultipleHolders, removeMultipleHolders, }; diff --git a/web/input/input-state-container.react.js b/web/input/input-state-container.react.js --- a/web/input/input-state-container.react.js +++ b/web/input/input-state-container.react.js @@ -28,7 +28,6 @@ type PushModal, useModalContext, } from 'lib/components/modal-provider.react.js'; -import blobService from 'lib/facts/blob-service.js'; import { type SendMultimediaMessagePayload, useInputStateContainerSendMultimediaMessage, @@ -85,7 +84,7 @@ import { blobHashFromBlobServiceURI, isBlobServiceURI, - makeBlobServiceEndpointURL, + removeBlobHolder, } from 'lib/utils/blob-service.js'; import { getConfig } from 'lib/utils/config.js'; import { getMessageForException, SendMessageError } from 'lib/utils/errors.js'; @@ -1210,24 +1209,13 @@ pendingUpload.blobHolder, 'blob service upload has no holder', ); - const endpoint = blobService.httpEndpoints.DELETE_BLOB; const holder = pendingUpload.blobHolder; const blobHash = blobHashFromBlobServiceURI(pendingUpload.uri); void (async () => { const authMetadata = await identityContext.getAuthMetadata(); const defaultHeaders = createDefaultHTTPRequestHeaders(authMetadata); - await fetch(makeBlobServiceEndpointURL(endpoint), { - method: endpoint.method, - body: JSON.stringify({ - holder, - blob_hash: blobHash, - }), - headers: { - ...defaultHeaders, - 'content-type': 'application/json', - }, - }); + await removeBlobHolder({ blobHash, holder }, defaultHeaders); })(); } }