(function (webapi, $) { function safeAjax(ajaxOptions) { var deferredAjax = $.Deferred(); shell.getTokenDeferred().done(function (token) { // add headers for AJAX if (!ajaxOptions.headers) { $.extend(ajaxOptions, { headers: { "__RequestVerificationToken": token } }); } else { ajaxOptions.headers["__RequestVerificationToken"] = token; } $.ajax(ajaxOptions) .done(function (data, textStatus, jqXHR) { validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve); }).fail(deferredAjax.reject); //AJAX }).fail(function () { deferredAjax.rejectWith(this, arguments); // on token failure pass the token AJAX and args }); return deferredAjax.promise(); } webapi.safeAjax = safeAjax; })(window.webapi = window.webapi || {}, jQuery) const apiService = (() => { const fetchData = (endpoint, method = 'GET', data = {}) => { return webapi.safeAjax({ type: method, url: `/_api/${endpoint}`, contentType: "application/json", data: method === 'POST' || method === 'PATCH' ? JSON.stringify(data) : data }); }; return { getItems: (tableName) => fetchData(tableName), getItemById: (tableName, itemId) => fetchData(tableName + "(" + itemId + ")"), postItem: (tableName, itemData) => fetchData(tableName, 'POST', itemData), updateItem: (tableName, itemId, itemData) => fetchData(tableName + "(" + itemId + ")", "PATCH", itemData), deleteItem: (tableName, itemId) => fetchData(tableName + "(" + itemId + ")", "DELETE") }; })();