SharePoint Rest ListRecyclebin Items

On 13/12/2025 0

In javascript




async function GetDigestValue(siteUrl) {//
    const fetchOptions = {
        method: 'POST',
        headers: {
            'Accept': 'application/json;odata=verbose',
            'Content-type': 'application/json;odata=verbose'
        }
    };

    const response = await fetch(siteUrl + "/_api/contextinfo", fetchOptions);
    return (await response.json()).d.GetContextWebInformation.FormDigestValue;
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function ExecuteQuery(req, fetchOptions, maxRetry = 3, wait = 1, trynum = 1) {

    console.log("ExecuteQuery", req, fetchOptions, maxRetry, wait, trynum);
    if (trynum >= maxRetry) {
        console.log("ExecuteQuery Error", req);
        console.log("ExecuteQuery Error", fetchOptions);
        throw new Error(`ExecuteQuery error! maxRetry >= trynum`);
    }
    try {
        let startDate = new Date();
        let diffMinutes = 0;
        respList1 = await fetch(req, fetchOptions);
        endDate = new Date();
        const diffMs = endDate - startDate;
        diffMinutes = Math.floor(diffMs / (1000));
        console.log(`seconds ${diffMinutes} queryNumber  ${trynum}`)

        //avoid 429 too much queries
        if (!respList1.ok && respList1.status == 429) {
            const errorDetails = await respList1.text(); // Get error details from the response
            let err = JSON.parse(errorDetails);
            console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
            await sleep(wait * 10);// * trynum
            return await ExecuteQuery(req, fetchOptions, maxRetry, (wait * 5), ++trynum);
        }

        //avoid 503 server unavailable / connections error
        if (!respList1.ok && respList1.status == 503) {
            const errorDetails = await respList1.text(); // Get error details from the response
            let err = JSON.parse(errorDetails);
            console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
            await sleep(wait * 10);// * trynum
            return await ExecuteQuery(req, fetchOptions, maxRetry, (wait * 5), ++trynum);
        }

        //avoid 403 reload page in another tab
        if (!respList1.ok && respList1.status == 403) {
            //debugger;
            window.open(_spPageContextInfo.webAbsoluteUrl, '_blank')
            const errorDetails = await respList1.text(); // Get error details from the response
            let err = JSON.parse(errorDetails);
            console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
            await sleep(wait * 10);// * trynum
            window.open(_spPageContextInfo.webAbsoluteUrl, '_blank')
            return await ExecuteQuery(req, fetchOptions, maxRetry, (wait * 5), ++trynum);
        }

        if (!respList1.ok) {
            console.log("ExecuteQuery Error", respList1);
            const errorDetails = await respList1.text(); // Get error details from the response
            console.log("ExecuteQuery Error", respList1);
            console.error(`HTTP error! Status: ${respList1.status}, Details: ${errorDetails}`);
            let err = JSON.parse(errorDetails);
            console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
            console.log(err.error.message.value);
            throw new Error(`HTTP error! Status: ${respList1.status}`);
        }

        return respList1

    } catch (error) {
        console.log(error);
        throw new Error(`HTTP error! Status: ${error}`);
    }
}
const siteUrl = _spPageContextInfo.webAbsoluteUrl;
const fetchOptions = {
    method: 'GET',
    headers: {
        'Accept': 'application/json;odata=nometadata'
    }
};

//get web
let resp = await ExecuteQuery(`${siteUrl}/_api/web?$select=Title,Id,ServerRelativeUrl`, fetchOptions);

const web = (await resp.json()).d;
console.log(web);

const top1 = 5;
let pagination = 0;
let itemCount = 1;
const separator = ";";
let csv = `Title${separator}LeafName${separator}DirName${separator}DeletedDate${separator}DeletedByName${separator}DeletedByEmail${separator}ItemType${separator}Size\n`;
while (itemCount > 0) {
    //&$filter=ItemState eq 0
    let url = `${siteUrl}/_api/site/RecycleBin?$select=DeletedByEmail,DeletedByName,DeletedDate,DirName,LeafName,Size,ItemId,Title,ItemType&$top=${top1}&$orderby=DeletedDate asc&$skip=${pagination}`;
    resp = await ExecuteQuery(url, fetchOptions);
    console.log(resp);
    const RecycleBinItems = (await resp.json());
    console.log(RecycleBinItems);
    for (let i = 0; i < RecycleBinItems.value.length; i++) {
        const item = RecycleBinItems.value[i];
        //console.log(`Title: ${item.Title}, Deleted By: ${item.DeletedByName}, Deleted Date: ${item.DeletedDate}`);
        csv += `${RecycleBinItems.value[i].Title}${separator}`;
        csv += `${RecycleBinItems.value[i].LeafName}${separator}`;
        csv += `${RecycleBinItems.value[i].DirName}${separator}`;
        csv += `${RecycleBinItems.value[i].DeletedDate}${separator}`;
        csv += `${RecycleBinItems.value[i].DeletedByName}${separator}`;
        csv += `${RecycleBinItems.value[i].DeletedByEmail}${separator}`;
        csv += `${RecycleBinItems.value[i].ItemType}${separator}`;
        csv += `${RecycleBinItems.value[i].Size}`;
        csv += `\n`;
    }
    itemCount = RecycleBinItems.value.length;
    //if (itemCount < top1) break;
    pagination += top1;
}
console.log(csv);

javascript REST Sharepoint

No ratings yet - be the first to rate this.

Add a comment

Anti-spam