UNPKG

@kwiz/common

Version:

KWIZ common utilities and helpers for M365 platform

487 lines 26.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GetItemEffectiveBasePermissions = exports.RemoveListItemPermission = exports.AssignListItemPermission = exports.BreakListItemPermissionInheritance = exports.RestoreListItemPermissionInheritance = exports.ListItemHasUniquePermissions = exports.SetItemCreatedModifiedInfo = exports.GetSPFieldValueAsText = exports.GetSPRestItemValueAsTextArray = exports.GetSPRestItemValueAsText = exports.UpdateItem = exports.AddItem = exports.UpdateMultiTaxonomyValue = exports.DeleteAttachment = exports.AddAttachment = exports.GetListItemsAttachments = exports.GetListItemAttachments = exports.RecycleListItem = exports.DeleteListItem = exports.GetListItemFieldValuesHistory = exports.GetListItemFieldValues = exports.GetListItemFieldValue = exports.GetListItemFieldDisplayValues = exports.GetListItemFieldDisplayValue = exports.GetListItemFieldDisplayValuesSync = exports.GetListItemFieldDisplayValueSync = exports.FileSizeColumnInternalNames = void 0; const collections_base_1 = require("../../helpers/collections.base"); const objects_1 = require("../../helpers/objects"); const promises_1 = require("../../helpers/promises"); const typecheckers_1 = require("../../helpers/typecheckers"); const url_1 = require("../../helpers/url"); const rest_types_1 = require("../../types/rest.types"); const sharepoint_types_1 = require("../../types/sharepoint.types"); const knownscript_1 = require("../../utils/knownscript"); const consolelogger_1 = require("../consolelogger"); const rest_1 = require("../rest"); const common_1 = require("./common"); const list_1 = require("./list"); const user_1 = require("./user"); const logger = consolelogger_1.ConsoleLogger.get("SharePoint.Rest.Item"); /** can only select FileSizeDisplay in REST api */ exports.FileSizeColumnInternalNames = ["FileSizeDisplay", "File_x0020_Size"]; function _getListItemSelectExpandFields(fields, listFields) { var $selectFields = []; var $expandFields = []; fields.forEach((fieldName) => { if (exports.FileSizeColumnInternalNames.includes(fieldName)) { $selectFields.push(exports.FileSizeColumnInternalNames[0]); //for some reason, can't select File_x0020_Size } else { let field = listFields.filter((listField) => { return listField.InternalName === fieldName; })[0]; if (!(0, typecheckers_1.isNullOrUndefined)(field)) { if (field.TypeAsString === "User" || field.TypeAsString === "UserMulti") { $selectFields.push(`${field.InternalName}/ID`); $selectFields.push(`${field.InternalName}/Name`); $selectFields.push(`${field.InternalName}/UserName`); $selectFields.push(`${field.InternalName}/EMail`); $selectFields.push(`${field.InternalName}/Title`); $expandFields.push(field.InternalName); } else { $selectFields.push(field.InternalName); } } } }); return { expandFields: $expandFields, selectFields: $selectFields }; } function _parseValueFromRawValue(rawValue, asDisplayValue = false) { if (!(0, typecheckers_1.isNullOrUndefined)(rawValue)) { if (rawValue["ID"] && rawValue["Title"] && rawValue["Name"]) { //expanded user field from rest request return !asDisplayValue ? rawValue["ID"] : rawValue["Title"]; } else if (Array.isArray(rawValue)) { return rawValue.map((value) => { if (value["ID"] && value["Title"] && value["Name"]) { //expanded user field from rest request return !asDisplayValue ? value["ID"] : value["Title"]; } return value; }).filter((value) => { return value !== null; }); } else { return rawValue; } } } async function _getListItemRawFieldValues(siteUrl, listIdOrTitle, itemId, fields, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); options = options || {}; let listFields = await (0, list_1.GetListFields)(siteUrl, listIdOrTitle); var { selectFields, expandFields } = _getListItemSelectExpandFields(fields, listFields); var $select = `$select=` + encodeURIComponent(selectFields.length ? `${selectFields.join(',')}` : fields.join(',')); var $expand = expandFields.length ? `$expand=${encodeURIComponent(expandFields.join(','))}` : ""; let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})?${$select}&${$expand}`; let result = await (0, rest_1.GetJson)(url, null, { allowCache: options.refreshCache !== true }); var values = {}; if (result && typeof (result.d) !== "undefined") { var rawValues = result.d; fields.forEach((fieldName) => { let rawValue = (exports.FileSizeColumnInternalNames.includes(fieldName)) ? rawValues[exports.FileSizeColumnInternalNames[0]] : rawValues[fieldName]; if (!(0, typecheckers_1.isNullOrUndefined)(rawValue)) { values[fieldName] = rawValue; } }); } return values; } function GetListItemFieldDisplayValueSync(siteUrl, listIdOrTitle, itemId, field) { return GetListItemFieldDisplayValuesSync(siteUrl, listIdOrTitle, itemId, [field])[field]; } exports.GetListItemFieldDisplayValueSync = GetListItemFieldDisplayValueSync; function GetListItemFieldDisplayValuesSync(siteUrl, listIdOrTitle, itemId, fields) { let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/FieldValuesAsText?$select=${fields.join(',')}`; let result = (0, rest_1.GetJsonSync)(url, null, { allowCache: true, jsonMetadata: rest_types_1.jsonTypes.nometadata }); return result.success ? result.result : {}; } exports.GetListItemFieldDisplayValuesSync = GetListItemFieldDisplayValuesSync; async function GetListItemFieldDisplayValue(siteUrl, listIdOrTitle, itemId, field, options) { var values = await GetListItemFieldDisplayValues(siteUrl, listIdOrTitle, itemId, [field], options); return values && values[field]; } exports.GetListItemFieldDisplayValue = GetListItemFieldDisplayValue; async function GetListItemFieldDisplayValues(siteUrl, listIdOrTitle, itemId, fields, options) { var rawValues = await _getListItemRawFieldValues(siteUrl, listIdOrTitle, itemId, fields, options); var values = {}; Object.keys(rawValues).forEach(key => { var fieldValue = _parseValueFromRawValue(rawValues[key], true); if (!(0, typecheckers_1.isNullOrUndefined)(fieldValue)) { values[key] = fieldValue; } }); return values; } exports.GetListItemFieldDisplayValues = GetListItemFieldDisplayValues; async function GetListItemFieldValue(siteUrl, listIdOrTitle, itemId, field, options) { var values = await GetListItemFieldValues(siteUrl, listIdOrTitle, itemId, [field], options); return values && values[field]; } exports.GetListItemFieldValue = GetListItemFieldValue; async function GetListItemFieldValues(siteUrl, listIdOrTitle, itemId, fields, options) { var rawValues = await _getListItemRawFieldValues(siteUrl, listIdOrTitle, itemId, fields, options); var values = {}; Object.keys(rawValues).forEach(key => { var fieldValue = _parseValueFromRawValue(rawValues[key]); if (!(0, typecheckers_1.isNullOrUndefined)(fieldValue)) { values[key] = fieldValue; } }); return values; } exports.GetListItemFieldValues = GetListItemFieldValues; /** Returns version array, newest version first. Can get moderator comments, cannot get file check in comments */ async function GetListItemFieldValuesHistory(siteUrl, listIdOrTitle, itemId, fields, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); options = options || {}; var $select = (0, typecheckers_1.isNotEmptyArray)(fields) ? `$select=` + encodeURIComponent(`${fields.join(',')}`) : ""; let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/versions?${$select}`; let result = await (0, rest_1.GetJson)(url, null, { allowCache: options.refreshCache !== true, jsonMetadata: rest_types_1.jsonTypes.nometadata }); return result && result.value || []; } exports.GetListItemFieldValuesHistory = GetListItemFieldValuesHistory; async function DeleteListItem(siteUrl, listIdOrTitle, itemId) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})`; let result = { deleted: true }; try { await (0, rest_1.GetJson)(url, null, { method: "POST", spWebUrl: siteUrl, xHttpMethod: "DELETE" }); //empty string means deleted } catch (e) { result.deleted = false; result.errorMessage = (0, common_1.__getSPRestErrorData)(e).message; } return result; } exports.DeleteListItem = DeleteListItem; async function RecycleListItem(siteUrl, listIdOrTitle, itemId) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/recycle()`; let result = { recycled: true }; try { await (0, rest_1.GetJson)(url, null, { method: "POST", spWebUrl: siteUrl }); //value.d.Recycle will hold guide reference id } catch (e) { result.recycled = false; result.errorMessage = (0, common_1.__getSPRestErrorData)(e).message; } return result; } exports.RecycleListItem = RecycleListItem; async function GetListItemAttachments(siteUrl, listIdOrTitle, itemId) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/AttachmentFiles`; try { let result = await (0, rest_1.GetJson)(url, null, { includeDigestInGet: true }); let attachmentFiles = result.d && result.d.results ? result.d.results : []; return attachmentFiles; } catch (e) { } return []; } exports.GetListItemAttachments = GetListItemAttachments; async function GetListItemsAttachments(siteUrl, listIdOrTitle, itemIds) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let chunks = (0, collections_base_1.chunkArray)(itemIds, 30); let select = `$select=ID,AttachmentFiles`; let expand = `$expand=AttachmentFiles`; let baseUrl = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items`; let promises = chunks.map((chunk) => { return () => { let filter = `$filter=${chunk.map(i => `ID eq ${i}`).join(" or ")}`; let url = `${baseUrl}?${select}&${filter}&${expand}`; return (0, rest_1.GetJson)(url, null, { includeDigestInGet: true, jsonMetadata: rest_types_1.jsonTypes.nometadata }); }; }); try { let result = await (0, promises_1.promiseNParallel)(promises, 5); return result && result.length > 0 ? result.map(v => v.value) : []; } catch { } return []; } exports.GetListItemsAttachments = GetListItemsAttachments; async function AddAttachment(siteUrl, listIdOrTitle, itemId, filename, buffer) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); //Issue 999 let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/AttachmentFiles/add(FileName='${(0, url_1.encodeURIComponentEX)(filename, { singleQuoteMultiplier: 2 })}')`; try { let result = await (0, rest_1.GetJson)(url, buffer, { includeDigestInPost: true, method: "POST" }); let attachmentFile = result && result.d; return attachmentFile; } catch (e) { } return null; } exports.AddAttachment = AddAttachment; async function DeleteAttachment(siteUrl, listIdOrTitle, itemId, filename) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/AttachmentFiles('${(0, url_1.encodeURIComponentEX)(filename, { singleQuoteMultiplier: 2 })}')`; try { let result = await (0, rest_1.GetJson)(url, null, { includeDigestInGet: true, includeDigestInPost: true, xHttpMethod: "DELETE" }); let attachmentFile = result && result.d; return attachmentFile; } catch (e) { } return null; } exports.DeleteAttachment = DeleteAttachment; //** Update value of taxonomy multi-value field. See issue 7585 for more info */ async function UpdateMultiTaxonomyValue(siteUrl, listIdOrTitle, itemId, updates) { let fields = updates && Object.keys(updates) || []; if ((0, typecheckers_1.isNullOrEmptyArray)(fields)) return []; siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/ValidateUpdateListItem()`; try { let result = await (0, rest_1.GetJson)(url, JSON.stringify({ bNewDocumentUpdate: false, checkInComment: null, formValues: fields.map(field => ({ ErrorMessage: null, FieldName: field, FieldValue: updates[field].map(v => `${v.Label}|${v.TermGuid};`).join(''), HasException: false })) }), { includeDigestInPost: true, method: "POST" }); return result && result.d && result.d.ValidateUpdateListItem.results.map(v => ({ field: v.FieldName, error: v.ErrorMEssage })) || []; } catch (e) { logger.error(`Error updating UpdateMultiTaxonomyValue ${e}`); } return fields.map(f => ({ field: f, error: 'Unspecified update error' })); } exports.UpdateMultiTaxonomyValue = UpdateMultiTaxonomyValue; async function AddItem(siteUrl, listIdOrTitle, fieldValues) { //we must force creating even if no values, otherwise the item won't be created at all. return UpdateItem(siteUrl, listIdOrTitle, null, fieldValues, { updateIfNoFields: true }); } exports.AddItem = AddItem; async function UpdateItem(siteUrl, listIdOrTitle, itemId, fieldValues, options) { var success = false; var error = null; try { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let isNewItem = itemId > 0 ? false : true; let listInfo = await (0, list_1.GetList)(siteUrl, listIdOrTitle); let fields = await (0, list_1.GetListFieldsAsHash)(siteUrl, listIdOrTitle); let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items${isNewItem ? '' : `(${itemId})`}`; var itemUpdateInfo = { '__metadata': { 'type': `SP.Data.${listInfo.EntityTypeName}Item` } }; let hasUpdates = false; Object.keys(fieldValues).forEach(updateField => { let listField = fields[updateField]; if (listField) //make sure this field exists on the list { //todo: we might want to get the value first, make sure it is formatted correctly for the field type. itemUpdateInfo[(0, common_1.getFieldNameForUpdate)(listField)] = fieldValues[updateField]; hasUpdates = true; } }); if (!hasUpdates) { let forceUpdate = options && options.updateIfNoFields; if (!forceUpdate) return { success: true, itemId: itemId }; } var xHttpMethod = isNewItem ? null : "MERGE"; try { let result = await (0, rest_1.GetJson)(url, JSON.stringify(itemUpdateInfo), { method: "POST", xHttpMethod: xHttpMethod }); if (result) if (isNewItem) itemId = result.d.Id; // update item will not return data. only new item will. success = true; } catch (e) { error = (0, common_1.__getSPRestErrorData)(e).message; } } catch (e) { logger.group(() => logger.error(e), 'Update item failed'); } return { success: success, errorMessage: error, itemId: itemId }; } exports.UpdateItem = UpdateItem; /** Get a sharepoint field value as text, from a rest item */ function GetSPRestItemValueAsText(item, field) { var otherName = field.InternalName.replace(/_/g, "_x005f_"); //sometimes _ gets replaced with _x005f_ if (!(0, typecheckers_1.isNullOrUndefined)(item.FieldValuesAsText)) { if ((0, objects_1.hasOwnProperty)(item.FieldValuesAsText, field.InternalName)) return item.FieldValuesAsText[field.InternalName]; if ((0, objects_1.hasOwnProperty)(item.FieldValuesAsText, otherName)) return item.FieldValuesAsText[otherName]; } return GetSPFieldValueAsText(item[(0, common_1.GetFieldNameFromRawValues)(field)], field).join(', '); } exports.GetSPRestItemValueAsText = GetSPRestItemValueAsText; /** Get a sharepoint field value as text array, from a rest item */ function GetSPRestItemValueAsTextArray(item, field) { //get value as text first let valueAsText = null; var otherName = field.InternalName.replace(/_/g, "_x005f_"); //sometimes _ gets replaced with _x005f_ if (!(0, typecheckers_1.isNullOrUndefined)(item.FieldValuesAsText)) { if ((0, objects_1.hasOwnProperty)(item.FieldValuesAsText, field.InternalName)) valueAsText = item.FieldValuesAsText[field.InternalName]; if ((0, objects_1.hasOwnProperty)(item.FieldValuesAsText, otherName)) valueAsText = item.FieldValuesAsText[otherName]; } if (!(0, typecheckers_1.isNullOrEmptyString)(valueAsText) && valueAsText.indexOf(',') < 0) //not empty, and we do not suspect a multi-value field return [valueAsText]; return GetSPFieldValueAsText(item[(0, common_1.GetFieldNameFromRawValues)(field)], field); } exports.GetSPRestItemValueAsTextArray = GetSPRestItemValueAsTextArray; /** prefer to use GetSPRestValueAsText instead */ function GetSPFieldValueAsText(value, field) { let locales = knownscript_1.LocaleKnownScript.loadSync(); let culture = locales.GetCurrentCulture(); let rawValues = (0, typecheckers_1.isNullOrEmptyString)(value) ? [] : Array.isArray(value) ? value //value.raw is an array : [value]; //value.raw is not an array - wrap it. let isLookup = field.TypeAsString === "Lookup" || field.TypeAsString === "LookupMulti"; let isUser = field.TypeAsString === "User" || field.TypeAsString === "UserMulti"; let isCounter = field.TypeAsString === "Counter" || field.TypeAsString === "Integer"; let isTaxonomy = field.TypeAsString === "TaxonomyFieldType" || field.TypeAsString === "TaxonomyFieldTypeMulti"; if (field.TypeAsString === "DateTime") { //Issue 8190 - date field might come as string rawValues = rawValues.map(v => (0, typecheckers_1.isDate)(v) ? v : new Date(v)); } else if (isUser || isLookup) { rawValues = rawValues.map(v => (0, typecheckers_1.isNumber)(v) ? v : !(0, typecheckers_1.isNullOrEmptyString)(v && v.Title) ? v.Title : (0, typecheckers_1.isNumber)(v && v.Id) ? v.Id : null); } let textResults = []; if ((0, typecheckers_1.isNotEmptyArray)(rawValues)) { rawValues.forEach(raw => { if ((0, typecheckers_1.isNullOrEmptyString)(raw)) { /** skip */ } else if ((0, typecheckers_1.isNumber)(raw)) if (isUser) { //todo - try not sync... try { let userInfo = (0, user_1.GetUserSync)(_spPageContextInfo.siteServerRelativeUrl, raw); textResults.push(userInfo.Title); } catch (e) { textResults.push(`${raw}`); } } else if (isLookup) { //todo - not supported try { textResults.push(`Lookup #${raw}`); } catch (e) { textResults.push(`${raw}`); } } else if (isCounter) { textResults.push(raw.toString()); } else { textResults.push(locales.NumberToString(raw, culture, { isCurrency: (0, typecheckers_1.isNumber)(field.CurrencyLocaleId), isPercent: field.ShowAsPercentage })); } else if (isTaxonomy) { if ((0, typecheckers_1.isNotEmptyArray)(raw)) { textResults.push(raw.map(t => `${t.Label}|${t.TermGuid}`).join(';')); } else if ((0, typecheckers_1.isObject)(raw) && raw !== null && 'Label' in raw) { textResults.push(raw.Label || ''); } } else if ((0, typecheckers_1.isString)(raw)) textResults.push(raw); else if ((0, typecheckers_1.isBoolean)(raw)) { textResults.push(raw ? "Yes" : "No"); } else if ((0, typecheckers_1.isDate)(raw)) { textResults.push(locales.DateToString(raw, culture, { includeDate: true, includeTime: field.DisplayFormat === sharepoint_types_1.DateTimeFieldFormatType.DateTime })); } }); } return textResults; } exports.GetSPFieldValueAsText = GetSPFieldValueAsText; /** set an existing item system info: author, editor, created and modified dates */ async function SetItemCreatedModifiedInfo(siteUrl, listIdOrTitle, itemId, updates) { let updateValues = {}; let fields = updates && Object.keys(updates) || []; if (!(0, typecheckers_1.isNullOrEmptyString)(updates.Created)) //date must be yyyy-MM-dd hh:mm:ss updateValues.Created = ((0, typecheckers_1.isString)(updates.Created) ? new Date(updates.Created) : updates.Created).toISOString().replace('T', ' ').split('.')[0]; if (!(0, typecheckers_1.isNullOrEmptyString)(updates.Modified)) updateValues.Modified = ((0, typecheckers_1.isString)(updates.Modified) ? new Date(updates.Modified) : updates.Modified).toISOString().replace('T', ' ').split('.')[0]; if (updates.AuthorId > 0) { let asUser = await (0, user_1.GetUser)(siteUrl, updates.AuthorId); updateValues.AuthorId = `[{'Key':'${asUser.UserPrincipalName}'}]`; //[{'Key':'i:0#.f|membership|user@Tenant.onmicrosoft.com'}] } if (updates.EditorId > 0) { let asUser = await (0, user_1.GetUser)(siteUrl, updates.EditorId); updateValues.AuthorId = `[{'Key':'${asUser.UserPrincipalName}'}]`; //[{'Key':'i:0#.f|membership|user@Tenant.onmicrosoft.com'}] } if ((0, typecheckers_1.isNullOrEmptyArray)(fields)) return []; siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let url = (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/ValidateUpdateListItem()`; try { let result = await (0, rest_1.GetJson)(url, JSON.stringify({ formValues: fields.map(field => ({ FieldName: field, FieldValue: updateValues[field] })) }), { method: "POST" }); return result && result.d && result.d.ValidateUpdateListItem.results.map(v => ({ field: v.FieldName, error: v.ErrorMEssage })) || []; } catch (e) { logger.error(`Error updating values ${e}`); } return fields.map(f => ({ field: f, error: 'Unspecified update error' })); } exports.SetItemCreatedModifiedInfo = SetItemCreatedModifiedInfo; async function ListItemHasUniquePermissions(siteUrl, listIdOrTitle, itemId) { let url = `${(0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle)}/items(${itemId})/?$select=hasuniqueroleassignments`; let has = await (0, rest_1.GetJson)(url, undefined, { allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata }); return has.HasUniqueRoleAssignments === true; } exports.ListItemHasUniquePermissions = ListItemHasUniquePermissions; async function RestoreListItemPermissionInheritance(siteUrl, listIdOrTitle, itemId) { let url = `${(0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle)}/items(${itemId})/ResetRoleInheritance`; await (0, rest_1.GetJson)(url, undefined, { method: "POST", allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata, spWebUrl: siteUrl }); } exports.RestoreListItemPermissionInheritance = RestoreListItemPermissionInheritance; async function BreakListItemPermissionInheritance(siteUrl, listIdOrTitle, itemId, clear = true) { let url = `${(0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle)}/items(${itemId})/breakroleinheritance(copyRoleAssignments=${clear ? 'false' : 'true'}, clearSubscopes=true)`; await (0, rest_1.GetJson)(url, undefined, { method: "POST", allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata, spWebUrl: siteUrl }); } exports.BreakListItemPermissionInheritance = BreakListItemPermissionInheritance; async function AssignListItemPermission(siteUrl, listIdOrTitle, itemId, principalId, roleId) { let url = `${(0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle)}/items(${itemId})/roleassignments/addroleassignment(principalid=${principalId},roleDefId=${roleId})`; await (0, rest_1.GetJson)(url, undefined, { method: "POST", allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata, spWebUrl: siteUrl }); } exports.AssignListItemPermission = AssignListItemPermission; async function RemoveListItemPermission(siteUrl, listIdOrTitle, itemId, principalId, roleId) { let url = `${(0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle)}/items(${itemId})/roleassignments/removeroleassignment(principalid=${principalId},roleDefId=${roleId})`; await (0, rest_1.GetJson)(url, undefined, { method: "POST", allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata, spWebUrl: siteUrl }); } exports.RemoveListItemPermission = RemoveListItemPermission; async function GetItemEffectiveBasePermissions(siteUrlOrId, listIdOrTitle, itemId) { let siteUrl = (0, common_1.GetSiteUrl)(siteUrlOrId); let response = await (0, rest_1.GetJson)((0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle) + `/items(${itemId})/EffectiveBasePermissions`, null, { ...rest_1.shortLocalCache }); return response.d.EffectiveBasePermissions; } exports.GetItemEffectiveBasePermissions = GetItemEffectiveBasePermissions; //# sourceMappingURL=item.js.map