{"version":3,"file":"535.js","mappings":"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","sources":["webpack:///./src/taskpane/components/enums/FolderTypeEnum.ts?","webpack:///./src/taskpane/components/enums/NormalInputTypeEnum.ts?","webpack:///./src/taskpane/components/enums/modeEnum.ts?","webpack:///./src/taskpane/components/enums/userLicenseTypeEnum.ts?","webpack:///./src/taskpane/components/helpers/baseBatch.ts?","webpack:///./src/taskpane/components/helpers/driveIdBatchHelper.ts?","webpack:///./src/taskpane/components/helpers/localStorageHelper.ts?","webpack:///./src/taskpane/components/helpers/restSearchBuilder.ts?","webpack:///./src/taskpane/components/helpers/searchBatchRequestHelper.ts?","webpack:///./src/taskpane/components/helpers/searchResultMapper.ts?","webpack:///./src/taskpane/components/helpers/stringHelper.ts?","webpack:///./src/taskpane/components/helpers/treeHelperGeneral.ts?","webpack:///./src/taskpane/config/config.ts?","webpack:///./src/taskpane/config/constants.ts?","webpack:///./src/taskpane/config/sharepointConstants.ts?","webpack:///./src/taskpane/interfaces/ISiteInfo.ts?","webpack:///./src/taskpane/services/ApiService.ts?","webpack:///./src/taskpane/services/GraphClientService.ts?","webpack:///./src/taskpane/services/GraphService.ts?","webpack:///./src/taskpane/services/SharePointRestServices.ts?","webpack:///./src/taskpane/services/dateService.ts?","webpack:///./src/taskpane/styles/mobileStyles.ts?","webpack:///./utilities/AuthModule.ts?","webpack:///./utilities/AxiosRetryUtil.ts?","webpack:///./utilities/BrowserUtils.ts?","webpack:///./utilities/CacheHelper.ts?","webpack:///./utilities/EncodeDecode.ts?","webpack:///./utilities/GeneralModule.ts?","webpack:///./utilities/SharePointSiteHelper.ts?","webpack:///./utilities/StorageHelper.ts?","webpack:///./utilities/TimeZone/SharePointTimeZones.ts?","webpack:///./utilities/logger.ts?"],"sourcesContent":["\r\nexport enum FolderTypeEnum {\r\n default,\r\n sharepoint,\r\n sharepointSite,\r\n oneDrive,\r\n teamChannel,\r\n teamMainSite,\r\n oneDriveSubFolder,\r\n sharepointList,\r\n sharepointHubSite\r\n}\r\n","export enum InputEnum {\r\n Text,\r\n Number,\r\n Percentage,\r\n Currency,\r\n Date,\r\n YesNo,\r\n choice,\r\n multiChoice,\r\n peoplePickerSingle,\r\n peoplePickerMultiple,\r\n taxonomySingle,\r\n taxonomyDouble,\r\n datasourceText,\r\n datasourceDropdown,\r\n datasourceMultipleDropdown,\r\n lookupMulti,\r\n lookupSingle,\r\n datasourceTagPicker\r\n}\r\n","export enum ModeEnum {\r\n mailRead,\r\n mailCompose,\r\n mailSend,\r\n office,\r\n contentManager,\r\n contentManagerAdvancedSearch,\r\n contentManagerTeams\r\n}\r\n","export enum UserLicenseTypeEnum {\r\n Expired = 1,\r\n Paid = 2,\r\n Eval = 3,\r\n Unassigned = 4\r\n}","import \"isomorphic-fetch\";\r\nimport { BatchRequestStep, BatchRequestContent, Client } from \"@microsoft/microsoft-graph-client/lib/src/browser\";\r\n\r\nexport abstract class BaseBatch {\r\n constructor(private client: Client) { }\r\n\r\n async buildBatchResponse(batchRequests: BatchRequestStep[]) {\r\n const content = await new BatchRequestContent(batchRequests).getContent();\r\n return await this.client\r\n .api('/$batch')\r\n .post(content);\r\n }\r\n}","import \"isomorphic-fetch\";\r\nimport { BatchRequestStep, Client, BatchResponseContent } from \"@microsoft/microsoft-graph-client/lib/src/browser\";\r\nimport { BaseBatch } from \"./baseBatch\";\r\nimport { ISiteBatchInfo } from \"../../interfaces/ISiteBatchInfo\";\r\nimport { ISiteDriveItems } from \"../../interfaces/ISiteDriveItems\";\r\n\r\nexport class DriveIdBatchHelper extends BaseBatch {\r\n constructor(client: Client) {\r\n super(client);\r\n }\r\n\r\n process = async (siteInfos: ISiteBatchInfo[]): Promise => {\r\n const results: ISiteDriveItems[] = [];\r\n for (let i = 0; i < siteInfos.length; i += 20) {\r\n const siteInfoSlices: ISiteBatchInfo[] = siteInfos.slice(i, i + 20);\r\n\r\n const batchRequests: BatchRequestStep[] =\r\n siteInfoSlices.map((siteInfo, index: number) => {\r\n return {\r\n id: index.toString(),\r\n request: new Request(`/sites/${siteInfo.siteId}/drives?$select=id,webUrl,name,sharepointIds`, { method: \"GET\" })\r\n }\r\n });\r\n\r\n const batchResponse = await this.buildBatchResponse(batchRequests);\r\n\r\n results.push(...(await this.getBatchResponse(siteInfoSlices, batchResponse)));\r\n }\r\n return results;\r\n }\r\n\r\n private async getBatchResponse(itemsToProcess: ISiteBatchInfo[], batchResponse: any): Promise {\r\n const batchResponseContent = new BatchResponseContent(batchResponse);\r\n let result = await Promise.all(itemsToProcess.map((item, index) => (this.getBatchData(batchResponseContent, item, index))));\r\n return result;\r\n }\r\n\r\n private async getBatchData(batchResponseContent: BatchResponseContent, item: ISiteBatchInfo, index: number): Promise {\r\n let response = await batchResponseContent.getResponseById(index.toString()).json();\r\n\r\n let driveItems = response.value?.map(item => {\r\n let splittedWebUrl = item.webUrl.split(\"/\");\r\n return { ...item, documentLibraryRealName: splittedWebUrl[splittedWebUrl.length - 1], sharePointListId: item.sharePointIds?.listId }\r\n });\r\n\r\n return {\r\n site: item.site,\r\n driveItems: driveItems,\r\n siteId: item.siteId,\r\n mainUrl: item.mainWebUrl\r\n }\r\n }\r\n}\r\n\r\n","import rabbit = require(\"crypto-js/rabbit\");\r\nimport utf8 = require(\"crypto-js/enc-utf8\");\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\n\r\nexport const localStorageKeys = {\r\n pinnedItems: \"pinnedItems\",\r\n recentItems: \"recentItems\",\r\n recentItemsGraph: \"recentItemsGraph\",\r\n sharedItems: \"sharedItems\",\r\n sites: \"sites\",\r\n teams: \"teams\",\r\n searchHistory: \"searchHistory\",\r\n previousTeamsLocation: \"previousTeamsLocation\",\r\n selectedAdvSearchSites: \"selectedAdvSearchSites\"\r\n};\r\n\r\nconst getUniqueKey = (key: string): string | null => {\r\n try {\r\n const accountId: string = authModule.getPersistedAuthState()?.account?.accountId;\r\n if (accountId) {\r\n return key + \".\" + accountId;\r\n }\r\n } catch (error) {\r\n }\r\n return null;\r\n}\r\n\r\nexport const getLocalStorage = (key: string) => {\r\n try {\r\n const uniqueKey: string | null = getUniqueKey(key);\r\n if (uniqueKey) {\r\n const storage = localStorage.getItem(uniqueKey);\r\n return JSON.parse(rabbit.decrypt(storage, authModule.getCypherSecret()).toString(utf8));\r\n }\r\n } catch (error) {\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const setLocalStorage = (key: string, data: any): boolean => {\r\n try {\r\n const uniqueKey: string | null = getUniqueKey(key);\r\n if (uniqueKey) {\r\n const storage: string = rabbit.encrypt(JSON.stringify(data), authModule.getCypherSecret()).toString();\r\n localStorage.setItem(uniqueKey, storage);\r\n return true;\r\n }\r\n } catch (error) {\r\n }\r\n return false;\r\n}\r\n\r\nexport const removeLocalStorage = (key: string) => {\r\n try {\r\n localStorage.removeItem(getUniqueKey(key));\r\n } catch (error) {\r\n }\r\n}\r\n\r\nexport const clearLocalStorage = () => {\r\n try {\r\n localStorage.clear();\r\n } catch (error) {\r\n }\r\n}","import { searchTypes, searchParams } from \"../../config/constants\";\r\nimport { ISearchParams } from \"../../interfaces/ISearchDocumentLibraryParameter\";\r\nimport { DriveItemSearchResultComposite } from \"../../interfaces/DriveItemSearchResultComposite\";\r\nimport { IMapper } from \"../../interfaces/IMapper\";\r\nimport { axiosRetryPost } from \"../../../../utilities/AxiosRetryUtil\";\r\n\r\nexport class GraphSearchRestHelper {\r\n options: {};\r\n body: string;\r\n constructor(private url: string, private mapper: IMapper) { }\r\n\r\n setHeader = (accessToken: string) => {\r\n this.options = {\r\n headers: {\r\n \"Authorization\": \"Bearer \" + accessToken,\r\n 'Content-Type': 'application/json',\r\n }\r\n };\r\n\r\n return this;\r\n }\r\n\r\n setBody = (searchParameter: ISearchParams) => {\r\n this.body = JSON.stringify({\r\n requests: [\r\n {\r\n entityTypes: [\r\n searchTypes.driveItem\r\n ],\r\n query: {\r\n queryString: this.buildQuery(searchParameter)\r\n },\r\n from: !searchParameter.pageIndex ? 0 : searchParameter.pageIndex * searchParams.maxSize,\r\n size: searchParams.maxSize\r\n }\r\n ],\r\n });\r\n\r\n return this;\r\n }\r\n\r\n private buildQuery(searchParameter: ISearchParams) {\r\n if (!searchParameter.webUrl) {\r\n return `${searchParameter.searchValue} Size>0`;\r\n }\r\n\r\n if (!searchParameter.directory) {\r\n return `${searchParameter.searchValue} Size>0 path:\\\"${searchParameter.webUrl}\\\"`\r\n }\r\n\r\n return `${searchParameter.searchValue} Size>0 path:\\\"${searchParameter.webUrl}/${searchParameter.directory}\\\"`;\r\n }\r\n\r\n Execute = async () => {\r\n const result = await axiosRetryPost(this.url, this.body, this.options);\r\n return this.mapper.map(result.data.value);\r\n }\r\n}","import \"isomorphic-fetch\";\r\nimport { BatchRequestStep, Client, BatchResponseContent } from \"@microsoft/microsoft-graph-client/lib/src/browser\";\r\nimport { DriveItemSearchResult } from \"../../interfaces/IDriveItemSearchResult\";\r\nimport { IBatchSearchResult } from \"../../interfaces/IBatchSearchResult\";\r\nimport { BaseBatch } from \"./baseBatch\";\r\n\r\nexport class SearchBatchRequestHelper extends BaseBatch {\r\n constructor(client: Client) {\r\n super(client);\r\n }\r\n\r\n process = async (itemsToProcess: DriveItemSearchResult[], batchRequestCallback: (item: any, index: number) => BatchRequestStep) => {\r\n const batchRequests: BatchRequestStep[] =\r\n itemsToProcess.map(batchRequestCallback);\r\n\r\n const batchResponse = await this.buildBatchResponse(batchRequests);\r\n return await this.getBatchResponse(itemsToProcess, batchResponse);\r\n }\r\n\r\n private async getBatchResponse(itemsToProcess: any[], batchResponse: any): Promise {\r\n const batchResponseContent = new BatchResponseContent(batchResponse);\r\n return await Promise.all(itemsToProcess.map((item, index) => (this.getBatchData(batchResponseContent, item, index))));\r\n }\r\n\r\n private async getBatchData(batchResponseContent: BatchResponseContent, item: DriveItemSearchResult, index: number): Promise {\r\n let response = await batchResponseContent.getResponseById(index.toString()).json();\r\n return {\r\n name: item.name,\r\n driveId: item.driveId,\r\n itemId: item.id,\r\n webUrl: item.webUrl,\r\n metadata: response,\r\n }\r\n }\r\n}","import { DriveItemSearchResult } from \"../../interfaces/IDriveItemSearchResult\";\r\nimport { DriveItemSearchResultComposite } from \"../../interfaces/DriveItemSearchResultComposite\";\r\nimport { IMapper } from \"../../interfaces/IMapper\";\r\n\r\n\r\n\r\nexport class SearchResultMapper implements IMapper {\r\n map(data: any[]): DriveItemSearchResultComposite {\r\n const noResultsAvailable = data.length !== 1 || !data[0].hitsContainers[0].hits;\r\n return {\r\n items: noResultsAvailable ? [] : data[0].hitsContainers[0].hits.map(this.mapDriveItems),\r\n totalResults: noResultsAvailable ? 0 : data[0].hitsContainers[0].total\r\n }\r\n }\r\n\r\n private mapDriveItems = (item): DriveItemSearchResult => {\r\n return ({\r\n id: item._source.id,\r\n name: item._source.name,\r\n webUrl: item._source.webUrl\r\n })\r\n }\r\n}\r\n","export const getLastSplittedStringItem = (fileName: string, splitBy: RegExp) => {\r\n const pieces = fileName?.split(splitBy) ?? [];\r\n return pieces.length > 0 ? pieces[pieces.length - 1] : \"\";\r\n}\r\n\r\nexport const getExtension = (name: string): string => {\r\n if (name) {\r\n const nameParts = name.split(\".\");\r\n if (nameParts.length > 1) {\r\n return nameParts[nameParts.length - 1];\r\n }\r\n }\r\n return \"\";\r\n};\r\n\r\nexport const removeExtension = (filename: string) => {\r\n if (filename?.includes(\".\")) {\r\n return filename.split(\".\").slice(0, -1).join(\".\")\r\n } else {\r\n return filename;\r\n }\r\n}\r\n\r\nexport const getRelativeDocumentUrl = (url: string, isRoot: boolean) => {\r\n let array = url?.split(\"/\") ?? [];\r\n let part = array.slice(Math.max(array.length - (isRoot ? 1 : 2), 1))\r\n return part.join(\"/\");\r\n}\r\n\r\nexport const truncateWithEllipses = (text: string, max: number) => {\r\n return text.substr(0, max - 1) + (text.length > max ? ' ...' : '');\r\n}\r\n\r\nexport const createUniqueKey = () => '_' + Math.random().toString(36).substr(2, 9);\r\n\r\nexport const localStringToNumber = (textNumber: string) => {\r\n return Number(String(textNumber).replace(/[^0-9.-]+/g, \"\"));\r\n};\r\n\r\nexport const changeExtensionToPdf = (filename: string): string => {\r\n if (filename) {\r\n let dotIndex = filename.lastIndexOf(\".\");\r\n if (dotIndex === -1) return filename + '.pdf'; // If there's no extension, just append .pdf\r\n return filename.substring(0, dotIndex) + '.pdf';\r\n }\r\n return \"\";\r\n}\r\n\r\nexport const splitName = (fullName: string): { firstName: string, lastName: string } => {\r\n if (fullName) {\r\n let nameParts = fullName.trim().split(' ');\r\n\r\n let firstName: string = nameParts?.shift() || '';\r\n let lastName: string = nameParts?.join(' ');\r\n\r\n return { firstName, lastName };\r\n } else {\r\n return { firstName: '', lastName: '' };\r\n }\r\n}\r\n\r\nexport const formatGuidString = (value: string): string => {\r\n if (value && !value.includes(\"-\")) {\r\n const parts = [];\r\n parts.push(value.slice(0, 8));\r\n parts.push(value.slice(8, 12));\r\n parts.push(value.slice(12, 16));\r\n parts.push(value.slice(16, 20));\r\n parts.push(value.slice(20, 32));\r\n return parts.join(\"-\");\r\n }\r\n return value;\r\n}\r\n\r\nexport const splitStringByNewline = (input: string): string[] => {\r\n if (!input) return [];\r\n return input.split(/\\r\\n|\\r|\\n/);\r\n}","import { CSSProperties } from \"react\";\r\nimport generalModule from \"../../../../utilities/GeneralModule\";\r\nimport { ComponentTypes, DirectoryTreeType } from \"../../config/config\";\r\nimport { IFolderPanelInfo } from \"../../interfaces/IFolderPanelInfo\";\r\nimport { IPageSettings } from \"../../interfaces/IPageSettings\";\r\nimport { ITeamChannelDocumentLibrary } from \"../../interfaces/services/ITeamChannelDocumentLibrary\";\r\nimport { getTeamChannelInfo } from \"../../services/GraphService\";\r\nimport { isMobile } from \"../../styles/mobileStyles\";\r\nimport { UserState } from \"../../types\";\r\nimport { FolderTypeEnum } from \"../enums/FolderTypeEnum\";\r\nimport { getLastSplittedStringItem, getRelativeDocumentUrl } from \"./stringHelper\";\r\n\r\nexport const findWorkingDirectories = (data: any[], selectedItem: any): any[] | null => {\r\n for (const item of data) {\r\n if (item.id === selectedItem.id && item.randomId === selectedItem.randomId) {\r\n return [item];\r\n }\r\n if (item.sites) {\r\n const found = findWorkingDirectories(item.sites, selectedItem);\r\n if (found) {\r\n return [item, ...found];\r\n }\r\n }\r\n if (item.subSites) {\r\n const found = findWorkingDirectories(item.subSites, selectedItem);\r\n if (found) {\r\n return [item, ...found];\r\n }\r\n }\r\n if (item.documents) {\r\n const found = findWorkingDirectories(item.documents, selectedItem);\r\n if (found) {\r\n return [item, ...found];\r\n }\r\n }\r\n if (item.channels) {\r\n const found = findWorkingDirectories(item.channels, selectedItem);\r\n if (found) {\r\n return [item, ...found];\r\n }\r\n }\r\n if (item.folders) {\r\n const found = findWorkingDirectories(item.folders, selectedItem);\r\n if (found) {\r\n return [item, ...found];\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport const buildWorkingDirectoryFromTree = async (data: any[], user: UserState) => {\r\n let directories: IPageSettings[] = [];\r\n let currentDirectory: IPageSettings;\r\n let teamChannelInfo: ITeamChannelDocumentLibrary;\r\n\r\n const sharepointItem = { type: ComponentTypes.SharePoint, id: \"1\", directory: \"\", displayName: ComponentTypes.SharePoint, webUrl: \"\" }\r\n const teamsItem = { type: ComponentTypes.Teams, id: \"2\", directory: \"\", displayName: ComponentTypes.Teams, webUrl: \"\" }\r\n\r\n const rootItem = data[0];\r\n if (rootItem.treeType !== DirectoryTreeType.location) {\r\n if (rootItem.isSite) {\r\n if (!generalModule.isInConentMangerMode()) {\r\n directories.push(sharepointItem);\r\n }\r\n } else if (rootItem.isTeam) {\r\n directories.push(teamsItem);\r\n }\r\n }\r\n\r\n for (let index = 0; index < data.length; index++) {\r\n const item = data[index];\r\n if (item.treeType === DirectoryTreeType.location) {\r\n directories.push({\r\n type: item.type,\r\n id: item.id,\r\n directory: \"\",\r\n displayName: item.name,\r\n webUrl: item.type === ComponentTypes.OneDrive ? user.oneDriveWebUrl : \"\",\r\n sharePointListId: \"\"\r\n });\r\n }\r\n else if (item.treeType === DirectoryTreeType.site) {\r\n if (item.isTeam) {\r\n currentDirectory = directories[directories.length - 1];\r\n\r\n directories.push({\r\n id: item.id,\r\n type: ComponentTypes.SharePointDocuments,\r\n siteId: item.siteId,\r\n siteDisplayName: item.name,\r\n webUrl: item.webUrl,\r\n directory: \"\",\r\n DocumentLibrary: \"\",\r\n teamGroupId: item.teamGroupId,\r\n teamDriveId: item.teamDriveId,\r\n isSharedTeam: item.isSharedTeam,\r\n displayName: item.name,\r\n isTeamsFolder: true,\r\n isHub: item.isHub,\r\n hubId: item.hubId,\r\n parentHubId: item.parentHubId\r\n });\r\n } else {\r\n directories.push({\r\n id: item.id,\r\n type: ComponentTypes.SharePointDocuments,\r\n siteId: item.id,\r\n siteDisplayName: item.name,\r\n webUrl: item.webUrl,\r\n directory: \"\",\r\n DocumentLibrary: \"\",\r\n displayName: item.name,\r\n isHub: item.isHub,\r\n hubId: item.hubId,\r\n parentHubId: item.parentHubId\r\n });\r\n }\r\n\r\n }\r\n else if (item.treeType === DirectoryTreeType.document) {\r\n currentDirectory = directories[directories.length - 1];\r\n directories.push({\r\n id: item.id,\r\n type: ComponentTypes.SharePointFolders,\r\n siteId: currentDirectory.isTeamsFolder ? currentDirectory.siteId : currentDirectory.id,\r\n siteDisplayName: currentDirectory.siteDisplayName,\r\n webUrl: currentDirectory.webUrl,\r\n fileTitle: item.name,\r\n directory: getLastSplittedStringItem(item.webUrl, /[\\s/]+/),\r\n DocumentLibrary: item.name,\r\n displayName: item.name,\r\n isTeamsFolder: currentDirectory.isTeamsFolder,\r\n sharePointListId: item.sharePointListId\r\n });\r\n }\r\n else if (item.treeType === DirectoryTreeType.channel) {\r\n currentDirectory = directories[directories.length - 1];\r\n teamChannelInfo = await getTeamChannelInfo({ channelId: item.id, driveId: item.driveId, groupId: item.teamGroupId, isPrivate: item.isPrivate, isShared: item.isShared });\r\n if (teamChannelInfo) {\r\n directories.push({\r\n id: item.isShared ? teamChannelInfo.driveId : teamChannelInfo.driveItemId,\r\n parentId: item.isShared ? null : teamChannelInfo.driveId,\r\n type: ComponentTypes.SharePointFolders,\r\n siteDisplayName: currentDirectory.siteDisplayName,\r\n webUrl: teamChannelInfo.sharePointSiteUrl,\r\n fileTitle: item.displayName,\r\n directory: getRelativeDocumentUrl(teamChannelInfo.driveItemWebUrl, item.isShared),\r\n DocumentLibrary: teamChannelInfo.documentLibraryName,\r\n displayName: item.displayName,\r\n siteId: teamChannelInfo.siteId,\r\n isTeamsRootFolder: true,\r\n isTeamsFolder: currentDirectory.isTeamsFolder,\r\n isSharedTeamsChannel: item.isShared,\r\n sharePointListId: teamChannelInfo.sharePointListId,\r\n teamChannelId: item.id\r\n });\r\n }\r\n }\r\n else if (item.treeType === DirectoryTreeType.folder && !item.isOneDrive) {\r\n currentDirectory = directories[directories.length - 1];\r\n directories.push({\r\n id: item.id,\r\n parentId: item.driveId,\r\n type: ComponentTypes.SharePointFolders,\r\n siteId: currentDirectory.siteId,\r\n siteDisplayName: currentDirectory.siteDisplayName,\r\n webUrl: currentDirectory.webUrl,\r\n fileTitle: item.name,\r\n directory: `${currentDirectory.directory}/${item.name}`,\r\n DocumentLibrary: currentDirectory.DocumentLibrary,\r\n displayName: item.name,\r\n isTeamsFolder: currentDirectory.isTeamsFolder,\r\n sharePointListId: currentDirectory.sharePointListId,\r\n contentTypeId: item.contentTypeId,\r\n serverRelativePath: item.path,\r\n sharePointUniqueId: item.sharePointUniqueId\r\n });\r\n }\r\n else if (item.treeType === DirectoryTreeType.folder && item.isOneDrive) {\r\n currentDirectory = directories[directories.length - 1];\r\n directories.push({\r\n id: item.id,\r\n parentId: item.parentId || item.driveId,\r\n type: item.level === 1 ? ComponentTypes.OneDriveSubFolder : ComponentTypes.OneDriveSubFolder,\r\n webUrl: item.webUrl,\r\n fileTitle: item.name,\r\n directory: `${currentDirectory.directory ? `${currentDirectory.directory}/${item.name}` : `${item.name}`}`,\r\n DocumentLibrary: currentDirectory.DocumentLibrary,\r\n displayName: item.name,\r\n sharePointListId: item.sharePointListId,\r\n contentTypeId: item.contentTypeId,\r\n serverRelativePath: item.path,\r\n sharePointUniqueId: item.sharePointUniqueId\r\n });\r\n\r\n if (!directories[0].sharePointListId) {\r\n directories[0].sharePointListId = item.sharePointListId;\r\n }\r\n }\r\n }\r\n\r\n return { directories, teamChannelInfo };\r\n}\r\n\r\nexport const openTreeFolderOptions = async (locations: any[], location: any, user: UserState): Promise => {\r\n const newWorkingDirectories = findWorkingDirectories(locations, location);\r\n let { directories, teamChannelInfo } = await buildWorkingDirectoryFromTree(newWorkingDirectories, user);\r\n const currentDirectory = directories[directories.length - 1];\r\n\r\n if (location.isTeam) {\r\n return Promise.resolve({\r\n isOpen: true,\r\n folder: { driveId: null, name: location.name, id: location.id, siteId: location.siteId, isSharedTeam: location.isSharedTeam },\r\n folderType: FolderTypeEnum.teamMainSite,\r\n webUrl: location.webUrl,\r\n locations: directories\r\n })\r\n }\r\n if (location.isSite || location.isSubsite || location.isHub) {\r\n return Promise.resolve({\r\n isOpen: true,\r\n folder: { driveId: null, name: location.name, id: location.id },\r\n folderType: location.isHub ? FolderTypeEnum.sharepointHubSite : FolderTypeEnum.sharepointSite,\r\n webUrl: location.webUrl,\r\n locations: directories\r\n })\r\n }\r\n if (location.treeType === DirectoryTreeType.document) {\r\n return Promise.resolve({\r\n isOpen: true,\r\n folder: { driveId: location.id, name: location.name, id: null, sharePointListId: location.sharePointListId },\r\n folderType: FolderTypeEnum.sharepoint,\r\n webUrl: location.webUrl,\r\n locations: directories\r\n })\r\n }\r\n if (location.treeType === DirectoryTreeType.channel) {\r\n return Promise.resolve({\r\n isOpen: true,\r\n folder: { driveId: teamChannelInfo.driveId, name: location.displayName, id: location.isShared ? null : teamChannelInfo.driveItemId },\r\n folderType: FolderTypeEnum.teamChannel,\r\n webUrl: location.webUrl,\r\n locations: directories\r\n })\r\n }\r\n if (location.treeType === DirectoryTreeType.folder && !location.isOneDrive) {\r\n return Promise.resolve({\r\n isOpen: true,\r\n folder: { driveId: location.driveId, name: location.name, id: location.id, sharePointListId: location.sharePointListId },\r\n folderType: FolderTypeEnum.sharepoint,\r\n webUrl: location.webUrl,\r\n locations: directories\r\n })\r\n }\r\n if (location.treeType === DirectoryTreeType.folder && location.isOneDrive) {\r\n return Promise.resolve({\r\n isOpen: true,\r\n folder: {\r\n driveId: location.driveId || location.parentId,\r\n name: location.name,\r\n id: location.id,\r\n webUrl: `${location.webUrl}/${currentDirectory.directory}`,\r\n //sharePointListId: location.sharePointListId \r\n },\r\n folderType: FolderTypeEnum.oneDriveSubFolder,\r\n webUrl: location.webUrl,\r\n locations: directories\r\n })\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const calculateLocationHeight = (locations: any) => {\r\n const itemHeight = isMobile() ? 55 : 40;\r\n const countVisibleItems = (node) => {\r\n let count = 1; // count current node\r\n if (node.expanded) {\r\n node.sites?.forEach(site => {\r\n count += countVisibleItems(site);\r\n });\r\n\r\n node.subSites?.forEach(subSite => {\r\n count += countVisibleItems(subSite);\r\n });\r\n\r\n node.folders?.forEach(folder => {\r\n if (folder.foldersNextHref) {\r\n count += 1;\r\n }\r\n count += countVisibleItems(folder);\r\n });\r\n\r\n node.documents?.forEach(doc => {\r\n count += 1;\r\n if (doc.foldersNextHref) {\r\n count += 1;\r\n }\r\n doc.folders?.forEach(folder => {\r\n count += countVisibleItems(folder);\r\n });\r\n });\r\n\r\n node.channels?.forEach((chan) => {\r\n count += 1;\r\n if (chan.foldersNextHref) {\r\n count += 1;\r\n }\r\n chan.folders?.forEach(folder => {\r\n count += countVisibleItems(folder);\r\n });\r\n });\r\n\r\n node.folders?.forEach(() => {\r\n count += 1;\r\n });\r\n }\r\n\r\n return count;\r\n };\r\n\r\n const visibleItemCount = locations?.reduce((count, location) => {\r\n return count + countVisibleItems(location);\r\n }, 0);\r\n\r\n return visibleItemCount * itemHeight;\r\n}\r\n\r\nconst radonStringCharList: string = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\r\nexport const generateRandomString = (length: number = 15) => {\r\n let result = \"\";\r\n for (let i = length; i > 0; --i) {\r\n result += radonStringCharList[Math.floor(Math.random() * radonStringCharList.length)];\r\n }\r\n return result;\r\n}\r\n\r\nexport const treeViewItemStyle = (location: any): CSSProperties => {\r\n let leftPad: number = location.level * 26;\r\n if (!location.isLoading && ((location.loaded && !hasChildren(location)) || location.canExpand === false)) {\r\n leftPad += 10 + getIconSizeOffset(location);\r\n }\r\n\r\n return {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n paddingTop: 13,\r\n paddingBottom: 13,\r\n paddingRight: location.isLoading ? 12 : 10,\r\n paddingLeft: leftPad\r\n }\r\n}\r\n\r\nexport const hasChildren = (location: any) => {\r\n if (location.sites?.length > 0 || location.subSites?.length > 0 || location.folders?.length > 0 || location.documents?.length > 0 || location.channels?.length > 0) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nconst getIconSizeOffset = (location: any) => {\r\n if (location.type === ComponentTypes.Exchange || location.type === ComponentTypes.Teams || location.type === ComponentTypes.SharePoint || location.type === ComponentTypes.OneDrive) {\r\n return -6;\r\n }\r\n\r\n // if (location.treeType === DirectoryTreeType.folder || location.treeType === DirectoryTreeType.document || location.treeType === DirectoryTreeType.channel) {\r\n // return 4;\r\n // }\r\n\r\n // return 0;\r\n return 4;\r\n}","import { generateRandomString } from \"../components/helpers/treeHelperGeneral\";\r\nimport { IFolderLocation } from \"../interfaces/ISharepointDocument\";\r\nimport { ISiteInfoLocation } from \"../interfaces/ISiteInfo\";\r\n\r\nexport const ComponentTypes = {\r\n AdvancedSearch: \"AdvancedSearch\",\r\n Exchange: \"Exchange\",\r\n OneDrive: \"OneDrive\",\r\n OneDriveSubFolder: \"OneDriveSubFolder\",\r\n Saving: \"Saving\",\r\n SavingInBackground: \"SavingInBackground\",\r\n SharePoint: \"SharePoint\",\r\n SharePointDocuments: \"SharePointDocuments\",\r\n SharePointFolders: \"SharePointFolders\",\r\n SharePointList: \"SharePointList\",\r\n Teams: \"Teams\",\r\n TeamDocuments: \"TeamDocuments\",\r\n TeamFolders: \"TeamFolders\",\r\n GeneralSearch: \"GeneralSearch\"\r\n};\r\n\r\nexport interface IDirectoryLocation {\r\n id: string;\r\n name: string;\r\n imgUrl: string;\r\n type: string;\r\n sites?: ISiteInfoLocation[];\r\n folders?: IFolderLocation[];\r\n foldersNextHref?: string;\r\n canExpand: boolean;\r\n expanded: boolean;\r\n isLoading?: boolean;\r\n loaded?: boolean;\r\n treeType?: DirectoryTreeType;\r\n randomId: string;\r\n level: number;\r\n isServerRefreshed: boolean;\r\n}\r\n\r\nexport enum DirectoryTreeType {\r\n location,\r\n site,\r\n document,\r\n channel,\r\n folder\r\n}\r\n\r\nexport const Initiallocations: IDirectoryLocation[] = [\r\n {\r\n id: \"1\",\r\n name: ComponentTypes.SharePoint,\r\n imgUrl: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/sharepoint_20x1.svg\",\r\n type: ComponentTypes.SharePoint,\r\n sites: [],\r\n canExpand: true,\r\n expanded: false,\r\n isLoading: false,\r\n treeType: DirectoryTreeType.location,\r\n randomId: generateRandomString(),\r\n level: 1,\r\n isServerRefreshed: false\r\n },\r\n {\r\n id: \"2\",\r\n name: ComponentTypes.Teams,\r\n imgUrl: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/teams_20x1.svg\",\r\n type: ComponentTypes.Teams,\r\n sites: [],\r\n canExpand: true,\r\n expanded: false,\r\n isLoading: false,\r\n treeType: DirectoryTreeType.location,\r\n randomId: generateRandomString(),\r\n level: 1,\r\n isServerRefreshed: false\r\n },\r\n {\r\n id: \"3\",\r\n name: ComponentTypes.OneDrive,\r\n imgUrl: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/onedrive_20x1.svg\",\r\n type: ComponentTypes.OneDrive,\r\n folders: [],\r\n canExpand: true,\r\n expanded: false,\r\n isLoading: false,\r\n treeType: DirectoryTreeType.location,\r\n randomId: generateRandomString(),\r\n level: 1,\r\n isServerRefreshed: false\r\n },\r\n {\r\n id: \"4\",\r\n name: ComponentTypes.Exchange,\r\n imgUrl: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/outlook_20x1.svg\",\r\n type: ComponentTypes.Exchange,\r\n canExpand: false,\r\n expanded: false,\r\n randomId: generateRandomString(),\r\n level: 1,\r\n isServerRefreshed: false\r\n }\r\n];\r\n","import { ModeEnum } from \"../components/enums/modeEnum\";\r\nimport { IPager } from \"../interfaces/IPager\";\r\nimport { IGraphPager } from \"../interfaces/IGraphPager\";\r\nimport { IFolderPanelInfo } from \"../interfaces/IFolderPanelInfo\";\r\nimport { SharePointInputTypes } from \"./sharepointConstants\";\r\nimport { InputEnum } from \"../components/enums/NormalInputTypeEnum\";\r\nimport { ComponentTypes } from \"./config\";\r\nimport { IGraphSearchPager } from \"../interfaces/IGraphSearchPager\";\r\n\r\nexport const datasourceType = {\r\n sqlServer: \"SQLServer\"\r\n};\r\n\r\nexport const displayHeight: string = \"calc(100vh - 152px)\"; //subtract header and breadcrumb heigths\r\n\r\nexport const searchTypes = {\r\n driveItem: \"microsoft.graph.driveItem\"\r\n};\r\n\r\nexport const searchFields = {\r\n graph: [\"rank\", \"isDocument\", \"isContainer\", \"contentTypeID\", \"displayName\", \"description\", \"id\", \"createdDateTime\", \"lastModifiedBy\", \"lastModifiedDateTime\", \"name\", \"webUrl\", \"sharepointIds\", \"parentReference\", \"size\"],\r\n}\r\n\r\nexport const searchParams = {\r\n maxSize: 15\r\n};\r\n\r\nexport const filesPaging = {\r\n numberOfResults: 30\r\n};\r\n\r\nexport const sharePointInternalFileName = \"FileLeafRef\";\r\nexport const sharePointInternalTitleName = \"Title\";\r\nexport const sharePointInternalAuthorName = \"Author\";\r\nexport const sharePointInternalEditorName = \"Editor\";\r\n\r\nexport const sharepointType = {\r\n taxonomyTerm: \"SP.Taxonomy.TermCollection\"\r\n};\r\n\r\nexport const microsoftGraph = {\r\n url: {\r\n search: \"https://graph.microsoft.com/beta/search/query\"\r\n }\r\n};\r\n\r\nexport const API = {\r\n url: {\r\n outlook: { oneDrive: \"oneDrive/UploadOutlookFile\", sharepoint: \"Sharepoint/CreateSharepointOutlookFiles\" },\r\n office: { oneDrive: \"oneDrive/UploadOfficeFile\", sharepoint: \"Sharepoint/CreateSharepointOfficeFile\" },\r\n fileSystem: { sharepoint: \"Sharepoint/UploadFileSystemFilesToSharePoint\" }\r\n }\r\n};\r\n\r\nexport const sharepoint = {\r\n contentTypeFiltering:\r\n \"ReadOnlyField eq false and FromBaseType eq false and TypeAsString ne 'BusinessData' and Hidden eq false\",\r\n defaultContentType: \"Name eq 'Document'\",\r\n defaultViewXml: \"30\",\r\n moveCopyAllViewXml: \"1000\",\r\n};\r\n\r\nexport const columnSearchTypes = {\r\n webUrl: \"weburl\",\r\n name: \"name\",\r\n fileType: \"fileType\",\r\n driveid: \"driveid\",\r\n itemid: \"itemid\",\r\n serverRelativePath: \"serverrelativepath\",\r\n sizeText: \"sizetext\",\r\n sizeValue: \"sizevalue\",\r\n modifiedText: \"modifiedtext\",\r\n modifiedValue: \"modifiedvalue\",\r\n modifiedBy: \"modifiedby\",\r\n siteUrl: \"siteurl\",\r\n contentTypeId: \"contenttypeid\",\r\n uniqueId: \"uniqueid\",\r\n checkoutUser: \"checkoutuser\",\r\n canEdit: \"canedit\",\r\n canDelete: \"candelete\"\r\n};\r\n\r\nexport const requirementSet = {\r\n mailbox: \"Mailbox\"\r\n};\r\n\r\nexport const officeFileType = {\r\n Word: \"Word\",\r\n Excel: \"Excel\",\r\n Powerpoint: \"Powerpoint\",\r\n Visio: \"Visio\",\r\n Access: \"Access\",\r\n Project: \"Project\",\r\n Publisher: \"Publisher\",\r\n Infopath: \"Infopath\",\r\n Browser: \"Browser\",\r\n App: \"App\"\r\n};\r\n\r\nexport const filters = {\r\n onlyFolders: \"folder ne null\"\r\n};\r\n\r\nexport const initialFileOptionPanelInfoSetting = {\r\n driveId: \"\",\r\n isOpen: false,\r\n createdDateTime: null,\r\n lastModifiedDateTime: null,\r\n name: null,\r\n fileType: null,\r\n filePath: \"\",\r\n size: 0\r\n};\r\n\r\nexport const initialFolderOptionPanelInfoSetting: IFolderPanelInfo = {\r\n isOpen: false,\r\n folder: {\r\n driveId: null,\r\n id: null,\r\n name: null\r\n }\r\n};\r\n\r\nexport const initialPaging: IPager = {\r\n offset: 0,\r\n pageNumber: 0,\r\n top: filesPaging.numberOfResults,\r\n hasMoreResults: false,\r\n nextPageUrl: ''\r\n};\r\n\r\nexport const initialGraphPaging: IGraphPager = {\r\n top: filesPaging.numberOfResults,\r\n hasMoreResults: false,\r\n nextLink: null\r\n};\r\n\r\nexport const initialGraphSearchPager: IGraphSearchPager = {\r\n moreResultsAvailable: false,\r\n from: 0\r\n};\r\n\r\nconst siteFilters = {\r\n defaultExclude: \"-WebTemplate:POLICYCTR -WebTemplate:POINTPUBLISHINGHUB -WebTemplate:POINTPUBLISHINGPERSONAL -WebTemplate:POINTPUBLISHINGTOPIC -WebTemplate:APP -WebTemplate:APPCATALOG -WebTemplate:SPSPERS -WebTemplate:TEAMCHANNEL -WebTemplate:PWA -WebTemplate:EDISC\",\r\n allLevels: \"(contentclass:STS_Site OR contentclass:STS_Web)\",\r\n topLevelOnly: \"contentclass:STS_Site\",\r\n subsLevelOnly: \"contentclass:STS_Web\"\r\n}\r\n\r\nexport const siteQueries = {\r\n all: `${siteFilters.allLevels} ${siteFilters.defaultExclude}`,\r\n top: `${siteFilters.topLevelOnly} ${siteFilters.defaultExclude}`,\r\n subs: `${siteFilters.subsLevelOnly} ${siteFilters.defaultExclude}`,\r\n hubs: \"IsHubSite:true\"\r\n}\r\n\r\nexport const storageKeys = {\r\n recentOutlookReadMode: \"RecentOutlookReadMode\",\r\n recentOutlookComposeMode: \"RecentOutlookComposeMode\",\r\n recentOfficeReadMode: \"RecentOfficeReadMode\",\r\n recentOfficeComposeMode: \"RecentOfficeComposeMode\",\r\n pinItOutlookFolder: \"PinItOutlookFolder\",\r\n pinItOutlookFile: \"PinItOutlookFile\",\r\n pinItOfficeFolder: \"PinItOfficeFolder\",\r\n pinItOfficeFile: \"PinItOfficeFile\"\r\n};\r\n\r\nexport const shared = {\r\n params: {\r\n app: \"app\",\r\n accountId: \"acc\",\r\n username: \"username\",\r\n resource: \"res\",\r\n language: \"l\"\r\n }\r\n};\r\n\r\nexport const advancedSearch = {\r\n params: {\r\n siteId: \"siteId\",\r\n documentLibraryId: \"documentLibraryId\",\r\n tenantId: \"tenantId\",\r\n mode: \"mode\",\r\n loadUserRecentItems: \"ri\",\r\n hasTeamsAccess: \"tmsacc\",\r\n hasSharePointAccess: \"spacc\",\r\n isTeams: \"t\",\r\n allowOpenInSharePoint: \"aois\",\r\n hubId: \"hubId\",\r\n teamGroupId: \"tgid\",\r\n teamDriveId: \"tdid\",\r\n }\r\n};\r\n\r\nexport const contentManager = {\r\n params: {\r\n preloadLocation: \"pl\",\r\n preloadURL: \"plu\"\r\n }\r\n};\r\n\r\nexport const pdfEmbed = {\r\n params: {\r\n itemId: \"iid\",\r\n driveId: \"did\",\r\n isInOneDrive: \"io\"\r\n }\r\n};\r\n\r\nexport const validSaveAsPdfExtentions: string[] = [\"eml\", \"docx\", \"doc\", \"docm\", \"dot\", \"dotm\", \"dotx\", \"odt\", \"xlsx\", \"xls\", \"xlsb\", \"xlsm\", \"xlt\", \"xltm\", \"xltx\", \"csv\", \"pptm\", \"pptx\", \"potx\", \"potm\", \"htm\", \"html\", \"tiff\", \"tif\", \"rtf\", \"xps\"];\r\n\r\nexport enum FieldType {\r\n Invalid = 0,\r\n Integer = 1,\r\n Text = 2,\r\n Note = 3,\r\n DateTime = 4,\r\n Counter = 5,\r\n Choice = 6,\r\n Lookup = 7,\r\n Boolean = 8,\r\n Number = 9,\r\n Currency = 10,\r\n URL = 11,\r\n Computed = 12,\r\n Threading = 13,\r\n Guid = 14,\r\n MultiChoice = 15,\r\n GridChoice = 16,\r\n Calculated = 17,\r\n File = 18,\r\n Attachments = 19,\r\n User = 20,\r\n Recurrence = 21,\r\n CrossProjectLink = 22,\r\n ModStat = 23,\r\n Error = 24,\r\n ContentTypeId = 25,\r\n PageSeparator = 26,\r\n ThreadIndex = 27,\r\n WorkflowStatus = 28,\r\n AllDayEvent = 29,\r\n WorkflowEventType = 30,\r\n Geolocation = 31,\r\n OutcomeChoice = 32,\r\n Location = 33,\r\n Thumbnail = 34,\r\n MaxItems = 35\r\n}\r\n\r\nexport const SharepointFilters = {\r\n metadata: {\r\n save: \"$select=AllowMultipleValues,DefaultValue,Title,InternalName,Required,Id,SchemaXml,TypeAsString,ValidationFormula,ValidationMessage,MaximumValue,MinimumValue,ShowAsPercentage,AppendOnly,FillInChoice,Choices,CurrencyLocaleId,SelectionGroup,SelectionMode,AnchorId,IsTermSetValid,Open,SspId,TermSetId,EmId,EmFrom,Hidden,TextField&$filter=ReadOnlyField eq false and FromBaseType eq false and TypeAsString ne 'BusinessData' and Hidden eq false\",\r\n saveSPList: \"$select=AllowMultipleValues,DefaultValue,Title,InternalName,Required,Id,SchemaXml,TypeAsString,ValidationFormula,ValidationMessage,MaximumValue,MinimumValue,ShowAsPercentage,AppendOnly,FillInChoice,Choices,CurrencyLocaleId,SelectionGroup,SelectionMode,AnchorId,IsTermSetValid,Open,SspId,TermSetId,EmId,EmFrom,Hidden,TextField&$filter=ReadOnlyField eq false and Hidden eq false and Group ne '_Hidden'\",\r\n search: `$select=AllowMultipleValues,DefaultValue,Title,InternalName,Required,Id,SchemaXml,TypeAsString,ValidationFormula,ValidationMessage,MaximumValue,MinimumValue,ShowAsPercentage,AppendOnly,FillInChoice,Choices,CurrencyLocaleId,SelectionGroup,SelectionMode,AnchorId,IsTermSetValid,Open,SspId,TermSetId,EmId,EmFrom,Hidden,TextField&$filter=(ReadOnlyField eq false or FieldTypeKind eq ${FieldType.DateTime} or FieldTypeKind eq ${FieldType.User} or FieldTypeKind eq ${FieldType.Calculated}) and FieldTypeKind ne ${FieldType.File} and FieldTypeKind ne ${FieldType.Attachments} and FieldTypeKind ne ${FieldType.Computed} and TypeAsString ne 'BusinessData' and Hidden eq false and Group ne '_Hidden'`\r\n }\r\n};\r\n\r\nexport const invalidSaveModes: ModeEnum[] = [ModeEnum.mailCompose];\r\nexport const validSaveModes: ModeEnum[] = [ModeEnum.mailRead, ModeEnum.office, ModeEnum.mailSend];\r\nexport const validRefreshComponents = [ComponentTypes.SharePoint, ComponentTypes.Teams, ComponentTypes.OneDrive];\r\n\r\nexport const multipleSelectionTypes = [\r\n SharePointInputTypes.user,\r\n SharePointInputTypes.userMulti,\r\n SharePointInputTypes.taxonomyFieldType,\r\n SharePointInputTypes.taxonomyFieldTypeMulti,\r\n SharePointInputTypes.choice,\r\n SharePointInputTypes.multiChoice\r\n];\r\n\r\nexport const dateIndexes = {\r\n from: 0,\r\n to: 1\r\n};\r\n\r\nexport const internalSharepointName = {\r\n contentTypeId: \"ContentTypeId\"\r\n};\r\n\r\nexport const validPeopleInputTypes = [InputEnum.peoplePickerSingle, InputEnum.peoplePickerMultiple];\r\nexport const validPeoplePickerTypes = [SharePointInputTypes.user, SharePointInputTypes.userMulti];\r\nexport const validDocumentLibraryAdvancedSearchComponentTypes = [\r\n ComponentTypes.SharePointDocuments,\r\n ComponentTypes.SharePointFolders\r\n];\r\n\r\nexport const teamDocumentLibrary = {\r\n defaultName: \"Documents\",\r\n defaultDirectory: \"Shared Documents\"\r\n};\r\n\r\nexport const formatParts = {\r\n currency: \"currency\"\r\n};\r\n\r\nexport const validPdfExtensions = [\r\n \"csv\",\r\n \"doc\",\r\n \"docx\",\r\n \"odp\",\r\n \"ods\",\r\n \"odt\",\r\n \"pot\",\r\n \"potm\",\r\n \"potx\",\r\n \"pps\",\r\n \"ppsx\",\r\n \"ppsxm\",\r\n \"ppt\",\r\n \"pptm\",\r\n \"pptx\",\r\n \"rtf\",\r\n \"xls\",\r\n \"xlsx\"\r\n];\r\n\r\nexport const validPreviewExtension = [\"3g2\", \"3gp\", \"3mf\", \"abap\", \"ada\", \"adp\", \"ahk\", \"ai\", \"arw\", \"as\", \"as3\", \"asc\", \"ascx\", \"asf\", \"asm\", \"asp\", \"awk\", \"bas\", \"bash\", \"bash_login\", \"bash_logout\", \"bash_profile\", \"bashrc\", \"bat\", \"bib\", \"bmp\", \"bsh\", \"build\", \"builder\", \"c\", \"c++\", \"capfile\", \"cbk\", \"cc\", \"cfc\", \"cfm\", \"cfml\", \"cl\", \"clj\", \"cmake\", \"cmd\", \"coffee\", \"cool\", \"cpp\", \"cpt\", \"cpy\", \"cr2\", \"crw\", \"cs\", \"cshtml\", \"cson\", \"csproj\", \"css\", \"csv\", \"ctp\", \"cur\", \"cxx\", \"d\", \"dcm\", \"dcm30\", \"ddl\", \"di. dif\", \"dic\", \"dicm\", \"dicom\", \"diff\", \"disco\", \"dml\", \"dng\", \"doc\", \"docm\", \"docx\", \"dotm\", \"dotx\", \"dtd\", \"dtml\", \"dwg\", \"el\", \"emake\", \"eml\", \"epub\", \"erb\", \"erf\", \"erl\", \"f90\", \"f95\", \"fbx\", \"fs\", \"fsi\", \"fsscript\", \"fsx\", \"gemfile\", \"gemspec\", \"gif\", \"gitconfig\", \"glb\", \"gltf\", \"go\", \"groovy\", \"gvy\", \"h\", \"h++\", \"haml\", \"handlebars\", \"hbs\", \"hcp\", \"heic\", \"heif\", \"hevc\", \"hrl\", \"hs\", \"htc\", \"htm\", \"html\", \"html\", \"hxx\", \"ico\", \"icon\", \"idl\", \"iim\", \"inc\", \"inf\", \"ini\", \"inl\", \"ipp\", \"irbrc\", \"jade\", \"jav\", \"java\", \"jpe\", \"jpeg\", \"jpg\", \"js\", \"json\", \"jsp\", \"jsx\", \"key\", \"l\", \"less\", \"lhs\", \"lisp\", \"log\", \"log\", \"lst\", \"ltx\", \"lua\", \"m\", \"m2ts\", \"m4v\", \"make\", \"markdn\", \"markdown\", \"markdown\", \"md\", \"md\", \"mdown\", \"mef\", \"mkdn\", \"ml\", \"mli\", \"mll\", \"mly\", \"mm\", \"mov\", \"movie\", \"mp3\", \"mp4\", \"mp4v\", \"mrw\", \"msg\", \"mts\", \"mud\", \"nef\", \"nfo\", \"nrw\", \"obj\", \"odp\", \"ods\", \"odt\", \"opml\", \"orf\", \"osascript\", \"out\", \"p\", \"pages\", \"pano\", \"pas\", \"patch\", \"pdf\", \"pef\", \"php\", \"php2\", \"php3\", \"php4\", \"php5\", \"pict\", \"pl\", \"plist\", \"ply\", \"pm\", \"png\", \"pod\", \"pot\", \"potm\", \"potx\", \"pp\", \"pps\", \"ppsm\", \"ppsx\", \"ppt\", \"pptm\", \"pptx\", \"profile\", \"properties\", \"ps\", \"ps1\", \"psb\", \"psd\", \"pt\", \"py\", \"pyw\", \"r\", \"rake\", \"rb\", \"rbx\", \"rc\", \"re\", \"readme\", \"reg\", \"rest\", \"resw\", \"resx\", \"rhtml\", \"rjs\", \"rprofile\", \"rpy\", \"rss\", \"rst\", \"rtf\", \"rw2\", \"rxml\", \"s\", \"sass\", \"scala\", \"scm\", \"sconscript\", \"sconstruct\", \"script\", \"scss\", \"sgml\", \"sh\", \"shtml\", \"sketch\", \"sltx\", \"sml\", \"spm\", \"sql\", \"stl\", \"sty\", \"tcl\", \"tex\", \"text\", \"textile\", \"tif\", \"tiff\", \"tld\", \"tli\", \"tmpl\", \"tpl\", \"ts\", \"txt\", \"url\", \"vb\", \"vi\", \"vim\", \"vsd\", \"vsdx\", \"wmv\", \"wsdl\", \"xaml\", \"xbm\", \"xcf\", \"xd\", \"xhtml\", \"xls\", \"xlsb\", \"xlsx\", \"xml\", \"xoml\", \"xsd\", \"xsl\", \"xslt\", \"yaml\", \"yaws\", \"yml\", \"z\", \"zip\", \"zsh\"]\r\n\r\nexport const extensions = {\r\n pdf: \"pdf\",\r\n url: \"url\"\r\n};\r\n\r\nexport const EmptyGuid: string = \"00000000-0000-0000-0000-000000000000\";\r\n\r\nexport const SharePointFolderContentTypeIds = {\r\n document: \"0x0101\",\r\n folder: \"0x0120\",\r\n documentSet: \"0x0120D5\"\r\n}\r\n\r\nexport const decimalSteps = {\r\n 1: \"0.1\",\r\n 2: \"0.01\",\r\n 3: \"0.001\",\r\n 4: \"0.0001\",\r\n 5: \"0.00001\"\r\n}\r\n\r\nexport const piiConfig = {\r\n privacySentitiveColumnName: \"PrivacySensitive\",\r\n privacySentitiveDataColumnName: \"PrivacySensitiveData\",\r\n privacySentitiveDataDefault: \"Not Checked\"\r\n}\r\n\r\nexport const FileSortOptionKeys = {\r\n SortFields: {\r\n Relevance: \"Relevance\",\r\n Name: \"FileLeafRef\",\r\n TimeLastModified: \"Modified\",\r\n TimeCreated: \"Created\",\r\n Type: \"DocIcon\",\r\n Size: \"File_x0020_Size\"\r\n },\r\n SortOrder: {\r\n Ascending: \"Asc\",\r\n Descending: \"Desc\"\r\n }\r\n}\r\n\r\nexport const CopyMoveErrors = {\r\n DuplicateFilenames: \"Multiple files with the same name cannot be copied/moved to the same location.\"\r\n}\r\n\r\nexport const PopUpConstants = {\r\n POPUP_WIDTH: 483,\r\n /**\r\n * Default popup window height\r\n */\r\n POPUP_HEIGHT: 615,\r\n /**\r\n * Name of the popup window starts with\r\n */\r\n POPUP_NAME_PREFIX: \"docubird\",\r\n};\r\n\r\nexport const OfficeXMLNamespaces = {\r\n properties: \"http://schemas.microsoft.com/office/2006/metadata/properties\",\r\n types: \"http://schemas.microsoft.com/office/2006/metadata/contentType\"\r\n}\r\n\r\nexport const DocubirdCache = {\r\n currentFileUniqueId: \"currentFileUniqueId\",\r\n selectedExchangeItems: \"selectedExchangeItems\",\r\n spEmailPropertyMappings: \"spEmailPropertyMappings\",\r\n copyJobResults: \"copyJobResults\",\r\n signingEnabled: \"signingEnabled\",\r\n signalREnabled: \"signalREnabled\",\r\n officeFileUniqueId: \"officeFileUniqueId\",\r\n hooks: \"hooks\",\r\n users: \"users\",\r\n datasourceDocumentTemplates: \"dsDocTemplates\"\r\n}\r\n\r\nexport const officeExtentions = {\r\n word: {\r\n items: ['doc', 'docm', 'docx', 'dot', 'dotm', 'dotx', 'odt'],\r\n values: 'doc%3B%23docm%3B%23docx%3B%23dot%3B%23dotm%3B%23dotx%3B%23odt'\r\n },\r\n excel: {\r\n items: ['csv', 'ods', 'xla', 'xlam', 'xll', 'xls', 'xlsb', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx'],\r\n values: 'csv%3B%23ods%3B%23xla%3B%23xlam%3B%23xll%3B%23xls%3B%23xlsb%3B%23xlsm%3B%23xlsx%3B%23xlt%3B%23xltm%3B%23xltx'\r\n },\r\n powerPoint: {\r\n items: ['odp', 'pot', 'potm', 'potx', 'ppa', 'ppam', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx'],\r\n values: 'odp%3B%23pot%3B%23potm%3B%23potx%3B%23ppa%3B%23ppam%3B%23pps%3B%23ppsm%3B%23ppsx%3B%23ppt%3B%23pptm%3B%23pptx'\r\n },\r\n visio: {\r\n items: ['vdw', 'vsd', 'vsdm', 'vsdx', 'vsl', 'vss', 'vssm', 'vssx', 'vst', 'vstm', 'vstx'],\r\n values: 'vdw%3B%23vsd%3B%23vsdm%3B%23vsdx%3B%23vsl%3B%23vss%3B%23vssm%3B%23vssx%3B%23vst%3B%23vstm%3B%23vstx'\r\n }\r\n}\r\n\r\nexport const validSigningRequestExtensions: string[] = [\"DOC\", \"DOCM\", \"DOCX\", \"DOT\", \"DOTM\", \"DOTX\", \"HTM\", \"HTML\", \"MSG\", \"PDF\", \"RTF\", \"TXT\", \"WPD\", \"XHTML\", \"XPS\", \"BMP\", \"GIF\", \"HEIC\", \"JPG\", \"JPEG\", \"PNG\", \"TIF\", \"TIFF\", \"POT\", \"POTX\", \"PPS\", \"PPT\", \"PPTM\", \"PPTX\", \"CSV\", \"XLS\", \"XLSM\", \"XLSX\"];","export const SharePointInputTypes = {\r\n number: \"Number\",\r\n datetime: \"datetime\",\r\n currency: \"Currency\",\r\n note: \"Note\",\r\n text: \"Text\",\r\n Boolean: \"Boolean\",\r\n url: \"URL\",\r\n choice: \"Choice\",\r\n multiChoice: \"MultiChoice\",\r\n user: \"User\",\r\n userMulti: \"UserMulti\",\r\n taxonomyFieldType: \"TaxonomyFieldType\",\r\n taxonomyFieldTypeMulti: \"TaxonomyFieldTypeMulti\",\r\n numberPercentage: \"NumberPercentage\",\r\n lookupSingle: \"Lookup\",\r\n lookupMulti: \"LookupMulti\",\r\n thumbNail: \"Thumbnail\"\r\n};\r\n\r\nexport const SharePointMetadataBooleans = {\r\n true: \"TRUE\",\r\n false: \"FALSE\"\r\n}\r\n\r\nexport const SharePointFormatTypes = {\r\n dateOnly: \"DateOnly\",\r\n dateTime: \"DateTime\",\r\n image: \"Image\",\r\n hyperlink: \"Hyperlink\",\r\n dropdown: \"Dropdown\",\r\n radioButtons: \"RadioButtons\"\r\n}\r\n\r\n","import { DirectoryTreeType } from \"../config/config\";\r\nimport { IGraphSearchPager } from \"./IGraphSearchPager\";\r\nimport { ISharepointDocumentLocation } from \"./ISharepointDocument\";\r\nimport { ITeamChannelLocationDto } from \"./services/ITeamChannelDto.1\";\r\n\r\nexport interface ISiteInfo {\r\n id: string;\r\n name: string;\r\n webUrl: string;\r\n isSubsite: boolean;\r\n siteName?: string;\r\n key?: string;\r\n isTeam?: boolean;\r\n isSharedTeam?: boolean;\r\n isSite?: boolean;\r\n isHub?: boolean;\r\n hubId?: string;\r\n parentHubId?: string;\r\n description?: string;\r\n createdDateTime?: Date;\r\n lastModifiedDateTime?: Date;\r\n}\r\n\r\nexport interface ISiteInfoUrl extends ISiteInfo {\r\n webUrl: string;\r\n isTeam?: boolean;\r\n isChannel?: boolean;\r\n teamSiteId?: string;\r\n}\r\n\r\nexport interface ISubSiteInfo {\r\n id: string;\r\n name: string;\r\n webUrl: string;\r\n parentSiteId: string;\r\n}\r\n\r\nexport interface ISiteInfoLocation extends ISiteInfo {\r\n canExpand?: boolean;\r\n expanded?: boolean;\r\n channels?: ITeamChannelLocationDto[];\r\n subSites?: ISiteInfoLocation[];\r\n subSitesNextHref?: string;\r\n documents?: ISharepointDocumentLocation[];\r\n parentId?: string;\r\n treeType?: DirectoryTreeType;\r\n level?: number;\r\n isLoading?: boolean;\r\n loaded?: boolean;\r\n isSelected?: boolean;\r\n teamGroupId?: string;\r\n teamDriveId?: string;\r\n siteId?: string;\r\n randomId: string;\r\n}\r\n\r\nexport interface ISiteSearchRequest {\r\n query?: string;\r\n from?: number;\r\n size?: number;\r\n hubSitesOnly?: boolean;\r\n allowedSites?: string[];\r\n hubSiteIds?: string[];\r\n}\r\n\r\nexport interface ISiteSearchResult {\r\n sites: ISiteInfo[];\r\n pageData: IGraphSearchPager;\r\n}\r\n\r\nexport const mapSites = (site: any): ISiteInfo => {\r\n return {\r\n id: site.id,\r\n name: site.displayName,\r\n description: site.description,\r\n webUrl: site.webUrl,\r\n siteName: site.name,\r\n isSite: true,\r\n isSubsite: false,\r\n createdDateTime: site.createdDateTime,\r\n lastModifiedDateTime: site.lastModifiedDateTime\r\n }\r\n};\r\n\r\nexport const mapSubSites = (site: any): ISiteInfo => {\r\n return {\r\n id: site.id,\r\n name: site.displayName,\r\n description: site.description,\r\n webUrl: site.webUrl,\r\n siteName: site.name,\r\n isSite: true,\r\n isSubsite: true\r\n }\r\n};\r\n\r\nexport const filterNonTopLevelSites = (site: any, index: number, siteArray: any[]): boolean => {\r\n if (!site.root) {\r\n return genericSiteTopLevelPathPredicate(site, siteArray);\r\n }\r\n return true;\r\n}\r\n\r\nexport const filterNonTopLevelISiteInfoArray = (site: ISiteInfo, index: number, siteArray: ISiteInfo[]): boolean => {\r\n if (site?.isSubsite) {\r\n return genericSiteTopLevelPathPredicate(site, siteArray);\r\n }\r\n return true;\r\n}\r\n\r\nconst genericSiteTopLevelPathPredicate = (site: ISiteInfo, siteArray: ISiteInfo[]): boolean => {\r\n const siteWebUrlParts: string[] = site?.webUrl?.split(\"/\");\r\n if (Array.isArray(siteWebUrlParts) && siteWebUrlParts.length > 0) {\r\n siteWebUrlParts.pop();\r\n const parentWebUrl = siteWebUrlParts.join(\"/\");\r\n if (siteArray.some(s => s.webUrl === parentWebUrl)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}","import { apiHeaders, axiosRetryGet, axiosRetryPost, localApiInstance } from \"../../../utilities/AxiosRetryUtil\";\r\nimport { IDocumentSetCreationData } from \"../interfaces/IDocumentSetCreationData\";\r\nimport { IDownloadRequest } from \"../interfaces/IDownloadRequest\";\r\nimport { IFileSystemUploadData } from \"../interfaces/IFileSystemUploadData\";\r\nimport { IStoreItem } from \"../interfaces/IStoredItem\";\r\nimport { ITenantInfo } from \"../interfaces/ITenantInfo\";\r\nimport { IUserProfile, IUserSettings } from \"../interfaces/IUserProfile\";\r\nimport { IDocumentSearchRequest } from \"../interfaces/advancedSearch/IDocumentSearchRequest\";\r\nimport { IDocumentSearchResult } from \"../interfaces/advancedSearch/IDocumentSearchResult\";\r\nimport LZString = require(\"lz-string\");\r\nimport { IOneDriveDataDto } from \"../interfaces/IOneDriveDataDto\";\r\nimport { IOneDriveOfficeDataDto } from \"../interfaces/IOneDriveOfficeDataDto\";\r\nimport { ISharepointDataDto } from \"../interfaces/ISharepointDataDto\";\r\nimport { ISharepointOfficeDataDto } from \"../interfaces/ISharepointOfficeDataDto\";\r\nimport { IDriveItemRequest } from \"../interfaces/IDriveItemRequest\";\r\nimport axios, { AxiosResponse } from \"axios\";\r\nimport { IFilePreCommitRequest } from \"../interfaces/IFilePreCommitRequest\";\r\nimport { ApprovalRequest, BulkMetadataUpdateRequest, ConvertAndSaveAsPDFRequest, CreateDocumentFromTemplateRequest, ExchangeMailFolderUploadRequest, FolderPreCommitRequest, IHookRequest, IHookResult, MetadataUpdateRequest, ReplaceFileRequest, SignRequest, UpdateTriggerRequest } from \"../components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { IAuthAccount, IAuthTokenResultDto, IJwtAuthTokenResult } from \"../interfaces/IAuthTokenResultDto\";\r\nimport { IFileSystemFolder } from \"../../../utilities/DragAndDropHelper\";\r\nimport { IMailSettingsDto } from \"../../../utilities/OutlookUtils\";\r\nimport { UserLicenseTypeEnum } from \"../components/enums/userLicenseTypeEnum\";\r\nimport { IFilePreCommitResult } from \"../interfaces/IFilePreCommitResult\";\r\nimport { ListItemCreationData } from \"../interfaces/ListItemCreationData\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\n\r\nconst handleError = (error: any) => {\r\n if (error?.response?.status === 401 || error?.response?.status === 403) {\r\n console.error(error?.response?.data);\r\n } else {\r\n logger(error?.response?.data, \"ApiService.ts (handleError)\");\r\n throw error;\r\n }\r\n}\r\n\r\nexport const refreshJwt = async (accessToken: string) => {\r\n try {\r\n // Use default axios retry instance to skip access token refresh interceptor\r\n const result: IJwtAuthTokenResult = (await axiosRetryGet(\r\n `${process.env.API_URL}auth/RefreshJwt`,\r\n {\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n [apiHeaders.key.xDocubirdAuth]: apiHeaders.value.xDocubirdAuth\r\n }\r\n }\r\n ))?.data;\r\n return result;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return null;\r\n}\r\n\r\nexport const apiSearchDocuments = async (documentSearchRequest: IDocumentSearchRequest) => {\r\n try {\r\n const results: IDocumentSearchResult[] = (await axiosRetryPost(\"Search/Documents\", documentSearchRequest, undefined, true, localApiInstance))?.data;\r\n return results ?? [];\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return [];\r\n}\r\n\r\nexport const apiGetTenantInfo = async (tenantId?: string) => {\r\n try {\r\n const results: ITenantInfo = (await axiosRetryGet(`tenants/${tenantId}`, undefined, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiUpdateUserSettings = async (dbSettings: IUserSettings, accountId?: string) => {\r\n try {\r\n const results = (await axiosRetryPost(`User/UpdateUserSettings?accountId=${accountId}`, dbSettings, undefined, true, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiDownloadFileStream = async (downloadRequestPayload: IDownloadRequest) => {\r\n try {\r\n const fileBlob: Blob = (await axiosRetryPost(\"File/Download\", downloadRequestPayload, {\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n responseType: \"blob\"\r\n }, true, localApiInstance))?.data;\r\n\r\n return fileBlob ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiCreateDocumentSet = async (documentSetCreationData: IDocumentSetCreationData): Promise => {\r\n try {\r\n await axiosRetryPost(\"sharepoint/CreateDocumentSet\", documentSetCreationData, undefined, true, localApiInstance);\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n}\r\n\r\nexport const apiGetCompressedPinnedData = async (accountId: string) => {\r\n try {\r\n const results: string = (await axiosRetryGet(`User/GetPinnedItems/${accountId}`, undefined, localApiInstance))?.data.value;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiGetOldPinnedItems = async (accountId: string) => {\r\n try {\r\n const results: IStoreItem[] = (await axiosRetryGet(`User/GetOldPinnedItems/${accountId}`, undefined, localApiInstance))?.data.value;\r\n return results ?? [];\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return [];\r\n}\r\n\r\nexport const apiSetPinnedItems = async (accountId: string, updatedPinnedItems: IStoreItem[]): Promise => {\r\n try {\r\n axiosRetryPost(`User/SetPinnedItems/${accountId}`,\r\n { encryptedJsonContent: LZString.compressToBase64(JSON.stringify(updatedPinnedItems)) }, undefined, true, localApiInstance);\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n}\r\n\r\nexport interface SetSuggestedItemsRequest {\r\n accountId: string;\r\n sender: string;\r\n encryptedJsonContent?: string;\r\n}\r\n\r\nexport const apiSetSuggestedItems = async (accountId: string, sender: string, updatedtSuggestedItems: IStoreItem[]): Promise => {\r\n try {\r\n const request: SetSuggestedItemsRequest = {\r\n accountId,\r\n sender,\r\n encryptedJsonContent: LZString.compressToBase64(JSON.stringify(updatedtSuggestedItems))\r\n }\r\n\r\n axiosRetryPost(`User/SetSuggestedSaveLocations`, request, undefined, true, localApiInstance);\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n}\r\n\r\nexport const apiGetCompressedSuggestedData = async (accountId: string, sender: string) => {\r\n try {\r\n const request: SetSuggestedItemsRequest = {\r\n accountId,\r\n sender\r\n };\r\n const results: string = (await axiosRetryPost(`User/GetSuggestedSaveLocations`, request, undefined, true, localApiInstance))?.data.value;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiGetCompressedRecentData = async (accountId: string) => {\r\n try {\r\n const results: string = (await axiosRetryGet(`User/GetRecentItems/${accountId}`, undefined, localApiInstance))?.data.value;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiGetOldRecentItems = async (accountId: string) => {\r\n try {\r\n const results: IStoreItem[] = (await axiosRetryGet(`User/GetOldRecentItems/${accountId}`, undefined, localApiInstance))?.data.value;\r\n return results ?? [];\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return [];\r\n}\r\n\r\nexport const apiSetRecentItems = async (accountId: string, updatedRecentItems: IStoreItem[]): Promise => {\r\n try {\r\n axiosRetryPost(`User/SetRecentItems/${accountId}`,\r\n { encryptedJsonContent: LZString.compressToBase64(JSON.stringify(updatedRecentItems.filter(item => !item.cannotBeRemoved))) }, undefined, true, localApiInstance);\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n}\r\n\r\nexport const apiGetCompressedEmailToMetadataMapping = async (accountId: string) => {\r\n try {\r\n const results: string = (await axiosRetryGet(`User/GetEmailToMetadataMapping/${accountId}`, undefined, localApiInstance))?.data?.value;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiSetEmailToMetadataMapping = async (accountId: string, compressedData: string): Promise => {\r\n try {\r\n await axiosRetryPost(`User/SetEmailToMetadataMapping/${accountId}`, { encryptedJsonContent: compressedData }, undefined, true, localApiInstance);\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n}\r\n\r\ntype DataToSend =\r\n | IFileSystemUploadData\r\n | ISharepointOfficeDataDto\r\n | IOneDriveOfficeDataDto\r\n | ISharepointDataDto\r\n | IOneDriveDataDto;\r\n\r\nexport const apiFileSystemCallDynamicEndpoint = async (\r\n endpoint: string,\r\n retryInternalServerError: boolean,\r\n dataToSend: DataToSend\r\n): Promise => {\r\n try {\r\n const results = (await axiosRetryPost(endpoint, dataToSend, undefined, retryInternalServerError, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiConvertFileToPdf = async (requestPayload: IDriveItemRequest) => {\r\n try {\r\n const results: AxiosResponse = await axiosRetryPost(\"File/ConvertToPdf\", requestPayload, {\r\n responseType: \"blob\"\r\n }, true, localApiInstance);\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiGetAttachmentExtension = async (ewsUrl: string, ewsToken: string, attachmentIdList: string[]) => {\r\n try {\r\n const results = (await axiosRetryPost(\"sharepoint/GetAttachmentExtension\", { ewsUrl, ewsToken, attachmentIdList }, undefined, false, localApiInstance))?.data;;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiFilePreCommitCheck = async (request: IFilePreCommitRequest) => {\r\n try {\r\n const results: IFilePreCommitResult = (await axiosRetryPost(\"sharepoint/FilePreCommitCheck\", request, undefined, true, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiFolderPreCommitCheck = async (request: FolderPreCommitRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"sharepoint/FolderPreCommitCheck\", request, undefined, true, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiUpdateItemMetadata = async (request: MetadataUpdateRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"sharepoint/UpdateItemMetadata\", request, undefined, true, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiBulkUpdateItemMetadata = async (request: BulkMetadataUpdateRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"sharepoint/BulkUpdateItemMetadata\", request, undefined, true, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiVerifyAndFireUpdateTrigger = async (request: UpdateTriggerRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"sharepoint/VerifyAndFireUpdateTrigger\", request, undefined, true, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiAddListItem = async (request: ListItemCreationData) => {\r\n try {\r\n const results = (await axiosRetryPost(\"sharepoint/AddListItem\", request, undefined, true, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiUploadExchangeMailFolder = async (request: ExchangeMailFolderUploadRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"sharepoint/UploadExchangeMailFolder\", request, undefined, true, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiSilentTokenRequest = async (accountId: string) => {\r\n try {\r\n const results: IAuthTokenResultDto = (await axiosRetryGet(`Auth/SilentTokenRequest?accountId=${accountId}`, undefined, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiRefreshTokenRequest = async (account: IAuthAccount) => {\r\n try {\r\n const results: IAuthTokenResultDto = (await axiosRetryPost(\"Auth/RefreshTokenRequest\", {\r\n accountId: account.accountId,\r\n sharePointBaseUrl: account.sharePointBaseUrl,\r\n oneDriveWebUrl: account.oneDriveWebUrl,\r\n displayName: account.displayName\r\n },\r\n undefined, true, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiAquireFlowToken = async (authState: IAuthTokenResultDto) => {\r\n try {\r\n const results: IAuthTokenResultDto = (await axiosRetryGet(`Auth/AquireFlowToken?accountId=${authState.account.accountId}`, undefined, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiAquireSharePointAdminToken = async (authState: IAuthTokenResultDto) => {\r\n try {\r\n let authUrl: URL = new URL(`${process.env.API_URL}Auth/AquireSharePointAdminToken`);\r\n authUrl.searchParams.append(\"accountId\", authState.account?.accountId);\r\n authUrl.searchParams.append(\"sharePointBaseUrl\", authState.account?.sharePointBaseUrl);\r\n\r\n const results: IAuthTokenResultDto = (await axiosRetryGet(authUrl.href, undefined, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiAquireMailSendToken = async (authState: IAuthTokenResultDto) => {\r\n try {\r\n let authUrl: URL = new URL(`${process.env.API_URL}Auth/AquireMailSendToken`);\r\n authUrl.searchParams.append(\"accountId\", authState.account?.accountId);\r\n\r\n const results: IAuthTokenResultDto = (await axiosRetryGet(authUrl.href, undefined, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiAquireMailboxToken = async (authState: IAuthTokenResultDto) => {\r\n try {\r\n let authUrl: URL = new URL(`${process.env.API_URL}Auth/AquireMailboxToken`);\r\n authUrl.searchParams.append(\"accountId\", authState.account?.accountId);\r\n\r\n const results: IAuthTokenResultDto = (await axiosRetryGet(authUrl.href, undefined, localApiInstance))?.data;\r\n\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n// export const apiTeamsToken = async (authState: IAuthTokenResultDto) => {\r\n// try {\r\n// let authUrl: URL = new URL(`${process.env.API_URL}Auth/AquireTeamsToken`);\r\n// authUrl.searchParams.append(\"accountId\", authState.account?.accountId);\r\n\r\n// const results: IAuthTokenResultDto = (await axiosRetryGet(authUrl.href, undefined, localApiInstance))?.data;\r\n\r\n// return results ?? undefined;\r\n// } catch (error) {\r\n// handleError(error);\r\n// }\r\n\r\n// return undefined;\r\n// }\r\n\r\nexport const apiCreateFolders = async (accessToken: string, siteUrl: string, parentUrl: string, listId: string, autoFolderCreation: boolean, folders: IFileSystemFolder[]) => {\r\n try {\r\n const results: IFileSystemFolder[] = (await axiosRetryPost(\"sharepoint/CreateFolders\", { accessToken, siteUrl, parentUrl, listId, autoFolderCreation, folders }, undefined, true, localApiInstance))?.data as IFileSystemFolder[];\r\n return results ?? []\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return []\r\n}\r\n\r\nexport const apiUpload = async (accountId: string, formData: FormData, path?: string) => {\r\n try {\r\n let uploadUrl: string = `Upload?accountId=${accountId}`;\r\n\r\n await axiosRetryPost(!path ? uploadUrl : uploadUrl + path, formData, undefined, true, localApiInstance);\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n}\r\n\r\nexport const apiClientError = async (clientError: any) => {\r\n try {\r\n // Use static axios instance as to not retry logging calls\r\n await axios.post(`${process.env.API_URL}Log/ClientError`, clientError, {\r\n headers: {\r\n Authorization: `Bearer ${authModule.getDocubirdTokenCached()}`,\r\n [apiHeaders.key.xDocubirdAuth]: apiHeaders.value.xDocubirdAuth\r\n }\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n\r\nexport const apiLog = async (message: string, account: IAuthAccount, type?: string) => {\r\n try {\r\n await axiosRetryPost(\"Log\", {\r\n message: `${message} - ${account?.username} - ${navigator?.userAgent}`,\r\n level: type\r\n }, undefined, true, localApiInstance);\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n}\r\n\r\nexport const apiSavePayload = async (mailPayloadDto: IMailSettingsDto) => {\r\n try {\r\n await axiosRetryPost(\"SaveOnSend/SavePayload\", mailPayloadDto, undefined, true, localApiInstance);\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n}\r\n\r\nexport const apiGetPayload = async (accountId: string) => {\r\n try {\r\n const results: string = (await axiosRetryGet(`SaveOnSend/GetPayload/${accountId}`, undefined, localApiInstance))?.data\r\n return results ?? \"\"\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\nexport const apiGetUserLicense = async (userAccount: IAuthAccount) => {\r\n try {\r\n const results: UserLicenseTypeEnum = (await axiosRetryPost(\"User/GetUserLicense\", userAccount, undefined, true, localApiInstance))?.data;\r\n return results ?? UserLicenseTypeEnum.Expired\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return UserLicenseTypeEnum.Expired;\r\n}\r\n\r\nexport const apiGetUserProfile = async (userAccount: IAuthAccount) => {\r\n try {\r\n const results: IUserProfile = (await axiosRetryPost(\"User/GetUserProfile\", userAccount, undefined, true, localApiInstance))?.data;\r\n return results ?? null\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport const apiLoginAuthGetRequest = async (authUrlGetRequest: URL) => {\r\n try {\r\n // Use default axios retry instance to skip access token refresh interceptor\r\n const results = (await axiosRetryGet(\r\n authUrlGetRequest.href,\r\n {\r\n headers: {\r\n [apiHeaders.key.xDocubirdAuth]: apiHeaders.value.xDocubirdAuth\r\n }\r\n }\r\n ))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiLoginCodeTokenRequest = async (codeTokenRequestUrl: URL) => {\r\n try {\r\n // Use default axios retry instance to skip access token refresh interceptor\r\n const results = (await axiosRetryGet(\r\n codeTokenRequestUrl.href,\r\n {\r\n headers: {\r\n [apiHeaders.key.xDocubirdAuth]: apiHeaders.value.xDocubirdAuth\r\n }\r\n }\r\n ))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiGetBackgroundTaskProgess = async (taskId: string) => {\r\n try {\r\n const results = (await axiosRetryGet(`BackgroundTasks/progress/${taskId}`, undefined, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiFileReplace = async (request: ReplaceFileRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"file/Replace\", request, undefined, true, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiFileCreateDocumentFromTemplate = async (request: CreateDocumentFromTemplateRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"file/CreateDocumentFromTemplate\", request, undefined, true, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const apiFileConvertAndSaveAsPDF = async (request: ConvertAndSaveAsPDFRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"file/ConvertAndSaveAsPDF\", request, undefined, true, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport const apiGetHooksByType = async (request: IHookRequest): Promise => {\r\n try {\r\n const results = (await axiosRetryGet(`hooks?tenantGuid=${request.TenantGUID}&hookTypeId=${request.HookTypeId}`, undefined, localApiInstance))?.data;\r\n return results ?? []\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport const apiRequestApproval = async (request: ApprovalRequest) => {\r\n try {\r\n const results = (await axiosRetryPost(\"hooks/request/approval\", request, undefined, true, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n return handleError(error);\r\n }\r\n}\r\n\r\n// export const apiRequestSigning = async (data: SignRequest) => {\r\n// try {\r\n// const results = (await axiosRetryPost(\"sign/create\", data, undefined, true, localApiInstance))?.data;\r\n// return results ?? undefined;\r\n// } catch (error) {\r\n// handleError(error);\r\n// }\r\n// return undefined;\r\n// }\r\n\r\nexport const apiGetAdditionalMailboxes = async (accountId: string) => {\r\n try {\r\n const results = (await axiosRetryGet(`user/GetAdditionalMailboxes/${accountId}`, undefined, localApiInstance))?.data;\r\n return results ?? []\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport const apiSetAdditionalMailboxes = async (accountId: string, additionalMailboxes: string[]) => {\r\n try {\r\n const body = {\r\n additionalMailboxes\r\n }\r\n\r\n const results = (await axiosRetryPost(`user/SetAdditionalMailboxes/${accountId}`, body, undefined, true, localApiInstance))?.data;\r\n return results ?? undefined;\r\n } catch (error) {\r\n handleError(error);\r\n }\r\n\r\n return undefined;\r\n}","import { Client } from \"@microsoft/microsoft-graph-client/lib/src/browser\";\r\n\r\nexport const getAuthenticatedClient = (accessToken: string) => {\r\n return Client.init({\r\n authProvider: (done: any) => {\r\n done(null, accessToken);\r\n }\r\n });\r\n}","import \"isomorphic-fetch\";\r\nimport {\r\n Client,\r\n BatchRequestStep,\r\n BatchRequestContent,\r\n BatchResponseContent,\r\n GraphRequest,\r\n PageIteratorCallback,\r\n PageIterator,\r\n ResponseType,\r\n LargeFileUploadSession,\r\n LargeFileUploadTask,\r\n FileUpload,\r\n} from \"@microsoft/microsoft-graph-client/lib/src/browser\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { IDriveInfo } from \"../interfaces/IDriveInfo\";\r\nimport { ITeamChannel, ITeamChannelSite } from \"../interfaces/services/ITeamChannel\";\r\nimport { ITeamChannelDto } from \"../interfaces/services/ITeamChannelDto.1\";\r\nimport { ITeamChannelDocumentLibrary } from \"../interfaces/services/ITeamChannelDocumentLibrary\";\r\nimport { ITeam } from \"../interfaces/services/ITeam\";\r\nimport { filters, initialGraphSearchPager, microsoftGraph, searchFields, siteQueries } from \"../config/constants\";\r\nimport { GraphSearchRestHelper } from \"../components/helpers/restSearchBuilder\";\r\nimport { SearchResultMapper } from \"../components/helpers/searchResultMapper\";\r\nimport { ISearchDocumentLibraryParams } from \"../interfaces/ISearchDocumentLibraryParams\";\r\nimport { SearchBatchRequestHelper } from \"../components/helpers/searchBatchRequestHelper\";\r\nimport { DriveItemSearchResult } from \"../interfaces/IDriveItemSearchResult\";\r\nimport { DriveItemSearchResultComposite } from \"../interfaces/DriveItemSearchResultComposite\";\r\nimport { IBatchSearchResult } from \"../interfaces/IBatchSearchResult\";\r\nimport { DriveIdBatchHelper } from \"../components/helpers/driveIdBatchHelper\";\r\nimport { ISiteBatchInfo } from \"../interfaces/ISiteBatchInfo\";\r\nimport { ISiteDriveItems } from \"../interfaces/ISiteDriveItems\";\r\nimport { ISharepointDocument } from \"../interfaces/ISharepointDocument\";\r\nimport { IDefaultSite } from \"../interfaces/IDefaultSite\";\r\nimport { IDriveItemShareableLink } from \"../interfaces/IDriveItemShareableLink\";\r\nimport { IShareableLink } from \"../interfaces/services/IShareableLink\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\nimport { IFileFolderSearch } from \"../interfaces/IFileFolderSearch\";\r\nimport { IFileFolderSearchSharepointParams } from \"../interfaces/IFileFolderSearchSharepointParams\";\r\nimport { IBetaSearchExtraDriveInfo } from \"../interfaces/IBetaSearchExtraDriveInfo\";\r\nimport { getLastSplittedStringItem } from \"../components/helpers/stringHelper\";\r\nimport { IGraphPager } from \"../interfaces/IGraphPager\";\r\nimport { IFolderDrivePaging } from \"../interfaces/IFolderDrivePaging\";\r\nimport { ISharepointFolderDrivePaging } from \"../interfaces/ISharepointFolderDrivePaging\";\r\nimport path = require(\"path\");\r\nimport { IMapper } from \"../interfaces/IMapper\";\r\nimport { ISharepointRelativeFileInfo } from \"../interfaces/ISharepointRelativeFileInfo\";\r\nimport { IGraphSearchResult } from \"../interfaces/IGraphSearchResult\";\r\nimport { ITeamChannelInfo } from \"../interfaces/ITeamChannelInfo\";\r\nimport { IDriveItemRequest } from \"../interfaces/IDriveItemRequest\";\r\nimport { IProtectionLabel } from \"../interfaces/IProtectionLabel\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { axiosRetryGet, axiosRetryPost } from \"../../../utilities/AxiosRetryUtil\";\r\nimport { ISiteInfo, ISiteSearchRequest, ISiteSearchResult, ISubSiteInfo, filterNonTopLevelSites, mapSites, mapSubSites } from \"../interfaces/ISiteInfo\";\r\nimport { IReassignPerson } from \"../components/directoryComponents/myApprovals/IReassignPerson\";\r\nimport { IPageableCollection } from \"../interfaces/IPageableCollection\";\r\nimport { IGraphSiteSearchResult, IHit, IHitResource, IHitsContainer } from \"../interfaces/IGraphSearchQueryResult\";\r\nimport { DateService } from \"./dateService\";\r\nimport { IOneDriveRootDetails } from \"../interfaces/IOneDriveRootDetails\";\r\nimport { tryDecodeUriComponent, tryEncodeUriComponent } from \"../../../utilities/EncodeDecode\";\r\nimport { detectIEOrEdge } from \"../../../utilities/BrowserUtils\";\r\nimport { ISharePointIds } from \"../interfaces/ISharePointIds\";\r\nimport { discardCheckOut } from \"./SharePointRestServices\";\r\nimport { IGraphCreateShareableLinkRequest } from \"../components/_v2/redux/api/graph/api-graph-interfaces\";\r\nimport { getAuthenticatedClient } from \"./GraphClientService\";\r\nimport { SharePointSiteHelper } from \"../../../utilities/SharePointSiteHelper\";\r\nimport { apiConvertFileToPdf } from \"./ApiService\";\r\nimport { CacheHelper } from \"../../../utilities/CacheHelper\";\r\nimport { IPerson } from \"../interfaces/IPersonResult\";\r\n\r\nconst encodePath = (path: string): string => {\r\n try {\r\n let pathParts = path.split(\"/\");\r\n for (let index = 0; index < pathParts.length; index++) {\r\n let urlPart = pathParts[index];\r\n pathParts[index] = tryEncodeUriComponent(tryDecodeUriComponent(urlPart.trim()));\r\n }\r\n const encodedPath = pathParts.join(\"/\");\r\n if (!encodedPath?.startsWith(\"/\")) {\r\n return `/${encodedPath}`;\r\n }\r\n return encodedPath;\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (encodePath)\");\r\n }\r\n return path;\r\n}\r\n\r\nexport const getUserProfilePicture = async (accessToken: string) => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const response = await client\r\n .api(\"me/photos/48x48/$value\")\r\n .header(\"Cache-Control\", \"no-cache\")\r\n .responseType(ResponseType.RAW)\r\n .get();\r\n\r\n if (response.ok) {\r\n const url = window.URL || window.webkitURL;\r\n const blob = await response.blob();\r\n const imageUrl = url.createObjectURL(blob);\r\n return imageUrl;\r\n }\r\n }\r\n catch (e) {\r\n logger(e, \"GraphService.ts (getUserProfilePicture)\");\r\n }\r\n return null;\r\n}\r\n\r\nexport const getDriverFolders = async (pager: IGraphPager, accessToken: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n let response = !pager.nextLink || pager.nextLink.trim().length === 0\r\n ? await client.api(\"/me/drive/root/children\").filter(filters.onlyFolders).select(\"id,name,parentReference,webUrl\").get()\r\n : await client.api(pager.nextLink).get();\r\n\r\n return mapOneDriveFolderData(response);\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getDriverFolders)\");\r\n return { folders: [], nextLink: \"\" };\r\n }\r\n};\r\n\r\nconst mapOneDriveFolderData = (result): IFolderDrivePaging => {\r\n return {\r\n folders: result?.value.map(data => ({\r\n id: data.id,\r\n name: data.name,\r\n driveId: data.parentReference.driveId,\r\n webUrl: data.webUrl\r\n })),\r\n nextLink: result[\"@odata.nextLink\"] ?? \"\"\r\n };\r\n};\r\n\r\nconst mapSharepointFolderData = (result): ISharepointFolderDrivePaging => {\r\n return {\r\n folders: result?.value.map(data => ({\r\n id: data.id,\r\n name: data.name,\r\n driveId: data.parentReference.driveId,\r\n lastModifiedDateTime: data.lastModifiedDateTime,\r\n contentTypeId: data.listItem?.contentType?.id,\r\n webUrl: data.listItem?.webUrl,\r\n sharePointUniqueId: data.sharepointIds?.listItemUniqueId\r\n })),\r\n nextLink: result[\"@odata.nextLink\"] ?? \"\"\r\n };\r\n};\r\n\r\nconst getSkipToken = (nextLink: string) => {\r\n if (!nextLink) return \"\";\r\n\r\n const skipToken = \"$skipToken\";\r\n const index = nextLink.indexOf(skipToken);\r\n const result = nextLink.substring(index).replace(`${skipToken}=`, \"\");\r\n return result;\r\n};\r\n\r\nexport const getChildDriverFolders = async (\r\n accessToken: string,\r\n driveInfo: IDriveInfo,\r\n pager: IGraphPager\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n let response = !pager.nextLink || pager.nextLink.trim().length === 0\r\n ? await client.api(`/drives/${driveInfo.driveId}/items/${driveInfo.id}/children`).filter(filters.onlyFolders).select(\"id,name,parentReference,webUrl\").get()\r\n : await client.api(pager.nextLink).get();\r\n\r\n return mapOneDriveFolderData(response);\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getChildDriverFolders)\");\r\n return { folders: [], nextLink: \"\" };\r\n }\r\n};\r\n\r\nconst executePageIteratorCallback = async (client: Client, response: any, callback: PageIteratorCallback) => {\r\n let pageIterator = new PageIterator(client, response, callback);\r\n await pageIterator.iterate();\r\n};\r\n\r\nexport const getSharePointBaseUrl = async (accessToken: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const baseUrl = (\r\n await client\r\n .api(\"sites/root\")\r\n .select(\"webUrl\")\r\n .get()\r\n )?.webUrl;\r\n return baseUrl;\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getSharePointBaseUrl)\");\r\n return null;\r\n }\r\n};\r\n\r\n// export const getSharePointSitesCall = async (accessToken: string, nextPageLink?: string, searchValue?: string, hubSiteIds?: string[]): Promise => {\r\n// try {\r\n// const client = getAuthenticatedClient(accessToken);\r\n// let result: any;\r\n// if (!nextPageLink) {\r\n// // const requestPath: string = `/sites?search=${!(searchValue?.length > 0) ? \"*\" : searchValue + \"*\"} AND contentclass:STS_Site AND NOT WebTemplate:POLICYCTR AND NOT WebTemplate:POINTPUBLISHINGHUB AND NOT WebTemplate:POINTPUBLISHINGPERSONAL AND NOT WebTemplate:POINTPUBLISHINGTOPIC AND NOT WebTemplate:APPCATALOG AND NOT WebTemplate:SPSPERS AND NOT WebTemplate:TEAMCHANNEL AND NOT WebTemplate:PWA AND NOT WebTemplate:EDISC`;\r\n// // const hubSiteAssociationExclusion: string = Array.isArray(hubSiteIds) && hubSiteIds.length > 0\r\n// // ? hubSiteIds.map(hubSiteId => `-RelatedHubSites:${hubSiteId}`).join(\" \")\r\n// // : \"\";\r\n// // const requestPath: string = `/sites?search=(${!(searchValue?.length > 0) ? \"*\" : searchValue + \"*\"} contentclass:STS_Site -WebTemplate:POLICYCTR -WebTemplate:POINTPUBLISHINGHUB -WebTemplate:POINTPUBLISHINGPERSONAL -WebTemplate:POINTPUBLISHINGTOPIC -WebTemplate:APPCATALOG -WebTemplate:SPSPERS -WebTemplate:TEAMCHANNEL -WebTemplate:PWA -WebTemplate:EDISC ${hubSiteAssociationExclusion}) OR IsHubSite:true`;\r\n// // const requestPath: string = `/sites?search=${!(searchValue?.length > 0) ? \"*\" : searchValue + \"*\"} contentclass:STS_Site -WebTemplate:POLICYCTR -WebTemplate:POINTPUBLISHINGHUB -WebTemplate:POINTPUBLISHINGPERSONAL -WebTemplate:POINTPUBLISHINGTOPIC -WebTemplate:APPCATALOG -WebTemplate:SPSPERS -WebTemplate:TEAMCHANNEL -WebTemplate:PWA -WebTemplate:EDISC`;\r\n// const hubSiteAssociationExclusion: string = Array.isArray(hubSiteIds) && hubSiteIds.length > 0\r\n// ? hubSiteIds.map(hubSiteId => `-DepartmentId:${hubSiteId}`).join(\" \")\r\n// : \"\";\r\n// const requestPath: string = `/sites?search=${!(searchValue?.length > 0) ? \"*\" : searchValue + \"*\"} contentclass:STS_Site -WebTemplate:POLICYCTR -WebTemplate:POINTPUBLISHINGHUB -WebTemplate:POINTPUBLISHINGPERSONAL -WebTemplate:POINTPUBLISHINGTOPIC -WebTemplate:APPCATALOG -WebTemplate:SPSPERS -WebTemplate:TEAMCHANNEL -WebTemplate:PWA -WebTemplate:EDISC ${hubSiteAssociationExclusion}`;\r\n// const selectParams: string = \"id,displayName,description,webUrl,root\";\r\n// result = await client.api(requestPath).select(selectParams).get();\r\n// }\r\n// else {\r\n// result = await client.api(nextPageLink).get();\r\n// }\r\n\r\n// let sites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n// let nextLink: string | null = result ? result[\"@odata.nextLink\"] : null;\r\n// if (nextLink && !nextPageLink && searchValue?.length > 1) {\r\n// try {\r\n// let siteCount: number = sites.length;\r\n// let pageCount: number = 0;\r\n// while (nextLink && ++pageCount < 3) {\r\n// result = await client.api(nextLink).get();\r\n// const extraSites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n// const extraSiteCount: number = extraSites.length;\r\n// for (let i = 0; i < extraSiteCount; i++) {\r\n// sites[siteCount++] = extraSites[i];\r\n// }\r\n// nextLink = result ? result[\"@odata.nextLink\"] : null;\r\n// }\r\n// } catch (error) {\r\n// logger(error, \"GraphSerivce.ts (getSharePointSitesCall: paging loop)\");\r\n// }\r\n// }\r\n\r\n// return { data: sites, nextPageLink: nextLink };\r\n// } catch (error) {\r\n// logger(error, \"GraphSerivce.ts (getSharePointSitesCall)\");\r\n// return { data: [], nextPageLink: null };\r\n// }\r\n// };\r\n\r\n// export const getAllowedSites = async (accessToken: string, allowedSiteCollections: string[], searchOnDisplayName: boolean = true, hubSiteIds?: string[]): Promise => {\r\n// try {\r\n// let allowedSitesResult: any[];\r\n\r\n// const allowedSites: string[] = searchOnDisplayName\r\n// ? allowedSiteCollections.map(allowedSite => `(${allowedSite}*)`)\r\n// : allowedSiteCollections.map(allowedSite => `SiteId:${allowedSite}`);\r\n\r\n// const maxUrlLength: number = 4096;\r\n// const baseQueryLength: number = 110; // https://graph.microsoft.com/v1.0/sites?search=() AND contentclass:STS_Site&$select=id,displayName,webUrl,root\r\n// const initialSiteFilterLength = allowedSites.join(\" OR \").length;\r\n// // const hubSiteExclusionLength = Array.isArray(hubSiteIds) && hubSiteIds.length > 0 ? (hubSiteIds.length * 54) + 20 : 0; // (IsHubSite:true OR (...-RelatedHubSites:56edcaea-179b-4831-b399-f79a6ec1cd2c))\r\n// const hubSiteExclusionLength = Array.isArray(hubSiteIds) && hubSiteIds.length > 0 ? (hubSiteIds.length * 51) : 0; // ...-DepartmentId:56edcaea-179b-4831-b399-f79a6ec1cd2c\r\n\r\n// if ((baseQueryLength + initialSiteFilterLength + hubSiteExclusionLength) > maxUrlLength) {\r\n// // if ((baseQueryLength + initialSiteFilterLength) > maxUrlLength) {\r\n// const concatLength: number = 4; // {whitespace}OR{whitespace}\r\n// let sitesToQuery: string[] = [];\r\n// let siteFilterLength: number = 0;\r\n\r\n// let siteQueries: any[] = [];\r\n// for (let i = allowedSites.length; i--;) {\r\n// let site: string | null = allowedSites[i];\r\n// if ((siteFilterLength + (sitesToQuery.length * concatLength) + (site?.length ?? 0) + hubSiteExclusionLength) > maxUrlLength) {\r\n// // if ((siteFilterLength + (sitesToQuery.length * concatLength) + (site?.length ?? 0)) > maxUrlLength) {\r\n// siteQueries.push(searchAllowedSites(accessToken, [...sitesToQuery], hubSiteIds));\r\n// siteFilterLength = 0;\r\n// sitesToQuery = [];\r\n// }\r\n// siteFilterLength += site?.length ?? 0;\r\n// if (site) sitesToQuery.push(site);\r\n// }\r\n\r\n// if (sitesToQuery.length > 0) {\r\n// siteQueries.push(searchAllowedSites(accessToken, [...sitesToQuery]));\r\n// };\r\n\r\n// allowedSitesResult = (await Promise.all(siteQueries)).reduce((arr, row) => arr.concat(row), []);\r\n// }\r\n// else {\r\n// allowedSitesResult = await searchAllowedSites(accessToken, allowedSites, hubSiteIds);\r\n// }\r\n\r\n// return { data: allowedSitesResult, nextPageLink: null };\r\n// } catch (error) {\r\n// logger(error, \"GraphSerivce.ts (getAllowedSites)\");\r\n// return { data: [], nextPageLink: null };\r\n// }\r\n// };\r\n\r\n// const searchAllowedSites = async (accessToken: string, siteSearchValues: string[], hubSiteIds?: string[]): Promise => {\r\n// try {\r\n// const client = getAuthenticatedClient(accessToken);\r\n\r\n// const requestPath: string = `/sites?search=(${siteSearchValues.join(\" OR \")}) AND contentclass:STS_Site`;\r\n// // let requestPath: string = `/sites?search=(${siteSearchValues.join(\" OR \")}) AND contentclass:STS_Site`;\r\n// // if (Array.isArray(hubSiteIds) && hubSiteIds.length > 0) {\r\n// // requestPath += ` AND (IsHubSite:true OR (${(hubSiteIds.map(hubSiteId => `-RelatedHubSites:${hubSiteId}`).join(\" \"))}))`;\r\n// // }\r\n// const selectParams: string = \"id,displayName,description,webUrl,root\";\r\n\r\n// let result = await client.api(requestPath).select(selectParams).get();\r\n\r\n// // return result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n// let sites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n// let siteCount: number = sites.length;\r\n// if (siteCount > 0) {\r\n// try {\r\n// let nextLink: string = result[\"@odata.nextLink\"];\r\n// while (nextLink) {\r\n// result = await client.api(nextLink).get();\r\n// const extraSites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n// const extraSiteCount: number = extraSites.length;\r\n// for (let i = 0; i < extraSiteCount; i++) {\r\n// sites[siteCount++] = extraSites[i];\r\n// }\r\n// nextLink = result ? result[\"@odata.nextLink\"] : null;\r\n// }\r\n// } catch (error) {\r\n// logger(error, \"GraphSerivce.ts (searchAllowedSites: paging loop)\");\r\n// }\r\n// }\r\n// return sites;\r\n// } catch (error) {\r\n// logger(error, \"GraphSerivce.ts (searchAllowedSites)\");\r\n// return [];\r\n// }\r\n// }\r\n\r\nexport const getSharePointSites = async (accessToken: string, id: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const requestBody = {\r\n requests: [\r\n {\r\n entityTypes: [\"site\"],\r\n query: { queryString: `${id}` },\r\n }\r\n ]\r\n };\r\n\r\n let sites: IGraphSiteSearchResult = await client.api(\"/search/query\").post(requestBody);\r\n const returnedSites = sites.value[0].hitsContainers[0].hits;\r\n return returnedSites;\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getSharePointSites)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getSharePointSiteFromDriveId = async (driveId: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const driveSharePointIds = await client\r\n .api(`drives/${driveId}`)\r\n .select(\"sharepointIds\")\r\n .get();\r\n\r\n if (driveSharePointIds) {\r\n const siteId: string = driveSharePointIds.sharepointIds?.siteId;\r\n if (siteId) {\r\n const requestBody = {\r\n requests: [\r\n {\r\n entityTypes: [\"site\"],\r\n query: { queryString: `(*${siteId}*)` },\r\n }\r\n ]\r\n };\r\n\r\n const sitesResult: IGraphSiteSearchResult = await client.api(\"/search/query\").post(requestBody);\r\n const sites: IHit[] = sitesResult?.value[0]?.hitsContainers[0]?.hits;\r\n if (Array.isArray(sites) && sites.length > 0) {\r\n return sites[0];\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getSharePointSiteFromDriveId)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const getAllSubSites = async (searchRequest: ISiteSearchRequest): Promise => {\r\n try {\r\n let query: string = siteQueries.subs;\r\n const excludedHubSitesSpecified: boolean = Array.isArray(searchRequest.hubSiteIds) && searchRequest.hubSiteIds.length > 0;\r\n const allowedSitesSpecified: boolean = Array.isArray(searchRequest.allowedSites) && searchRequest.allowedSites.length > 0;\r\n\r\n if (excludedHubSitesSpecified) {\r\n query += \" \" + searchRequest.hubSiteIds.map(hubSiteId => `-DepartmentId:${hubSiteId}`).join(\" \");\r\n }\r\n\r\n if (allowedSitesSpecified) {\r\n query += ` (${searchRequest.allowedSites.map(allowedSite => `(${allowedSite}*)`).join(\" OR \")})`;\r\n }\r\n\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const requestBody = {\r\n requests: [\r\n {\r\n entityTypes: [\"site\"],\r\n query: {\r\n queryString: query\r\n },\r\n fields: [\r\n \"id\",\r\n \"name\",\r\n \"displayName\",\r\n \"description\",\r\n \"webUrl\"\r\n ],\r\n from: searchRequest.from || 0,\r\n size: searchRequest.size || 199\r\n }\r\n ]\r\n };\r\n\r\n const result: IGraphSiteSearchResult = await client.api(\"/search/query\").post(requestBody);\r\n const data = result.value[0].hitsContainers[0];\r\n const hits: IHit[] = data.hits;\r\n\r\n if (Array.isArray(hits) && hits.length > 0) {\r\n let siteHits: IHitResource[] = hits\r\n .filter((v, i, a) => a.findIndex(t => t.hitId === v.hitId) === i)\r\n .map(hit => hit.resource);\r\n\r\n if (allowedSitesSpecified) {\r\n siteHits = siteHits.filter(site => searchRequest.allowedSites.some(allowedSite => site.displayName?.trim().toLowerCase() === allowedSite.trim()));\r\n }\r\n\r\n const sites: ISiteInfo[] = siteHits.map(mapSubSites) ?? [];\r\n return sites;\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getAllSubSites)\");\r\n }\r\n return [];\r\n}\r\n\r\nexport const searchSharePointSitesAutoPage = async (searchRequest: ISiteSearchRequest): Promise => {\r\n try {\r\n let query: string;\r\n let excludedHubSitesSpecified: boolean;\r\n\r\n if (searchRequest.hubSitesOnly) {\r\n query = siteQueries.hubs;\r\n }\r\n else {\r\n excludedHubSitesSpecified = Array.isArray(searchRequest.hubSiteIds) && searchRequest.hubSiteIds.length > 0;\r\n if (excludedHubSitesSpecified) {\r\n query = siteQueries.top + \" \" + searchRequest.hubSiteIds.map(hubSiteId => `-DepartmentId:${hubSiteId}`).join(\" \");\r\n }\r\n else {\r\n query = searchRequest.query?.length > 0\r\n ? siteQueries.all\r\n : siteQueries.top;\r\n }\r\n }\r\n\r\n const allowedSitesSpecified: boolean = Array.isArray(searchRequest.allowedSites) && searchRequest.allowedSites.length > 0;\r\n if (allowedSitesSpecified) {\r\n query += ` (${searchRequest.allowedSites.map(allowedSite => `(${allowedSite}*)`).join(\" OR \")})`;\r\n }\r\n\r\n if (searchRequest.query?.length > 0) {\r\n query += \" \" + searchRequest.query.replaceAll('\"', '\\\"');\r\n }\r\n\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n\r\n const requestBody = {\r\n requests: [\r\n {\r\n entityTypes: [\"site\"],\r\n query: {\r\n queryString: query\r\n },\r\n from: searchRequest.from || 0,\r\n size: searchRequest.size || 199\r\n }\r\n ]\r\n };\r\n\r\n let sites: ISiteInfo[] = [];\r\n let data: IHitsContainer;\r\n let uniqueSiteCount: number = 0;\r\n let pageCount: number = 1;\r\n\r\n do {\r\n const result: IGraphSiteSearchResult = await client.api(\"/search/query\").post(requestBody);\r\n data = result.value[0].hitsContainers[0];\r\n const hits: IHit[] = data.hits;\r\n\r\n if (Array.isArray(hits) && hits.length > 0) {\r\n let siteHits: IHitResource[] = hits\r\n .filter((v, i, a) => a.findIndex(t => t.hitId === v.hitId) === i)\r\n .map(hit => hit.resource);\r\n\r\n uniqueSiteCount += siteHits.length;\r\n\r\n if (allowedSitesSpecified) {\r\n siteHits = siteHits.filter(site => searchRequest.allowedSites.some(allowedSite => site.displayName?.trim().toLowerCase() === allowedSite.trim()));\r\n }\r\n\r\n sites = sites.concat(siteHits.map(mapSites) ?? []);\r\n\r\n if (!excludedHubSitesSpecified && SharePointSiteHelper.hubSites.length > 0) {\r\n sites.forEach(site => {\r\n const hub: ISiteInfo = SharePointSiteHelper.hubSites.find(hubSite => hubSite.id === site.id);\r\n if (hub) {\r\n site.isHub = true;\r\n site.hubId = hub.hubId;\r\n if (hub.name) site.name = hub.name;\r\n if (hub.description) site.description = hub.description;\r\n if (hub.parentHubId) site.parentHubId = hub.parentHubId;\r\n }\r\n });\r\n }\r\n\r\n requestBody.requests[0].from += siteHits.length;\r\n }\r\n } while (data?.moreResultsAvailable === true && ++pageCount < 3);\r\n\r\n return {\r\n sites: sites,\r\n pageData: {\r\n moreResultsAvailable: (data as IHitsContainer).moreResultsAvailable === true,\r\n from: (searchRequest.from || 0) + uniqueSiteCount\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (searchSites)\");\r\n }\r\n\r\n return {\r\n sites: [],\r\n pageData: initialGraphSearchPager\r\n }\r\n}\r\n\r\nexport const searchSharePointSites = async (searchRequest: ISiteSearchRequest): Promise => {\r\n try {\r\n let query: string;\r\n let excludedHubSitesSpecified: boolean;\r\n\r\n if (searchRequest.hubSitesOnly) {\r\n query = siteQueries.hubs;\r\n }\r\n else {\r\n excludedHubSitesSpecified = Array.isArray(searchRequest.hubSiteIds) && searchRequest.hubSiteIds.length > 0;\r\n if (excludedHubSitesSpecified) {\r\n query = siteQueries.top + \" \" + searchRequest.hubSiteIds.map(hubSiteId => `-DepartmentId:${hubSiteId}`).join(\" \");\r\n }\r\n else {\r\n query = searchRequest.query?.length > 0\r\n ? siteQueries.all\r\n : siteQueries.top;\r\n }\r\n }\r\n\r\n const allowedSitesSpecified: boolean = Array.isArray(searchRequest.allowedSites) && searchRequest.allowedSites.length > 0;\r\n if (allowedSitesSpecified) {\r\n query += ` (${searchRequest.allowedSites.map(allowedSite => `(${allowedSite}*)`).join(\" OR \")})`;\r\n }\r\n\r\n if (searchRequest.query?.length > 0) {\r\n query += \" \" + searchRequest.query.replaceAll('\"', '\\\"');\r\n }\r\n\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const requestBody = {\r\n requests: [\r\n {\r\n entityTypes: [\"site\"],\r\n query: {\r\n queryString: query\r\n },\r\n // fields: [\r\n // \"id\",\r\n // \"name\",\r\n // \"displayName\",\r\n // \"description\",\r\n // \"webUrl\",\r\n // \"createdDateTime\",\r\n // \"lastModifiedDateTime\"\r\n // ],\r\n from: searchRequest.from || 0,\r\n size: searchRequest.size || 199\r\n }\r\n ]\r\n };\r\n\r\n const result: IGraphSiteSearchResult = await client.api(\"/search/query\").post(requestBody);\r\n const data = result.value[0].hitsContainers[0];\r\n const hits: IHit[] = data.hits;\r\n\r\n if (Array.isArray(hits) && hits.length > 0) {\r\n let siteHits: IHitResource[] = hits\r\n .filter((v, i, a) => a.findIndex(t => t.hitId === v.hitId) === i)\r\n .map(hit => hit.resource);\r\n\r\n const uniqueSiteCount: number = siteHits.length;\r\n\r\n if (allowedSitesSpecified) {\r\n siteHits = siteHits.filter(site => searchRequest.allowedSites.some(allowedSite => site.displayName?.trim().toLowerCase() === allowedSite.trim()));\r\n }\r\n\r\n const sites: ISiteInfo[] = siteHits.map(mapSites) ?? [];\r\n\r\n if (!excludedHubSitesSpecified && SharePointSiteHelper.hubSites.length > 0) {\r\n sites.forEach(site => {\r\n const hub: ISiteInfo = SharePointSiteHelper.hubSites.find(hubSite => hubSite.id === site.id);\r\n if (hub) {\r\n site.isHub = true;\r\n site.hubId = hub.hubId;\r\n if (hub.name) site.name = hub.name;\r\n if (hub.description) site.description = hub.description;\r\n if (hub.parentHubId) site.parentHubId = hub.parentHubId;\r\n }\r\n });\r\n }\r\n\r\n return {\r\n sites: sites,\r\n pageData: {\r\n moreResultsAvailable: data.moreResultsAvailable === true,\r\n from: (searchRequest.from || 0) + uniqueSiteCount\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (searchSites)\");\r\n }\r\n\r\n return {\r\n sites: [],\r\n pageData: initialGraphSearchPager\r\n }\r\n}\r\n\r\nexport const getSharePointSite = async (siteId: string): Promise => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n const site = await client\r\n .api(`/sites/${siteId}`)\r\n .select(\"id,displayName,webUrl,root\")\r\n .get();\r\n\r\n if (site) {\r\n return {\r\n id: site.id,\r\n name: site.displayName,\r\n webUrl: site.webUrl,\r\n isSubsite: !site.root,\r\n }\r\n }\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getSharePointSite)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const getSharePointSubsite = async (accessToken: string, siteId: string, allowedSites: string[], nextPageLink?: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n let result: any;\r\n if (!nextPageLink) {\r\n result = await client\r\n .api(`/sites/${siteId}/sites`)\r\n .select(\"id,displayName,description,webUrl\")\r\n .get();\r\n }\r\n else {\r\n result = await client.api(nextPageLink).get();\r\n }\r\n\r\n let subSites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n\r\n let nextLink: string | null = result ? result[\"@odata.nextLink\"] : null;\r\n if (nextLink?.length > 0) {\r\n try {\r\n let subSiteCount: number = subSites.length;\r\n let pageCount: number = 0;\r\n while (nextLink && pageCount++ < 5) {\r\n result = await client.api(nextLink).get();\r\n const extraSites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n const extraSiteCount: number = extraSites.length;\r\n for (let i = 0; i < extraSiteCount; i++) {\r\n subSites[subSiteCount++] = extraSites[i];\r\n }\r\n nextLink = result ? result[\"@odata.nextLink\"] : null;\r\n }\r\n } catch (error) {\r\n logger(error, \"LocationService.ts (getLocationSubSites: paging loop)\");\r\n }\r\n }\r\n\r\n if (Array.isArray(allowedSites) && allowedSites.length > 0) {\r\n subSites = subSites.filter(subSite => allowedSites.some(allowedSite => subSite.displayName?.trim().toLowerCase() === allowedSite.trim()));\r\n }\r\n\r\n return { data: subSites?.sort((a, b) => a.displayName?.toUpperCase() < b.displayName?.toUpperCase() ? -1 : 1), nextPageLink: nextLink };\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getSharePointSubsite)\");\r\n return { data: [], nextPageLink: null };\r\n }\r\n};\r\n\r\nexport const getSubSites = async (accessToken: string, mainSites: ISiteInfo[]): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n\r\n const subSiteResults: ISubSiteInfo[] = [];\r\n\r\n for (let i = 0; i < mainSites.length; i += 20) {\r\n const mainSiteSlices: ISiteInfo[] = mainSites.slice(i, i + 20);\r\n\r\n const batchRequests: BatchRequestStep[] = mainSiteSlices.map(mainSite => {\r\n return {\r\n id: mainSite.id,\r\n request: new Request(`/sites/${mainSite.id}/sites?$select=id,displayName,webUrl`, {\r\n method: \"GET\"\r\n })\r\n };\r\n });\r\n\r\n const content = await new BatchRequestContent(batchRequests).getContent();\r\n const batchResponse = await client.api(\"/$batch\").post(content);\r\n const batchResponseContent = new BatchResponseContent(batchResponse);\r\n\r\n await Promise.all(mainSiteSlices.map(async mainSite => {\r\n const subSiteResponse = batchResponseContent.getResponseById(mainSite.id);\r\n if (subSiteResponse.ok) {\r\n const subSites = (await subSiteResponse.json())?.value;\r\n if (subSites) {\r\n subSites.map(subSite => {\r\n subSiteResults.push({\r\n id: subSite.id,\r\n name: subSite.displayName,\r\n webUrl: subSite.webUrl,\r\n parentSiteId: mainSite.id\r\n });\r\n })\r\n }\r\n }\r\n }));\r\n }\r\n\r\n return subSiteResults?.sort((a, b) => a.name?.toUpperCase() < b.name?.toUpperCase() ? -1 : 1);\r\n } catch (error) {\r\n // Adding request with duplicate id (Make the id of the requests unique)\r\n logger(error, \"GraphSerivce.ts (getSubSites)\");\r\n return [];\r\n }\r\n};\r\n\r\n// export const getAllowedHubSites = async (allowedSites: string[]): Promise => {\r\n// try {\r\n// const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n\r\n// const requestPath: string = `/sites?search=contentclass:STS_Site IsHubSite:true`;\r\n// const selectParams: string = \"id,displayName,description,webUrl,root\";\r\n\r\n// let result = await client.api(requestPath).select(selectParams).get();\r\n\r\n// let sites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n// let siteCount: number = sites.length;\r\n// if (siteCount > 0) {\r\n// let pageCount: number = 0;\r\n// try {\r\n// let nextLink: string = result[\"@odata.nextLink\"];\r\n// while (nextLink && pageCount++ < 5) {\r\n// result = await client.api(nextLink).get();\r\n// const extraSites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n// const extraSiteCount: number = extraSites.length;\r\n// for (let i = 0; i < extraSiteCount; i++) {\r\n// sites[siteCount++] = extraSites[i];\r\n// }\r\n// nextLink = result ? result[\"@odata.nextLink\"] : null;\r\n// }\r\n// } catch (error) {\r\n// logger(error, \"GraphSerivce.ts (getAllowedHubSites: paging loop)\");\r\n// }\r\n\r\n// if (Array.isArray(allowedSites) && allowedSites.length > 0) {\r\n// sites = sites.filter(site => allowedSites.some(allowedSite => site.displayName?.trim().toLowerCase() === allowedSite.trim()));\r\n// }\r\n// }\r\n\r\n// return sites;\r\n// } catch (error) {\r\n// logger(error, \"GraphSerivce.ts (getAllowedHubSites)\");\r\n// return [];\r\n// }\r\n// }\r\n\r\nexport const getHubSiteSites = async (accessToken: string, hubSiteId: string, allowedSites: string[]): Promise => {\r\n try {\r\n\r\n const associatedHubSites: ISiteInfo[] = SharePointSiteHelper.hubSites?.filter(hub => hub.parentHubId && hub.parentHubId.toLowerCase() === hubSiteId.toLowerCase());\r\n const associatedHubSitesAvailable: boolean = Array.isArray(associatedHubSites) && associatedHubSites.length > 0;\r\n\r\n const client = getAuthenticatedClient(accessToken);\r\n\r\n // const requestPath: string = `/sites?search=contentclass:STS_Site AND (DepartmentId:{${hubSiteId}} OR DepartmentId:${hubSiteId} OR RelatedHubSites:${hubSiteId}) -SiteId:${hubSiteId}`;\r\n const requestPath: string = `/sites?search=(contentclass:STS_Site OR contentclass:STS_Web) AND (DepartmentId:{${hubSiteId}} OR DepartmentId:${hubSiteId} OR (IsHubSite:true AND RelatedHubSites:${hubSiteId})) -SiteId:${hubSiteId}`;\r\n const selectParams: string = \"id,displayName,description,webUrl,root\";\r\n\r\n let result = await client.api(requestPath).select(selectParams).get();\r\n\r\n let sites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n let siteCount: number = sites.length;\r\n if (siteCount > 0 || associatedHubSitesAvailable) {\r\n let pageCount: number = 0;\r\n try {\r\n let nextLink: string;\r\n if (result) nextLink = result[\"@odata.nextLink\"];\r\n while (nextLink && pageCount++ < 5) {\r\n result = await client.api(nextLink).get();\r\n const extraSites: any[] = result?.value?.filter(site => site.displayName?.length > 0) ?? [];\r\n const extraSiteCount: number = extraSites.length;\r\n for (let i = 0; i < extraSiteCount; i++) {\r\n sites[siteCount++] = extraSites[i];\r\n }\r\n nextLink = result ? result[\"@odata.nextLink\"] : null;\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getHubSiteSites: paging loop)\");\r\n }\r\n\r\n if (siteCount > 0 && Array.isArray(allowedSites) && allowedSites.length > 0) {\r\n sites = sites.filter(site => allowedSites.some(allowedSite => site.displayName?.trim().toLowerCase() === allowedSite.trim()));\r\n }\r\n\r\n if (!Array.isArray(sites)) sites = [];\r\n\r\n if (SharePointSiteHelper.hubSites.length > 0) {\r\n if (sites.length > 0) {\r\n sites.forEach(site => {\r\n const hub: ISiteInfo = SharePointSiteHelper.hubSites.find(hubSite => hubSite.id === site.id);\r\n if (hub) {\r\n site.isHub = true;\r\n site.hubId = hub.hubId;\r\n if (hub.name) site.displayName = hub.name;\r\n if (hub.description) site.description = hub.description;\r\n if (hub.parentHubId) site.parentHubId = hub.parentHubId;\r\n }\r\n });\r\n }\r\n\r\n if (associatedHubSitesAvailable) {\r\n associatedHubSites.forEach(associatedHub => {\r\n const hubExists: boolean = sites.some(subSite => subSite.id?.trim().toLowerCase() === associatedHub.id?.trim().toLowerCase());\r\n if (!hubExists) {\r\n sites.push({\r\n ...associatedHub,\r\n displayName: associatedHub.name\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n return sites\r\n .filter(site => !site.parentHubId || site.parentHubId === hubSiteId)\r\n .filter(filterNonTopLevelSites)\r\n .sort((a, b) => a.displayName?.toUpperCase() < b.displayName?.toUpperCase() ? -1 : 1);\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getHubSiteSites)\");\r\n return [];\r\n }\r\n}\r\n\r\nexport const getSharePointDocumentLibraries = async (\r\n accessToken: string,\r\n siteId: string\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n var response = await client\r\n .api(`/sites/${siteId}/drives`)\r\n .select(\"id,name,webUrl,sharepointIds\")\r\n .get();\r\n\r\n let setup = setUpSharePointDocumentPageIterator();\r\n await executePageIteratorCallback(client, response, setup.callback);\r\n return setup.resultSet?.sort((a, b) => a.name?.toUpperCase() < b.name?.toUpperCase() ? -1 : 1);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getSharePointDocumentLibraries)\");\r\n return [];\r\n }\r\n};\r\n\r\nconst setUpSharePointDocumentPageIterator = () => {\r\n let resultSet: ISharepointDocument[] = [];\r\n let callback: PageIteratorCallback = data => {\r\n resultSet.push({\r\n id: data.id,\r\n name: data.name,\r\n webUrl: data.webUrl,\r\n siteId: \"\",\r\n sharePointListId: data.sharePointIds.listId\r\n });\r\n\r\n return true;\r\n };\r\n\r\n return { resultSet, callback };\r\n};\r\n\r\nexport const getTeamChannelRelatedSitesInfo = async (teamGroupId: string, teamDriveId: string, teamChannels?: any[]) => {\r\n try {\r\n const teamRelatedSiteInfoCacheKey: string = `channelsites.${teamGroupId}.${teamDriveId}`;\r\n let teamRelatedSiteInfo: ITeamChannelDocumentLibrary[] = CacheHelper.get(teamRelatedSiteInfoCacheKey);\r\n if (Array.isArray(teamRelatedSiteInfo)) {\r\n return teamRelatedSiteInfo;\r\n }\r\n\r\n const channelsCacheKey: string = `channels.${teamGroupId}.${teamDriveId}`;\r\n let privateSharedTeamChannels: ITeamChannelDto[] = teamChannels?.filter(channel => channel?.isPrivate || channel?.isShared) ?? CacheHelper.get(channelsCacheKey);\r\n\r\n if (!privateSharedTeamChannels || !Array.isArray(privateSharedTeamChannels)) {\r\n privateSharedTeamChannels = (await getTeamChannels(await authModule.getGraphAccessToken(), teamGroupId, teamDriveId))\r\n .filter(channel => channel?.isPrivate || channel?.isShared);\r\n\r\n if (privateSharedTeamChannels?.length > 0) {\r\n CacheHelper.set(channelsCacheKey, privateSharedTeamChannels);\r\n }\r\n }\r\n\r\n if (privateSharedTeamChannels?.length > 0) {\r\n if (!teamRelatedSiteInfo || !Array.isArray(teamRelatedSiteInfo)) {\r\n teamRelatedSiteInfo = [];\r\n await Promise.all(\r\n privateSharedTeamChannels.map(async channel => {\r\n const teamChannelInfo: ITeamChannelDocumentLibrary = await getTeamChannelInfo({ channelId: channel.id, driveId: teamDriveId, groupId: teamGroupId, isPrivate: channel.isPrivate, isShared: channel.isShared });\r\n if (teamChannelInfo) {\r\n teamRelatedSiteInfo.push(teamChannelInfo);\r\n }\r\n })\r\n );\r\n CacheHelper.set(teamRelatedSiteInfoCacheKey, teamRelatedSiteInfo);\r\n }\r\n }\r\n\r\n return teamRelatedSiteInfo;\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getTeamChannelRelatedSitesInfo)\");\r\n }\r\n return [];\r\n}\r\n\r\nexport const getTeamChannelInfo = async (channelInfo: ITeamChannelInfo): Promise => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n\r\n let teamDriveInfo, teamSharepointInfo;\r\n if (channelInfo.isPrivate || channelInfo.isShared || !channelInfo.driveId) {\r\n teamDriveInfo = await GetTeamDriveInfo(client, channelInfo);\r\n teamSharepointInfo = await GetTeamSharepointInfo(teamDriveInfo.driveId);\r\n } else {\r\n [teamDriveInfo, teamSharepointInfo] = await Promise.all([\r\n GetTeamDriveInfo(client, channelInfo),\r\n GetTeamSharepointInfo(channelInfo.driveId)\r\n ]);\r\n }\r\n\r\n return {\r\n documentLibraryName: teamSharepointInfo.documentLibraryName,\r\n sharePointListId: teamSharepointInfo.sharePointListId,\r\n sharePointSiteUrl: teamSharepointInfo.sharePointSiteUrl,\r\n driveItemId: teamDriveInfo.driveItemId,\r\n driveItemWebUrl: teamDriveInfo.driveItemWebUrl,\r\n driveId: teamDriveInfo.driveId,\r\n siteId: teamSharepointInfo.siteId\r\n };\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getTeamChannelInfo)\");\r\n return null;\r\n }\r\n};\r\n\r\nconst GetTeamDriveInfo = async (client: Client, channelInfo: ITeamChannelInfo) => {\r\n const result = await client\r\n .api(`/teams/${channelInfo.groupId}/channels/${channelInfo.channelId}/filesFolder`)\r\n .select(\"id,webUrl,parentReference\")\r\n .get();\r\n\r\n return { driveItemId: result.id, driveItemWebUrl: result.webUrl, driveId: result.parentReference.driveId };\r\n};\r\n\r\nconst GetTeamChannelDriveId = async (client: Client, channelInfo: ITeamChannelInfo) => {\r\n const result = await client\r\n .api(`/teams/${channelInfo.groupId}/channels/${channelInfo.channelId}/filesFolder`)\r\n .select(\"parentReference\")\r\n .get();\r\n\r\n return result?.parentReference?.driveId;\r\n};\r\n\r\nexport const GetTeamSharepointInfo = async (driveId: string) => {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n const result = await client\r\n .api(`/drives/${driveId}`)\r\n .select(\"name,sharepointIds\")\r\n .get();\r\n\r\n return {\r\n documentLibraryName: result.name,\r\n sharePointListId: result.sharePointIds.listId,\r\n sharePointSiteUrl: result.sharePointIds.siteUrl\r\n };\r\n};\r\n\r\nexport const getSharePointFolders = async (\r\n pager: IGraphPager,\r\n accessToken: string,\r\n siteId: string,\r\n driveId: string,\r\n folderId: string\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const response = !pager.nextLink || pager.nextLink.trim().length === 0\r\n ? await client.api(`${siteId ? \"/sites/\" + siteId : \"\"}/drives/${driveId}/items/${folderId?.length ? folderId : \"root\"}/children`)\r\n .filter(filters.onlyFolders)\r\n .select(\"id,name,parentReference,lastModifiedDateTime,sharepointIds\")\r\n .expand(\"listItem($select=contentType,webUrl)\")\r\n .get()\r\n : await client.api(pager.nextLink).get();\r\n\r\n return mapSharepointFolderData(response);\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getSharePointFolders)\");\r\n return { folders: [], nextLink: \"\" };\r\n }\r\n};\r\n\r\nexport const getJoinedTeams = async (accessToken?: string): Promise => {\r\n try {\r\n // const client = getAuthenticatedClient(accessToken);\r\n // const teams = await client\r\n // .api(\"me/joinedTeams\")\r\n // .select(\"id,displayName\")\r\n // .get();\r\n\r\n const client = getAuthenticatedClient(accessToken ?? await authModule.getGraphAccessToken());\r\n\r\n let teams;\r\n\r\n const teamsToken = await authModule.getTeamsAccessToken();\r\n if (teamsToken) {\r\n const teamsClient = getAuthenticatedClient(await authModule.getTeamsAccessToken());\r\n teams = await teamsClient\r\n .api(\"/me/teamwork/associatedTeams\")\r\n .select(\"id,displayName\")\r\n .get();\r\n }\r\n else {\r\n teams = await client\r\n .api(\"/me/joinedTeams\")\r\n .select(\"id,displayName\")\r\n .get();\r\n }\r\n\r\n const joinedTeams = teams.value as ITeam[];\r\n\r\n const teamResults: ITeam[] = [];\r\n\r\n for (let i = 0; i < joinedTeams.length; i += 20) {\r\n const teamSlices: ITeam[] = joinedTeams.slice(i, i + 20);\r\n\r\n const batchRequests: BatchRequestStep[] = teamSlices.map(team => {\r\n return {\r\n id: team.id,\r\n // request: new Request(`/groups/${team.id}/sites/root?$select=id,webUrl`, { method: \"GET\" })\r\n request: new Request(`/groups/${team.id}/sites/root?$select=id,webUrl&$expand=drive($select=id)`, {\r\n method: \"GET\"\r\n })\r\n };\r\n });\r\n\r\n const content = await new BatchRequestContent(batchRequests).getContent();\r\n const batchResponse = await client.api(\"/$batch\").post(content);\r\n const batchResponseContent = new BatchResponseContent(batchResponse);\r\n\r\n for (let index = 0; index < teamSlices.length; index++) {\r\n let team: ITeam = teamSlices[index];\r\n\r\n let teamSiteResponse = batchResponseContent.getResponseById(team.id);\r\n if (teamSiteResponse.ok) {\r\n let teamSite = await teamSiteResponse.json();\r\n teamResults.push({ ...team, siteId: teamSite.id, webUrl: teamSite.webUrl, driveId: teamSite.drive.id });\r\n }\r\n else {\r\n teamResults.push({ ...team, siteId: team.id, isSharedTeam: true });\r\n }\r\n }\r\n }\r\n\r\n return teamResults;\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getJoinedTeams)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getTeamChannels = async (\r\n accessToken: string,\r\n groupId: string,\r\n driveId: string\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n\r\n const [teamChannels, primaryChannel] = await Promise.all([\r\n client.api(`/teams/${groupId}/channels`).header(\"Prefer\", \"include-unknown-enum-members\").get(),\r\n getTeamPrimaryChannel(accessToken, groupId)\r\n ]);\r\n\r\n if (Array.isArray(teamChannels?.value)) {\r\n const channels: ITeamChannelDto[] = (teamChannels.value as ITeamChannel[]).map(\r\n teamChannel =>\r\n {\r\n id: teamChannel.id,\r\n displayName: teamChannel.displayName,\r\n description: teamChannel.description,\r\n email: teamChannel.email,\r\n webUrl: teamChannel.webUrl,\r\n teamGroupId: groupId,\r\n driveId: driveId,\r\n isPrivate: teamChannel.membershipType === \"private\",\r\n isShared: teamChannel.membershipType === \"shared\",\r\n isPrimary: teamChannel.id === primaryChannel?.id\r\n }\r\n );\r\n\r\n return [\r\n ...channels.filter(x => x.isPrimary),\r\n ...channels\r\n .filter(x => !x.isPrimary)\r\n .sort((channelA, channelB) => channelA.displayName?.toUpperCase() < channelB.displayName?.toUpperCase() ? -1 : 1)\r\n ];\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getTeamChannels)\");\r\n }\r\n return [];\r\n};\r\n\r\nexport const getTeamPrimaryChannel = async (accessToken: string, groupId: string) => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n return await client.api(`/teams/${groupId}/primaryChannel`).select(\"id\").get();\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getTeamPrimaryChannel)\");\r\n }\r\n return null;\r\n}\r\n\r\nexport const getTeamsChannelSites = async (teams: ITeam[]) => {\r\n const teamsChannelSites: ITeamChannelSite[] = [];\r\n if (Array.isArray(teams)) {\r\n try {\r\n for (let i = 0; i < teams.length; i += 10) {\r\n const teamsSlices: ITeam[] = teams.slice(i, i + 10);\r\n\r\n await Promise.all(teamsSlices.map(async team => {\r\n const teamChannelSites: ITeamChannelSite[] = await getTeamChannelSites(team.id, teamsSlices.length > 2 ? 2 : 10);\r\n if (Array.isArray(teamChannelSites))\r\n for (let x = 0; x < teamChannelSites.length; x++) {\r\n teamsChannelSites.push({ ...(teamChannelSites[x]), teamSiteId: team.siteId });\r\n }\r\n }));\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getTeamsChannelSites)\");\r\n }\r\n }\r\n return teamsChannelSites;\r\n}\r\n\r\nexport const getTeamChannelSites = async (teamId: string, parallelLimit: number = 10): Promise => {\r\n try {\r\n const accessToken: string = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n\r\n const channelsRaw = (await client.api(`/teams/${teamId}/channels`).header(\"Prefer\", \"include-unknown-enum-members\").get())?.value;\r\n\r\n const channels: ITeamChannelDto[] = Array.isArray(channelsRaw) && channelsRaw.map(\r\n channel =>\r\n {\r\n id: channel.id,\r\n displayName: channel.displayName,\r\n description: channel.description,\r\n email: channel.email,\r\n webUrl: channel.webUrl,\r\n teamGroupId: teamId,\r\n driveId: null,\r\n isPrivate: channel.membershipType === \"private\",\r\n isShared: channel.membershipType === \"shared\",\r\n isPrimary: false\r\n }\r\n );\r\n\r\n if (Array.isArray(channels)) {\r\n const privateAndSharedChannels = channels.filter(channel => channel.isPrivate || channel.isShared);\r\n\r\n const channelSiteResults: ITeamChannelSite[] = [];\r\n\r\n for (let i = 0; i < privateAndSharedChannels.length; i += parallelLimit) {\r\n const channelSlices: ITeamChannelDto[] = privateAndSharedChannels.slice(i, i + parallelLimit);\r\n\r\n await Promise.all(channelSlices.map(async channel => {\r\n const teamDriveInfo = await GetTeamDriveInfo(client, { channelId: channel.id, groupId: teamId, isPrivate: channel.isPrivate, isShared: channel.isShared });\r\n const siteInfo = await client\r\n .api(`/drives/${teamDriveInfo.driveId}`)\r\n .select(\"id\")\r\n .expand(\"list($select=parentReference,sharePointIds)\")\r\n .get();\r\n\r\n channelSiteResults.push({\r\n id: siteInfo?.list?.parentReference?.siteId,\r\n displayName: channel.displayName,\r\n webUrl: siteInfo?.list?.sharepointIds?.siteUrl\r\n });\r\n }));\r\n }\r\n\r\n return channelSiteResults;\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getTeamChannelSites)\");\r\n }\r\n return [];\r\n}\r\n\r\nexport const getDriveItemDocuments = async (\r\n accessToken: string,\r\n searchParams: ISearchDocumentLibraryParams\r\n): Promise => {\r\n try {\r\n const searchHelper = new GraphSearchRestHelper(microsoftGraph.url.search, new SearchResultMapper());\r\n let documentFiles = await searchHelper\r\n .setBody(searchParams)\r\n .setHeader(accessToken)\r\n .Execute();\r\n\r\n return documentFiles;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getDriveItemDocuments)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getDriveItemMetadata = async (\r\n documentFiles: DriveItemSearchResult[],\r\n accessToken: string,\r\n driveId: string\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const searchBatchHelper = new SearchBatchRequestHelper(client);\r\n const batchRequestCallback = (item: DriveItemSearchResult, index: number) => ({\r\n id: index.toString(),\r\n request: new Request(`/drives/${driveId}/items/${item.id}/listitem/fields?expand=PersonSingleCol`, {\r\n method: \"GET\"\r\n })\r\n });\r\n\r\n return await searchBatchHelper.process(\r\n documentFiles.map(item => ({ ...item, driveId: driveId })),\r\n batchRequestCallback\r\n );\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getDriveItemMetaData)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getSiteDocumentLibraryDrives = async (\r\n accessToken: string,\r\n siteInfos: ISiteBatchInfo[]\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const driveIdBatchHelper = new DriveIdBatchHelper(client);\r\n return await driveIdBatchHelper.process(siteInfos);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getSiteDocumentLibraryDrives)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const searchMainDriverFolder = async (accessToken: string, searchTerm: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const query = client.api(`/me/drive/root/search(q='${searchTerm}')`);\r\n const result = await executeSearch(query);\r\n return result?.value ?? [];\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (searchMainDriverFolder)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const searchChildDriveFolders = async (\r\n accessToken: string,\r\n driveInfo: IDriveInfo,\r\n searchTerm: string\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const query = client.api(`/drives/${driveInfo.driveId}/items/${driveInfo.id}/search(q='${searchTerm}')`);\r\n const result = await executeSearch(query);\r\n return result?.value ?? [];\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (searchChildDriverFolders)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const searchDriveForFilesAndFolders = async (searchParams: IFileFolderSearch) => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n const url = searchParams.isRoot\r\n ? `/drives/${searchParams.driveId}/root/search(q='${searchParams.searchTerm}')?$top=250`\r\n : `/drives/${searchParams.driveId}/items/${searchParams.folderId}/search(q='${searchParams.searchTerm}')?$top=250`;\r\n\r\n const result =\r\n (\r\n await client\r\n .api(url)\r\n .select(\"id,name,parentReference,createdDateTime,lastModifiedDateTime,webDavUrl,lastModifiedBy,file,folder,size\")\r\n .get()\r\n )?.value ?? [];\r\n const files = result.filter(item => item.file).map(item => buildOneDriveFiles(item, searchParams.webUrl));\r\n const folders = result\r\n .filter(item => item.folder && (searchParams.isRoot ? true : item.id !== searchParams.folderId))\r\n .map(item => buildOneDriveFolders(item, searchParams.webUrl));\r\n return { files: files, folders: folders };\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (searchDriveForFilesAndFolders)\");\r\n return { files: [], folders: [] };\r\n }\r\n};\r\n\r\nconst buildOneDriveFiles = (item: any, parentWebUrl: string) => {\r\n return {\r\n id: item.id,\r\n name: item.name,\r\n driveId: item.parentReference.driveId,\r\n createdDateTime: item.createdDateTime,\r\n lastModifiedDateTime: item.lastModifiedDateTime,\r\n modifiedBy: item.lastModifiedBy?.user?.displayName,\r\n fileType: getLastSplittedStringItem(item.name, /[.]+/),\r\n size: item.size,\r\n path: tryDecodeUriComponent(item.webDavUrl?.replace(parentWebUrl, \"\")),\r\n isFolder: false\r\n };\r\n};\r\n\r\nconst buildOneDriveFolders = (item: any, parentWebUrl: string) => {\r\n return {\r\n id: item.id,\r\n name: item.name,\r\n driveId: item.parentReference?.driveId,\r\n lastModifiedDateTime: item.lastModifiedDateTime,\r\n webUrl: item.webDavUrl,\r\n path: tryDecodeUriComponent(item.webDavUrl?.replace(parentWebUrl, \"\")),\r\n isFolder: true\r\n };\r\n};\r\n\r\nexport const searchDriveForFilesAndFoldersSharepoint = async (\r\n searchParams: IFileFolderSearchSharepointParams,\r\n mapper: IMapper\r\n) => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n\r\n const searchResponse = {\r\n requests: [\r\n {\r\n entityTypes: [\"driveItem\"],\r\n query: { queryString: searchParams.queryString },\r\n fields: searchFields.graph,\r\n from: searchParams.from,\r\n size: 30\r\n }\r\n ]\r\n };\r\n\r\n let result = await client.api(\"/search/query\").post(searchResponse);\r\n\r\n const mappedResult = mapper.map(result.value);\r\n return {\r\n moreResultsAvailable: mappedResult.moreResultsAvailable,\r\n driveItems: mappedResult.driveItems.map(item => mapFilesAndFolders(item, searchParams.extraDriveInfo))\r\n };\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (searchDriveForFilesAndFoldersSharepoint)\");\r\n return { moreResultsAvailable: false, driveItems: [] };\r\n }\r\n};\r\n\r\nconst mapFilesAndFolders = (item: DriveItemSearchResult, driveInfo: IBetaSearchExtraDriveInfo) => {\r\n // const itemExt: string = path.extname(item.name);\r\n // return item.size > 0 || itemExt ? buildFile(item, itemExt, driveInfo) : buildFolder(item, driveInfo);\r\n return item.isDocument === true ? buildFile(item, path.extname(item.name), driveInfo) : buildFolder(item, driveInfo);\r\n};\r\n\r\nconst buildFolder = (item: DriveItemSearchResult, driveInfo: IBetaSearchExtraDriveInfo) => {\r\n return {\r\n id: item.id,\r\n name: item.name,\r\n driveId: item.driveId,\r\n lastModifiedDateTime: item.lastModifiedDateTime,\r\n webUrl: item.webUrl,\r\n siteId: item.siteId,\r\n // path: decodeURIComponent(item?.webUrl.replace(driveInfo.siteUrl, \"\")),\r\n path: tryDecodeUriComponent(\r\n driveInfo?.siteUrl ? item.webUrl?.replace(driveInfo.siteUrl, \"\") : new URL(item.webUrl)?.pathname\r\n ),\r\n isFolder: true,\r\n contentTypeId: item.contentTypeId\r\n };\r\n};\r\n\r\nconst buildFile = (item: DriveItemSearchResult, itemExt: string, driveInfo: IBetaSearchExtraDriveInfo) => {\r\n return {\r\n id: item.id,\r\n name: item.name,\r\n driveId: item.driveId,\r\n createdDateTime: item.createdDateTime,\r\n lastModifiedDateTime: item?.lastModifiedDateTime,\r\n modifiedBy: item?.modifiedBy,\r\n fileType: itemExt,\r\n path: tryDecodeUriComponent(\r\n driveInfo?.siteUrl ? item.webUrl?.replace(driveInfo.siteUrl, \"\") : new URL(item.webUrl)?.pathname\r\n ),\r\n isFolder: false,\r\n siteUrl: driveInfo?.siteUrl,\r\n fullWebUrl: item.webUrl,\r\n size: item.size,\r\n pii: {\r\n piiDetected: false,\r\n pii: null\r\n },\r\n rank: item.rank\r\n };\r\n};\r\n\r\nexport const getOneDriveRootDetails = async (): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const query = await client\r\n .api(\"/me/drive/root\")\r\n .select(\"parentReference,sharepointIds\")\r\n .get();\r\n\r\n return {\r\n driveId: query?.parentReference?.driveId,\r\n sharePointSiteUrl: query?.sharepointIds?.siteUrl,\r\n sharePointListId: query?.sharepointIds?.listId,\r\n sharePointItemId: query?.sharepointIds?.listItemUniqueId,\r\n };\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getOneDriveRootDetails)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getParentWebURL = async (fileDriveId: string, itemId: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n let query = await client\r\n .api(`/drives/${fileDriveId}/items/${itemId}`)\r\n .select(\"parentReference\")\r\n .get();\r\n\r\n const { id, driveId } = query?.parentReference;\r\n\r\n query = await client\r\n .api(`/drives/${driveId}/items/${id}`)\r\n .select(\"webUrl\")\r\n .get();\r\n\r\n return query?.webUrl;\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (getParentWebURL)\");\r\n return null;\r\n }\r\n};\r\n\r\nconst executeSearch = async (request: GraphRequest) => {\r\n return await request.select(\"name,id,webUrl,parentReference,size\").get();\r\n};\r\n\r\nexport const createRootDriveFolder = async (accessToken: string, folderName: string): Promise => {\r\n try {\r\n const url = `me/drive/root/children`;\r\n return await executeFolderCreation(accessToken, url, folderName);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (executeSearch)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const createRootSharepointDriveFolder = async (\r\n accessToken: string,\r\n driveId: string,\r\n siteId: string,\r\n folderName: string\r\n) => {\r\n try {\r\n const url = `/sites/${siteId}/drives/${driveId}/items/root/children`;\r\n return await executeFolderCreation(accessToken, url, folderName);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (createRootSharePointDriveFolder)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const createChildFolder = async (accessToken: string, driveInfo: IDriveInfo, folderName: string) => {\r\n try {\r\n const url = `/drives/${driveInfo.driveId}/items/${driveInfo.id}/children`;\r\n return await executeFolderCreation(accessToken, url, folderName);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (createChildFolder)\");\r\n return null;\r\n }\r\n};\r\n\r\nconst executeFolderCreation = async (accessToken: string, url: string, folderName: string) => {\r\n const client = getAuthenticatedClient(accessToken);\r\n return await client.api(url).post({\r\n name: folderName,\r\n folder: {},\r\n \"@microsoft.graph.conflictBehavior\": \"rename\"\r\n });\r\n};\r\n\r\nexport const checkIfExist = async (url: string, select: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n await client\r\n .api(url)\r\n .select(select)\r\n .get();\r\n\r\n return true; // will throw file not found exception if the file is not found\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (checkIfExist)\");\r\n return false;\r\n }\r\n};\r\n\r\nexport const checkIfSharePointListExist = async (listId: string, siteId: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const url = `sites/${siteId}/lists/${listId}`;\r\n await client\r\n .api(url)\r\n .get();\r\n\r\n return true; // will throw file not found exception if the file is not found\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (checkIfSharePointListExist)\");\r\n return false;\r\n }\r\n};\r\n\r\nexport const checkIfFileOrFolderExist = async (driveInfo: IDriveInfo) => {\r\n try {\r\n const result = await getFileOrFolderResult(driveInfo, \"id\");\r\n return !result ? false : true;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (checkIfFileOrFolderExist)\");\r\n return false;\r\n }\r\n};\r\n\r\nexport const getFileOrFolderResult = async (driveInfo: IDriveInfo, select: string) => {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const url = buildFileOrFolderInfoUrl(driveInfo);\r\n return await executeFileQuery(client, url, select);\r\n};\r\n\r\nexport const buildFileOrFolderInfoUrl = (driveInfo: IDriveInfo) => {\r\n return !driveInfo.id ? `/drives/${driveInfo.driveId}` : `/drives/${driveInfo.driveId}/items/${driveInfo.id}`;\r\n};\r\n\r\nexport const getFileItemInfo = async (driveInfo: IDriveInfo, filename: string, select: string, expand?: string) => {\r\n try {\r\n const result = await getFileResult(driveInfo, filename, select, expand);\r\n return !result ? null : result;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getFileitemInfo)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getFileResult = async (driveInfo: IDriveInfo, filename: string, select: string, expand: string) => {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const url = buildFileInfoUrl(driveInfo, filename);\r\n return await executeFileQuery(client, url, select, expand);\r\n};\r\n\r\nexport const buildFileInfoUrl = (driveInfo: IDriveInfo, filename: string) => {\r\n return !driveInfo.driveId\r\n ? `/drives/${driveInfo.id}/root:/${tryEncodeUriComponent(filename)}`\r\n : `/drives/${driveInfo.driveId}/items/${driveInfo.id}:/${tryEncodeUriComponent(filename)}`;\r\n};\r\n\r\nexport const getFileItemIdFromRelativePath = async (\r\n accessToken: string,\r\n driveId: string,\r\n serverRelativePath: string,\r\n encodeRelativePath: boolean = true\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const result = await client\r\n .api(`/drives/${driveId}/root:/${encodeRelativePath === true ? tryEncodeUriComponent(serverRelativePath) : serverRelativePath}`)\r\n .select(\"id\")\r\n .get();\r\n\r\n return result?.id;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getFileItemIdFromRelativePath)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const executeFileQuery = async (client: Client, url: string, select: string, expand?: string) => {\r\n try {\r\n let req: GraphRequest = client\r\n .api(url)\r\n .select(select);\r\n\r\n if (expand) {\r\n req = req.expand(expand);\r\n }\r\n\r\n const result = await req.get();\r\n\r\n return result; // will throw file not found exception if the file is not found\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (executeFileQuery)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getSharePointDefaultWebUrls = async (accessToken: string): Promise => {\r\n try {\r\n const batchRequests: BatchRequestStep[] = [];\r\n const client = getAuthenticatedClient(accessToken);\r\n const rootSiteIndex = 0;\r\n const subsiteIndex = 1;\r\n const defaultRootSiteRequest = {\r\n id: rootSiteIndex.toString(),\r\n request: new Request(`/sites/root/drives?$select=webUrl`, { method: \"GET\" })\r\n };\r\n\r\n const defaultSubsitesRequest = {\r\n id: subsiteIndex.toString(),\r\n request: new Request(`/sites/root/sites?$select=webUrl`, { method: \"GET\" })\r\n };\r\n\r\n batchRequests.push(defaultRootSiteRequest);\r\n batchRequests.push(defaultSubsitesRequest);\r\n const batchResponseContent = await getBatchResponseContent(client, batchRequests);\r\n\r\n let webUrls: IDefaultSite[] = [];\r\n for (let index = rootSiteIndex; index <= subsiteIndex; index++) {\r\n let response = batchResponseContent.getResponseById(index.toString());\r\n if (response.ok) {\r\n let json = await response.json();\r\n json.value.forEach(element => {\r\n webUrls.push({ webUrl: tryDecodeUriComponent(element.webUrl), isSubsite: index === subsiteIndex });\r\n });\r\n }\r\n }\r\n\r\n return webUrls;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getSharePointDefaultWebUrls)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getItem = async (accessToken: string, driveId: string, itemId: string, expand?: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const url = !itemId ? `drives/${driveId}` : `/drives/${driveId}/items/${itemId}`;\r\n\r\n let request: GraphRequest = client\r\n .api(url)\r\n .select(\"name,webUrl,sharepointIds\");\r\n\r\n if (expand) {\r\n request = request.expand(expand);\r\n }\r\n\r\n return await request.get();\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getItem)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getItemCustomSelect = async (accessToken: string, driveId: string, itemId: string, select: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const url = !itemId ? `drives/${driveId}` : `/drives/${driveId}/items/${itemId}`;\r\n let result = await client\r\n .api(url)\r\n .select(select)\r\n .get();\r\n\r\n return result;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getItemCustomSelect)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getContainerSharePointIds = async (driveId: string, itemId: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const url = !itemId ? `drives/${driveId}/root` : `/drives/${driveId}/items/${itemId}`;\r\n return (await client\r\n .api(url)\r\n .select(\"sharepointIds\")\r\n .get())?.sharepointIds;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getContainerSharePointIds)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getItemWebViewUrl = async (accessToken: string, driveId: string, itemId: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const url = !itemId ? `drives/${driveId}` : `/drives/${driveId}/items/${itemId}`;\r\n let result = await client\r\n .api(url)\r\n .select(\"webUrl\")\r\n .get();\r\n\r\n return result.webUrl;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getItemWebViewUrl)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getListItemWebUrl = async (accessToken: string, driveId: string, itemId: string) => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n let result = await client\r\n .api(itemId ? `/drives/${driveId}/items/${itemId}/listItem` : `drives/${driveId}`)\r\n .select(\"webUrl\")\r\n .get();\r\n\r\n return result.webUrl;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getListItemWebUrl)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getSPListItemWebUrl = async (accessToken: string, siteId: string, listId: string, itemId: string) => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n let result = await client\r\n .api(itemId ? `sites/${siteId}/lists/${listId}/items/${itemId}/listItem` : `sites/${siteId}/lists/${listId}`)\r\n .select(\"webUrl\")\r\n .get();\r\n\r\n return result.webUrl;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getSPListItemWebUrl)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getDriveItemBySharingUrl = async (sharingUrl: string) => {\r\n try {\r\n const base64Value = window.btoa(sharingUrl) as string;\r\n let encodedUrl = `u!${base64Value.replace(new RegExp(\"=\" + \"([^\" + \"=\" + \"]*)$\"), \"\" + \"$1\")}`;\r\n encodedUrl = encodedUrl.replaceAll(\"/\", \"_\");\r\n encodedUrl = encodedUrl.replaceAll(\"+\", \"-\");\r\n\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n return await client\r\n .api(`/shares/${encodedUrl}/driveItem`)\r\n .select(\"id,name,sharepointIds\")\r\n .get();\r\n } catch (err) {\r\n // Ignore\r\n }\r\n return null;\r\n};\r\n\r\nexport const getDriveItemByWebUrl = async (webURL: string) => {\r\n try {\r\n const base64Value = window.btoa(webURL) as string;\r\n let encodedUrl = `u!${base64Value.replace(new RegExp(\"=\" + \"([^\" + \"=\" + \"]*)$\"), \"\" + \"$1\")}`; //Replace last = from base64 string\r\n encodedUrl = encodedUrl.replaceAll(\"/\", \"_\");\r\n encodedUrl = encodedUrl.replaceAll(\"+\", \"-\");\r\n\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const driveItem = await client\r\n .api(`/shares/${encodedUrl}/driveItem`)\r\n .select(\"id,parentReference,file,folder,webUrl\")\r\n .expand(\"listItem($select=webUrl)\")\r\n .get();\r\n\r\n if (driveItem?.parentReference?.driveId) {\r\n const listItem = await client\r\n .api(`/drives/${driveItem.parentReference.driveId}/list`)\r\n .select(\"parentReference\")\r\n .get();\r\n\r\n if (listItem?.parentReference?.siteId) {\r\n return {\r\n id: driveItem.id,\r\n driveId: driveItem.parentReference.driveId,\r\n siteId: listItem.parentReference.siteId,\r\n file: driveItem.file,\r\n folder: driveItem.folder,\r\n webUrl: driveItem.webUrl,\r\n listItemWebUrl: driveItem.listItem?.webUrl\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getListItemWebUrl)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const getListItemContentTypeId = async (driveId: string, itemId: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const result = await client\r\n .api(`/drives/${driveId}/items/${itemId}/listItem`)\r\n .select(\"contentType\")\r\n .get();\r\n\r\n return result?.contentType?.id;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getListItemContentTypeId)\");\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const getListItemCustomSelect = async (driveId: string, itemId: string, select: string): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n return await client\r\n .api(`/drives/${driveId}/items/${itemId}/listItem`)\r\n .select(select)\r\n .get();\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getListItemCustomSelect)\");\r\n }\r\n return undefined;\r\n};\r\n\r\nconst getBatchResponseContent = async (client: Client, batchRequests: BatchRequestStep[]) => {\r\n try {\r\n const content = await new BatchRequestContent(batchRequests).getContent();\r\n const batchResponse = await client.api(\"/$batch\").post(content);\r\n return new BatchResponseContent(batchResponse);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getBatchResponseContent)\");\r\n return null;\r\n }\r\n\r\n};\r\n\r\nexport const getDriveItemAttachmentLinks = async (\r\n accessToken: string,\r\n items: IDriveInfo[]\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n\r\n let batchRequests = items.map(\r\n (item, index): BatchRequestStep => {\r\n let request = new Request(`/drives/${item.driveId}/items/${item.id}?select=@microsoft.graph.downloadUrl,name`, {\r\n method: \"GET\"\r\n });\r\n return { id: index.toString(), request: request };\r\n }\r\n );\r\n\r\n const batchResponseContent = await getBatchResponseContent(client, batchRequests);\r\n\r\n return await Promise.all(\r\n batchRequests.map(async ({ id }) => {\r\n let response = batchResponseContent.getResponseById(id);\r\n if (!response.ok) {\r\n throw new Error(\"no results found\");\r\n }\r\n\r\n let json = await response.json();\r\n return { webUrl: json[\"@microsoft.graph.downloadUrl\"], name: json.name };\r\n })\r\n );\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getDriveItemAttachmentLinks)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const createItemShareableLink = async (request: IGraphCreateShareableLinkRequest) => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n const content = {\r\n type: request.type,\r\n scope: request.scope,\r\n recipients: request.recipients?.map(recipient => ({ email: recipient }))\r\n }\r\n return await client\r\n .api(`/drives/${request.driveId}/items/${request.itemId}/createLink`)\r\n .version(\"beta\")\r\n .post(content);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (createShareableLink)\");\r\n return null;\r\n }\r\n}\r\n\r\nexport const getDriveItemShareableLinks = async (\r\n accessToken: string,\r\n items: IDriveInfo[],\r\n isOrganization: boolean\r\n): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(accessToken);\r\n const createLinkSetting = {\r\n type: isOrganization ? \"edit\" : \"view\",\r\n scope: isOrganization ? \"organization\" : \"anonymous\"\r\n };\r\n\r\n const results: IShareableLink[] = [];\r\n for (let i = 0; i < items.length; i += 20) {\r\n const itemsSliced: IDriveInfo[] = items.slice(i, i + 20);\r\n let batchRequests = itemsSliced.map((item, index) => {\r\n let request = new Request(`/drives/${item.driveId}/items/${item.id}/createLink`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json\"\r\n },\r\n body: JSON.stringify(createLinkSetting)\r\n });\r\n\r\n return { id: index.toString(), request: request, name: item.name, webUrl: item.webUrl };\r\n });\r\n\r\n const batchResponseContent = await getBatchResponseContent(\r\n client,\r\n batchRequests.map(item => ({ id: item.id, request: item.request }))\r\n );\r\n const result: IShareableLink[] = await Promise.all(\r\n batchRequests.map(async ({ id, name, webUrl }) => {\r\n let response = batchResponseContent.getResponseById(id);\r\n if (response.ok) {\r\n let json = await response.json();\r\n return { url: json.link.webUrl as string, adminHasGivenSiteShareableRightsForUser: true, name: name };\r\n } else {\r\n return { url: webUrl, adminHasGivenSiteShareableRightsForUser: false, name: name };\r\n }\r\n })\r\n );\r\n results.push(...result);\r\n }\r\n\r\n return results;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getDriveItemShareableLinks)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getSiteIdWebUrl = async (siteId: string) => {\r\n const token = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(token);\r\n const url = `/sites/${siteId}`;\r\n let result = await client\r\n .api(url)\r\n .select(\"webUrl\")\r\n .get();\r\n\r\n return result?.webUrl;\r\n};\r\n\r\nexport const getFolderPathsInfo = async (driveId: string, paths: string[], isOneDrive: boolean = false) => {\r\n try {\r\n const pathResults: any[] = [];\r\n for (let i = 0; i < paths.length; i += 20) {\r\n const pathSlices: string[] = paths.slice(i, i + 20);\r\n let batchRequests = pathSlices.map((path, index) => {\r\n const isDriveItem: boolean = path?.trim().length > 0;\r\n let request = new Request(\r\n `/drives/${driveId}/${isDriveItem ? `root:${path}` : \"\"}?$select=id,name,webUrl,sharepointIds,parentReference${!isOneDrive && isDriveItem ? \"&$expand=listItem($select=contentType,webUrl)\" : \"\"}`,\r\n {\r\n method: \"GET\"\r\n }\r\n );\r\n return { id: index.toString(), request: request };\r\n });\r\n\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n const batchResponseContent = await getBatchResponseContent(client, batchRequests);\r\n\r\n for (let index = 0; index < pathSlices.length; index++) {\r\n let pathResponse = batchResponseContent.getResponseById(index.toString());\r\n if (pathResponse.ok) {\r\n let response = await pathResponse.json();\r\n pathResults.push(response);\r\n }\r\n }\r\n }\r\n return pathResults;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getFolderPathsInfo)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getSharePointDocumentLibrarySharepointId = async (driveId: string): Promise => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n var response = await client\r\n .api(`/drives/${driveId}`)\r\n .select(\"sharepointIds\")\r\n .get();\r\n\r\n return response.sharePointIds.listId;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getSharePointDocumentLibrarySharepointId)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getDriveItemSharepointUniqueId = async (driveId: string, itemId: string): Promise => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n var response = await client\r\n .api(`/drives/${driveId}/items/${itemId}`)\r\n .select(\"sharepointIds\")\r\n .get();\r\n\r\n return response.sharepointIds.listItemUniqueId;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getDriveItemSharepointUniqueId)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getRecentFiles = async (limitResult?: boolean): Promise => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n var response = await client\r\n .api(`/me/drive/recent`)\r\n .select(\"remoteItem\")\r\n .top(limitResult ? 25 : 500)\r\n .get();\r\n\r\n return response?.value?.filter(item => item.remoteItem?.size > 0)?.map(item => item.remoteItem);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getRecentFiles)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getSharedFiles = async (): Promise => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n var response = await client\r\n .api(`/me/drive/sharedWithMe`)\r\n .select(\"remoteItem\")\r\n .get();\r\n\r\n return response?.value?.filter(item => item.remoteItem?.size > 0)?.map(item => item.remoteItem);\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getSharedFiles)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getFilePdfByteContent = async (driveInfo: IDriveInfo, includeFormat: boolean = true): Promise => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n let result: AxiosResponse;\r\n\r\n if (detectIEOrEdge()) {\r\n const requestPayload: IDriveItemRequest = {\r\n accessToken: accessToken,\r\n driveId: driveInfo.driveId,\r\n itemId: driveInfo.id\r\n };\r\n\r\n result = await apiConvertFileToPdf(requestPayload);\r\n }\r\n else {\r\n result = await axiosRetryGet(`https://graph.microsoft.com/v1.0/drives/${driveInfo.driveId}/items/${driveInfo.id}/content${includeFormat ? '?format=pdf' : ''}`, {\r\n headers: { Authorization: `Bearer ${accessToken}` },\r\n responseType: \"blob\"\r\n });\r\n }\r\n\r\n return result?.data;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getFilePdfByteContent)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getRelativeFileInfo = async (files: ISharepointRelativeFileInfo[], autoFolderCreation: boolean): Promise => {\r\n const fileInfo: any[] = [];\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n\r\n if (files?.length > 0) {\r\n for (let i = 0; i < files.length; i += 20) {\r\n const fileSlices: ISharepointRelativeFileInfo[] = files.slice(i, i + 20);\r\n let batchRequests = fileSlices.map(\r\n (item, index): BatchRequestStep => {\r\n const path = item.documentLibrary ? buildSharepointPath(item, autoFolderCreation) : buildOneDrivePath(item);\r\n let request = new Request(`/drives/${item.driveId}/root:${encodePath(path)}`, {\r\n method: \"GET\"\r\n });\r\n return { id: index.toString(), request: request };\r\n }\r\n );\r\n\r\n const batchResponseContent = await getBatchResponseContent(client, batchRequests);\r\n\r\n await Promise.all(\r\n batchRequests.map(async ({ id }) => {\r\n let response = batchResponseContent.getResponseById(id);\r\n if (response.ok) {\r\n fileInfo.push(await response.json());\r\n }\r\n })\r\n );\r\n }\r\n }\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getRelativeFileInfo)\");\r\n }\r\n return fileInfo;\r\n};\r\n\r\nconst buildSharepointPath = (item: ISharepointRelativeFileInfo, autoFolderCreation: boolean) => {\r\n const subFolderStartIndex = item.directory?.indexOf(\"/\");\r\n if (subFolderStartIndex > -1) {\r\n let driveRootRelativeUrl = item.directory.substring(subFolderStartIndex);\r\n if (driveRootRelativeUrl?.startsWith(\"/\")) {\r\n driveRootRelativeUrl = driveRootRelativeUrl.substring(1);\r\n }\r\n\r\n return `/${driveRootRelativeUrl}/${item.fileName}`;\r\n }\r\n\r\n if (autoFolderCreation) {\r\n return `/${DateService.getTodayString()}/${item.fileName}`;\r\n }\r\n\r\n return `/${item.fileName}`;\r\n};\r\n\r\nconst buildOneDrivePath = (item: ISharepointRelativeFileInfo) => {\r\n return item.directory ? `/${tryDecodeUriComponent(item.directory)}/${item.fileName}` : `/${item.fileName}`;\r\n};\r\n\r\n\r\nexport const getProtectionLabels = async (): Promise => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n var response = await client\r\n .api(`/me/informationProtection/policy/labels`)\r\n .version(\"beta\")\r\n .get();\r\n const protectionLabels: IProtectionLabel[] = response?.value;\r\n return protectionLabels;\r\n } catch (err) {\r\n if (err.statusCode !== 404) {\r\n logger(err, \"GraphService.ts (getProtectionLabels)\");\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nexport const getFilePreview = async (driveId: string, itemId: string) => {\r\n try {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n const client = getAuthenticatedClient(accessToken);\r\n var response = await client\r\n .api(`/drives/${driveId}/items/${itemId}/preview`)\r\n .post(null);\r\n const filePreviewURL = response?.getUrl ?? response?.postUrl;\r\n return filePreviewURL;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getFilePreview)\");\r\n }\r\n}\r\n\r\nexport const getDriveRootWebUrl = async (driveId: string): Promise => {\r\n const cacheKey: string = `webUrl_${driveId}`;\r\n let webUrl: string = CacheHelper.get(cacheKey);\r\n if (!webUrl) {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const response = await client\r\n .api(`/drives/${driveId}/root`)\r\n .select('webUrl')\r\n .get();\r\n webUrl = response?.webUrl;\r\n if (webUrl) {\r\n CacheHelper.set(cacheKey, webUrl);\r\n }\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getDriveRootWebUrl)\");\r\n }\r\n }\r\n return webUrl;\r\n}\r\n\r\nexport const GetApprovalPeople = async (accessToken: string, searchString: string) => {\r\n const client = getAuthenticatedClient(accessToken);\r\n let approvalGroups: IReassignPerson[] = [];\r\n await Promise.all([\r\n await client\r\n .api(`users`)\r\n .filter(`startswith(displayName,'${searchString}') or startswith(mail,'${searchString}')`)\r\n .top(10)\r\n .select(\"displayName,id,mail\")\r\n .get(),\r\n await client\r\n .api(`groups`)\r\n .filter(`((securityEnabled eq true) or (groupTypes/any(c:c eq 'Unified'))) and (startsWith(displayName,'${searchString}') or startsWith(mail,'${searchString}'))`)\r\n .top(10)\r\n .select(\"displayName,id,mail\")\r\n .get(),\r\n ])\r\n .then(values => {\r\n values.forEach(val => {\r\n approvalGroups = approvalGroups.concat(val.value);\r\n });\r\n })\r\n return approvalGroups;\r\n};\r\n\r\nexport const getItemApprovalRequestInfo = async (driveId: string, itemId: string) => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n return await client\r\n .api(`/drives/${driveId}/items/${itemId}`)\r\n .select(\"sharepointIds\")\r\n .expand(\"listItem($select=webUrl)\")\r\n .get();\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getItemApprovalRequestInfo)\");\r\n }\r\n}\r\n\r\nexport const getItemThumbnail = async (driveId: string, itemId: string) => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const thumbData = await client\r\n .api(`/drives/${driveId}/items/${itemId}/thumbnails`)\r\n .select(\"large\")\r\n .get();\r\n\r\n if (Array.isArray(thumbData?.value) && thumbData.value.length > 0) {\r\n return thumbData.value[0].large;\r\n }\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getItemThumbnail)\");\r\n }\r\n return null;\r\n}\r\n\r\nexport const uploadLargeFile = async (accessToken: string, fileObject: FileUpload, itemId: string, driveId: string, sharePointIds: ISharePointIds, forceCheckout?: boolean) => {\r\n try {\r\n const baseSaveUrl = `https://graph.microsoft.com/v1.0/drives/${driveId}/items/${itemId}`;\r\n const client = getAuthenticatedClient(accessToken);\r\n const requestConfig = {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n };\r\n\r\n if (forceCheckout) {\r\n try {\r\n await axiosRetryPost(`${baseSaveUrl}/checkout`, {}, requestConfig, false);\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (uploadLargeFile) - checkout\");\r\n return { error: error?.message };\r\n }\r\n }\r\n\r\n const payload = {\r\n item: {\r\n \"@microsoft.graph.conflictBehavior\": \"replace\",\r\n },\r\n };\r\n\r\n const uploadSession: LargeFileUploadSession = await LargeFileUploadTask.createUploadSession(client, `${baseSaveUrl}/createuploadsession`, payload);\r\n const task = new LargeFileUploadTask(client, fileObject, uploadSession);\r\n\r\n try {\r\n const uploadResult = await task.upload();\r\n\r\n if (forceCheckout) {\r\n try {\r\n await axiosRetryPost(`${baseSaveUrl}/checkin`, { comment: \"\" }, requestConfig, false);\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (uploadLargeFile) - checkin\");\r\n return { error: error?.message }\r\n }\r\n }\r\n\r\n return {\r\n data: uploadResult\r\n };\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (uploadLargeFile) - upload\");\r\n\r\n try {\r\n await task.cancel();\r\n if (forceCheckout) {\r\n discardCheckOut(await authModule.getSharePointAccessToken(), sharePointIds.siteUrl, sharePointIds.listItemUniqueId);\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (uploadLargeFile) - cancel task\");\r\n }\r\n\r\n return { error: error?.message };\r\n }\r\n }\r\n catch (e) {\r\n logger(e, \"GraphService.ts (uploadLargeFile)\");\r\n return { error: e?.message };\r\n }\r\n}\r\n\r\nexport const searchPeople = async (searchValue: string, allowGroups: boolean): Promise => {\r\n try {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const people = await client.api(\"/me/people\")\r\n .header(\"X-PeopleQuery-QuerySources\", \"Mailbox,Directory\")\r\n .search(`\"${searchValue}\"`)\r\n .select(\"id,displayName,userPrincipalName,scoredEmailAddresses,personType\")\r\n .filter(allowGroups\r\n ? \"personType/subclass eq 'OrganizationUser' or personType/subclass eq 'Guest' or personType/subclass eq 'UnifiedGroup'\"\r\n : \"personType/subclass eq 'OrganizationUser' or personType/subclass eq 'Guest'\")\r\n .top(30)\r\n .get();\r\n\r\n if (Array.isArray(people?.value)) {\r\n return people.value;\r\n }\r\n } catch (error) {\r\n logger(error, \"GraphService.ts (searchPeople)\");\r\n }\r\n return [];\r\n}","import { ISharePointParameters } from \"../interfaces/ISharePointParameters\";\r\nimport { ITag } from \"@fluentui/react\";\r\nimport { CopyMoveErrors, FileSortOptionKeys, piiConfig, sharepoint, sharepointType } from \"../config/constants\";\r\nimport { IFile } from \"../interfaces/IFile\";\r\nimport { IPager } from \"../interfaces/IPager\";\r\nimport { IFilePreCommitRequest } from \"../interfaces/IFilePreCommitRequest\";\r\nimport { IFilePreCommitResult } from \"../interfaces/IFilePreCommitResult\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { axiosRetryGet, axiosRetryPost } from \"../../../utilities/AxiosRetryUtil\";\r\nimport { IViewInfo } from \"@pnp/sp/views\";\r\nimport { IBasePermissions, IListInfo, PermissionKind, sp } from \"@pnp/sp/presets/all\";\r\nimport { FilterSection, currentSharepointFolderUserPermissions } from \"../redux/models/reduxModels\";\r\nimport { ISortOption } from \"../interfaces/ISortOption\";\r\nimport { encodePath, tryEncodeUriComponent } from \"../../../utilities/EncodeDecode\";\r\nimport { ComponentTypes } from \"../config/config\";\r\nimport { IPageSettings } from \"../interfaces/IPageSettings\";\r\nimport { IOneDriveRootDetails } from \"../interfaces/IOneDriveRootDetails\";\r\nimport { getListItemWebUrl } from \"./GraphService\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { IOfficeContextApp } from \"../components/helpers/officeHelper\";\r\nimport { IHubSite } from \"../interfaces/IHubSite\";\r\nimport { ICreateCopyJobsRequest } from \"../interfaces/ICreateCopyJobsRequest\";\r\nimport { FolderPreCommitRequest } from \"../components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { apiFilePreCommitCheck, apiFolderPreCommitCheck } from \"./ApiService\";\r\nimport { parseString } from \"xml2js\";\r\nimport { CacheHelper } from \"../../../utilities/CacheHelper\";\r\nimport { ILibraryDefault } from \"../interfaces/ILibraryDefaults\";\r\nimport { GetIANATimeZoneName } from \"../../../utilities/TimeZone/SharePointTimeZones\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\nimport { NewDocumentTemplate } from \"../interfaces/IDocumentTemplate\";\r\nimport { getExtension, removeExtension } from \"../components/helpers/stringHelper\";\r\nimport { ISiteUser } from \"../interfaces/ISiteUser\";\r\n\r\nconst tryDecodeUriComponent = (uriComponent: string): string => {\r\n try {\r\n return decodeURIComponent(uriComponent)\r\n } catch (error) {\r\n // Ignore\r\n }\r\n return uriComponent;\r\n}\r\n\r\n// const encodeServerRelativePath = (serverRelativeUrl: string): string => {\r\n// let serverRelativeUrlParts = serverRelativeUrl.split(\"/\");\r\n// for (let index = 0; index < serverRelativeUrlParts.length; index++) {\r\n// let urlPart = serverRelativeUrlParts[index];\r\n// urlPart = tryDecodeUriComponent(urlPart);\r\n// serverRelativeUrlParts[index] = tryEncodeUriComponent(urlPart);\r\n// }\r\n\r\n// return serverRelativeUrlParts.join(\"%2F\").replaceAll(\"'\", \"''\");\r\n// }\r\n\r\nconst getSharePointSiteContent = async (\r\n accessToken: string,\r\n sharepointParameter: ISharePointParameters\r\n): Promise => {\r\n try {\r\n let response = await axiosRetryGet(`${sharepointParameter.webUrl}/_api/web/lists(guid'${sharepointParameter.sharePointListId}')/${sharepointParameter.parameter}?${sharepointParameter.odataQuery}`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n });\r\n\r\n return response?.data?.value;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharePointSiteContent)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getSharepointFiles = async (\r\n pager: IPager,\r\n accessToken: string,\r\n webUrl: string,\r\n driveId: string,\r\n sortOption: ISortOption,\r\n currentDirectory: IPageSettings,\r\n oneDriveRootDetails: IOneDriveRootDetails,\r\n context: IOfficeContextApp,\r\n filters?: FilterSection[]\r\n): Promise<{ files: IFile[], nextPageUrl: string }> => {\r\n try {\r\n const isInOneDrive = (currentDirectory.type == ComponentTypes.OneDrive || currentDirectory.type == ComponentTypes.OneDriveSubFolder);\r\n\r\n let folderServerRelativeUrl: string;\r\n try {\r\n if (currentDirectory.serverRelativePath) {\r\n folderServerRelativeUrl = tryDecodeUriComponent(currentDirectory?.serverRelativePath);\r\n }\r\n else if (currentDirectory?.directory?.length > 0 && currentDirectory?.parentId) {\r\n let driveId = isInOneDrive ? oneDriveRootDetails.driveId : (currentDirectory.parentId ? currentDirectory.parentId : currentDirectory.id);\r\n const webUrl = await getListItemWebUrl(await authModule.getGraphAccessToken(), driveId, currentDirectory?.id);\r\n folderServerRelativeUrl = tryDecodeUriComponent(new URL(webUrl).pathname);\r\n }\r\n } catch (error) {\r\n logger(error, \"SharePointRestService.ts (Try set folderServerRelativeUrl)\");\r\n }\r\n\r\n // let localAppExtentionFilter = \"\";\r\n // if (context) {\r\n // localAppExtentionFilter = `&FilterFields2=DocIcon&FilterValues2=${context.filter.values}&FilterTypes2=Computed&FilterOp2=In`;\r\n // }\r\n let overrideViewXml: string;\r\n const baseUrl = `${webUrl}/_api/web/lists('${isInOneDrive ? oneDriveRootDetails.sharePointListId : currentDirectory.sharePointListId}')/RenderListDataAsStream`;\r\n let url: string;\r\n if (pager?.nextPageUrl) {\r\n url = `${baseUrl}${pager.nextPageUrl}`;\r\n } else {\r\n // url = `${baseUrl}?FilterField1=FSObjType&FilterValue1=0${localAppExtentionFilter}&SortField=${sortOption?.sortField || FileSortOptionKeys.SortFields.TimeLastModified}&SortDir=${sortOption?.sortOrder || FileSortOptionKeys.SortOrder.Descending}`;\r\n url = baseUrl + \"?FilterField1=FSObjType&FilterValue1=0\";\r\n\r\n if (Array.isArray(filters) && filters.length > 0) {\r\n let filterFieldCount = 2;\r\n filters.forEach(section => {\r\n if (section.daysOffset || section.daysOffset === 0) {\r\n if (section.daysOffset < 0) {\r\n // If the offset is negative, return dates from the past up to today\r\n overrideViewXml = ``;\r\n } else if (section.daysOffset === 0) {\r\n // If the offset is zero, return results for today\r\n overrideViewXml = ``;\r\n } else if (section.daysOffset === 1) {\r\n // If the offset is 1, return results only for tomorrow\r\n overrideViewXml = ``;\r\n } else if (section.daysOffset > 1 && section.daysOffset <= 92) {\r\n // If the offset is between 1 and 92 (inclusive), return results from tomorrow up to the specified offset\r\n overrideViewXml = ``;\r\n } else {\r\n // If the offset is 93 or higher, return results from tomorrow onwards\r\n overrideViewXml = ``;\r\n }\r\n }\r\n else if (section.items.some(x => x.selected)) {\r\n let selectedCount = section.items.filter(x => x.selected).length;\r\n let isWordSelected = section.items.some(x => x.selected && x.fileType === 'docx');\r\n let isExcelSelected = section.items.some(x => x.selected && x.fileType === 'xlsx');\r\n let isPowerPointSelected = section.items.some(x => x.selected && x.fileType === 'pptx');\r\n let isVisioSelected = section.items.some(x => x.selected && x.fileType === 'vsdx');\r\n\r\n let fieldValues = section.items.filter(x => x.selected).map(item => item.value).join('%3B%23');\r\n if (selectedCount > 1) {\r\n fieldValues = fieldValues.replaceAll(\";\", \"%3B%3B\");\r\n }\r\n\r\n const filterField = `FilterField${selectedCount > 1 ? 's' : (isWordSelected || isExcelSelected || isPowerPointSelected || isVisioSelected) ? 's' : ''}${filterFieldCount}=${section.filterField.RealFieldName}`;\r\n const filterValue = `FilterValue${selectedCount > 1 ? 's' : (isWordSelected || isExcelSelected || isPowerPointSelected || isVisioSelected) ? 's' : ''}${filterFieldCount}=${fieldValues}`;\r\n const filterType = `FilterType${selectedCount > 1 ? 's' : (isWordSelected || isExcelSelected || isPowerPointSelected || isVisioSelected) ? 's' : ''}${filterFieldCount}=${section.filterField.Type}`;\r\n const filterOp = `FilterOp${filterFieldCount}=In`;\r\n\r\n url += `&${filterField}&${filterValue.replaceAll(\"&\", \"%26\")}&${filterType}&${filterOp}`;\r\n\r\n filterFieldCount++;\r\n }\r\n });\r\n }\r\n else if (context) {\r\n url += `&FilterFields2=DocIcon&FilterValues2=${context.filter.values}&FilterTypes2=Computed&FilterOp2=In`;\r\n }\r\n\r\n url += `&SortField=${sortOption?.sortField || FileSortOptionKeys.SortFields.TimeLastModified}&SortDir=${sortOption?.sortOrder || FileSortOptionKeys.SortOrder.Descending}`;\r\n }\r\n\r\n let data = {\r\n parameters: {\r\n DatesInUtc: true,\r\n ViewXml: sharepoint.defaultViewXml\r\n }\r\n }\r\n\r\n if (folderServerRelativeUrl) {\r\n data.parameters[\"FolderServerRelativeUrl\"] = folderServerRelativeUrl;\r\n }\r\n\r\n if (overrideViewXml) {\r\n data.parameters[\"OverrideViewXml\"] = overrideViewXml;\r\n }\r\n\r\n let retry: boolean;\r\n const requestConfig = {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n };\r\n let response: AxiosResponse;\r\n do {\r\n try {\r\n response = await axiosRetryPost(url, data, requestConfig, false);\r\n /**\r\n * If a sort option was specified without a next page href, it indicates that there should be data.\r\n * Retry with default sort options to ensure data is returned.\r\n */\r\n if (response?.data?.Row?.length === 0 && !pager?.nextPageUrl && sortOption?.sortField) {\r\n url = `${baseUrl}?FilterField1=FSObjType&FilterValue1=0&SortField=${FileSortOptionKeys.SortFields.TimeLastModified}&SortDir=${FileSortOptionKeys.SortOrder.Descending}`;\r\n retry = true;\r\n }\r\n else {\r\n break;\r\n }\r\n } catch (error) {\r\n // Retry throttling.\r\n if (error?.response?.data[\"odata.error\"]?.code?.startsWith(\"-2147024860\")) {\r\n data.parameters[\"ReplaceGroup\"] = true;\r\n retry = true;\r\n }\r\n else {\r\n retry = false;\r\n }\r\n }\r\n } while (retry);\r\n\r\n const sharepointFiles: IFile[] = response?.data?.Row?.map(item => {\r\n let file: IFile = {\r\n id: item.UniqueId.replace('{', '').replace('}', ''),\r\n name: item.FileLeafRef,\r\n driveId: driveId,\r\n createdDateTime: item.Created,\r\n lastModifiedDateTime: item.Modified,\r\n modifiedBy: item.Editor[0]?.title,\r\n fileType: item.File_x0020_Type,\r\n size: item.File_x0020_Size,\r\n permMask: item.PermMask,\r\n renderItemID: item.ID,\r\n serverRelativePath: item.FileRef?.replace(`/${item.FileLeafRef}`, \"\")\r\n }\r\n\r\n const privacySensitive = item[piiConfig.privacySentitiveColumnName];\r\n if (privacySensitive !== undefined) {\r\n file.pii = {\r\n piiDetected: privacySensitive === \"Yes\" || privacySensitive === \"True\",\r\n pii: item[piiConfig.privacySentitiveDataColumnName]\r\n }\r\n }\r\n\r\n return file;\r\n });\r\n\r\n return {\r\n files: sharepointFiles ?? [],\r\n nextPageUrl: response?.data?.NextHref\r\n };\r\n\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharePointFiles)\");\r\n return {\r\n files: [],\r\n nextPageUrl: ''\r\n };\r\n }\r\n};\r\n\r\nexport const getSharepointListSchema = async (accessToken: string, siteUrl: string, sharePointListId: string) => {\r\n try {\r\n const data = {\r\n parameters: {\r\n RenderOptions: 4\r\n }\r\n }\r\n const requestConfig = {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n };\r\n const response: AxiosResponse = await axiosRetryPost(`${siteUrl}/_api/web/lists('${sharePointListId}')/RenderListDataAsStream`, data, requestConfig, false);\r\n return response?.data;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharepointListSchema)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getSharepointLibraryFiles = async (siteUrl: string, listTitle: string): Promise => {\r\n try {\r\n const requestConfig = {\r\n headers: { Authorization: `Bearer ${await authModule.getSharePointAccessToken()}`, Accept: \"application/json;odata=verbose\" }\r\n };\r\n const response: AxiosResponse = await axiosRetryGet(`${siteUrl}/_api/web/lists/GetByTitle('${listTitle}')/items?$expand=file&$select=file/UniqueId,file/Name,file/ServerRelativeUrl`, requestConfig);\r\n const files: any[] = response?.data?.d?.results?.map(f => f.File);\r\n if (Array.isArray(files) && files.length > 0) {\r\n return files.map(f => {\r\n return {\r\n templateId: f.UniqueId,\r\n title: removeExtension(f.Name),\r\n extention: getExtension(f.Name),\r\n url: f.ServerRelativeUrl\r\n }\r\n });\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharepointLibraryFiles)\");\r\n }\r\n return [];\r\n};\r\n\r\nexport const getFilePreCommitInfo = async (request: IFilePreCommitRequest): Promise => {\r\n try {\r\n return await apiFilePreCommitCheck(request);\r\n } catch {\r\n return {\r\n exists: false,\r\n checkedOut: false,\r\n checkedOutBy: \"\",\r\n locked: false,\r\n lockedBy: \"\"\r\n };\r\n }\r\n};\r\n\r\nexport const getFolderPreCommitInfo = async (request: FolderPreCommitRequest): Promise => {\r\n try {\r\n return await apiFolderPreCommitCheck(request);\r\n } catch {\r\n return {\r\n exists: false,\r\n checkedOut: false,\r\n checkedOutBy: \"\",\r\n locked: false,\r\n lockedBy: \"\"\r\n };\r\n }\r\n};\r\n\r\nexport const getSharePointGroupUsers = async (\r\n accessToken: string,\r\n webUrl: string,\r\n userSelectionScope: string\r\n): Promise => {\r\n try {\r\n let response = await axiosRetryGet(`${webUrl}/_api/Web/SiteGroups/GetById(${userSelectionScope})/users?$select=Id,Title`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n return response?.data?.value;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharePointGroupUsers)\");\r\n return [];\r\n }\r\n};\r\n\r\nconst getSharePointSiteUsersCall = async (accessToken: string, webUrl: string): Promise => {\r\n try {\r\n let response = await axiosRetryGet(`${webUrl}/_api/web/siteusers?$select=Id,Title,Email,UserPrincipalName&$filter=(Email ne '' or (UserPrincipalName ne '' and UserPrincipalName ne null))`, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n return response?.data?.value;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharePointSiteUsersCall)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getSharePointContentTypes = async (\r\n accessToken: string,\r\n webUrl: string,\r\n documentLibrary: string,\r\n includeParentData: boolean = false\r\n): Promise =>\r\n getSharePointSiteContent(accessToken, {\r\n webUrl: webUrl,\r\n sharePointListId: documentLibrary,\r\n parameter: \"contentTypes\",\r\n odataQuery: !includeParentData ? \"$select=id,name,sealed\" : \"$select=id,name,sealed,parent/id&$expand=parent/id\"\r\n });\r\n\r\nexport const getSharePointContentTypesWithFields = async (\r\n accessToken: string,\r\n webUrl: string,\r\n documentLibrary: string\r\n): Promise =>\r\n getSharePointSiteContent(accessToken, {\r\n webUrl: webUrl,\r\n sharePointListId: documentLibrary,\r\n parameter: \"contentTypes\",\r\n odataQuery: \"$select=id,name,sealed,fields/Group,fields/Hidden,fields/InternalName,fields/Required&$expand=fields\"\r\n });\r\n\r\nexport const getSharePointContentTypeFields = async (\r\n accessToken: string,\r\n webUrl: string,\r\n documentLibrary: string,\r\n contentTypeId: string,\r\n query: string\r\n): Promise =>\r\n getSharePointSiteContent(accessToken, {\r\n webUrl: webUrl,\r\n sharePointListId: documentLibrary,\r\n parameter: contentTypeId ? `contentTypes('${contentTypeId}')/fields` : \"fields\",\r\n odataQuery: query\r\n });\r\n\r\nexport const getSharePointDocumentLibraryFields = async (\r\n accessToken: string,\r\n webUrl: string,\r\n documentLibrary: string,\r\n query: string\r\n): Promise =>\r\n getSharePointSiteContent(accessToken, {\r\n webUrl: webUrl,\r\n sharePointListId: documentLibrary,\r\n parameter: `/fields`,\r\n odataQuery: query\r\n });\r\n\r\nexport const getSharePointSiteUsers = async (accessToken: string, webUrl: string): Promise => {\r\n return await getSharePointSiteUsersCall(accessToken, webUrl);\r\n};\r\n\r\nexport const getSharePointSiteUsersById = async (webUrl: string, idList: number[]): Promise => {\r\n if (Array.isArray(idList)) {\r\n try {\r\n const filter: string = idList.map(id => `(Id eq ${id})`).join(\" or \");\r\n const response = (await axiosRetryGet(`${webUrl}/_api/web/siteuserinfolist/items?$select=Id,Title,EMail,UserName&$filter=${filter}`,\r\n {\r\n headers: { Authorization: `Bearer ${await authModule.getSharePointAccessToken()}`, accept: \"application/json; odata=nometadata\" }\r\n }));\r\n\r\n if (Array.isArray(response?.data?.value)) {\r\n return response.data.value;\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharePointSiteUsersById)\");\r\n }\r\n }\r\n return [];\r\n}\r\n\r\nexport const searchSharePointSiteUsers = async (webUrl: string, filterValue: string): Promise => {\r\n try {\r\n filterValue = filterValue.replaceAll(\"'\", \"''\");\r\n const response = (await axiosRetryGet(`${webUrl}/_api/web/siteuserinfolist/items?$select=Id,Title,EMail,UserName&$filter=(substringof('${filterValue}',Title) or substringof('${filterValue}',UserName) or substringof('${filterValue}',EMail)) and (EMail ne null or UserName ne null)`,\r\n {\r\n headers: { Authorization: `Bearer ${await authModule.getSharePointAccessToken()}`, accept: \"application/json; odata=nometadata\" }\r\n }));\r\n\r\n if (Array.isArray(response?.data?.value)) {\r\n return response.data.value;\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (searchSharePointSiteUsers)\");\r\n }\r\n return [];\r\n}\r\n\r\nexport const searchSharePointGroup = async (webUrl: string, groupToSearch: string, allowGroups: boolean, filterValue: string): Promise => {\r\n /*PrincipalSource - The principal sources to search:\r\n\r\n All (15) - Search all principal sources.\r\n MembershipProvider (4) - Search the current membership provider.\r\n None (0) - Search no principal sources.\r\n RoleProvider (8) - Search the current role provider.\r\n UserInfoList (1) - Search the user information list.\r\n Windows (2) - Search active directory.\r\n\r\n PrincipalType - The principal types to return:\r\n\r\n All (15) - Return all entity types.\r\n DistributionList (2) - Return distribution list entity types.\r\n None (0) - Return no principal types.\r\n SecurityGroup (4) - Return security group entity types.\r\n SharePointGroup (8) - Return sharepoint group entity types.\r\n User (1) - Return user entity types.\r\n*/\r\n try {\r\n const response = (await axiosRetryPost(`${webUrl}/_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.ClientPeoplePickerSearchUser`,\r\n {\r\n queryParams: {\r\n QueryString: filterValue,\r\n MaximumEntitySuggestions: 50,\r\n AllowEmailAddresses: false,\r\n AllowOnlyEmailAddresses: false,\r\n PrincipalType: allowGroups ? 5 : 1,\r\n PrincipalSource: 15,\r\n SharePointGroupID: Number.parseInt(groupToSearch)\r\n }\r\n },\r\n {\r\n headers: { Authorization: `Bearer ${await authModule.getSharePointAccessToken()}`, accept: \"application/json;odata=verbose\" }\r\n }));\r\n\r\n if (response?.data?.d?.ClientPeoplePickerSearchUser) {\r\n const jsonResult = JSON.parse(response.data.d.ClientPeoplePickerSearchUser);\r\n if (Array.isArray(jsonResult)) {\r\n return jsonResult.map(x => ({\r\n Id: -1,\r\n Title: x.DisplayText ?? x.EntityData?.DisplayName,\r\n EMail: x.EntityData?.Email\r\n }));\r\n }\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (searchSharePointSiteUsers)\");\r\n }\r\n return [];\r\n}\r\n\r\nexport const getTaxonomyTerms = async (accessToken: string, termSetId: string, webUrl: string): Promise => {\r\n try {\r\n const data = `${termSetId}`;\r\n let response = await axiosRetryPost(`${webUrl}/_vti_bin/client.svc/ProcessQuery?`, data, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n return response.data\r\n .filter(item => item._ObjectType_ === sharepointType.taxonomyTerm)\r\n .reduce((agg, cur) => [...agg, ...cur._Child_Items_], [])\r\n .map(item => {\r\n return {\r\n key: item.Id.replace(\"/Guid(\", \"\").replace(\")/\", \"\"),\r\n name: item.Name\r\n };\r\n });\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getTaxonomyTerms)\");\r\n return [];\r\n }\r\n};\r\n\r\nexport const getSharePointDocumentSetSettingsXml = async (\r\n accessToken: string,\r\n webUrl: string,\r\n sharePointListId: string,\r\n contentTypeId: string,\r\n): Promise => {\r\n try {\r\n let response = await axiosRetryGet(`${webUrl}/_api/web/lists(guid'${sharePointListId}')/contentTypes('${contentTypeId}')?$select=SchemaXml`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n });\r\n\r\n return response?.data;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharePointDocumentSetSettingsXml)\");\r\n return undefined;\r\n }\r\n};\r\n\r\nexport const getSharePointListViews = async (accessToken: string, webUrl: string, sharePointListId: string): Promise => {\r\n try {\r\n let response = await axiosRetryGet(`${webUrl}/_api/web/lists(guid'${sharePointListId}')/views?$select=Id,Title,DefaultView,ListViewXml&$filter=Hidden eq false`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n });\r\n\r\n return response?.data?.value;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSharePointListViews)\");\r\n return undefined;\r\n }\r\n};\r\n\r\nexport const getUserEffectivePermissions = async (accessToken: string, webUrl: string, sharePointListId?: string, sharePointUniqueId?: string, username?: string): Promise => {\r\n try {\r\n const encodedUsername: string = username && tryEncodeUriComponent(`i:0#.f|membership|${username.replaceAll(\"'\", \"''\")}`);\r\n const baseUrl: string = !sharePointListId\r\n ? `${webUrl}/_api/web`\r\n : (!sharePointUniqueId\r\n ? `${webUrl}/_api/web/lists('${sharePointListId}')`\r\n : `${webUrl}/_api/web/lists('${sharePointListId}')/GetItemByUniqueId('${sharePointUniqueId}')`);\r\n\r\n let url: string = !encodedUsername\r\n ? `${baseUrl}/EffectiveBasePermissions`\r\n : `${baseUrl}/getUserEffectivePermissions('${encodedUsername}')`;\r\n\r\n let retryLimit: number = 3;\r\n\r\n const requestConfig = {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n };\r\n let perms: IBasePermissions;\r\n\r\n while (retryLimit > 0) {\r\n try {\r\n perms = (await axiosRetryGet(url, requestConfig)).data;\r\n break;\r\n } catch (error) {\r\n // Retry intermittent getUserEffectivePermissions() endpoint.\r\n if (!encodedUsername || error?.response?.status !== 403) {\r\n throw error;\r\n }\r\n }\r\n\r\n if (--retryLimit === 0 && encodedUsername) {\r\n // Last retry also failed, retry one last time with default endpoint\r\n perms = (await axiosRetryGet(`${baseUrl}/EffectiveBasePermissions`, requestConfig)).data;\r\n }\r\n }\r\n\r\n if (perms) {\r\n return getPermissionsFromBase(perms);\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getUserPermissions)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const getUserEffectivePermissionsFromMask = (permHex: string): currentSharepointFolderUserPermissions => {\r\n if (permHex) {\r\n try {\r\n const basePerm: IBasePermissions = {\r\n Low: getPermMaskL(permHex),\r\n High: getPermMaskH(permHex)\r\n };\r\n return getPermissionsFromBase(basePerm);\r\n } catch (error) {\r\n logger(error, \"SharePointRestService.ts (getUserEffectivePermissionsFromMask)\");\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport const getLists = async (accessToken: string, webUrl: string): Promise => {\r\n try {\r\n const lists = (await axiosRetryGet(`${webUrl}/_api/web/lists?$select=Id,ItemCount&$filter=Hidden eq false`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n })).data;\r\n\r\n return Array.isArray(lists?.value) && lists.value.length > 0\r\n ? lists.value.map(list => ({ Id: list.Id, ItemCount: list.ItemCount }))\r\n : [];\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getLists)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const getListSettings = async (accessToken: string, webUrl: string, sharePointListId: string): Promise => {\r\n try {\r\n return (await axiosRetryGet(`${webUrl}/_api/web/lists('${sharePointListId}')?$select=EnableFolderCreation,ContentTypesEnabled,EnableMinorVersions,ExcludeFromOfflineClient,ForceCheckout,ItemCount`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n })).data;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getListSettings)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const createLink = async (accessToken: string, webUrl: string, serverRelativePath: string, linkName: string, payload: any): Promise => {\r\n try {\r\n const url = `${webUrl}/_api/Web/GetFolderByServerRelativePath(decodedurl='${encodePath(tryDecodeUriComponent(serverRelativePath))}')/Files/AddUsingPath(decodedUrl='${encodePath(tryDecodeUriComponent(linkName))}',overwrite=false)`\r\n return (await axiosRetryPost(url, payload,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json;odata=verbose\" }\r\n })).data?.d;\r\n } catch (error) {\r\n logger(error, \"SharePointRestService.ts (createLink)\");\r\n throw (error);\r\n }\r\n}\r\n\r\nexport const getShortcutLink = async (accessToken: string, webUrl: string, fileUrl: string): Promise => {\r\n try {\r\n const url = `${webUrl}/_api/SP.Utilities.ShortcutLink.GetShortcutLink(@url)?@url=${tryEncodeUriComponent(`'${fileUrl}'`)}`;\r\n return (await axiosRetryGet(url,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json;odata=verbose\" }\r\n }))?.data?.d;\r\n } catch (error) {\r\n logger(error, \"SharePointRestService.ts (createLink)\");\r\n }\r\n return null;\r\n}\r\n\r\nexport const getFileByUrl = async (accessToken: string, webUrl: string, fileUrl: string): Promise => {\r\n try {\r\n const webHost: string = new URL(webUrl).hostname.toLowerCase().trim();\r\n const fileHost: string = new URL(fileUrl).hostname.toLowerCase().trim();\r\n\r\n let requestUrl: string;\r\n if (webHost === fileHost) {\r\n requestUrl = `${webUrl}/_api/web/GetFileByUrl(@url)?@url=${tryEncodeUriComponent(`'${fileUrl}'`)}`;\r\n }\r\n else {\r\n requestUrl = `${webUrl}/_api/SP.RemoteWeb(@url)/web/GetFileByUrl(@url)?@url=${tryEncodeUriComponent(`'${fileUrl}'`)}`;\r\n }\r\n\r\n return (await axiosRetryGet(requestUrl,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json;odata=verbose\" }\r\n })).data;\r\n } catch (error) {\r\n logger(error, \"SharePointRestService.ts (getFileByUrl)\");\r\n }\r\n return null;\r\n}\r\n\r\nexport const getListSharingInformation = async (accessToken: string, webUrl: string, listId: string): Promise => {\r\n try {\r\n const url = `${webUrl}/_api/web/Lists('${listId}')`;\r\n return (await axiosRetryPost(url, {},\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json;odata=verbose\" }\r\n }))?.data?.d;\r\n } catch (error) {\r\n logger(error, \"SharePointRestService.ts (getListSharingInformation)\");\r\n }\r\n return null;\r\n}\r\n\r\nexport const getLibraryDefaultValues = async (accessToken: string, webUrl: string, directory: string): Promise => {\r\n if (webUrl && directory) {\r\n try {\r\n const directoryParts: string[] = directory.split(\"/\")?.filter(v => v);\r\n if (Array.isArray(directoryParts) && directoryParts.length > 0) {\r\n const domain = new URL(webUrl).origin;\r\n const libraryUrl = `${webUrl.replace(domain, '')}/${directoryParts[0]}`;\r\n\r\n let xmlData: ILibraryDefault[] = CacheHelper.get(libraryUrl);\r\n\r\n if (!Array.isArray(xmlData)) {\r\n xmlData = [];\r\n try {\r\n const url = `${webUrl}/_api/Web/GetFileByServerRelativePath(decodedurl='${encodePath(tryDecodeUriComponent(libraryUrl))}/Forms/client_LocationBasedDefaults.html')/$value?binaryStringResponseBody=true`\r\n const xmlString = (await axiosRetryGet(url,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n })).data;\r\n\r\n parseString(xmlString, (err, result) => {\r\n if (result && result.MetadataDefaults?.a) {\r\n xmlData = result.MetadataDefaults?.a?.map((x: any) => {\r\n return {\r\n folder: tryDecodeUriComponent(x.$.href),\r\n values: x.DefaultValue.map((defaultValue: any) => {\r\n return {\r\n fieldName: defaultValue.$.FieldName,\r\n value: defaultValue._\r\n };\r\n })\r\n };\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n // Assume no default vaues found\r\n }\r\n CacheHelper.set(libraryUrl, xmlData);\r\n }\r\n\r\n return xmlData;\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getLibraryDefaultValues)\");\r\n }\r\n }\r\n return null;\r\n};\r\n\r\n// export const getSiteTimeZoneOffset = async (accessToken: string, webUrl: string): Promise => {\r\n// try {\r\n// const timeZone = (await axiosRetryGet(`${webUrl}/_api/web/regionalsettings/TimeZone?$select=Id,Information`,\r\n// {\r\n// headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n// })).data;\r\n\r\n// if (timeZone) {\r\n// const timeZoneInfo = timeZone.Information;\r\n// // https://github.com/SharePoint/sp-dev-docs/issues/6083\r\n// // var offset = -(timeZoneInfo.Bias + timeZoneInfo.StandardBias + timeZoneInfo.DaylightBias) / 60.0 -1;\r\n// // return dayjs.utc(value).utcOffset(offset);\r\n// // return -(timeZoneInfo.Bias + timeZoneInfo.StandardBias + timeZoneInfo.DaylightBias) / 60.0 - 1;\r\n// return -(timeZoneInfo.Bias + timeZoneInfo.StandardBias + timeZoneInfo.DaylightBias) / 60.0 - (GetIsTimeZoneIdInDST(timeZone.Id.toString()) ? 1 : 0);\r\n// }\r\n// } catch (err) {\r\n// logger(err, \"SharePointRestService.ts (getSiteTimeZoneOffset)\");\r\n// }\r\n// return null;\r\n// };\r\n\r\nexport const getSiteIANATimeZoneName = async (accessToken: string, webUrl: string): Promise => {\r\n try {\r\n const timeZone = (await axiosRetryGet(`${webUrl}/_api/web/regionalsettings/TimeZone?$select=Id`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n })).data;\r\n\r\n if (timeZone) {\r\n return GetIANATimeZoneName(timeZone.Id.toString());\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getSiteIANATimeZoneName)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const getListItemsById = async (accessToken: string, webUrl: string, sharePointListId: string, columnInternalName: string, ids: number[]): Promise => {\r\n if (!Array.isArray(ids) || ids.length === 0) return [];\r\n try {\r\n const showField: string = columnInternalName || \"Title\";\r\n const items = (await axiosRetryGet(`${webUrl}/_api/web/lists('${sharePointListId}')/items?$select=Id,${showField}&$filter=${ids.map(id => `Id eq ${id}`).join(\" or \")}`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n })).data;\r\n\r\n return Array.isArray(items?.value) && items.value.length > 0\r\n ? items.value.map(item => ({ key: item.Id, name: item[showField] }))\r\n : [];\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getListItemsById)\");\r\n return null;\r\n }\r\n};\r\n\r\nexport const discardCheckOut = async (accessToken: string, webUrl: string, itemUniqueId: string): Promise => {\r\n try {\r\n await axiosRetryPost(`${webUrl}/_api/web/GetFileById(guid'${itemUniqueId}')/undocheckout`,\r\n null,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n }, false);\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (discardCheckOut)\");\r\n }\r\n};\r\n\r\nexport const getItemAbsoluteUrl = async (accessToken: string, webUrl: string, listUniqueId: string, itemUniqueId: string): Promise => {\r\n let absUrl: string;\r\n try {\r\n absUrl = (await axiosRetryGet(`${webUrl}/_api/web/lists(guid'${listUniqueId}')/GetItemByUniqueId('${itemUniqueId}')?$select=EncodedAbsUrl`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n }))?.data?.EncodedAbsUrl;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getItemAbsoluteUrl)\");\r\n }\r\n return absUrl;\r\n};\r\n\r\nexport const getItemVersions = async (accessToken: string, webUrl: string, listUniqueId: string, itemUniqueId: string): Promise => {\r\n try {\r\n return (await axiosRetryGet(`${webUrl}/_api/web/lists(guid'${listUniqueId}')/GetItemByUniqueId('${itemUniqueId}')/Versions`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n }))?.data;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getItemVersions)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const getListFields = async (accessToken: string, webUrl: string, listUniqueId: string): Promise => {\r\n try {\r\n return (await axiosRetryGet(`${webUrl}/_api/web/lists(guid'${listUniqueId}')/fields?$filter=Hidden eq false`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n }))?.data;\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getListFields)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const getSiteLogo = async (accessToken: string, webUrl: string): Promise => {\r\n try {\r\n const response: Response = await fetch(`${webUrl}/_api/siteiconmanager/getsitelogo?type='1'`, {\r\n headers: {\r\n \"Authorization\": `Bearer ${accessToken}`\r\n }\r\n });\r\n\r\n if (response.ok) {\r\n const url = window.URL || window.webkitURL;\r\n const blob = await response.blob();\r\n return url.createObjectURL(blob);\r\n }\r\n } catch (err) {\r\n // Ignore\r\n // logger(err, \"SharePointRestService.ts (getSiteLogo)\");\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const getFileVersionData = async (accessToken: string, siteUrl: string, uniqueId: string): Promise<{ Level: number, MajorVersion: number, MinorVersion: number }> => {\r\n try {\r\n const response = (await axiosRetryGet(`${siteUrl}/_api/web/GetFileById(guid'${uniqueId}')?$select=Level,MajorVersion,MinorVersion`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n }))?.data;\r\n\r\n if (response) {\r\n return {\r\n Level: response.Level,\r\n MajorVersion: response.MajorVersion,\r\n MinorVersion: response.MinorVersion\r\n }\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getFileVersionData)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const getHubSites = async (accessToken: string, siteUrl: string): Promise => {\r\n try {\r\n const response = (await axiosRetryGet(`${siteUrl}/_api/HubSites?$select=ID,SiteUrl,ParentHubSiteId,Title,Description`,\r\n {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n }))?.data;\r\n\r\n return Array.isArray(response?.value) && response.value.length > 0\r\n ? response.value.map(hubSite => ({ id: hubSite.ID, siteUrl: hubSite.SiteUrl, parentHubSiteId: hubSite.ParentHubSiteId, title: hubSite.Title, description: hubSite.Description }))\r\n : [];\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (getHubSites)\");\r\n }\r\n return null;\r\n};\r\n\r\nexport const createCopyJobs = async (args: ICreateCopyJobsRequest): Promise<{ success: boolean, jobs: any[], error?: string }> => {\r\n let errorMessage = \"\";\r\n try {\r\n const { siteUrl, files, sourceSiteUrl, sourceServerRelPath, destinationServerRelPath, isMoveMode, accessToken } = args;\r\n\r\n let sourcePath = sourceSiteUrl;\r\n if (sourceServerRelPath) {\r\n const domain = new URL(sourceSiteUrl).origin;\r\n sourcePath = `${domain}${sourceServerRelPath}`;\r\n }\r\n\r\n let destinationPath = siteUrl;\r\n if (destinationServerRelPath) {\r\n const domain = new URL(siteUrl).origin;\r\n destinationPath = `${domain}${destinationServerRelPath}`;\r\n }\r\n\r\n const fileNames: string[] = files.map(file => file.FileLeafRef);\r\n const duplicateNames: string[] = fileNames.filter((fileName, index) => fileNames.indexOf(fileName) !== index);\r\n\r\n if (duplicateNames.length > 0) {\r\n return {\r\n success: false,\r\n jobs: [],\r\n error: CopyMoveErrors.DuplicateFilenames\r\n };\r\n }\r\n\r\n const arr: { containerPath: string, filePath: string }[] = files.map(file => {\r\n let siteOrigin: string = new URL(sourcePath).origin;\r\n if (siteOrigin.endsWith(\"/\")) {\r\n siteOrigin = siteOrigin.slice(0, -1);\r\n }\r\n\r\n let fileServerRelativePath: string = file.FileRef;\r\n if (!fileServerRelativePath.startsWith(\"/\")) {\r\n fileServerRelativePath = \"/\" + fileServerRelativePath;\r\n }\r\n\r\n const filePath: string = new URL(siteOrigin + fileServerRelativePath).href;\r\n const containerPath: string = filePath.split(\"/\").slice(0, -1).join(\"/\");\r\n return {\r\n containerPath,\r\n filePath\r\n };\r\n });\r\n\r\n const sourceLocations = Object.values(\r\n groupBy((item) => item.containerPath, arr)\r\n );\r\n\r\n const requestConfig = {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n };\r\n\r\n let jobs: any[] = [];\r\n for (let i = 0; i < sourceLocations.length; i++) {\r\n const locationFiles = sourceLocations[i];\r\n if (Array.isArray(locationFiles) && locationFiles.length > 0) {\r\n const body = {\r\n exportObjectUris: locationFiles.map(file => {\r\n return file.filePath;\r\n }),\r\n destinationUri: destinationPath,\r\n options: {\r\n AllowSchemaMismatch: true,\r\n AllowSmallerVersionLimitOnDestination: true,\r\n IgnoreVersionHistory: true,\r\n IsMoveMode: isMoveMode,\r\n NameConflictBehavior: 2 //1 = REPLACE and 2 = KEEP BOTH\r\n }\r\n }\r\n\r\n const copyJobsResponse = (await axiosRetryPost(`${siteUrl}/_api/site/CreateCopyJobs`, body, requestConfig, false))?.data?.value;\r\n if (copyJobsResponse) {\r\n jobs = jobs.concat(copyJobsResponse);\r\n }\r\n }\r\n }\r\n\r\n if (jobs.length > 0) {\r\n return {\r\n success: true,\r\n jobs\r\n };\r\n }\r\n } catch (err) {\r\n logger(err, \"SharePointRestService.ts (createCopyJobs)\");\r\n errorMessage = err.response?.data[\"odata.error\"]?.message?.value;\r\n }\r\n\r\n return {\r\n success: false,\r\n jobs: [],\r\n error: errorMessage\r\n };\r\n};\r\n\r\nconst getPermissionsFromBase = (perms: IBasePermissions): currentSharepointFolderUserPermissions => {\r\n const userPermissions: currentSharepointFolderUserPermissions = {\r\n canAddListItem: sp.web.hasPermissions(perms, PermissionKind.AddListItems),\r\n canEditListItem: sp.web.hasPermissions(perms, PermissionKind.EditListItems),\r\n canDeleteListItem: sp.web.hasPermissions(perms, PermissionKind.DeleteListItems),\r\n canOpenItems: sp.web.hasPermissions(perms, PermissionKind.OpenItems),\r\n canViewVersions: sp.web.hasPermissions(perms, PermissionKind.ViewVersions),\r\n canDeleteVersions: sp.web.hasPermissions(perms, PermissionKind.DeleteVersions),\r\n canCancelCheckout: sp.web.hasPermissions(perms, PermissionKind.CancelCheckout),\r\n canApproveItems: sp.web.hasPermissions(perms, PermissionKind.ApproveItems),\r\n canEnumeratePermissions: sp.web.hasPermissions(perms, PermissionKind.EnumeratePermissions),\r\n canManagePermissions: sp.web.hasPermissions(perms, PermissionKind.ManagePermissions),\r\n };\r\n\r\n return userPermissions;\r\n}\r\n\r\nconst getPermMaskH = (permHex: string) => {\r\n const a = permHex.length;\r\n return a <= 10 ? 0 : parseInt(permHex.substring(2, a - 8), 16);\r\n};\r\n\r\nconst getPermMaskL = (permHex: string) => {\r\n const a = permHex.length;\r\n return a <= 10 ? parseInt(permHex) : parseInt(permHex.substring(a - 8, a), 16);\r\n};\r\n\r\nconst groupBy = (groupingFn: (x: any) => string, arr: any[]) => {\r\n const groups: { [key: string]: any[] } = {}\r\n\r\n arr.forEach((item) => {\r\n const key = groupingFn(item);\r\n\r\n if (groups[key] !== undefined) {\r\n groups[key].push(item);\r\n } else {\r\n groups[key] = [item];\r\n }\r\n });\r\n\r\n return groups;\r\n};","import dayjs from \"dayjs\";\r\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\r\nimport { IDropdownOption } from \"@fluentui/react\";\r\ndayjs.extend(customParseFormat);\r\n\r\nconst dateFormats = {\r\n default: [\"DD-MM-YYYY\", \"D-M-YYYY\", \"DD/MM/YYYY\", \"D/M/YYYY\", \"YYYY-MM-DD\", \"YYYY-M-D\"],\r\n enUS: [\"MM-DD-YYYY\", \"M-D-YYYY\", \"MM/DD/YYYY\", \"M/D/YYYY\", \"YYYY-MM-DD\", \"YYYY-M-D\"]\r\n}\r\n\r\nexport class DateService {\r\n static getHours(): IDropdownOption[] {\r\n let options: IDropdownOption[] = [];\r\n for (let hours = 0; hours < 24; hours++) {\r\n for (let minutes = 0; minutes < 60; minutes += 30) {\r\n let ampm = hours < 12 || hours > 23 ? \"AM\" : \"PM\";\r\n options.push({\r\n key: `${hours}:${minutes == 0 ? \"00\" : minutes}`,\r\n text: `${hours}:${minutes == 0 ? \"00\" : minutes} ${ampm}`\r\n });\r\n }\r\n }\r\n\r\n return options;\r\n }\r\n\r\n static getTodayString(): string {\r\n const today = new Date();\r\n\r\n const year = `${today.getFullYear()}`;\r\n const month = (`0${today.getMonth() + 1}`).slice(-2);\r\n const day = (`0${today.getDate()}`).slice(-2);\r\n\r\n return `${year}${month}${day}`;\r\n }\r\n\r\n static parseDateFromString(dateStr: string): Date {\r\n let dayjsDate: dayjs.Dayjs;\r\n if (navigator.language === \"en-US\") {\r\n dayjsDate = dayjs(dateStr, dateFormats.enUS, true);\r\n }\r\n else {\r\n dayjsDate = dayjs(dateStr, dateFormats.default, true);\r\n }\r\n\r\n if (dayjsDate.isValid()) {\r\n return dayjsDate.toDate();\r\n }\r\n\r\n //if dateStr is DATE ONLY ISO 8601 -> add time so Date.parse() won't convert it to UTC\r\n //See here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#date_time_string_format\r\n if (dateStr.match(/^\\d{4}(-\\d{2}){2}$/)) {\r\n dateStr += 'T12:00';\r\n }\r\n const date = Date.parse(dateStr);\r\n return date ? new Date(date) : null;\r\n }\r\n}\r\n","import { mergeStyles } from \"@fluentui/react\";\r\n\r\nexport const mobileBackButton = {\r\n color: \"#097dd5\", //microsoft-blue,\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n};\r\n\r\nexport const mobileBackIcon = {\r\n paddingLeft: 0,\r\n marginLeft: 0,\r\n paddingRight: 0,\r\n marginRight: 0,\r\n};\r\n\r\nexport const mobileMoreTopNavIcon = {\r\n standard: {\r\n paddingLeft: 0,\r\n marginLeft: 0,\r\n marginRight: 5,\r\n paddingTop: 5,\r\n paddingBottom: 5,\r\n color: \"#097dd5\",\r\n fontSize: 20,\r\n },\r\n hover: {\r\n backgroundColor: \"#f3f2f1\",\r\n }\r\n};\r\n\r\nexport const mobileMoreStyle = mergeStyles({\r\n color: \"#097dd5\",\r\n marginRight: 5\r\n});\r\n\r\nexport const mobileMenuRowStyle = {\r\n marginBottom: 5,\r\n};\r\n\r\nexport const mobileListItemStyle = {\r\n height: 55,\r\n}\r\n\r\nexport const mobileIconStyle = mergeStyles({\r\n fontSize: 20,\r\n})\r\n\r\nexport const getPlatform = (): Office.PlatformType | string | null => {\r\n try {\r\n if (typeof Office !== \"undefined\") {\r\n if (typeof Office.context?.diagnostics?.platform !== \"undefined\") {\r\n return Office.context.diagnostics.platform;\r\n }\r\n else if (typeof Office.context?.mailbox?.diagnostics?.hostName !== \"undefined\") {\r\n return Office.context.mailbox.diagnostics.hostName;\r\n }\r\n }\r\n } catch (error) {\r\n // Ignore\r\n }\r\n return null;\r\n}\r\n\r\nexport const isMobile = (): boolean => {\r\n const platform = getPlatform();\r\n if (platform) {\r\n return platform === Office.PlatformType.iOS\r\n || platform === Office.PlatformType.Android\r\n || platform === \"OutlookIOS\"\r\n || platform === \"OutlookAndroid\";\r\n }\r\n return false;\r\n}","import { IAuthTokenResultDto, IAuthAccount, IJwtAuthTokenResult } from \"../src/taskpane/interfaces/IAuthTokenResultDto\";\r\nimport rabbit = require(\"crypto-js/rabbit\");\r\nimport utf8 = require(\"crypto-js/enc-utf8\");\r\nimport dayjs from 'dayjs'\r\nimport utc from 'dayjs/plugin/utc' // import plugin\r\nimport { logger } from \"./logger\";\r\nimport { axiosRetryPost } from \"./AxiosRetryUtil\";\r\nimport generalModule from \"./GeneralModule\";\r\nimport { shared } from \"../src/taskpane/config/constants\";\r\nimport { StorageHelper } from \"./StorageHelper\";\r\nimport { ITokenRequest, ITokenResponse } from \"../src/taskpane/components/_v2/redux/api/nintex/api-nintex-interface\";\r\nimport { apiAquireFlowToken, apiAquireMailSendToken, apiAquireMailboxToken, apiAquireSharePointAdminToken, apiRefreshTokenRequest, apiSilentTokenRequest, refreshJwt } from \"../src/taskpane/services/ApiService\";\r\nimport { clearLocalStorage } from \"../src/taskpane/components/helpers/localStorageHelper\";\r\n\r\ndayjs.extend(utc);\r\n\r\nenum TokenStorage {\r\n Local,\r\n Roaming\r\n}\r\n\r\nexport enum TokenResource {\r\n All,\r\n Graph,\r\n SharePoint,\r\n OneDrive,\r\n Flow,\r\n SharePointAdmin,\r\n MailSend,\r\n Nintex,\r\n Mailbox,\r\n Teams\r\n}\r\n\r\nexport enum DialogMessageStatus {\r\n Success,\r\n Failure\r\n}\r\n\r\nexport interface DialogMessageResponse {\r\n status: DialogMessageStatus;\r\n result: IAuthTokenResultDto | null;\r\n}\r\n\r\nexport class AuthModule {\r\n\r\n private static readonly CypherSecret: string = \"xbl001=klr\";\r\n private static readonly AuthStateKey: string = \"AuthState\";\r\n private static readonly defaultRefreshWait: number = 2000;\r\n private static readonly defaultRefreshWaitDepth: number = 5;\r\n private isAuthRefreshInProgress: boolean = false;\r\n private isFlowAccessTokenRefreshInProgress: boolean = false;\r\n private isMailSendAccessTokenRefreshInProgress: boolean = false;\r\n private isMailboxAccessTokenRefreshInProgress: boolean = false;\r\n private globalAuthState: IAuthTokenResultDto;\r\n private tenantApiKey: string;\r\n\r\n private signOutCallback: () => void;\r\n\r\n setSignOutCallback(callback: () => void) {\r\n this.signOutCallback = callback;\r\n }\r\n\r\n private async tryPersistAuthState(storage: TokenStorage, authState: IAuthTokenResultDto): Promise {\r\n try {\r\n if (storage === TokenStorage.Roaming) {\r\n if (typeof Office !== \"undefined\" && typeof Office.context?.diagnostics?.host !== \"undefined\" && Office.context.requirements.isSetSupported(\"Mailbox\")) {\r\n Office.context.roamingSettings.set(AuthModule.AuthStateKey, authState);\r\n\r\n return await new Promise((resolve, reject) => {\r\n Office.context.roamingSettings.saveAsync((result) => {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n resolve(true);\r\n } else {\r\n console.error(`Roaming AuthState persistence failed with message: ${result.error.message}`);\r\n reject(false);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n else if (storage === TokenStorage.Local) {\r\n const storageValue: string = rabbit.encrypt(JSON.stringify(authState), AuthModule.CypherSecret).toString();\r\n try {\r\n localStorage.setItem(AuthModule.AuthStateKey, storageValue);\r\n } catch (error) {\r\n return await StorageHelper.setItemAsync(AuthModule.AuthStateKey, storageValue);\r\n }\r\n return true;\r\n }\r\n\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (tryPersistAuthState)\");\r\n }\r\n\r\n return false;\r\n }\r\n\r\n async persistAuthState(authState: IAuthTokenResultDto) {\r\n this.globalAuthState = authState;\r\n await Promise.all([\r\n this.tryPersistAuthState(TokenStorage.Roaming, authState),\r\n this.tryPersistAuthState(TokenStorage.Local, authState)\r\n ]);\r\n }\r\n\r\n private tryGetAuthState(storage: TokenStorage): IAuthTokenResultDto {\r\n try {\r\n\r\n if (storage === TokenStorage.Roaming) {\r\n if (typeof Office !== \"undefined\" && typeof Office.context?.diagnostics?.host !== \"undefined\" && Office.context.requirements.isSetSupported(\"Mailbox\")) {\r\n return Office.context.roamingSettings.get(AuthModule.AuthStateKey);\r\n }\r\n } else if (storage === TokenStorage.Local) {\r\n let serializedAuthState: string;\r\n try {\r\n serializedAuthState = localStorage.getItem(AuthModule.AuthStateKey);\r\n } catch (error) {\r\n serializedAuthState = StorageHelper.getItem(AuthModule.AuthStateKey);\r\n }\r\n\r\n if (serializedAuthState) {\r\n return JSON.parse(rabbit.decrypt(serializedAuthState, AuthModule.CypherSecret).toString(utf8));\r\n }\r\n }\r\n\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (tryGetAuthState)\");\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getPersistedAuthState(): IAuthTokenResultDto {\r\n\r\n let authState: IAuthTokenResultDto = null;\r\n\r\n if (this.globalAuthState) {\r\n return this.globalAuthState;\r\n }\r\n else {\r\n try {\r\n const roamingAuthState: IAuthTokenResultDto = this.tryGetAuthState(TokenStorage.Roaming);\r\n const localAuthState: IAuthTokenResultDto = this.tryGetAuthState(TokenStorage.Local);\r\n if (roamingAuthState && localAuthState) {\r\n const roamingExpiration = +dayjs.utc(roamingAuthState.graphTokenExpiresOn);\r\n const localExpiration = +dayjs.utc(localAuthState.graphTokenExpiresOn);\r\n if (roamingExpiration === localExpiration) {\r\n authState = roamingAuthState;\r\n }\r\n else if (localExpiration > roamingExpiration) {\r\n authState = localAuthState;\r\n this.tryPersistAuthState(TokenStorage.Roaming, authState);\r\n }\r\n else {\r\n authState = roamingAuthState;\r\n this.tryPersistAuthState(TokenStorage.Local, authState);\r\n }\r\n }\r\n else {\r\n if (roamingAuthState && !localAuthState) {\r\n authState = roamingAuthState;\r\n this.tryPersistAuthState(TokenStorage.Local, authState);\r\n } else if (localAuthState && !roamingAuthState) {\r\n authState = localAuthState;\r\n this.tryPersistAuthState(TokenStorage.Roaming, authState);\r\n }\r\n }\r\n\r\n if (authState && authState.account) {\r\n this.globalAuthState = authState;\r\n }\r\n else {\r\n authState = null;\r\n }\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (getPersistedAuthState)\");\r\n }\r\n }\r\n\r\n return authState;\r\n }\r\n\r\n clearPersistedAuthState() {\r\n try {\r\n if (this.globalAuthState) {\r\n this.globalAuthState = undefined;\r\n }\r\n\r\n if (typeof Office !== \"undefined\" && typeof Office.context?.diagnostics?.host !== \"undefined\" && Office.context.requirements.isSetSupported(\"Mailbox\")) {\r\n Office.context.roamingSettings.remove(AuthModule.AuthStateKey);\r\n\r\n Office.context.roamingSettings.saveAsync(function (result) {\r\n if (result.status === Office.AsyncResultStatus.Failed) {\r\n console.error(`RoamingSettings SaveAsync failed with message: ${result.error.message}`);\r\n }\r\n });\r\n }\r\n\r\n localStorage.removeItem(AuthModule.AuthStateKey);\r\n clearLocalStorage();\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (clearPersistedAuthState)\");\r\n }\r\n }\r\n\r\n private calculateMinutesToExpiration(tokenExpirationDate: Date): number {\r\n if (tokenExpirationDate) {\r\n try {\r\n const utcNow = dayjs.utc();\r\n const tokenExpirationUtc = dayjs.utc(tokenExpirationDate);\r\n const minutesToExpiration = tokenExpirationUtc.diff(utcNow, \"minutes\");\r\n return minutesToExpiration;\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (calculateMinutesToExpiration)\");\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n private getTokenExpirationDate(resource: TokenResource, authState: IAuthTokenResultDto): Date {\r\n let tokenExpirationDate: Date;\r\n\r\n if (authState) {\r\n try {\r\n switch (resource as TokenResource) {\r\n case TokenResource.All:\r\n\r\n const expirationUnixTimeValues: number[] = [];\r\n\r\n if (authState.graphTokenExpiresOn) expirationUnixTimeValues.push(+dayjs.utc(authState.graphTokenExpiresOn));\r\n if (authState.sharePointTokenExpiresOn) expirationUnixTimeValues.push(+dayjs.utc(authState.sharePointTokenExpiresOn));\r\n if (authState.oneDriveTokenExpiresOn) expirationUnixTimeValues.push(+dayjs.utc(authState.oneDriveTokenExpiresOn));\r\n // if (authState.informationProtectionTokenExpiresOn) expirationUnixTimeValues.push(+dayjs.utc(authState.informationProtectionTokenExpiresOn));\r\n if (authState.teamsTokenExpiresOn) expirationUnixTimeValues.push(+dayjs.utc(authState.teamsTokenExpiresOn));\r\n\r\n if (expirationUnixTimeValues.length > 0) {\r\n tokenExpirationDate = new Date(Math.min(...expirationUnixTimeValues));\r\n }\r\n\r\n break;\r\n case TokenResource.Graph:\r\n tokenExpirationDate = authState.graphTokenExpiresOn;\r\n break;\r\n case TokenResource.SharePoint:\r\n tokenExpirationDate = authState.sharePointTokenExpiresOn;\r\n break;\r\n case TokenResource.OneDrive:\r\n tokenExpirationDate = authState.oneDriveTokenExpiresOn;\r\n break;\r\n case TokenResource.Flow:\r\n tokenExpirationDate = authState.flowTokenExpiresOn;\r\n break;\r\n case TokenResource.SharePointAdmin:\r\n tokenExpirationDate = authState.sharePointAdminTokenExpiresOn;\r\n break;\r\n case TokenResource.MailSend:\r\n tokenExpirationDate = authState.mailSendTokenExpiresOn;\r\n break;\r\n case TokenResource.Mailbox:\r\n tokenExpirationDate = authState.mailboxTokenExpiresOn;\r\n break;\r\n case TokenResource.Teams:\r\n tokenExpirationDate = authState.teamsTokenExpiresOn;\r\n break;\r\n }\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (getTokenExpirationDate)\");\r\n }\r\n }\r\n\r\n return tokenExpirationDate;\r\n }\r\n\r\n private tokenRefreshRequired(tokenExpirationDate: Date): boolean {\r\n if (tokenExpirationDate) {\r\n const minutesToExpiration = this.calculateMinutesToExpiration(tokenExpirationDate);\r\n if (minutesToExpiration > 2) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private getIsResourceRefreshInProgress(resource: TokenResource): boolean {\r\n if (resource === TokenResource.Flow) {\r\n return this.isFlowAccessTokenRefreshInProgress === true;\r\n }\r\n\r\n if (resource === TokenResource.MailSend) {\r\n return this.isMailSendAccessTokenRefreshInProgress === true;\r\n }\r\n\r\n if (resource === TokenResource.Mailbox) {\r\n return this.isMailboxAccessTokenRefreshInProgress === true;\r\n }\r\n\r\n return this.isAuthRefreshInProgress === true;\r\n }\r\n\r\n private async waitOnRefresh(resource: TokenResource, depth: number = AuthModule.defaultRefreshWaitDepth): Promise {\r\n if (this.getIsResourceRefreshInProgress(resource) === true && depth > 0) {\r\n await new Promise(resolve => setTimeout(async () => resolve(await this.waitOnRefresh(resource, --depth)), AuthModule.defaultRefreshWait));\r\n }\r\n }\r\n\r\n private async getAuthState(resource: TokenResource): Promise {\r\n if (this.isAuthRefreshInProgress === true) await this.waitOnRefresh(resource);\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n if (authState) {\r\n if (this.tokenRefreshRequired(this.getTokenExpirationDate(resource, authState))) {\r\n this.isAuthRefreshInProgress = true;\r\n if (authState.account.sharePointBaseUrl) {\r\n authState = await this.requestTokenRefresh(authState.account);\r\n }\r\n else {\r\n authState = await this.requestTokenSilent(authState.account.accountId);\r\n }\r\n this.isAuthRefreshInProgress = false;\r\n }\r\n }\r\n return authState;\r\n }\r\n\r\n requestTokenSilent = async (accountId: string): Promise => {\r\n try {\r\n let refreshedAuthState = await apiSilentTokenRequest(accountId);\r\n return await this.configureAndPersistRefreshedAuthState(refreshedAuthState);\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (requestTokenSilent)\");\r\n\r\n this.clearPersistedAuthState();\r\n return null;\r\n }\r\n }\r\n\r\n requestTokenRefresh = async (account: IAuthAccount): Promise => {\r\n try {\r\n let refreshedAuthState = await apiRefreshTokenRequest(account);\r\n return await this.configureAndPersistRefreshedAuthState(refreshedAuthState);\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (requestTokenRefresh)\");\r\n\r\n this.clearPersistedAuthState();\r\n return null;\r\n }\r\n }\r\n\r\n private async configureAndPersistRefreshedAuthState(refreshedAuthState: IAuthTokenResultDto): Promise {\r\n if (refreshedAuthState) {\r\n const persistedAuthState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n refreshedAuthState.flowToken = persistedAuthState?.flowToken;\r\n refreshedAuthState.flowTokenExpiresOn = persistedAuthState?.flowTokenExpiresOn;\r\n refreshedAuthState.sharePointAdminToken = persistedAuthState?.sharePointAdminToken;\r\n refreshedAuthState.sharePointAdminTokenExpiresOn = persistedAuthState?.sharePointAdminTokenExpiresOn;\r\n refreshedAuthState.mailSendToken = persistedAuthState?.mailSendToken;\r\n refreshedAuthState.mailSendTokenExpiresOn = persistedAuthState?.mailSendTokenExpiresOn;\r\n refreshedAuthState.mailboxToken = persistedAuthState?.mailboxToken;\r\n refreshedAuthState.mailboxTokenExpiresOn = persistedAuthState?.mailboxTokenExpiresOn;\r\n\r\n await this.persistAuthState(refreshedAuthState);\r\n }\r\n return refreshedAuthState;\r\n }\r\n\r\n async signIn(): Promise {\r\n // return await this.requestTokenSilent(\"7e9992b2-a3bf-4019-a27d-033d00ce6598.3f50a620-6f6b-4a76-a8fe-57fce2ef9e1d\");\r\n return await this.getAuthState(TokenResource.All);\r\n }\r\n\r\n async signOut(): Promise {\r\n this.clearPersistedAuthState();\r\n this.signOutCallback();\r\n }\r\n\r\n async getGraphAccessToken(): Promise {\r\n const authState: IAuthTokenResultDto = await this.getAuthState(TokenResource.Graph);\r\n if (authState) {\r\n return authState.graphToken;\r\n }\r\n else {\r\n this.signOutCallback();\r\n return null;\r\n }\r\n }\r\n\r\n async getTeamsAccessToken(): Promise {\r\n const authState: IAuthTokenResultDto = await this.getAuthState(TokenResource.Teams);\r\n if (authState) {\r\n return authState.teamsToken;\r\n }\r\n else {\r\n this.signOutCallback();\r\n return null;\r\n }\r\n }\r\n\r\n async getSharePointAccessToken(): Promise {\r\n const authState: IAuthTokenResultDto = await this.getAuthState(TokenResource.SharePoint);\r\n if (authState) {\r\n return authState.sharePointToken;\r\n }\r\n else {\r\n this.signOutCallback();\r\n return null;\r\n }\r\n }\r\n\r\n async getOneDriveAccessToken(): Promise {\r\n const authState: IAuthTokenResultDto = await this.getAuthState(TokenResource.OneDrive);\r\n if (authState) {\r\n return authState.oneDriveToken;\r\n }\r\n else {\r\n this.signOutCallback();\r\n return null;\r\n }\r\n }\r\n\r\n async getFlowAccessToken(forceRefresh?: boolean): Promise {\r\n if (this.isFlowAccessTokenRefreshInProgress === true) await this.waitOnRefresh(TokenResource.Flow);\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n if (authState) {\r\n if (forceRefresh || this.tokenRefreshRequired(this.getTokenExpirationDate(TokenResource.Flow, authState))) {\r\n this.isFlowAccessTokenRefreshInProgress = true;\r\n try {\r\n const flowTokenResponse = await apiAquireFlowToken(authState);\r\n if (flowTokenResponse?.flowToken) {\r\n authState.flowToken = flowTokenResponse?.flowToken;\r\n authState.flowTokenExpiresOn = flowTokenResponse?.flowTokenExpiresOn;\r\n this.persistAuthState(authState);\r\n }\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (getFlowAccessToken)\");\r\n }\r\n this.isFlowAccessTokenRefreshInProgress = false;\r\n }\r\n }\r\n return authState?.flowToken;\r\n }\r\n\r\n async getSharePointAdminAccessToken(forceRefresh?: boolean): Promise {\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n if (authState) {\r\n if (forceRefresh || this.tokenRefreshRequired(this.getTokenExpirationDate(TokenResource.SharePointAdmin, authState))) {\r\n try {\r\n const sharePointAdminTokenResponse: IAuthTokenResultDto = await apiAquireSharePointAdminToken(authState);\r\n if (sharePointAdminTokenResponse?.sharePointAdminToken) {\r\n authState.sharePointAdminToken = sharePointAdminTokenResponse?.sharePointAdminToken;\r\n authState.sharePointAdminTokenExpiresOn = sharePointAdminTokenResponse?.sharePointAdminTokenExpiresOn;\r\n this.persistAuthState(authState);\r\n }\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (getSharePointAdminAccessToken)\");\r\n }\r\n }\r\n }\r\n return authState?.sharePointAdminToken;\r\n }\r\n\r\n async getMailSendAccessToken(forceRefresh?: boolean): Promise {\r\n if (this.isMailSendAccessTokenRefreshInProgress === true) await this.waitOnRefresh(TokenResource.MailSend);\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n if (authState) {\r\n if (forceRefresh || this.tokenRefreshRequired(this.getTokenExpirationDate(TokenResource.MailSend, authState))) {\r\n this.isMailSendAccessTokenRefreshInProgress = true;\r\n try {\r\n const mailSendTokenResponse: IAuthTokenResultDto = await apiAquireMailSendToken(authState);\r\n if (mailSendTokenResponse?.mailSendToken) {\r\n authState.mailSendToken = mailSendTokenResponse?.mailSendToken;\r\n authState.mailSendTokenExpiresOn = mailSendTokenResponse?.mailSendTokenExpiresOn;\r\n this.persistAuthState(authState);\r\n }\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (getMailSendAccessToken)\");\r\n }\r\n this.isMailSendAccessTokenRefreshInProgress = false;\r\n }\r\n }\r\n return authState?.mailSendToken;\r\n }\r\n\r\n async getDocubirdToken(refreshRequired?: boolean): Promise {\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n if (authState?.docubirdToken) {\r\n if (refreshRequired === true || this.tokenRefreshRequired(new Date(authState.docubirdToken.expirationDate))) {\r\n try {\r\n const jwtAuthTokenReponse: IJwtAuthTokenResult = await refreshJwt(authState.docubirdToken.token);\r\n\r\n if (!jwtAuthTokenReponse) return null;\r\n\r\n authState.docubirdToken = jwtAuthTokenReponse;\r\n this.persistAuthState(authState);\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (getDocubirdToken)\");\r\n }\r\n }\r\n }\r\n return authState?.docubirdToken?.token;\r\n }\r\n\r\n getDocubirdTokenCached(): string {\r\n return this.getPersistedAuthState()?.docubirdToken?.token;\r\n }\r\n\r\n async getNintexAccessToken(client_id: string, client_secret: string, forceRefresh: boolean = false): Promise {\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n\r\n if (authState) {\r\n if (forceRefresh || this.tokenRefreshRequired(this.getTokenExpirationDate(TokenResource.Nintex, authState))) {\r\n try {\r\n let authUrl: URL = new URL(`https://eu.nintex.io/authentication/v1/token`);\r\n\r\n const body: ITokenRequest = {\r\n client_id,\r\n client_secret,\r\n grant_type: \"client_credentials\"\r\n }\r\n\r\n const nintexTokenResponse: ITokenResponse = (await axiosRetryPost(authUrl.href, body, { headers: { 'Content-Type': 'application/json' } }))?.data;\r\n\r\n if (nintexTokenResponse?.access_token) {\r\n authState.nintexToken = nintexTokenResponse?.access_token;\r\n authState.nintexTokenExpiresOn = new Date(nintexTokenResponse?.expires_at);\r\n this.persistAuthState(authState);\r\n }\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (getMailSendAccessToken)\");\r\n }\r\n }\r\n }\r\n return authState?.nintexToken;\r\n }\r\n\r\n async getMailboxAccessToken(forceRefresh?: boolean): Promise {\r\n if (this.isMailboxAccessTokenRefreshInProgress === true) await this.waitOnRefresh(TokenResource.Mailbox);\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n if (authState && authState.account?.accountId) {\r\n if (forceRefresh || this.tokenRefreshRequired(this.getTokenExpirationDate(TokenResource.Mailbox, authState))) {\r\n this.isMailboxAccessTokenRefreshInProgress = true;\r\n try {\r\n const mailboxTokenResponse: IAuthTokenResultDto = await apiAquireMailboxToken(authState);\r\n if (mailboxTokenResponse?.mailboxToken && mailboxTokenResponse?.mailboxUsername) {\r\n authState.mailboxToken = mailboxTokenResponse?.mailboxToken;\r\n authState.mailboxTokenExpiresOn = mailboxTokenResponse?.mailboxTokenExpiresOn;\r\n authState.mailboxAccountId = mailboxTokenResponse?.mailboxAccountId;\r\n authState.mailboxUsername = mailboxTokenResponse?.mailboxUsername;\r\n this.persistAuthState(authState);\r\n }\r\n } catch (error) {\r\n logger(error, \"AuthModule.ts (getMailboxAccessToken)\");\r\n }\r\n this.isMailboxAccessTokenRefreshInProgress = false;\r\n }\r\n }\r\n return authState?.mailboxToken;\r\n }\r\n\r\n async getAccount(refreshTokensIfRequired: boolean = true): Promise {\r\n const authState: IAuthTokenResultDto = refreshTokensIfRequired ? await this.getAuthState(TokenResource.All) : this.getPersistedAuthState();\r\n return authState?.account;\r\n }\r\n\r\n async getAuthData(): Promise {\r\n const authState: IAuthTokenResultDto = await this.getAuthState(TokenResource.All);\r\n if (authState) {\r\n return authState;\r\n }\r\n else {\r\n this.signOutCallback();\r\n return null;\r\n }\r\n }\r\n\r\n getMinutesToExpiration(resource: TokenResource): number {\r\n return this.calculateMinutesToExpiration(this.getTokenExpirationDate(resource, this.getPersistedAuthState()));\r\n }\r\n\r\n async initiateDialogAuthFlow(loginCallback: (authResult: IAuthTokenResultDto) => Promise, resource?: TokenResource, useContext?: boolean): Promise {\r\n let loginDialog: Office.Dialog;\r\n\r\n const processLoginMessage = (args: { message: string; origin: string; }) => {\r\n const messageFromDialog: DialogMessageResponse = JSON.parse(args.message);\r\n if (messageFromDialog.status === DialogMessageStatus.Success) {\r\n if (resource === TokenResource.Flow) {\r\n if (messageFromDialog.result?.flowToken) {\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n if (authState) {\r\n authState.flowToken = messageFromDialog.result.flowToken;\r\n authState.flowTokenExpiresOn = messageFromDialog.result.flowTokenExpiresOn;\r\n this.persistAuthState(authState);\r\n }\r\n }\r\n }\r\n else if (resource === TokenResource.Mailbox) {\r\n if (messageFromDialog.result?.mailboxToken && messageFromDialog.result?.mailboxUsername) {\r\n let authState: IAuthTokenResultDto = this.getPersistedAuthState();\r\n if (authState) {\r\n authState.mailboxToken = messageFromDialog.result.mailboxToken;\r\n authState.mailboxTokenExpiresOn = messageFromDialog.result.mailboxTokenExpiresOn;\r\n authState.mailboxAccountId = messageFromDialog.result.mailboxAccountId;\r\n authState.mailboxUsername = messageFromDialog.result.mailboxUsername;\r\n this.persistAuthState(authState);\r\n }\r\n }\r\n }\r\n else {\r\n this.persistAuthState(messageFromDialog.result);\r\n }\r\n loginCallback(messageFromDialog.result);\r\n loginDialog.close();\r\n }\r\n else {\r\n loginCallback(null);\r\n loginDialog.close();\r\n }\r\n };\r\n\r\n const processLoginDialogEvent = (arg) => {\r\n this.processDialogEvent(arg, loginCallback);\r\n loginDialog.close();\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n let dialogLoginUrl: URL = new URL(process.env.baseUri + \"/auth.html\");\r\n if (generalModule.isInConentMangerMode()) {\r\n dialogLoginUrl.searchParams.append(shared.params.app, \"content_manager\");\r\n }\r\n\r\n if (resource) {\r\n dialogLoginUrl.searchParams.append(shared.params.resource, resource.toString());\r\n dialogLoginUrl.searchParams.append(shared.params.username, this.getPersistedAuthState()?.account?.username);\r\n }\r\n\r\n Office.context.ui.displayDialogAsync(\r\n dialogLoginUrl.href,\r\n { height: 50, width: 35, promptBeforeOpen: false },\r\n (result) => {\r\n if (result.status === Office.AsyncResultStatus.Failed) {\r\n console.warn(\"Office.AsyncResultStatus.Failed: \" + `${result.error.code} ${result.error.message}`);\r\n reject(result.error)\r\n }\r\n else {\r\n loginDialog = result.value;\r\n loginDialog.addEventHandler(Office.EventType.DialogMessageReceived, processLoginMessage);\r\n loginDialog.addEventHandler(Office.EventType.DialogEventReceived, processLoginDialogEvent);\r\n resolve();\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n private processDialogEvent(arg: { error: number, type: string }, callback: (authResult: IAuthTokenResultDto) => Promise): void {\r\n\r\n switch (arg.error) {\r\n case 12002:\r\n // displayError('The dialog box has been directed to a page that it cannot find or load, or the URL syntax is invalid.');\r\n break;\r\n case 12003:\r\n // displayError('The dialog box has been directed to a URL with the HTTP protocol. HTTPS is required.');\r\n break;\r\n case 12006:\r\n // 12006 means that the user closed the dialog instead of waiting for it to close.\r\n // It is not known if the user completed the login or logout, so assume the user is\r\n // logged out and revert to the app's starting state. It does no harm for a user to\r\n // press the login button again even if the user is logged in.\r\n\r\n callback(null);\r\n\r\n break;\r\n default:\r\n // displayError('Unknown error in dialog box.');\r\n break;\r\n }\r\n };\r\n\r\n public setTenantApiKey(apiKey: string) {\r\n this.tenantApiKey = apiKey;\r\n }\r\n\r\n public getTenantApiKey() {\r\n return this.tenantApiKey;\r\n }\r\n\r\n public getCypherSecret() {\r\n return AuthModule.CypherSecret;\r\n }\r\n}\r\n\r\nconst authModule = new AuthModule();\r\nexport default authModule;","import * as rax from 'retry-axios';\r\nimport axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport authModule from './AuthModule';\r\n\r\nexport const apiHeaders = {\r\n key: {\r\n xDocubirdAuth: \"x-docubird-auth\"\r\n },\r\n value: {\r\n xDocubirdAuth: \"]c4&ql>@P3flVbPM#61bX}d3q {\r\n const jwtToken = await authModule.getDocubirdToken();\r\n if (jwtToken) {\r\n config.headers[\"Authorization\"] = `Bearer ${jwtToken}`;\r\n } else {\r\n authModule.signOut();\r\n }\r\n return {\r\n ...config\r\n };\r\n });\r\n}\r\nelse {\r\n localApiInstance.interceptors.request.use(async (config) => {\r\n const controller = new AbortController();\r\n const jwtToken = await authModule.getDocubirdToken();\r\n if (jwtToken) {\r\n config.headers[\"Authorization\"] = `Bearer ${jwtToken}`;\r\n } else {\r\n controller.abort();\r\n authModule.signOut();\r\n }\r\n return {\r\n ...config,\r\n signal: controller.signal\r\n };\r\n });\r\n}\r\n\r\n// Attach retry-axios to the global axios and localApiInstance\r\nrax.attach();\r\nrax.attach(localApiInstance);\r\n\r\nconst retryCodes = [[100, 199], [408, 408], [429, 429], [500, 599]];\r\nconst altRetryCodes = [[100, 199], [408, 408], [429, 429], [501, 599]];\r\nconst retryAmount = 5;\r\n\r\nexport const axiosRetryGet = async (\r\n url: string,\r\n config?: AxiosRequestConfig,\r\n axiosInstance: AxiosInstance | typeof axios = axios\r\n) => {\r\n\r\n const res = await axiosInstance.get(url, {\r\n ...config,\r\n raxConfig: {\r\n retry: retryAmount,\r\n httpMethodsToRetry: [\"GET\"],\r\n statusCodesToRetry: retryCodes,\r\n backoffType: \"linear\",\r\n }\r\n });\r\n\r\n return res;\r\n}\r\n\r\nexport const axiosRetryPost = async (\r\n url: string,\r\n data: any = null,\r\n config?: AxiosRequestConfig,\r\n retryInternalServerError: boolean = true,\r\n axiosInstance: AxiosInstance | typeof axios = axios\r\n) => {\r\n\r\n const res = await axiosInstance.post(url, data, {\r\n ...config,\r\n raxConfig: {\r\n retry: retryAmount,\r\n httpMethodsToRetry: [\"POST\"],\r\n statusCodesToRetry: retryInternalServerError ? retryCodes : altRetryCodes,\r\n backoffType: \"linear\",\r\n }\r\n });\r\n\r\n return res;\r\n}\r\n\r\nexport const axiosRetryPut = async (url: string, data: any = null) => {\r\n\r\n const res = await axios.put(url, data, {\r\n raxConfig: {\r\n retry: retryAmount,\r\n httpMethodsToRetry: [\"PUT\"],\r\n statusCodesToRetry: retryCodes,\r\n backoffType: \"linear\",\r\n }\r\n });\r\n\r\n return res;\r\n}\r\n\r\nexport const axiosRetryDelete = async (url: string) => {\r\n\r\n const res = await axios.delete(url, {\r\n raxConfig: {\r\n retry: retryAmount,\r\n httpMethodsToRetry: [\"DELETE\"],\r\n statusCodesToRetry: retryCodes,\r\n backoffType: \"linear\",\r\n }\r\n });\r\n\r\n return res;\r\n}\r\n\r\nexport const axiosRetryPatch = async (url: string, data: any = null, config?: AxiosRequestConfig) => {\r\n\r\n const res = await axios.patch(url, data, {\r\n ...config,\r\n raxConfig: {\r\n retry: retryAmount,\r\n httpMethodsToRetry: [\"PATCH\"],\r\n statusCodesToRetry: retryCodes,\r\n backoffType: \"linear\",\r\n }\r\n });\r\n\r\n return res;\r\n}","import { pdfEmbed, shared } from \"../src/taskpane/config/constants\";\r\nimport dayjs from \"dayjs\";\r\nimport { IAuthAccount } from \"../src/taskpane/interfaces/IAuthTokenResultDto\";\r\nimport { logger } from \"./logger\";\r\n\r\nexport const detectIEOrEdge = (): boolean => {\r\n const ua = window.navigator.userAgent;\r\n const msie = ua.indexOf(\"MSIE \");\r\n const msie11 = ua.indexOf(\"Trident/\");\r\n const msedge = ua.indexOf(\"Edge/\");\r\n const isIE = msie > 0 || msie11 > 0;\r\n const isEdge = msedge > 0;\r\n return isIE || isEdge;\r\n}\r\n\r\nexport const detectEdgeOrSafari = (): boolean => {\r\n const ua = window.navigator.userAgent;\r\n const isEdge = ua.indexOf(\"Edge/\") > 0;\r\n if (isEdge) return true;\r\n const isSafari = ua.indexOf(\"Safari/\") > 0 && !(ua.indexOf(\"Chrome/\") > 0 || ua.indexOf(\"Chromium/\") > 0);\r\n if (isSafari) return true;\r\n return false;\r\n}\r\n\r\nexport const IEEdgeSmoothScroll = (element: Element, targetY: number, duration: number) => {\r\n let startingY = element.scrollHeight;\r\n const diff = targetY - startingY;\r\n\r\n if (!diff) return;\r\n\r\n // Easing function: easeInOutCubic\r\n // From: https://gist.github.com/gre/1650294\r\n const easing = (t: number) => {\r\n return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n }\r\n let start: number;\r\n\r\n // Bootstrap our animation - it will get called right before next frame shall be rendered.\r\n window.requestAnimationFrame(function step(timestamp) {\r\n if (!start) start = timestamp;\r\n // Elapsed miliseconds since start of scrolling.\r\n let time = timestamp - start;\r\n // Get percent of completion in range [0, 1].\r\n let percent = Math.min(time / duration, 1);\r\n // Apply the easing.\r\n // It can cause bad-looking slow frames in browser performance tool, so be careful.\r\n percent = easing(percent);\r\n element.scrollTop = startingY + diff * percent;\r\n\r\n // Proceed with animation as long as we wanted it to.\r\n if (time < duration) {\r\n window.requestAnimationFrame(step);\r\n }\r\n })\r\n}\r\n\r\nlet docubirdWindow: Window = null;\r\nexport const OpenInBrowser = (url: string, openInSelf: boolean = false): void => {\r\n try {\r\n if (typeof Office !== \"undefined\" && Office.context.requirements.isSetSupported(\"OpenBrowserWindowApi\")) {\r\n Office.context.ui.openBrowserWindow(url);\r\n return;\r\n }\r\n } catch (error) {\r\n logger(error, \"BrowserUtils: OpenInBrowser\");\r\n }\r\n\r\n if (openInSelf) {\r\n window.open(url, \"_self\");\r\n }\r\n else if (docubirdWindow === null || docubirdWindow.closed) {\r\n docubirdWindow = window.open(url, \"Docubird\");\r\n } else {\r\n docubirdWindow = window.open(url, \"Docubird\");\r\n docubirdWindow?.focus();\r\n }\r\n}\r\n\r\nexport const OpenPdfInBrowser = (account: IAuthAccount, driveId: string, itemId: string, isInOneDrive: boolean = false): void => {\r\n const isOfficeContextAvailable: boolean = typeof Office !== \"undefined\";\r\n const url: string = `${process.env.PDF_URL}?${shared.params.accountId}=${account?.accountId}&${shared.params.username}=${account?.username}&${pdfEmbed.params.itemId}=${itemId}&${pdfEmbed.params.driveId}=${driveId}&${pdfEmbed.params.isInOneDrive}=${isInOneDrive === true ? \"1\" : \"0\"}&${shared.params.language}=${isOfficeContextAvailable ? (Office.context?.displayLanguage ?? dayjs.locale() ?? navigator.language) : (dayjs.locale() ?? navigator.language)}`;\r\n try {\r\n if (isOfficeContextAvailable && Office.context.requirements.isSetSupported(\"OpenBrowserWindowApi\")) {\r\n Office.context.ui.openBrowserWindow(url);\r\n return;\r\n }\r\n } catch (error) {\r\n logger(error, \"BrowserUtils: OpenPdfInBrowser\");\r\n }\r\n\r\n if (docubirdWindow === null || docubirdWindow.closed) {\r\n docubirdWindow = window.open(url, \"Docubird\");\r\n } else {\r\n docubirdWindow = window.open(url, \"Docubird\");\r\n docubirdWindow?.focus();\r\n }\r\n}","export class CacheHelper {\r\n private static readonly cache: Map = new Map();\r\n\r\n static set(key: string, value: any): boolean {\r\n try {\r\n CacheHelper.cache.set(key, value);\r\n return true;\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n\r\n static get(key: string): any {\r\n try {\r\n return CacheHelper.cache.get(key);\r\n } catch (error) {\r\n return undefined;\r\n }\r\n }\r\n\r\n static remove(key: string): void {\r\n try {\r\n CacheHelper.cache.delete(key);\r\n } catch (error) { }\r\n }\r\n}","export const tryEncodeUriComponent = (url: string): string => {\r\n try {\r\n return encodeURIComponent(url)\r\n } catch (error) {\r\n // Ignore\r\n }\r\n return url;\r\n}\r\n\r\nexport const tryDecodeUri = (url: string): string => {\r\n try {\r\n return decodeURI(url)\r\n } catch (error) {\r\n // Ignore\r\n }\r\n return url;\r\n}\r\n\r\nexport const tryDecodeUriComponent = (url: string): string => {\r\n try {\r\n return decodeURIComponent(url)\r\n } catch (error) {\r\n // Ignore\r\n }\r\n return url;\r\n}\r\n\r\nexport const encodePath = (value: string): string => {\r\n\r\n if (typeof value === \"undefined\" || value === null || value.length < 1) {\r\n return \"\";\r\n }\r\n\r\n // replace all instance of ' with ''\r\n if (/!(@.*?)::(.*?)/ig.test(value)) {\r\n\r\n return value.replace(/!(@.*?)::(.*)$/ig, (match, labelName, v) => {\r\n // we do not need to encodeURIComponent v as it will be encoded automatically when it is added as a query string param\r\n // we do need to double any ' chars\r\n return `!${labelName}::${v.replace(/'/ig, \"''\")}`;\r\n });\r\n\r\n } else {\r\n\r\n // because this is a literal path value we encodeURIComponent after doubling any ' chars\r\n return encodeURIComponent(value.replace(/'/ig, \"''\"));\r\n }\r\n}","const undefinedTypeString = \"undefined\";\r\n\r\nexport enum AppModeEnum {\r\n webAddIn,\r\n contentManager\r\n}\r\n\r\nexport class GeneralModule {\r\n private AppMode: AppModeEnum = AppModeEnum.webAddIn;\r\n private isFileInfoPanelOpen = false;\r\n private openUploadPanel = false;\r\n private isMultiMetaFileUpdatePanelOpen = false;\r\n private preExpandTeamId: string | null = null;\r\n\r\n getIsOfficeJSAvailable() {\r\n return typeof Office !== undefinedTypeString\r\n && (typeof Office.context?.diagnostics?.host !== undefinedTypeString\r\n || typeof Office.context?.mailbox?.diagnostics?.hostName !== undefinedTypeString);\r\n }\r\n\r\n setAppMode(appMode: AppModeEnum) {\r\n this.AppMode = appMode;\r\n }\r\n\r\n getAppMode() {\r\n return this.AppMode;\r\n }\r\n\r\n isInConentMangerMode() {\r\n return this.AppMode === AppModeEnum.contentManager;\r\n }\r\n\r\n setIsFileInfoPanelOpen(isOpen: boolean) {\r\n this.isFileInfoPanelOpen = isOpen;\r\n }\r\n\r\n getIsFileInfoPanelOpen() {\r\n return this.isFileInfoPanelOpen;\r\n }\r\n\r\n setIsMultiMetaFileUpdatePanelOpen(isOpen: boolean) {\r\n this.isMultiMetaFileUpdatePanelOpen = isOpen;\r\n }\r\n\r\n getIsMultiMetaFileUpdatePanelOpen() {\r\n return this.isMultiMetaFileUpdatePanelOpen;\r\n }\r\n\r\n setOpenPanelUploadPanel(isOpen: boolean) {\r\n this.openUploadPanel = isOpen;\r\n }\r\n\r\n getOpenPanelUploadPanel() {\r\n return this.openUploadPanel;\r\n }\r\n\r\n setPreExpandTeamId(teamId: string | null) {\r\n this.preExpandTeamId = teamId;\r\n }\r\n\r\n getPreExpandTeamId() {\r\n return this.preExpandTeamId;\r\n }\r\n}\r\n\r\nconst generalModule = new GeneralModule();\r\nexport default generalModule;","import { ISiteInfo, ISiteInfoLocation } from \"../src/taskpane/interfaces/ISiteInfo\";\r\n\r\nexport class SharePointSiteHelper {\r\n public static hubSites: ISiteInfo[] = [];\r\n\r\n static reset(): void {\r\n this.hubSites = [];\r\n }\r\n\r\n static groupAndSortSites(sites: ISiteInfoLocation[]): ISiteInfoLocation[] {\r\n if (Array.isArray(sites)) {\r\n const hubSites = sites\r\n .filter(site => site.isHub)\r\n .sort(this.sortSites);\r\n\r\n return hubSites\r\n .concat(sites\r\n .filter(site => !site.isHub)\r\n .sort(this.sortSites));\r\n }\r\n return [];\r\n }\r\n\r\n private static sortSites(siteA: ISiteInfo, siteB: ISiteInfo): number {\r\n return siteA.name?.toUpperCase() < siteB.name?.toUpperCase() ? -1 : 1;\r\n }\r\n}","import Cookies from \"js-cookie\";\r\nconst cookieApi = Cookies.withAttributes({ domain: new URL(process.env.baseUri).host, secure: true });\r\nexport class StorageHelper {\r\n static async setItemAsync(key: string, value: string): Promise {\r\n return await new Promise(resolve => {\r\n try {\r\n sessionStorage.setItem(key, value);\r\n resolve(true);\r\n } catch (error) {\r\n try {\r\n cookieApi.set(key, value);\r\n resolve(true);\r\n } catch (error) { }\r\n resolve(false);\r\n }\r\n });\r\n }\r\n\r\n static async getItemAsync(key: string, removeOnGet: boolean = false): Promise {\r\n const value: string = await new Promise(resolve => {\r\n try {\r\n resolve(sessionStorage.getItem(key));\r\n } catch (error) {\r\n try {\r\n resolve(cookieApi.get(key));\r\n } catch (error) { }\r\n resolve(null);\r\n }\r\n });\r\n\r\n if (removeOnGet) {\r\n this.removeItem(key);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static getItem(key: string): string {\r\n try {\r\n return sessionStorage.getItem(key);\r\n } catch (error) {\r\n try {\r\n return cookieApi.get(key);\r\n } catch (error) { }\r\n }\r\n return null;\r\n }\r\n\r\n static async removeItem(key: string): Promise {\r\n await new Promise(resolve => {\r\n try {\r\n sessionStorage.removeItem(key);\r\n } catch (error) {\r\n try {\r\n cookieApi.remove(key);\r\n } catch (error) { }\r\n }\r\n resolve();\r\n });\r\n }\r\n}","export const GetIANATimeZoneName = (spTimeZoneId: string): string | null => {\r\n return SPTimeZoneIdToIANATimeZoneName[spTimeZoneId] ?? null;\r\n}\r\n\r\nconst SPTimeZoneIdToIANATimeZoneName = {\r\n \"2\": \"Europe/London\",\r\n \"3\": \"Europe/Paris\",\r\n \"4\": \"Europe/Berlin\",\r\n \"5\": \"Europe/Bucharest\",\r\n \"6\": \"Europe/Budapest\",\r\n \"7\": \"Europe/Kaliningrad\",\r\n \"8\": \"America/Sao_Paulo\",\r\n \"9\": \"America/Halifax\",\r\n \"10\": \"America/New_York\",\r\n \"11\": \"America/Chicago\",\r\n \"12\": \"America/Denver\",\r\n \"13\": \"America/Los_Angeles\",\r\n \"14\": \"America/Anchorage\",\r\n \"15\": \"Pacific/Honolulu\",\r\n \"16\": \"Pacific/Apia\",\r\n \"17\": \"Pacific/Auckland\",\r\n \"18\": \"Australia/Brisbane\",\r\n \"19\": \"Australia/Adelaide\",\r\n \"20\": \"Asia/Tokyo\",\r\n \"21\": \"Asia/Singapore\",\r\n \"22\": \"Asia/Bangkok\",\r\n \"23\": \"Asia/Kolkata\",\r\n \"24\": \"Asia/Dubai\",\r\n \"25\": \"Asia/Tehran\",\r\n \"26\": \"Asia/Baghdad\",\r\n \"27\": \"Asia/Jerusalem\",\r\n \"28\": \"America/St_Johns\",\r\n \"29\": \"Atlantic/Azores\",\r\n \"30\": \"Etc/GMT+2\",\r\n \"31\": \"Atlantic/Reykjavik\",\r\n \"32\": \"America/Cayenne\",\r\n \"33\": \"America/La_Paz\",\r\n \"34\": \"America/Indianapolis\",\r\n \"35\": \"America/Bogota\",\r\n \"36\": \"America/Regina\",\r\n \"37\": \"America/Mexico_City\",\r\n \"38\": \"America/Phoenix\",\r\n \"39\": \"Etc/GMT+12\",\r\n \"40\": \"Pacific/Fiji\",\r\n \"41\": \"Asia/Magadan\",\r\n \"42\": \"Australia/Hobart\",\r\n \"43\": \"Pacific/Port_Moresby\",\r\n \"44\": \"Australia/Darwin\",\r\n \"45\": \"Asia/Shanghai\",\r\n \"46\": \"Asia/Novosibirsk\",\r\n \"47\": \"Asia/Tashkent\",\r\n \"48\": \"Asia/Kabul\",\r\n \"49\": \"Africa/Cairo\",\r\n \"50\": \"Africa/Johannesburg\",\r\n \"51\": \"Europe/Moscow\",\r\n \"53\": \"Atlantic/Cape_Verde\",\r\n \"54\": \"Asia/Baku\",\r\n \"55\": \"America/Guatemala\",\r\n \"56\": \"Africa/Nairobi\",\r\n \"57\": \"Europe/Warsaw\",\r\n \"58\": \"Asia/Yekaterinburg\",\r\n \"59\": \"Europe/Kiev\",\r\n \"60\": \"America/Godthab\",\r\n \"61\": \"Asia/Rangoon\",\r\n \"62\": \"Asia/Katmandu\",\r\n \"63\": \"Asia/Irkutsk\",\r\n \"64\": \"Asia/Krasnoyarsk\",\r\n \"65\": \"America/Santiago\",\r\n \"66\": \"Asia/Colombo\",\r\n \"67\": \"Pacific/Tongatapu\",\r\n \"68\": \"Asia/Vladivostok\",\r\n \"69\": \"Africa/Lagos\",\r\n \"70\": \"Asia/Yakutsk\",\r\n \"71\": \"Asia/Almaty\",\r\n \"72\": \"Asia/Seoul\",\r\n \"73\": \"Australia/Perth\",\r\n \"74\": \"Asia/Riyadh\",\r\n \"75\": \"Asia/Taipei\",\r\n \"76\": \"Australia/Sydney\",\r\n \"77\": \"America/Chihuahua\",\r\n \"78\": \"America/Santa_Isabel\",\r\n \"79\": \"Asia/Amman\",\r\n \"80\": \"Asia/Beirut\",\r\n \"81\": \"America/Manaus\",\r\n \"82\": \"Asia/Tbilisi\",\r\n \"83\": \"Africa/Windhoek\",\r\n \"84\": \"Asia/Yerevan\",\r\n \"85\": \"America/Buenos_Aires\",\r\n \"86\": \"Africa/Casablanca\",\r\n \"87\": \"Asia/Karachi\",\r\n \"88\": \"America/Caracas\",\r\n \"89\": \"Indian/Mauritius\",\r\n \"90\": \"America/Montevideo\",\r\n \"91\": \"America/Asuncion\",\r\n \"92\": \"Asia/Kamchatka\",\r\n \"93\": \"UTC\",\r\n \"94\": \"Asia/Ulaanbaatar\",\r\n \"95\": \"Etc/GMT+11\",\r\n \"96\": \"Etc/GMT+2\",\r\n \"97\": \"Etc/GMT-12\",\r\n \"98\": \"Asia/Damascus\",\r\n \"99\": \"Asia/Magadan\",\r\n \"100\": \"Europe/Kaliningrad\",\r\n \"101\": \"Europe/Istanbul\",\r\n \"102\": \"Asia/Dhaka\",\r\n \"103\": \"America/Bahia\"\r\n};","import { IAuthAccount } from \"../src/taskpane/interfaces/IAuthTokenResultDto\";\r\nimport { apiClientError, apiLog } from \"../src/taskpane/services/ApiService\";\r\nimport AuthModule from \"./AuthModule\";\r\n\r\nexport const logger = async (e: Error, filePath: string, additionalData?: string) => {\r\n console.error(e);\r\n let account: IAuthAccount;\r\n let hostType: string;\r\n let error: Error;\r\n let path: string = filePath;\r\n try {\r\n if (typeof Office !== \"undefined\") {\r\n switch (Office.context?.diagnostics?.host) {\r\n case Office.HostType.Word:\r\n hostType = \"Word\";\r\n break;\r\n case Office.HostType.Excel:\r\n hostType = \"Excel\";\r\n break;\r\n case Office.HostType.PowerPoint:\r\n hostType = \"PowerPoint\";\r\n break;\r\n case Office.HostType.Outlook:\r\n hostType = \"Outlook\";\r\n break;\r\n default:\r\n hostType = \"Other\";\r\n break;\r\n }\r\n }\r\n else {\r\n hostType = \"Other\";\r\n }\r\n\r\n account = await AuthModule.getAccount();\r\n error = e;\r\n } catch (err) {\r\n error = err;\r\n path = \"logger.ts\";\r\n }\r\n\r\n let errorMessage: string = error?.message + (additionalData ? ` - ${additionalData}` : \"\") + (error?.stack ? ` Stack: ${error.stack}` : \"\");\r\n if (error && (errorMessage === undefined || !errorMessage)) {\r\n try {\r\n errorMessage = JSON.stringify(error);\r\n } catch (error) {\r\n // ignore\r\n }\r\n }\r\n\r\n const clientError = {\r\n error: errorMessage,\r\n filePath: path,\r\n accountId: account?.accountId,\r\n browser: navigator?.userAgent,\r\n hostType: hostType,\r\n }\r\n\r\n try {\r\n await apiClientError(clientError);\r\n } catch (error) {\r\n console.error(\"Error on log save: \", error);\r\n }\r\n}\r\n\r\nexport const logMessage = async (message: string, type?: string) => {\r\n try {\r\n const account: IAuthAccount = await AuthModule.getAccount();\r\n await apiLog(message, account, type);\r\n } catch (error) {\r\n console.error(\"Error on log message: \", error);\r\n }\r\n}"],"names":["FolderTypeEnum","InputEnum","ModeEnum","UserLicenseTypeEnum","client","buildBatchResponse","batchRequests","BatchRequestContent","getContent","content","this","api","post","BaseBatch","process","siteInfos","results","i","length","siteInfoSlices","slice","map","siteInfo","index","id","toString","request","Request","siteId","method","batchResponse","push","getBatchResponse","itemsToProcess","batchResponseContent","BatchResponseContent","Promise","all","item","getBatchData","getResponseById","json","response","driveItems","value","splittedWebUrl","webUrl","split","documentLibraryRealName","sharePointListId","sharePointIds","listId","site","mainUrl","mainWebUrl","DriveIdBatchHelper","localStorageKeys","pinnedItems","recentItems","recentItemsGraph","sharedItems","sites","teams","searchHistory","previousTeamsLocation","selectedAdvSearchSites","getUniqueKey","key","accountId","getPersistedAuthState","account","error","getLocalStorage","uniqueKey","storage","localStorage","getItem","JSON","parse","rabbit","decrypt","getCypherSecret","utf8","setLocalStorage","data","encrypt","stringify","setItem","removeLocalStorage","removeItem","clearLocalStorage","clear","url","mapper","setHeader","accessToken","options","headers","setBody","searchParameter","body","requests","entityTypes","searchTypes","driveItem","query","queryString","buildQuery","from","pageIndex","searchParams","maxSize","size","Execute","axiosRetryPost","result","directory","searchValue","GraphSearchRestHelper","batchRequestCallback","name","driveId","itemId","metadata","SearchBatchRequestHelper","mapDriveItems","_source","noResultsAvailable","hitsContainers","hits","items","totalResults","total","SearchResultMapper","getLastSplittedStringItem","fileName","splitBy","pieces","getExtension","nameParts","removeExtension","filename","includes","join","getRelativeDocumentUrl","isRoot","array","Math","max","truncateWithEllipses","text","substr","createUniqueKey","random","localStringToNumber","textNumber","Number","String","replace","changeExtensionToPdf","dotIndex","lastIndexOf","substring","splitName","fullName","trim","firstName","shift","lastName","formatGuidString","parts","splitStringByNewline","input","findWorkingDirectories","selectedItem","found","randomId","subSites","documents","channels","folders","buildWorkingDirectoryFromTree","user","directories","sharepointItem","type","ComponentTypes","SharePoint","displayName","teamsItem","Teams","rootItem","treeType","DirectoryTreeType","location","isSite","isInConentMangerMode","isTeam","OneDrive","oneDriveWebUrl","currentDirectory","SharePointDocuments","siteDisplayName","DocumentLibrary","teamGroupId","teamDriveId","isSharedTeam","isTeamsFolder","isHub","hubId","parentHubId","document","SharePointFolders","fileTitle","channel","getTeamChannelInfo","channelId","groupId","isPrivate","isShared","teamChannelInfo","driveItemId","parentId","sharePointSiteUrl","driveItemWebUrl","documentLibraryName","isTeamsRootFolder","isSharedTeamsChannel","teamChannelId","folder","isOneDrive","level","OneDriveSubFolder","contentTypeId","serverRelativePath","path","sharePointUniqueId","openTreeFolderOptions","locations","newWorkingDirectories","resolve","isOpen","folderType","teamMainSite","isSubsite","sharepointHubSite","sharepointSite","sharepoint","teamChannel","oneDriveSubFolder","undefined","calculateLocationHeight","itemHeight","isMobile","countVisibleItems","node","count","expanded","forEach","subSite","foldersNextHref","doc","chan","reduce","radonStringCharList","generateRandomString","floor","treeViewItemStyle","leftPad","isLoading","loaded","hasChildren","canExpand","getIconSizeOffset","display","alignItems","paddingTop","paddingBottom","paddingRight","paddingLeft","Exchange","AdvancedSearch","Saving","SavingInBackground","SharePointList","TeamDocuments","TeamFolders","GeneralSearch","Initiallocations","imgUrl","isServerRefreshed","datasourceType","sqlServer","displayHeight","searchFields","graph","filesPaging","numberOfResults","sharePointInternalFileName","sharePointInternalTitleName","sharePointInternalAuthorName","sharePointInternalEditorName","sharepointType","taxonomyTerm","microsoftGraph","search","API","outlook","oneDrive","office","fileSystem","contentTypeFiltering","defaultContentType","defaultViewXml","moveCopyAllViewXml","columnSearchTypes","fileType","driveid","itemid","sizeText","sizeValue","modifiedText","modifiedValue","modifiedBy","siteUrl","uniqueId","checkoutUser","canEdit","canDelete","requirementSet","mailbox","officeFileType","Word","Excel","Powerpoint","Visio","Access","Project","Publisher","Infopath","Browser","App","filters","onlyFolders","initialFileOptionPanelInfoSetting","createdDateTime","lastModifiedDateTime","filePath","initialFolderOptionPanelInfoSetting","initialPaging","offset","pageNumber","top","hasMoreResults","nextPageUrl","initialGraphPaging","nextLink","initialGraphSearchPager","moreResultsAvailable","FieldType","siteFilters","siteQueries","subs","hubs","storageKeys","recentOutlookReadMode","recentOutlookComposeMode","recentOfficeReadMode","recentOfficeComposeMode","pinItOutlookFolder","pinItOutlookFile","pinItOfficeFolder","pinItOfficeFile","shared","params","app","username","resource","language","advancedSearch","documentLibraryId","tenantId","mode","loadUserRecentItems","hasTeamsAccess","hasSharePointAccess","isTeams","allowOpenInSharePoint","contentManager","preloadLocation","preloadURL","pdfEmbed","isInOneDrive","validSaveAsPdfExtentions","SharepointFilters","save","saveSPList","DateTime","User","Calculated","File","Attachments","Computed","invalidSaveModes","mailCompose","validSaveModes","mailRead","mailSend","validRefreshComponents","multipleSelectionTypes","SharePointInputTypes","userMulti","taxonomyFieldType","taxonomyFieldTypeMulti","choice","multiChoice","dateIndexes","to","internalSharepointName","validPeopleInputTypes","peoplePickerSingle","peoplePickerMultiple","validPeoplePickerTypes","validDocumentLibraryAdvancedSearchComponentTypes","teamDocumentLibrary","defaultName","defaultDirectory","formatParts","currency","validPdfExtensions","validPreviewExtension","extensions","pdf","EmptyGuid","SharePointFolderContentTypeIds","documentSet","decimalSteps","piiConfig","privacySentitiveColumnName","privacySentitiveDataColumnName","privacySentitiveDataDefault","FileSortOptionKeys","SortFields","Relevance","Name","TimeLastModified","TimeCreated","Type","Size","SortOrder","Ascending","Descending","CopyMoveErrors","DuplicateFilenames","PopUpConstants","POPUP_WIDTH","POPUP_HEIGHT","POPUP_NAME_PREFIX","OfficeXMLNamespaces","properties","types","DocubirdCache","currentFileUniqueId","selectedExchangeItems","spEmailPropertyMappings","copyJobResults","signingEnabled","signalREnabled","officeFileUniqueId","hooks","users","datasourceDocumentTemplates","officeExtentions","word","values","excel","powerPoint","visio","validSigningRequestExtensions","number","datetime","note","Boolean","numberPercentage","lookupSingle","lookupMulti","thumbNail","SharePointMetadataBooleans","true","false","SharePointFormatTypes","dateOnly","dateTime","image","hyperlink","dropdown","radioButtons","mapSites","description","siteName","mapSubSites","filterNonTopLevelSites","siteArray","root","genericSiteTopLevelPathPredicate","filterNonTopLevelISiteInfoArray","siteWebUrlParts","Array","isArray","pop","some","s","handleError","status","logger","console","refreshJwt","axiosRetryGet","Authorization","apiHeaders","xDocubirdAuth","apiSearchDocuments","documentSearchRequest","localApiInstance","apiGetTenantInfo","apiUpdateUserSettings","dbSettings","apiDownloadFileStream","downloadRequestPayload","responseType","fileBlob","apiCreateDocumentSet","documentSetCreationData","apiGetCompressedPinnedData","apiGetOldPinnedItems","apiSetPinnedItems","updatedPinnedItems","encryptedJsonContent","LZString","compressToBase64","apiSetSuggestedItems","sender","updatedtSuggestedItems","apiGetCompressedSuggestedData","apiGetCompressedRecentData","apiGetOldRecentItems","apiSetRecentItems","updatedRecentItems","filter","cannotBeRemoved","apiGetCompressedEmailToMetadataMapping","apiSetEmailToMetadataMapping","compressedData","apiFileSystemCallDynamicEndpoint","endpoint","retryInternalServerError","dataToSend","apiConvertFileToPdf","requestPayload","apiGetAttachmentExtension","ewsUrl","ewsToken","attachmentIdList","apiFilePreCommitCheck","apiFolderPreCommitCheck","apiUpdateItemMetadata","apiBulkUpdateItemMetadata","apiVerifyAndFireUpdateTrigger","apiAddListItem","apiUploadExchangeMailFolder","apiSilentTokenRequest","apiRefreshTokenRequest","sharePointBaseUrl","apiAquireFlowToken","authState","apiAquireSharePointAdminToken","authUrl","URL","append","href","apiAquireMailSendToken","apiAquireMailboxToken","apiCreateFolders","parentUrl","autoFolderCreation","apiUpload","formData","uploadUrl","apiClientError","clientError","getDocubirdTokenCached","apiLog","message","navigator","userAgent","apiSavePayload","mailPayloadDto","apiGetPayload","apiGetUserLicense","userAccount","Expired","apiGetUserProfile","apiLoginAuthGetRequest","authUrlGetRequest","apiLoginCodeTokenRequest","codeTokenRequestUrl","apiGetBackgroundTaskProgess","taskId","apiFileReplace","apiFileCreateDocumentFromTemplate","apiFileConvertAndSaveAsPDF","apiGetHooksByType","TenantGUID","HookTypeId","apiRequestApproval","apiGetAdditionalMailboxes","apiSetAdditionalMailboxes","additionalMailboxes","getAuthenticatedClient","Client","init","authProvider","done","getUserProfilePicture","header","ResponseType","RAW","get","ok","window","webkitURL","blob","createObjectURL","getDriverFolders","pager","select","mapOneDriveFolderData","parentReference","mapSharepointFolderData","listItem","contentType","sharepointIds","listItemUniqueId","getChildDriverFolders","driveInfo","executePageIteratorCallback","callback","PageIterator","iterate","getSharePointBaseUrl","getSharePointSites","requestBody","getSharePointSiteFromDriveId","getGraphAccessToken","driveSharePointIds","sitesResult","getAllSubSites","searchRequest","excludedHubSitesSpecified","hubSiteIds","allowedSitesSpecified","allowedSites","hubSiteId","allowedSite","fields","siteHits","v","a","findIndex","t","hitId","hit","toLowerCase","searchSharePointSitesAutoPage","hubSitesOnly","replaceAll","uniqueSiteCount","pageCount","concat","SharePointSiteHelper","hubSites","hub","find","hubSite","pageData","searchSharePointSites","getSharePointSite","getSharePointSubsite","nextPageLink","subSiteCount","extraSites","extraSiteCount","sort","b","toUpperCase","getSubSites","mainSites","mainSiteSlices","mainSite","subSiteResponse","parentSiteId","getHubSiteSites","associatedHubSites","associatedHubSitesAvailable","requestPath","siteCount","associatedHub","hubExists","getSharePointDocumentLibraries","setup","setUpSharePointDocumentPageIterator","resultSet","getTeamChannelRelatedSitesInfo","teamChannels","teamRelatedSiteInfoCacheKey","CacheHelper","channelsCacheKey","privateSharedTeamChannels","getTeamChannels","set","channelInfo","teamDriveInfo","teamSharepointInfo","GetTeamDriveInfo","GetTeamSharepointInfo","getSharePointFolders","folderId","expand","getJoinedTeams","getTeamsAccessToken","joinedTeams","teamResults","teamSlices","team","teamSiteResponse","teamSite","drive","getTeamPrimaryChannel","email","membershipType","isPrimary","x","channelA","channelB","getTeamsChannelSites","teamsChannelSites","teamsSlices","getTeamChannelSites","teamChannelSites","teamSiteId","teamId","parallelLimit","channelsRaw","privateAndSharedChannels","channelSlices","list","getDriveItemDocuments","getDriveItemMetadata","documentFiles","searchBatchHelper","getSiteDocumentLibraryDrives","searchMainDriverFolder","searchTerm","executeSearch","searchChildDriveFolders","searchDriveForFilesAndFolders","files","file","buildOneDriveFiles","buildOneDriveFolders","parentWebUrl","lastModifiedBy","tryDecodeUriComponent","webDavUrl","isFolder","searchDriveForFilesAndFoldersSharepoint","searchResponse","mappedResult","mapFilesAndFolders","extraDriveInfo","isDocument","buildFile","extname","buildFolder","pathname","itemExt","fullWebUrl","pii","piiDetected","rank","getOneDriveRootDetails","sharePointItemId","getParentWebURL","fileDriveId","createRootDriveFolder","folderName","executeFolderCreation","createRootSharepointDriveFolder","createChildFolder","checkIfExist","checkIfSharePointListExist","checkIfFileOrFolderExist","getFileOrFolderResult","buildFileOrFolderInfoUrl","executeFileQuery","getFileItemInfo","getFileResult","buildFileInfoUrl","tryEncodeUriComponent","getFileItemIdFromRelativePath","encodeRelativePath","req","getSharePointDefaultWebUrls","defaultRootSiteRequest","rootSiteIndex","defaultSubsitesRequest","getBatchResponseContent","element","getItemCustomSelect","getContainerSharePointIds","getItemWebViewUrl","getListItemWebUrl","getSPListItemWebUrl","getDriveItemBySharingUrl","sharingUrl","base64Value","btoa","encodedUrl","RegExp","getDriveItemByWebUrl","webURL","listItemWebUrl","getListItemContentTypeId","getListItemCustomSelect","getDriveItemAttachmentLinks","Error","createItemShareableLink","scope","recipients","recipient","version","getDriveItemShareableLinks","isOrganization","itemsSliced","link","adminHasGivenSiteShareableRightsForUser","getSiteIdWebUrl","token","getFolderPathsInfo","paths","pathResults","pathSlices","isDriveItem","pathResponse","getSharePointDocumentLibrarySharepointId","getDriveItemSharepointUniqueId","getRecentFiles","limitResult","remoteItem","getSharedFiles","getFilePdfByteContent","includeFormat","detectIEOrEdge","getRelativeFileInfo","fileInfo","fileSlices","documentLibrary","buildSharepointPath","buildOneDrivePath","pathParts","urlPart","encodedPath","startsWith","encodePath","subFolderStartIndex","indexOf","driveRootRelativeUrl","DateService","getTodayString","getProtectionLabels","statusCode","getFilePreview","getUrl","postUrl","getDriveRootWebUrl","cacheKey","GetApprovalPeople","searchString","approvalGroups","then","val","getItemApprovalRequestInfo","getItemThumbnail","thumbData","large","uploadLargeFile","fileObject","forceCheckout","baseSaveUrl","requestConfig","accept","payload","LargeFileUploadTask","createUploadSession","uploadSession","task","upload","uploadResult","comment","cancel","discardCheckOut","getSharePointAccessToken","searchPeople","allowGroups","people","uriComponent","decodeURIComponent","getSharePointSiteContent","sharepointParameter","parameter","odataQuery","getSharepointFiles","sortOption","oneDriveRootDetails","context","folderServerRelativeUrl","baseUrl","section","daysOffset","filterField","RealFieldName","selected","selectedCount","isWordSelected","isExcelSelected","isPowerPointSelected","isVisioSelected","fieldValues","filterValue","filterType","filterOp","sortField","sortOrder","parameters","DatesInUtc","ViewXml","retry","Row","code","sharepointFiles","UniqueId","FileLeafRef","Created","Modified","Editor","title","File_x0020_Type","File_x0020_Size","permMask","PermMask","renderItemID","ID","FileRef","privacySensitive","NextHref","getSharepointListSchema","RenderOptions","getSharepointLibraryFiles","listTitle","Accept","d","f","templateId","extention","ServerRelativeUrl","getFilePreCommitInfo","exists","checkedOut","checkedOutBy","locked","lockedBy","getFolderPreCommitInfo","getSharePointGroupUsers","userSelectionScope","getSharePointSiteUsersCall","getSharePointContentTypes","includeParentData","getSharePointContentTypesWithFields","getSharePointContentTypeFields","getSharePointDocumentLibraryFields","getSharePointSiteUsers","getSharePointSiteUsersById","idList","searchSharePointSiteUsers","searchSharePointGroup","groupToSearch","queryParams","QueryString","MaximumEntitySuggestions","AllowEmailAddresses","AllowOnlyEmailAddresses","PrincipalType","PrincipalSource","SharePointGroupID","parseInt","ClientPeoplePickerSearchUser","jsonResult","Id","Title","DisplayText","EntityData","DisplayName","EMail","Email","getTaxonomyTerms","termSetId","_ObjectType_","agg","cur","_Child_Items_","getSharePointDocumentSetSettingsXml","getSharePointListViews","getUserEffectivePermissions","encodedUsername","retryLimit","perms","getPermissionsFromBase","getUserEffectivePermissionsFromMask","permHex","basePerm","Low","getPermMaskL","High","getPermMaskH","getLists","lists","ItemCount","getListSettings","createLink","linkName","getShortcutLink","fileUrl","getFileByUrl","webHost","hostname","fileHost","requestUrl","getListSharingInformation","getLibraryDefaultValues","directoryParts","domain","origin","libraryUrl","xmlString","parseString","err","MetadataDefaults","$","DefaultValue","defaultValue","fieldName","FieldName","_","getSiteIANATimeZoneName","timeZone","GetIANATimeZoneName","getListItemsById","columnInternalName","ids","itemUniqueId","getItemAbsoluteUrl","listUniqueId","absUrl","EncodedAbsUrl","getItemVersions","getListFields","getSiteLogo","fetch","getFileVersionData","Level","MajorVersion","MinorVersion","getHubSites","SiteUrl","parentHubSiteId","ParentHubSiteId","Description","createCopyJobs","args","errorMessage","sourceSiteUrl","sourceServerRelPath","destinationServerRelPath","isMoveMode","destinationPath","success","jobs","arr","siteOrigin","endsWith","fileServerRelativePath","containerPath","sourceLocations","Object","groupBy","locationFiles","exportObjectUris","destinationUri","AllowSchemaMismatch","AllowSmallerVersionLimitOnDestination","IgnoreVersionHistory","IsMoveMode","NameConflictBehavior","copyJobsResponse","canAddListItem","sp","web","hasPermissions","PermissionKind","AddListItems","canEditListItem","EditListItems","canDeleteListItem","DeleteListItems","canOpenItems","OpenItems","canViewVersions","ViewVersions","canDeleteVersions","DeleteVersions","canCancelCheckout","CancelCheckout","canApproveItems","ApproveItems","canEnumeratePermissions","EnumeratePermissions","canManagePermissions","ManagePermissions","groupingFn","groups","extend","dateFormats","getHours","hours","minutes","ampm","today","Date","year","getFullYear","month","getMonth","day","getDate","parseDateFromString","dateStr","dayjsDate","isValid","toDate","match","date","mobileBackButton","color","mobileBackIcon","marginLeft","marginRight","mobileMoreTopNavIcon","standard","fontSize","hover","backgroundColor","mobileMoreStyle","mergeStyles","mobileMenuRowStyle","marginBottom","mobileListItemStyle","height","mobileIconStyle","getPlatform","Office","diagnostics","platform","hostName","PlatformType","iOS","Android","TokenStorage","TokenResource","DialogMessageStatus","isAuthRefreshInProgress","isFlowAccessTokenRefreshInProgress","isMailSendAccessTokenRefreshInProgress","isMailboxAccessTokenRefreshInProgress","requestTokenSilent","refreshedAuthState","configureAndPersistRefreshedAuthState","clearPersistedAuthState","requestTokenRefresh","setSignOutCallback","signOutCallback","tryPersistAuthState","Roaming","host","requirements","isSetSupported","roamingSettings","AuthModule","AuthStateKey","reject","saveAsync","AsyncResultStatus","Succeeded","Local","storageValue","CypherSecret","StorageHelper","setItemAsync","persistAuthState","globalAuthState","tryGetAuthState","serializedAuthState","roamingAuthState","localAuthState","roamingExpiration","utc","graphTokenExpiresOn","localExpiration","remove","Failed","calculateMinutesToExpiration","tokenExpirationDate","utcNow","diff","getTokenExpirationDate","All","expirationUnixTimeValues","sharePointTokenExpiresOn","oneDriveTokenExpiresOn","teamsTokenExpiresOn","min","Graph","Flow","flowTokenExpiresOn","SharePointAdmin","sharePointAdminTokenExpiresOn","MailSend","mailSendTokenExpiresOn","Mailbox","mailboxTokenExpiresOn","tokenRefreshRequired","getIsResourceRefreshInProgress","waitOnRefresh","depth","defaultRefreshWaitDepth","setTimeout","defaultRefreshWait","getAuthState","persistedAuthState","flowToken","sharePointAdminToken","mailSendToken","mailboxToken","signIn","signOut","graphToken","teamsToken","sharePointToken","getOneDriveAccessToken","oneDriveToken","getFlowAccessToken","forceRefresh","flowTokenResponse","getSharePointAdminAccessToken","sharePointAdminTokenResponse","getMailSendAccessToken","mailSendTokenResponse","getDocubirdToken","refreshRequired","docubirdToken","expirationDate","jwtAuthTokenReponse","getNintexAccessToken","client_id","client_secret","Nintex","grant_type","nintexTokenResponse","access_token","nintexToken","nintexTokenExpiresOn","expires_at","getMailboxAccessToken","mailboxTokenResponse","mailboxUsername","mailboxAccountId","getAccount","refreshTokensIfRequired","getAuthData","getMinutesToExpiration","initiateDialogAuthFlow","loginCallback","useContext","processLoginMessage","messageFromDialog","Success","loginDialog","close","processLoginDialogEvent","arg","processDialogEvent","dialogLoginUrl","ui","displayDialogAsync","width","promptBeforeOpen","warn","addEventHandler","EventType","DialogMessageReceived","DialogEventReceived","setTenantApiKey","apiKey","tenantApiKey","getTenantApiKey","authModule","create","baseURL","interceptors","use","config","jwtToken","controller","AbortController","abort","signal","rax","attach","retryCodes","altRetryCodes","axiosInstance","raxConfig","httpMethodsToRetry","statusCodesToRetry","backoffType","axiosRetryPut","put","axiosRetryDelete","delete","axiosRetryPatch","patch","ua","msie","msie11","msedge","detectEdgeOrSafari","IEEdgeSmoothScroll","targetY","duration","startingY","scrollHeight","start","requestAnimationFrame","step","timestamp","time","percent","scrollTop","docubirdWindow","OpenInBrowser","openInSelf","openBrowserWindow","open","closed","focus","OpenPdfInBrowser","isOfficeContextAvailable","displayLanguage","locale","cache","Map","encodeURIComponent","tryDecodeUri","decodeURI","test","labelName","AppModeEnum","undefinedTypeString","AppMode","webAddIn","isFileInfoPanelOpen","openUploadPanel","isMultiMetaFileUpdatePanelOpen","preExpandTeamId","getIsOfficeJSAvailable","setAppMode","appMode","getAppMode","setIsFileInfoPanelOpen","getIsFileInfoPanelOpen","setIsMultiMetaFileUpdatePanelOpen","getIsMultiMetaFileUpdatePanelOpen","setOpenPanelUploadPanel","getOpenPanelUploadPanel","setPreExpandTeamId","getPreExpandTeamId","GeneralModule","generalModule","reset","groupAndSortSites","sortSites","siteA","siteB","cookieApi","withAttributes","secure","sessionStorage","getItemAsync","removeOnGet","spTimeZoneId","SPTimeZoneIdToIANATimeZoneName","e","additionalData","HostType","hostType","PowerPoint","Outlook","stack","browser","logMessage"],"sourceRoot":""}