diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index 14b9d4b..677a02f 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -239,7 +239,7 @@ const UIQortalRequests = [ 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', - 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'DECRYPT_QORTAL_GROUP_DATA' + 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'DECRYPT_QORTAL_GROUP_DATA', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index be53e9e..caee587 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,5 +1,5 @@ import { gateways, getApiKeyFromStorage } from "./background"; -import { addForeignServer, addListItems, adminAction, cancelSellOrder, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, joinGroup, publishMultipleQDNResources, publishQDNResource, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addListItems, adminAction, cancelSellOrder, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, joinGroup, publishMultipleQDNResources, publishQDNResource, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, voteOnPoll } from "./qortalRequests/get"; @@ -554,6 +554,34 @@ chrome?.runtime?.onMessage.addListener((request, sender, sendResponse) => { break; } + + case "DELETE_HOSTED_DATA": { + const data = request.payload; + + deleteHostedData(data, isFromExtension) + .then((res) => { + sendResponse(res); + }) + .catch((error) => { + sendResponse({ error: error.message }); + }); + + break; + } + + case "GET_HOSTED_DATA": { + const data = request.payload; + + getHostedData(data, isFromExtension) + .then((res) => { + sendResponse(res); + }) + .catch((error) => { + sendResponse({ error: error.message }); + }); + + break; + } } } return true; diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index b361ee2..c6500cd 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -3448,4 +3448,77 @@ url } else { throw new Error("Unable to encrypt"); } +}; + +export const getHostedData = async (data, isFromExtension) => { + + const resPermission = await getUserPermission( + { + text1: "Do you give this application permission to", + text2: `Get a list of your hosted data?`, + }, + isFromExtension + ); + const { accepted } = resPermission; + + if(accepted){ + const limit = data?.limit ? data?.limit : 20; + const query = data?.query ? data?.query : undefined + const offset = data?.offset ? data?.offset : 0 + + try { + + const url = await createEndpoint(`/arbitrary/hosted/resources/?limit=${limit}&query=${query}&offset=${offset}`); + const response = await fetch(url); + const data = await response.json(); + return data + } catch (error) { + throw error + } + + } else { + throw new Error("User declined to get list of hosted resources"); + } + +}; + +export const deleteHostedData = async (data, isFromExtension) => { + const requiredFields = ["hostedData"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const resPermission = await getUserPermission( + { + text1: "Do you give this application permission to", + text2: `Delete ${data?.hostedData?.length} hosted resources?`, + }, + isFromExtension + ); + const { accepted } = resPermission; + + if(accepted){ + const { hostedData } = data; + + for (const hostedDataItem of hostedData){ + try { + const url = await createEndpoint(`/arbitrary/resource/${hostedDataItem.service}/${hostedDataItem.name}/${hostedDataItem.identifer}`); + await fetch(url, { + method: "DELETE", + headers: { + "Content-Type": "application/json", + } + }); + } catch (error) { + //error + } + } + + return true + } else { + throw new Error("User declined delete hosted resources"); + } + }; \ No newline at end of file