@kwiz/common
Version:
KWIZ common utilities and helpers for M365 platform
1,045 lines • 61.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.WebHasUniquePermissions = exports.ensureLegacyProps = exports.getFormDigest = exports.GetWebPropertyByName = exports.GetAllWebProperties = exports.GetRegionalSettings = exports.DeleteUserCustomAction = exports.UpdateUserCustomAction = exports.AddUserCustomAction = exports.GetUserCustomActionByName = exports.GetUserCustomActionById = exports.GetUserCustomActions = exports.GetContextWebInformationSync = exports.SPServerLocalToday = exports.SPServerLocalTime = exports.SPServerLocalTimeSync = exports.UTCToSPServerLocalTimeSync = exports.UTCToSPServerLocalTime = exports.SPServerLocalTimeToUTCSync = exports.SPServerLocalTimeToUTC = exports.SPServerLocalTimeToUTCDateSync = exports.SPServerLocalTimeToUTCDate = exports.GetServerTimeZoneSync = exports.GetServerTimeZone = exports.GetAppTilesSync = exports.GetAppTiles = exports.GetSubWebs = exports.GetRoleAssignments = exports.GetWebRoleDefinitions = exports.GetWebInfoSync = exports.GetWebInfo = exports.__getSubSites = exports.GetAllSubWebs = exports.GetListsSync = exports.GetLists = exports.GetContentTypesSync = exports.GetContentTypes = exports.UserHasManageSitePermissions = exports.UserHasAllPermissions = exports.IsRootWeb = exports.GetWebIdSync = exports.GetWebId = exports.GetWebTitle = exports.GetRootWebInfo = exports.GetSiteIdSync = exports.GetSiteId = exports.GetPortalUrl = exports.GetTenantId = exports.GetSiteInfoSync = exports.GetSiteInfo = void 0;
exports.GetWebAssociatedGroups = exports.SetWelcomePage = exports.GetWelcomePage = exports.DectivateFeature = exports.ActivateFeature = exports.GetActiveFeatures = exports.GetAvailableTagsForSiteSync = exports.GetAvailableTagsForSite = exports.SetUserAsSiteAdmin = exports.RemoveWebPermission = exports.AssignWebPermission = exports.BreakWebPermissionInheritance = exports.RestoreWebPermissionInheritance = void 0;
const exports_index_1 = require("../../exports-index");
const collections_base_1 = require("../../helpers/collections.base");
const json_1 = require("../../helpers/json");
const objects_1 = require("../../helpers/objects");
const sharepoint_1 = require("../../helpers/sharepoint");
const strings_1 = require("../../helpers/strings");
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 sharepoint_utils_types_1 = require("../../types/sharepoint.utils.types");
const discovery_1 = require("../auth/discovery");
const consolelogger_1 = require("../consolelogger");
const date_1 = require("../date");
const rest_1 = require("../rest");
const common_1 = require("./common");
const list_1 = require("./list");
const timzone_map_1 = require("./timzone-map");
const logger = consolelogger_1.ConsoleLogger.get("SharePoint.Rest.Web");
async function GetSiteInfo(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
try {
const r = await (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + "/site?$select=id,serverRelativeUrl", null, { ...rest_1.longLocalCache });
var id = (0, strings_1.normalizeGuid)(r.d.Id);
var serverRelativeUrl = (0, url_1.normalizeUrl)(r.d.ServerRelativeUrl);
if ((0, typecheckers_1.isNullOrEmptyString)(serverRelativeUrl))
serverRelativeUrl = "/"; //can't return "" since it will be treated as current sub site, when tyring to access the root site from a sub-site
return { Id: id, ServerRelativeUrl: serverRelativeUrl };
}
catch {
return null;
}
}
exports.GetSiteInfo = GetSiteInfo;
function GetSiteInfoSync(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let result = (0, rest_1.GetJsonSync)((0, common_1.GetRestBaseUrl)(siteUrl) + "/site?$select=id,serverRelativeUrl", null, { ...rest_1.longLocalCache });
if (result.success) {
var id = (0, strings_1.normalizeGuid)(result.result.d.Id);
var serverRelativeUrl = (0, url_1.normalizeUrl)(result.result.d.ServerRelativeUrl);
return { Id: id, ServerRelativeUrl: serverRelativeUrl };
}
return null;
}
exports.GetSiteInfoSync = GetSiteInfoSync;
function _getSiteIdFromContext(siteUrl) {
if ((0, common_1.hasGlobalContext)()) {
//issue 7295
//make sure we return false for /sites/ab/c is not under /sites/a by adding a / at the end
let normalizedWebUrl = (0, url_1.normalizeUrl)((0, url_1.makeServerRelativeUrl)(siteUrl), true).toLowerCase();
let normalizedCurrentSiteUrl = (0, url_1.normalizeUrl)(_spPageContextInfo.siteServerRelativeUrl, true).toLowerCase();
//test cases
//if (!testSub("/", "/hello")) console.error("1");
//if (testSub("/", "/sites/hello")) console.error("2");
//if (testSub("/sites/a", "/sites/b")) console.error("3");
//if (!testSub("/sites/a", "/sites/a/b")) console.error("4");
//if (!testSub("/", "/")) console.error("5");
//if (!testSub("/sites/a", "/sites/a")) console.error("6");
//if (testSub("/sites/a", "/hello")) console.error("7");
if ((0, typecheckers_1.isNullOrUndefined)(siteUrl)
|| normalizedCurrentSiteUrl === "/" && !normalizedWebUrl.startsWith("/sites")
|| normalizedCurrentSiteUrl !== "/" && normalizedWebUrl.startsWith(normalizedCurrentSiteUrl)) {
if (!(0, typecheckers_1.isNullOrEmptyString)(_spPageContextInfo.siteId)) {
return (0, strings_1.normalizeGuid)(_spPageContextInfo.siteId);
}
}
}
return null;
}
/** Get tenant id lower case no {} */
function GetTenantId() {
if (!(0, typecheckers_1.isTypeofFullNameNullOrUndefined)("_spPageContextInfo")) {
return (0, strings_1.normalizeGuid)(_spPageContextInfo.aadTenantId);
}
let info = (0, discovery_1.AutoDiscoverTenantInfo)(true);
if (!(0, typecheckers_1.isNullOrUndefined)(info) && (0, typecheckers_1.isValidGuid)(info.idOrName)) {
return (0, strings_1.normalizeGuid)(info.idOrName);
}
return null;
}
exports.GetTenantId = GetTenantId;
/** Get tenant id lower case no {} */
function GetPortalUrl() {
return _spPageContextInfo.portalUrl;
}
exports.GetPortalUrl = GetPortalUrl;
/** Get site id lower case no {} */
async function GetSiteId(siteUrl) {
let siteId = _getSiteIdFromContext(siteUrl);
if (!(0, typecheckers_1.isNullOrEmptyString)(siteId)) {
return siteId;
}
return GetSiteInfo(siteUrl).then((info) => {
if (!(0, typecheckers_1.isNullOrUndefined)(info) && !(0, typecheckers_1.isNullOrEmptyString)(info.Id)) {
return (0, strings_1.normalizeGuid)(info.Id);
}
return null;
}).catch(() => {
return null;
});
}
exports.GetSiteId = GetSiteId;
/** Get site id lower case no {} */
function GetSiteIdSync(siteUrl) {
let siteId = _getSiteIdFromContext(siteUrl);
if (!(0, typecheckers_1.isNullOrEmptyString)(siteId)) {
return siteId;
}
let result = GetSiteInfoSync(siteUrl);
return !(0, typecheckers_1.isNullOrUndefined)(result) ? (0, strings_1.normalizeGuid)(result.Id) : null;
}
exports.GetSiteIdSync = GetSiteIdSync;
/** Get root web id lower case no {} */
function GetRootWebInfo(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + "/site/rootWeb?$select=id,serverRelativeUrl", null, { ...rest_1.longLocalCache })
.then(r => {
var id = (0, strings_1.normalizeGuid)(r.d.Id);
var serverRelativeUrl = (0, url_1.normalizeUrl)(r.d.ServerRelativeUrl);
//console.log("site id: " + id);
return { Id: id, ServerRelativeUrl: serverRelativeUrl };
})
.catch(() => null);
}
exports.GetRootWebInfo = GetRootWebInfo;
/** Return the web Title */
function GetWebTitle(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + `/web/Title`, null, { ...rest_1.shortLocalCache })
.then(r => {
return r.d.Title;
})
.catch(() => null);
}
exports.GetWebTitle = GetWebTitle;
function _getWebIdRequestUrl(siteUrl) {
return `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/Id`;
}
/** Return the web id */
function GetWebId(siteUrl) {
return (0, rest_1.GetJson)(_getWebIdRequestUrl(siteUrl), null, { ...rest_1.longLocalCache })
.then(r => {
return (0, strings_1.normalizeGuid)(r.d.Id);
})
.catch(() => null);
}
exports.GetWebId = GetWebId;
/** Return the web id */
function GetWebIdSync(siteUrl) {
let syncResult = (0, rest_1.GetJsonSync)(_getWebIdRequestUrl(siteUrl), null, { ...rest_1.longLocalCache });
if (syncResult.success)
return syncResult.result.d.Id;
else
return null;
}
exports.GetWebIdSync = GetWebIdSync;
/** Return the web id */
async function IsRootWeb(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let webId = await GetWebId(siteUrl);
let rootWeb = await GetRootWebInfo(siteUrl);
return webId === rootWeb.Id;
}
exports.IsRootWeb = IsRootWeb;
function UserHasAllPermissions(siteUrl, permissions) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + `/web/EffectiveBasePermissions`, null, { ...rest_1.shortLocalCache })
.then(r => {
var effectivePermissions = new sharepoint_1.SPBasePermissions(r.d.EffectiveBasePermissions);
return permissions.every((perm) => {
return effectivePermissions.has(perm);
});
})
.catch(() => null);
}
exports.UserHasAllPermissions = UserHasAllPermissions;
function UserHasManageSitePermissions(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if (!(0, typecheckers_1.isTypeofFullNameNullOrUndefined)("_spPageContextInfo")) {
if (siteUrl.startsWith(_spPageContextInfo.siteServerRelativeUrl))
if (_spPageContextInfo.isSiteAdmin || _spPageContextInfo["isSiteOwner"])
return Promise.resolve(true);
}
return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + `/web/EffectiveBasePermissions`, null, { ...rest_1.shortLocalCache })
.then(r => {
return new sharepoint_1.SPBasePermissions(r.d.EffectiveBasePermissions).has(sharepoint_types_1.SPBasePermissionKind.ManageWeb);
})
.catch(() => null);
}
exports.UserHasManageSitePermissions = UserHasManageSitePermissions;
function _getContentTypesRequestUrl(siteUrl, options = {}) {
const { fromRootWeb, includeFields, listIdOrTitle } = options;
let query = `$select=${includeFields === true ? common_1.CONTENT_TYPES_SELECT : common_1.CONTENT_TYPES_SELECT_WITH_FIELDS}${includeFields === true ? "&$expand=Fields" : ""}`;
if (!(0, typecheckers_1.isNullOrEmptyString)(listIdOrTitle)) {
return `${(0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle)}/contenttypes?${query}`;
}
else if (fromRootWeb) {
return `${(0, common_1.GetRestBaseUrl)(siteUrl)}/site/rootweb/contenttypes?${query}`;
}
else {
return `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/contenttypes?${query}`;
}
}
function _postProcessGetContentTypes(contentTypes, options = {}, allListFields) {
const { ignoreHidden, ignoreFolders, includeFields } = options;
if (!(0, typecheckers_1.isNullOrEmptyArray)(contentTypes)) {
if (ignoreFolders === true || ignoreHidden === true) {
contentTypes = contentTypes.filter(rr => {
if (options.ignoreFolders && rr.StringId.startsWith('0x0120'))
return false;
if (options.ignoreHidden && rr.Hidden)
return false;
return true;
});
}
if (includeFields === true) {
contentTypes.forEach((result) => {
if (!(0, typecheckers_1.isNullOrEmptyArray)(result.Fields)) {
result.Fields = result.Fields.map((field) => {
return (0, sharepoint_1.extendFieldInfo)(field, allListFields || result.Fields);
});
}
});
}
return contentTypes;
}
return null;
}
async function GetContentTypes(siteUrl, options = {}, refreshCache = false) {
let url = _getContentTypesRequestUrl(siteUrl, options);
let allListFields = null;
if (options.includeFields) {
allListFields = await (0, list_1.GetListFields)(siteUrl, options.listIdOrTitle);
}
return (0, rest_1.GetJson)(url, null, { allowCache: refreshCache !== true, jsonMetadata: rest_types_1.jsonTypes.nometadata })
.then(result => {
if (!(0, typecheckers_1.isNullOrUndefined)(result)) {
return _postProcessGetContentTypes(result.value, options, allListFields);
}
return null;
})
.catch(() => null);
}
exports.GetContentTypes = GetContentTypes;
function GetContentTypesSync(siteUrl, options = {}, refreshCache = false) {
let url = _getContentTypesRequestUrl(siteUrl, options);
let allListFields = null;
if (options.includeFields) {
allListFields = (0, list_1.GetListFieldsSync)(siteUrl, options.listIdOrTitle);
}
let result = (0, rest_1.GetJsonSync)(url, null, { allowCache: refreshCache !== true, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (!(0, typecheckers_1.isNullOrUndefined)(result) && result.success === true && !(0, typecheckers_1.isNullOrUndefined)(result.result)) {
return _postProcessGetContentTypes(result.result.value, options, allListFields);
}
return null;
}
exports.GetContentTypesSync = GetContentTypesSync;
function _getListsRequestUrl(siteUrl, options) {
let select = common_1.LIST_SELECT;
let expand = common_1.LIST_EXPAND;
if (options.includeRootFolders === true) {
select += ",RootFolder/Name,RootFolder/ServerRelativeUrl";
expand += ",RootFolder";
}
if (options.includeViews === true) {
expand += ",Views";
}
return (0, common_1.GetRestBaseUrl)(siteUrl) + `/web/lists?$select=${select}&$expand=${expand}`;
}
function _postProcessGetLists(lists, options = {}) {
lists = lists || [];
if (options && options.includeViews) {
lists.forEach(l => {
if ((0, typecheckers_1.isNullOrEmptyArray)(l.Views)) {
l.Views = [];
}
l.Views.forEach(v => { v.Id = (0, strings_1.normalizeGuid)(v.Id); });
});
}
lists.forEach((list) => {
if (list.EffectiveBasePermissions
&& ((0, typecheckers_1.isString)(list.EffectiveBasePermissions.High)
|| (0, typecheckers_1.isString)(list.EffectiveBasePermissions.Low))) {
list.EffectiveBasePermissions = {
High: Number(list.EffectiveBasePermissions.High),
Low: Number(list.EffectiveBasePermissions.Low)
};
}
});
return lists;
}
function GetLists(siteUrl, options = {}) {
let url = _getListsRequestUrl(siteUrl, options);
return (0, rest_1.GetJson)(url, null, { allowCache: true, jsonMetadata: rest_types_1.jsonTypes.nometadata })
.then(result => {
return _postProcessGetLists(result.value, options);
})
.catch(() => []);
}
exports.GetLists = GetLists;
function GetListsSync(siteUrl, options = {}) {
let url = _getListsRequestUrl(siteUrl, options);
let response = (0, rest_1.GetJsonSync)(url, null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (response && response.success && response.result && (0, typecheckers_1.isNotEmptyArray)(response.result.value)) {
return _postProcessGetLists(response.result.value, options);
}
return [];
}
exports.GetListsSync = GetListsSync;
/**
* Get all sub webs. Results will be cached in memory and sorted
* @param siteUrl the starting URL you want to get the sites for
* @param allowAppWebs send true if you would like to inlucde app webs as well
*/
async function GetAllSubWebs(siteUrl, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let sites = [];
options = options || {};
var currentSite;
var queryFailed = false;
try {
currentSite = await GetWebInfo(siteUrl);
let queryFilter = '';
if (!options.allSiteCollections) {
//filter by site id
let siteId = await GetSiteId(siteUrl);
queryFilter = `SiteId:${siteId}`;
}
//Issue 6735 missing WebId for some customer (US, government GCC tenant will not return WebId)
let queryUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/search/query?querytext=%27${queryFilter}(contentclass:STS_Site)%20(contentclass:STS_Web)%27&trimduplicates=false&rowlimit=5000&selectproperties=%27Title,Url,WebTemplate,WebId%27`;
let response = await (0, rest_1.GetJson)(queryUrl, null, { ...rest_1.shortLocalCache });
let results = response && response.d && response.d.query && response.d.query.PrimaryQueryResult;
let addedSites = [];
if (results && results.RelevantResults.RowCount >= 0) {
let allPropsFound = false;
results.RelevantResults.Table.Rows.results.forEach(row => {
let Title = null;
let Url = null;
let WebId = null;
let WebTemplate = null;
let skip = false;
for (var i = 0; i < row.Cells.results.length; i++) {
let cell = row.Cells.results[i];
let value = (0, typecheckers_1.isNullOrEmptyString)(cell.Value) ? "" : cell.Value;
switch (cell.Key) {
case "WebTemplate":
WebTemplate = value;
if (!options.allowAppWebs && value === "APP")
skip = true;
break;
case "Title":
Title = value;
break;
case "WebId":
WebId = (0, strings_1.normalizeGuid)(value);
break;
case "Url":
if (addedSites.indexOf(value.toLowerCase()) >= 0) {
//duplicate, skip
skip = true;
}
else {
Url = value;
}
break;
}
if (skip)
break; //stop the cells loop
allPropsFound =
Title !== null &&
Url !== null &&
WebId !== null &&
WebTemplate !== null;
if (allPropsFound)
break;
}
if (!skip && allPropsFound) //don't skip, and we found all needed props
{
sites.push({
Title: Title,
ServerRelativeUrl: (0, url_1.makeServerRelativeUrl)(Url),
WebId: WebId,
WebTemplate: WebTemplate,
WebType: WebTemplate === "APP" ? sharepoint_utils_types_1.WebTypes.App :
WebTemplate === "GROUP" ? sharepoint_utils_types_1.WebTypes.Group :
WebTemplate === "STS" ? sharepoint_utils_types_1.WebTypes.Team :
sharepoint_utils_types_1.WebTypes.Other
});
}
});
}
//Issue 7161
if (sites.length === 1 || (!(0, typecheckers_1.isNullOrUndefined)(currentSite) && !sites.filter((site) => {
return site.WebId !== currentSite.WebId;
})[0])) {
queryFailed = true;
}
}
catch (e) {
queryFailed = true;
}
if (queryFailed) {
// Igor: Issue #7702
if (_spPageContextInfo && _spPageContextInfo.siteServerRelativeUrl.toLowerCase() !== siteUrl.toLowerCase()) {
//siteUrl = _spPageContextInfo.siteServerRelativeUrl;
//currentSite = await GetWebInfo(siteUrl);
//Kevin: Issue 1028
//The user may not have permission to the site collection root web. Instead of overwirting the currentSite/siteUrl,
//we make a request for the site collection root web. If we get a valid response, replace currentSite/siteUrl with
//the site collection root web info.
let currentSiteCollection = await GetWebInfo(_spPageContextInfo.siteServerRelativeUrl);
if (currentSiteCollection && !(0, typecheckers_1.isNullOrEmptyString)(currentSiteCollection.ServerRelativeUrl)) {
currentSite = currentSiteCollection;
siteUrl = _spPageContextInfo.siteServerRelativeUrl;
}
}
//add current site
if (currentSite && (options.allowAppWebs || currentSite.WebType !== sharepoint_utils_types_1.WebTypes.App)) {
sites.push(currentSite);
}
//Issue 6651
//add sub sites
//if the query failed, we can't rely on search to get the subwebs
var currentSiteSubSites = await __getSubSites(siteUrl, options.allowAppWebs);
if ((0, typecheckers_1.isNotEmptyArray)(currentSiteSubSites)) {
sites = [...sites, ...currentSiteSubSites];
}
}
var webIds = [];
var filteredSites = [];
for (let site of sites) {
if (webIds.indexOf(site.WebId) === -1) {
webIds.push(site.WebId);
filteredSites.push(site);
}
}
(0, collections_base_1.sortArray)(filteredSites, s => s.ServerRelativeUrl);
return filteredSites;
}
exports.GetAllSubWebs = GetAllSubWebs;
async function __getSubSites(siteUrl, allowAppWebs) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let sites = [];
//try {
//maybe search is not wokring? use regular REST API
let restUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/getsubwebsfilteredforcurrentuser(nwebtemplatefilter=-1,nconfigurationfilter=0)?$Select=Title,ServerRelativeUrl,Id,WebTemplate`;
let result = await (0, rest_1.GetJson)(restUrl, null, { ...rest_1.shortLocalCache });
if (result && result.d && (0, typecheckers_1.isNotEmptyArray)(result.d.results)) {
let results = (allowAppWebs) ? result.d.results : result.d.results.filter(s => s.WebTemplate !== "APP");
let promises = [];
results.forEach(s => {
sites.push({
Title: s.Title,
ServerRelativeUrl: s.ServerRelativeUrl,
WebId: s.Id,
WebTemplate: s.WebTemplate,
WebType: s.WebTemplate === "APP" ? sharepoint_utils_types_1.WebTypes.App :
s.WebTemplate === "GROUP" ? sharepoint_utils_types_1.WebTypes.Group :
s.WebTemplate === "STS" ? sharepoint_utils_types_1.WebTypes.Team :
sharepoint_utils_types_1.WebTypes.Other
});
promises.push(__getSubSites(s.ServerRelativeUrl, allowAppWebs));
});
//loop and add all sub sites
let allSubs = await Promise.all(promises);
allSubs.forEach(subSubs => {
sites.push(...subSubs);
});
}
//}
//catch {
//}
return sites;
}
exports.__getSubSites = __getSubSites;
function _getWebInfoByIdRequestUrl(siteUrl, webId) {
return `${(0, common_1.GetRestBaseUrl)(siteUrl)}/site/openWebById('${webId}')?$Select=${common_1.WEB_SELECT}`;
}
function _getCurrentWebInfoRequestUrl(siteUrl) {
return `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web?$Select=${common_1.WEB_SELECT}`;
}
function _postProcessGetWebInfo(webInfo) {
if (!(0, typecheckers_1.isNullOrUndefined)(webInfo)) {
return {
Title: webInfo.Title,
ServerRelativeUrl: webInfo.ServerRelativeUrl,
WebId: webInfo.Id,
WebTemplate: webInfo.WebTemplate,
WebType: GetWebType(webInfo.WebTemplate),
Description: webInfo.Description,
SiteLogoUrl: webInfo.SiteLogoUrl
};
}
return null;
}
async function GetWebInfo(siteUrl, webId, refreshCache) {
let webInfoResponse = null;
try {
if (!(0, typecheckers_1.isNullOrEmptyString)(webId) && (0, typecheckers_1.isValidGuid)(webId)) {
webId = (0, strings_1.normalizeGuid)(webId);
let currentWebId = await GetWebId(siteUrl);
if (currentWebId !== webId) {
let url = _getWebInfoByIdRequestUrl(siteUrl, webId);
webInfoResponse = await (0, rest_1.GetJson)(url, null, {
method: "POST", spWebUrl: (0, common_1.GetSiteUrl)(siteUrl), ...rest_1.shortLocalCache,
jsonMetadata: rest_types_1.jsonTypes.nometadata,
allowCache: refreshCache !== true
});
}
}
if ((0, typecheckers_1.isNullOrUndefined)(webInfoResponse)) {
let url = _getCurrentWebInfoRequestUrl(siteUrl);
webInfoResponse = await (0, rest_1.GetJson)(url, null, {
...rest_1.shortLocalCache,
jsonMetadata: rest_types_1.jsonTypes.nometadata,
allowCache: refreshCache !== true
});
}
}
catch (e) { }
return _postProcessGetWebInfo(webInfoResponse);
}
exports.GetWebInfo = GetWebInfo;
function GetWebInfoSync(siteUrl, webId) {
let webInfoResponse = null;
if (!(0, typecheckers_1.isNullOrEmptyString)(webId) && (0, typecheckers_1.isValidGuid)(webId)) {
webId = (0, strings_1.normalizeGuid)(webId);
let currentWebId = GetWebIdSync(siteUrl);
if (currentWebId !== webId) {
let url = _getWebInfoByIdRequestUrl(siteUrl, webId);
let syncResult = (0, rest_1.GetJsonSync)(url, null, {
method: "POST", spWebUrl: (0, common_1.GetSiteUrl)(siteUrl), ...rest_1.shortLocalCache,
jsonMetadata: rest_types_1.jsonTypes.nometadata
});
if (syncResult.success) {
webInfoResponse = syncResult.result;
}
}
}
if ((0, typecheckers_1.isNullOrUndefined)(webInfoResponse)) {
let url = _getCurrentWebInfoRequestUrl(siteUrl);
let syncResult = (0, rest_1.GetJsonSync)(url, null, {
...rest_1.shortLocalCache,
jsonMetadata: rest_types_1.jsonTypes.nometadata
});
if (syncResult.success) {
webInfoResponse = syncResult.result;
}
}
return _postProcessGetWebInfo(webInfoResponse);
}
exports.GetWebInfoSync = GetWebInfoSync;
async function GetWebRoleDefinitions(siteUrl) {
return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + `/web/RoleDefinitions?filter=Hidden ne true`, null, { ...rest_1.longLocalCache })
.then(r => {
return r.d.results || [];
})
.catch(() => []);
}
exports.GetWebRoleDefinitions = GetWebRoleDefinitions;
;
/** get roles for site or list */
async function GetRoleAssignments(siteUrl, listIdOrTitle, itemId) {
const url = `${(0, typecheckers_1.isNullOrEmptyString)(listIdOrTitle) ? (0, common_1.GetRestBaseUrl)(siteUrl) + "/web" : (0, list_1.GetListRestUrl)(siteUrl, listIdOrTitle)}/${(0, typecheckers_1.isNullOrNaN)(itemId) ? '' : `items(${itemId})/`}roleassignments?$expand=Member/users,RoleDefinitionBindings`;
const result = await (0, rest_1.GetJson)(url, undefined, { jsonMetadata: rest_types_1.jsonTypes.nometadata });
return result.value;
}
exports.GetRoleAssignments = GetRoleAssignments;
/** Web sub webs for the selected site */
async function GetSubWebs(siteUrl, options) {
return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + `/web/webs${options && options.allowAppWebs ? "" : "&$filter=WebTemplate ne 'APP'"}`, null, { ...rest_1.shortLocalCache })
.then(r => {
return r.d.results;
})
.catch(() => []);
}
exports.GetSubWebs = GetSubWebs;
/** Web sub webs for the selected site */
async function GetAppTiles(siteUrl) {
//Issue 933 this api does not work in a classic app web
if ((0, common_1.hasGlobalContext)() && _spPageContextInfo.isAppWeb) {
logger.warn('GetAppTiles does not work in an app web');
return null;
}
return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + "/web/AppTiles?$filter=AppType%20eq%203&$select=Title,ProductId", null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata })
.then(r => {
return (0, typecheckers_1.isNotEmptyArray)(r.value) ? r.value.map(t => {
return {
Title: t.Title,
ProductId: (0, strings_1.normalizeGuid)(t.ProductId)
};
}) : [];
})
.catch(() => []);
}
exports.GetAppTiles = GetAppTiles;
/** Web sub webs for the selected site */
function GetAppTilesSync(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
//Issue 933 this api does not work in a classic app web
if ((0, common_1.hasGlobalContext)() && _spPageContextInfo.isAppWeb) {
logger.warn('GetAppTiles does not work in an app web');
return null;
}
let r = (0, rest_1.GetJsonSync)((0, common_1.GetRestBaseUrl)(siteUrl) + "/web/AppTiles?$filter=AppType%20eq%203&$select=Title,ProductId", null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
return r.success && r.result && (0, typecheckers_1.isNotEmptyArray)(r.result.value) ? r.result.value.map(t => {
return {
Title: t.Title,
ProductId: (0, strings_1.normalizeGuid)(t.ProductId)
};
}) : [];
}
exports.GetAppTilesSync = GetAppTilesSync;
function GetWebType(WebTemplate) {
return WebTemplate === "APP" ? sharepoint_utils_types_1.WebTypes.App :
WebTemplate === "GROUP" ? sharepoint_utils_types_1.WebTypes.Group :
WebTemplate === "STS" ? sharepoint_utils_types_1.WebTypes.Team :
sharepoint_utils_types_1.WebTypes.Other;
}
async function GetServerTimeZone(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let getTimeZoneUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/regionalSettings/timeZone`;
let result = await (0, rest_1.GetJson)(getTimeZoneUrl, null, { ...rest_1.extraLongLocalCache });
if (result && result.d && !(0, typecheckers_1.isNullOrUndefined)(result.d)) {
return result.d;
}
else
return null;
}
exports.GetServerTimeZone = GetServerTimeZone;
function GetServerTimeZoneSync(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let getTimeZoneUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/regionalSettings/timeZone`;
let response = (0, rest_1.GetJsonSync)(getTimeZoneUrl, null, { ...rest_1.extraLongLocalCache });
if (response && response.result.d && !(0, typecheckers_1.isNullOrUndefined)(response.result.d)) {
return response.result.d;
}
else
return null;
}
exports.GetServerTimeZoneSync = GetServerTimeZoneSync;
/**
* to be used when parsing string date to date object in JavaScript like so:
* var clientTimezoneOffset = new Date().getTimezoneOffset() * 60 * 1000;
* var clientDate = new Date(value);
* var serverDate = new Date(clientDate.getTime() + clientTimezoneOffset + GetServerTimeOffset);
* We must send a date in, since places like Israel have different offset for specific dates (GMT+2 or GMT+3)
* or just call SPServerLocalTimeToUTCDate
*/
async function GetServerTimeOffset(siteUrl, date) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let dateStr = (0, date_1.toIsoDateFormat)(date, { zeroTime: true, omitZ: true });
let inputDate = new Date(dateStr);
let getTimeZoneOffsetUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/regionalSettings/timeZone/localTimeToUTC(@date)?@date='${encodeURIComponent(dateStr)}'`;
let result = await (0, rest_1.GetJson)(getTimeZoneOffsetUrl, null, { ...rest_1.weeekLongLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (result && !(0, typecheckers_1.isNullOrEmptyString)(result.value)) {
let resultDate = new Date(result.value.slice(0, result.value.length - 1)); //remove Z and get as date.
return (resultDate.getTime() - inputDate.getTime());
}
else
return 0;
}
/**
* to be used when parsing string date to date object in JavaScript like so:
* var clientTimezoneOffset = new Date().getTimezoneOffset() * 60 * 1000;
* var clientDate = new Date(value);
* var serverDate = new Date(clientDate.getTime() + clientTimezoneOffset + GetServerTimeOffset);
* We must send a date in, since places like Israel have different offset for specific dates (GMT+2 or GMT+3)
* or just call SPServerLocalTimeToUTCDate
*/
function GetServerTimeOffsetSync(siteUrl, date) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let dateStr = (0, date_1.toIsoDateFormat)(date, { zeroTime: true, omitZ: true });
let inputDate = new Date(dateStr);
let getTimeZoneOffsetUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/regionalSettings/timeZone/localTimeToUTC(@date)?@date='${encodeURIComponent(dateStr)}'`;
let result = (0, rest_1.GetJsonSync)(getTimeZoneOffsetUrl, null, { ...rest_1.weeekLongLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (result && result.success && !(0, typecheckers_1.isNullOrEmptyString)(result.result.value)) {
let resultDate = new Date(result.result.value.slice(0, result.result.value.length - 1)); //remove Z and get as date.
return (resultDate.getTime() - inputDate.getTime());
}
else
return 0;
}
/** get date yyyy:MM:ddTHH:mm:ss NO ZED, or a date object created in the server local time, and return a date object of the corrected UTC time */
async function SPServerLocalTimeToUTCDate(siteUrl, date) {
//used in 7700
if ((0, typecheckers_1.isNullOrEmptyString)(date))
return null;
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if (!(0, typecheckers_1.isDate)(date))
date = new Date(date);
let serverTimeOffset = await GetServerTimeOffset(siteUrl, date);
return _SPServerLocalTimeToUTCDate(date, serverTimeOffset);
}
exports.SPServerLocalTimeToUTCDate = SPServerLocalTimeToUTCDate;
/** get date yyyy:MM:ddTHH:mm:ss NO ZED, or a date object created in the server local time, and return a date object of the corrected UTC time */
function SPServerLocalTimeToUTCDateSync(siteUrl, date) {
//used in 7700
if ((0, typecheckers_1.isNullOrEmptyString)(date))
return null;
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if (!(0, typecheckers_1.isDate)(date))
date = new Date(date);
let serverTimeOffset = GetServerTimeOffsetSync(siteUrl, date);
return _SPServerLocalTimeToUTCDate(date, serverTimeOffset);
}
exports.SPServerLocalTimeToUTCDateSync = SPServerLocalTimeToUTCDateSync;
function _SPServerLocalTimeToUTCDate(date, serverTimeOffset) {
let localTimeOffset = date.getTimezoneOffset() * 60000;
return new Date(serverTimeOffset - localTimeOffset + date.getTime());
}
/** get date yyyy:MM:ddTHH:mm:ss NO ZED
* returns yyyy:MM:ddTHH:mm:ssZ
* expensive, but works. for faster bulk parsing use toIsoDateFormat(new Date(GetServerTimeOffset + date.getTime()))
* or: SPServerLocalTimeToUTCDate
*/
async function SPServerLocalTimeToUTC(siteUrl, date) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isDate)(date)) {
date = (0, date_1.toIsoDateFormat)(date, { omitZ: true });
}
let restUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/regionalSettings/timeZone/localTimeToUTC(@date)?@date='${encodeURIComponent(date)}'`;
let result = await (0, rest_1.GetJson)(restUrl, null, { ...rest_1.weeekLongLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
return result && result.value || null;
}
exports.SPServerLocalTimeToUTC = SPServerLocalTimeToUTC;
/**
* convert date in ISO format (yyyy:MM:ddTHH:mm:ss) or SPServerLocalTime (5/27/2020 11:34, 5-27-2020 11:34)
* returns date in ISO UTC (yyyy:MM:ddTHH:mm:ssZ)
* expensive, but works. for faster bulk parsing use toIsoDateFormat(new Date(GetServerTimeOffset + date.getTime()))
* or: SPServerLocalTimeToUTCDateSync
*/
function SPServerLocalTimeToUTCSync(siteUrl, date) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isDate)(date)) {
date = (0, date_1.toIsoDateFormat)(date, { omitZ: true });
}
let restUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/regionalSettings/timeZone/localTimeToUTC(@date)?@date='${encodeURIComponent(date)}'`;
let result = (0, rest_1.GetJsonSync)(restUrl, null, { ...rest_1.weeekLongLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
return result.success && result.result.value || null;
}
exports.SPServerLocalTimeToUTCSync = SPServerLocalTimeToUTCSync;
/** get utc date yyyy:MM:ddTHH:mm:ssZ
* returns yyyy:MM:ddTHH:mm:ss NO ZED
* expensive, but works. for faster bulk parsing use toIsoDateFormat(new Date(date.getTime()-GetServerTimeOffset,{omitZ:true}))
*/
async function UTCToSPServerLocalTime(siteUrl, date) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isDate)(date)) {
date = (0, date_1.toIsoDateFormat)(date);
}
let supportedLocale = _getSupportedLocaleForUTCToSPServerTime();
if (!(0, typecheckers_1.isNullOrEmptyString)(supportedLocale)) {
try {
let regionalSettings = await GetServerTimeZone(siteUrl);
let timeZone = timzone_map_1.SPTimeZoneIdToIANATimeZoneName[`${regionalSettings.Id}`];
if (!(0, typecheckers_1.isNullOrEmptyString)(timeZone)) {
let result = _UTCDateStringToSPServerLocalDateString(date, timeZone, supportedLocale);
if (!(0, typecheckers_1.isNullOrEmptyString)(result)) {
return result;
}
}
}
catch {
}
}
let restUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/regionalSettings/timeZone/utcToLocalTime(@date)?@date='${encodeURIComponent(date)}'`;
let result = await (0, rest_1.GetJson)(restUrl, null, { ...rest_1.longLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
return result && result.value || null;
}
exports.UTCToSPServerLocalTime = UTCToSPServerLocalTime;
/** get utc date yyyy:MM:ddTHH:mm:ssZ
* returns yyyy:MM:ddTHH:mm:ss NO ZED
* expensive, but works. for faster bulk parsing use toIsoDateFormat(new Date(date.getTime()-GetServerTimeOffset,{omitZ:true}))
*/
function UTCToSPServerLocalTimeSync(siteUrl, date) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isDate)(date)) {
date = (0, date_1.toIsoDateFormat)(date);
}
let supportedLocale = _getSupportedLocaleForUTCToSPServerTime();
if (!(0, typecheckers_1.isNullOrEmptyString)(supportedLocale)) {
try {
let regionalSettings = GetServerTimeZoneSync(siteUrl);
let timeZone = timzone_map_1.SPTimeZoneIdToIANATimeZoneName[`${regionalSettings.Id}`];
if (!(0, typecheckers_1.isNullOrEmptyString)(timeZone)) {
let result = _UTCDateStringToSPServerLocalDateString(date, timeZone, supportedLocale);
if (!(0, typecheckers_1.isNullOrEmptyString)(result)) {
return result;
}
}
}
catch {
}
}
let restUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/regionalSettings/timeZone/utcToLocalTime(@date)?@date='${encodeURIComponent(date)}'`;
let result = (0, rest_1.GetJsonSync)(restUrl, null, { ...rest_1.longLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
return result.success && result.result.value || null;
}
exports.UTCToSPServerLocalTimeSync = UTCToSPServerLocalTimeSync;
function _getSupportedLocaleForUTCToSPServerTime() {
try {
let supportedLocales = Intl.DateTimeFormat.supportedLocalesOf(["en-CA", "sv-SE"]);
return supportedLocales[0];
}
catch {
}
return null;
}
function _UTCDateStringToSPServerLocalDateString(utcISODate, targetIanaTimeZone, supportedLocale) {
let formatter = new Intl.DateTimeFormat(supportedLocale, {
timeZone: targetIanaTimeZone,
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
fractionalSecondDigits: 3,
hour12: false
});
let value1 = formatter.format(new Date(utcISODate));
if (supportedLocale.toLowerCase() === "en-ca") {
value1 = value1.replace(",", "").replace(" ", "T").split(".000")[0];
}
else {
value1 = value1.replace(",", ".").replace(" ", "T").split(".000")[0];
}
return (0, exports_index_1.isISODate)(value1) ? value1 : null;
}
function SPServerLocalTimeSync(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var clientNowServerDeltas = (0, objects_1.getGlobal)("ClientNowServerDeltas");
var clientNowServerDelta = clientNowServerDeltas[siteUrl];
var now = new Date();
if ((0, typecheckers_1.isNullOrUndefined)(clientNowServerDelta)) {
var local = UTCToSPServerLocalTimeSync(siteUrl, now.toISOString());
clientNowServerDelta = (+now - +(new Date(local)));
clientNowServerDeltas[siteUrl] = clientNowServerDelta;
}
var newdate = new Date(+now - clientNowServerDelta);
return (0, date_1.toIsoDateFormat)(newdate, { omitZ: true });
}
exports.SPServerLocalTimeSync = SPServerLocalTimeSync;
async function SPServerLocalTime(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var clientNowServerDeltas = (0, objects_1.getGlobal)("ClientNowServerDeltas");
var clientNowServerDelta = clientNowServerDeltas[siteUrl];
var now = new Date();
if ((0, typecheckers_1.isNullOrUndefined)(clientNowServerDelta)) {
var local = await UTCToSPServerLocalTime(siteUrl, now.toISOString());
clientNowServerDelta = (+now - +(new Date(local)));
clientNowServerDeltas[siteUrl] = clientNowServerDelta;
}
var newdate = new Date(+now - clientNowServerDelta);
return (0, date_1.toIsoDateFormat)(newdate, { omitZ: true });
}
exports.SPServerLocalTime = SPServerLocalTime;
async function SPServerLocalToday(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
return (0, exports_index_1.promiseLock)(`SPServerLocalToday)_${siteUrl}`, async () => {
return SPServerLocalTime(siteUrl);
}, 30000);
}
exports.SPServerLocalToday = SPServerLocalToday;
function GetContextWebInformationSync(siteUrl) {
var siteId = null;
if (_spPageContextInfo && _spPageContextInfo.isAppWeb) {
//inside an app web you can't get the contextinfo for any other site
siteUrl = _spPageContextInfo.webServerRelativeUrl;
siteId = _spPageContextInfo.siteId;
}
else {
siteId = GetSiteIdSync(siteUrl);
if ((0, typecheckers_1.isNullOrEmptyString)(siteId)) {
return null;
}
}
let result = (0, rest_1.GetJsonSync)(`${(0, common_1.GetRestBaseUrl)(siteUrl)}/contextinfo`, null, {
method: "POST",
maxAge: 5 * 60,
includeDigestInPost: false,
allowCache: true,
postCacheKey: `GetContextWebInformation_${(0, strings_1.normalizeGuid)(siteId)}`
});
if (result && result.success) {
return result.result.d.GetContextWebInformation;
}
else {
return null;
}
}
exports.GetContextWebInformationSync = GetContextWebInformationSync;
function _getCustomActionsBaseRestUrl(siteUrl, options = {}) {
const { listId, actionId } = { ...options };
let restUrl = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web`;
if (!(0, typecheckers_1.isNullOrEmptyString)(listId)) {
restUrl += `/lists('${(0, strings_1.normalizeGuid)(listId)}')`;
}
restUrl += `/UserCustomActions`;
if (!(0, typecheckers_1.isNullOrEmptyString)(actionId)) {
restUrl += `('${actionId}')`;
}
return restUrl;
}
function _parseCustomActionReponse(action) {
if ((0, typecheckers_1.isNullOrUndefined)(action)) {
return action;
}
if (!(0, typecheckers_1.isNullOrUndefined)(action.Rights)) {
if ((0, typecheckers_1.isNumeric)(action.Rights.High)) {
action.Rights.High = Number(action.Rights.High);
}
if ((0, typecheckers_1.isNumeric)(action.Rights.Low)) {
action.Rights.Low = Number(action.Rights.Low);
}
}
return action;
}
function _convertCustomActionToPostData(action) {
//The rest end point expects the rights in string format for some odd reason despite IBasePermissions being stored
//as High/Low numbers and the methods using numbers (ie. SPBasePermission). Even EffectiveBasePermissions on
//a list are stored using numbers.
let hasRights = !(0, typecheckers_1.isNullOrUndefined)(action.Rights);
let partialAction;
if (hasRights) {
partialAction = {
Rights: {
High: `${action.Rights.High}`,
Low: `${action.Rights.Low}`
}
};
delete action.Rights;
}
let data = { ...action, ...partialAction };
return data;
}
/** Get UserCustomActions for web/list */
async function GetUserCustomActions(siteUrl, listId, allowCache = true) {
let restUrl = _getCustomActionsBaseRestUrl(siteUrl, { listId: listId });
let cacheOptions = allowCache === true ? rest_1.shortLocalCache : { allowCache: false };
let restOptions = {
jsonMetadata: rest_types_1.jsonTypes.nometadata,
...cacheOptions
};
try {
let response = await (0, rest_1.GetJson)(restUrl, null, restOptions);
if (!(0, typecheckers_1.isNullOrUndefined)(response) && !(0, typecheckers_1.isNullOrEmptyArray)(response.value)) {
return response.value.map(_parseCustomActionReponse);
}
}
catch {
}
return [];
}
exports.GetUserCustomActions = GetUserCustomActions;
/** Get UserCustomAction by id from web/list */
async function GetUserCustomActionById(siteUrl, customActionId, listId, allowCache = true) {
let restUrl = _getCustomActionsBaseRestUrl(siteUrl, { listId: listId, actionId: customActionId });
let cacheOptions = allowCache === true ? rest_1.shortLocalCache : { allowCache: false };
let restOptions = {
jsonMetadata: rest_types_1.jsonTypes.nometadata,
...cacheOptions
};
try {
let response = await (0, rest_1.GetJson)(restUrl, null, restOptions);
if (!(0, typecheckers_1.isNullOrUndefined)(response)) {
return _parseCustomActionReponse(response);
}
}
catch {
}
return null;
}
exports.GetUserCustomActionById = GetUserCustomActionById;
/** Get UserCustomAction by name from web/list */
async function GetUserCustomActionByName(siteUrl, name, listId, allowCache = true) {
let restUrl = `${_getCustomActionsBaseRestUrl(siteUrl, { listId: listId })}?$filter=Name eq '${encodeURIComponent(name)}'`;
let cacheOptions = allowCache === true ? rest_1.shortLocalCache : { allowCache: false };
let restOptions = {
jsonMetadata: rest_types_1.jsonTypes.nometadata,
...cacheOptions
};
try {
let response = await (0, rest_1.GetJson)(restUrl, null, restOptions);
if (!(0, typecheckers_1.isNullOrUndefined)(response) && !(0, typecheckers_1.isNullOrEmptyArray)(response.value)) {
return response.value.map(_parseCustomActionReponse);
}
}
catch {
}
return [];
}
exports.GetUserCustomActionByName = GetUserCustomActionByName;
/** Add UserCustomAction to web/list */
async function AddUserCustomAction(siteUrl, userCustomActionInfo, listId) {
let restUrl = _getCustomActionsBaseRestUrl(siteUrl, { listId: listId });
let restOptions = {
jsonMetadata: rest_types_1.jsonTypes.nometadata,
method: "POST",
includeDigestInPost: true
};
try {
let data = _convertCustomActionToPostData(userCustomActionInfo);
let response = await (0, rest_1.GetJson)(restUrl, JSON.stringify(data), restOptions);
if (!(0, typecheckers_1.isNullOrUndefined)(response)) {
return _parseCustomActionReponse(response);
}
}
catch {
}
return null;
}
exports.AddUserCustomAction = AddUserCustomAction;
/** Update UserCustomAction to web/list */
async function UpdateUserCustomAction(siteUrl, customActionId, userCustomActionInfo, listId) {
let restUrl = _getCustomActionsBaseRestUrl(siteUrl, { listId: listId, actionId: customActionId });
let restOptions = {
jsonMetadata: rest_types_1.jsonTypes.nometadata,
method: "POST",
xHttpMethod: "MERGE",
includeDigestInPost: true
};
try {
let data = _convertCustomActionToPostData(userCustomActionInfo);
let result = await (0, rest_1.GetJson)(restUrl, JSON.stringify(data), restOptions);
return !(0, typecheckers_1.isNullOrUndefined)(result) && result["odata.null"] === true || (0, typecheckers_1.isNullOrEmptyString)(result);
}
catch {
}
return false;
}
exports.UpdateUserCustomAction = UpdateUserCustomAction;
/** Delete UserCustomAction from web/list */
async function DeleteUserCustomAction(siteUrl, customActionId, listId) {
let restUrl = _getCustomActionsBaseRestUrl(siteUrl, { listId: listId, actionId: customActionId });
let restOptions = {
jsonMetadata: rest_types_1.jsonTypes.nometadata,
method: "POST",
xHttpMethod: "DELETE",
includeDigestInPo