@kwiz/common
Version:
KWIZ common utilities and helpers for M365 platform
487 lines • 26.4 kB
JavaScript
;
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