{"version":3,"file":"559.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};\r\n\r\nexport const getLocalStorage = (key: string) => {\r\n try {\r\n const accountId: string = authModule.getPersistedAuthState()?.account?.accountId;\r\n if (accountId) {\r\n const storage = localStorage.getItem(key + \".\" + accountId);\r\n return JSON.parse(rabbit.decrypt(storage, authModule.getCypherSecret()).toString(utf8));\r\n }\r\n } catch (error) {\r\n }\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 accountId: string = authModule.getPersistedAuthState()?.account?.accountId;\r\n if (accountId) {\r\n const storage: string = rabbit.encrypt(JSON.stringify(data), authModule.getCypherSecret()).toString();\r\n localStorage.setItem(key + \".\" + accountId, storage);\r\n return true;\r\n }\r\n } catch (error) {\r\n }\r\n return false;\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 });\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 config = {\r\n authority: \"https://login.microsoftonline.com/common\",\r\n clientId: \"e2c00917-ac00-4342-9a15-63a8dc86fe1d\",\r\n validateAuthority: true,\r\n postLogoutRedirectUri: \"http://localhost:3000\",\r\n navigateToLoginRequestUrl: false\r\n};\r\n\r\nexport const GRAPH_SCOPES = {\r\n GROUP_READ_ALL: \"Group.Read.All\",\r\n // FILES_READ: \"Files.Read\",\r\n FILES_READ_ALL: \"Files.Read.All\",\r\n USER_READBASIC_ALL: \"User.ReadBasic.All\",\r\n FILES_READWRITE: \"Files.ReadWrite\",\r\n SITES_READWRITE_ALL: \"Sites.ReadWrite.All\",\r\n USER_READ_ALL: \"User.Read.All\",\r\n // USER_READWIRTE_ALL: \"User.ReadWrite.All\",\r\n MailRead: \"Mail.Read\"\r\n // ReadAll: \"Sites.Read.All\"\r\n};\r\n\r\nexport const GRAPH_REQUESTS = {\r\n GRAPH: {\r\n scopes: [GRAPH_SCOPES.FILES_READ_ALL],\r\n mail: [GRAPH_SCOPES.MailRead],\r\n oneDriveUpload: [GRAPH_SCOPES.FILES_READWRITE],\r\n TeamScopes: [GRAPH_SCOPES.USER_READ_ALL],\r\n sharepoint: [GRAPH_SCOPES.SITES_READWRITE_ALL]\r\n }\r\n};\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\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 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 }\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};\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 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 officeFileUniqueId: \"officeFileUniqueId\",\r\n hooks: \"hooks\",\r\n users: \"users\"\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};\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}\r\n\r\nexport interface ISubSiteInfo {\r\n id: string;\r\n name: string;\r\n webUrl: 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, ExchangeMailFolderUploadRequest, FolderPreCommitRequest, IHookRequest, IHookResult, MetadataUpdateRequest, ReplaceFileRequest, SignRequest } 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 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\nexport 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 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\nexport 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\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 } 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\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 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 });\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 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 const teamChannels = (await client.api(`/teams/${groupId}/channels`).header(\"Prefer\", \"include-unknown-enum-members\").get()).value as ITeamChannel[];\r\n // const driveId = await getTeamChannelsMainDriveId(client, teamChannels, groupId);\r\n\r\n return teamChannels.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 }\r\n );\r\n } catch (error) {\r\n logger(error, \"GraphSerivce.ts (getTeamChannels)\");\r\n return [];\r\n }\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, \"name\");\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 checkIfFileExists = async (driveInfo: IDriveInfo, filename: string) => {\r\n try {\r\n const result = await getFileResult(driveInfo, filename, \"name\");\r\n return !result ? false : true;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (checkIfFileExists)\");\r\n return false;\r\n }\r\n};\r\n\r\nexport const getFileItemInfo = async (driveInfo: IDriveInfo, filename: string, select: string) => {\r\n try {\r\n const result = await getFileResult(driveInfo, filename, select);\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) => {\r\n const client = getAuthenticatedClient(await authModule.getGraphAccessToken());\r\n const url = buildFileInfoUrl(driveInfo, filename);\r\n return await executeFileQuery(client, url, select);\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) => {\r\n try {\r\n const result = await client\r\n .api(url)\r\n .select(select)\r\n .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): 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(\"name,webUrl,sharepointIds\")\r\n .get();\r\n\r\n return result;\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 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 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\")\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 }\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 getItemWebUrl = 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}`)\r\n .select('webUrl')\r\n .get()\r\n return response;\r\n } catch (err) {\r\n logger(err, \"GraphService.ts (getItemWebUrl)\");\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}","import { ISharePointParameters } from \"../interfaces/ISharePointParameters\";\r\nimport { ITag } from \"@fluentui/react\";\r\nimport { 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 { getItemWebUrl } 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\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\nconst 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 results = await getItemWebUrl(driveId, currentDirectory?.id);\r\n folderServerRelativeUrl = tryDecodeUriComponent(new URL(results.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 const fieldValues = section.items.filter(x => x.selected).map(item => item.value).join('%3B%23');\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 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 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 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 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 body = {\r\n exportObjectUris: files.map(file => {\r\n return `${sourcePath}/${file.FileLeafRef}`\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 requestConfig = {\r\n headers: { Authorization: `Bearer ${accessToken}`, accept: \"application/json; odata=nometadata\" }\r\n };\r\n const copyJobsResponse = (await axiosRetryPost(`${siteUrl}/_api/site/CreateCopyJobs`, body, requestConfig, false))?.data?.value;\r\n\r\n if (copyJobsResponse) {\r\n return {\r\n success: true,\r\n jobs: copyJobsResponse\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};","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}","export 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\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\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 const clientError = {\r\n error: error?.message + (additionalData ? ` - ${additionalData}` : \"\") + (error?.stack ? ` Stack: ${error.stack}` : \"\"),\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","getLocalStorage","key","accountId","getPersistedAuthState","account","storage","localStorage","getItem","JSON","parse","rabbit","decrypt","getCypherSecret","utf8","error","setLocalStorage","data","encrypt","stringify","setItem","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","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","config","authority","clientId","validateAuthority","postLogoutRedirectUri","navigateToLoginRequestUrl","GRAPH_SCOPES","GROUP_READ_ALL","FILES_READ_ALL","USER_READBASIC_ALL","FILES_READWRITE","SITES_READWRITE_ALL","USER_READ_ALL","MailRead","GRAPH_REQUESTS","GRAPH","scopes","mail","oneDriveUpload","TeamScopes","AdvancedSearch","Saving","SavingInBackground","SharePointList","TeamDocuments","TeamFolders","GeneralSearch","Initiallocations","imgUrl","isServerRefreshed","datasourceType","sqlServer","displayHeight","searchFields","graph","filesPaging","numberOfResults","sharePointInternalFileName","sharePointInternalTitleName","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","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","PopUpConstants","POPUP_WIDTH","POPUP_HEIGHT","POPUP_NAME_PREFIX","OfficeXMLNamespaces","properties","types","DocubirdCache","currentFileUniqueId","selectedExchangeItems","spEmailPropertyMappings","copyJobResults","signingEnabled","officeFileUniqueId","hooks","users","officeExtentions","word","values","excel","powerPoint","visio","validSigningRequestExtensions","number","datetime","note","Boolean","numberPercentage","lookupSingle","lookupMulti","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","apiAddListItem","apiUploadExchangeMailFolder","apiSilentTokenRequest","apiRefreshTokenRequest","sharePointBaseUrl","apiAquireFlowToken","authState","apiAquireSharePointAdminToken","authUrl","URL","append","href","apiAquireMailSendToken","apiAquireMailboxToken","apiTeamsToken","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","apiFileConvertAndSaveAsPDF","apiGetHooksByType","TenantGUID","HookTypeId","apiRequestApproval","apiRequestSigning","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","getAllSubSites","searchRequest","excludedHubSitesSpecified","hubSiteIds","allowedSitesSpecified","allowedSites","hubSiteId","allowedSite","getGraphAccessToken","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","getHubSiteSites","associatedHubSites","associatedHubSitesAvailable","requestPath","siteCount","associatedHub","hubExists","getSharePointDocumentLibraries","setup","setUpSharePointDocumentPageIterator","resultSet","channelInfo","teamDriveInfo","teamSharepointInfo","GetTeamDriveInfo","GetTeamSharepointInfo","getSharePointFolders","folderId","expand","getJoinedTeams","getTeamsAccessToken","joinedTeams","teamResults","teamSlices","team","teamSiteResponse","teamSite","drive","getTeamChannels","email","membershipType","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","checkIfFileExists","getFileResult","getFileItemInfo","buildFileInfoUrl","tryEncodeUriComponent","getFileItemIdFromRelativePath","encodeRelativePath","getSharePointDefaultWebUrls","defaultRootSiteRequest","rootSiteIndex","defaultSubsitesRequest","getBatchResponseContent","element","getItemCustomSelect","getItemWebViewUrl","getListItemWebUrl","getSPListItemWebUrl","getDriveItemByWebUrl","webURL","base64Value","btoa","encodedUrl","RegExp","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","getItemWebUrl","getDriveRootWebUrl","cacheKey","CacheHelper","set","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","uriComponent","decodeURIComponent","getSharePointSiteContent","sharepointParameter","parameter","odataQuery","getSharepointFiles","sortOption","oneDriveRootDetails","context","folderServerRelativeUrl","baseUrl","section","daysOffset","filterField","RealFieldName","x","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","getFilePreCommitInfo","exists","checkedOut","checkedOutBy","locked","lockedBy","getFolderPreCommitInfo","getSharePointGroupUsers","userSelectionScope","getSharePointSiteUsersCall","getSharePointContentTypes","includeParentData","getSharePointContentTypeFields","getSharePointDocumentLibraryFields","getSharePointSiteUsers","getTaxonomyTerms","termSetId","_ObjectType_","agg","cur","_Child_Items_","Id","getSharePointDocumentSetSettingsXml","getSharePointListViews","getUserEffectivePermissions","encodedUsername","retryLimit","perms","getPermissionsFromBase","getUserEffectivePermissionsFromMask","permHex","basePerm","Low","getPermMaskL","High","getPermMaskH","getLists","lists","list","ItemCount","getListSettings","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","Title","Description","createCopyJobs","args","errorMessage","sourceSiteUrl","sourceServerRelPath","destinationServerRelPath","isMoveMode","destinationPath","exportObjectUris","destinationUri","AllowSchemaMismatch","AllowSmallerVersionLimitOnDestination","IgnoreVersionHistory","IsMoveMode","NameConflictBehavior","copyJobsResponse","success","jobs","canAddListItem","sp","web","hasPermissions","PermissionKind","AddListItems","canEditListItem","EditListItems","canDeleteListItem","DeleteListItems","canOpenItems","OpenItems","canViewVersions","ViewVersions","canDeleteVersions","DeleteVersions","canCancelCheckout","CancelCheckout","canApproveItems","ApproveItems","canEnumeratePermissions","EnumeratePermissions","canManagePermissions","ManagePermissions","parseInt","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","removeItem","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","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","AppMode","webAddIn","isFileInfoPanelOpen","openUploadPanel","isMultiMetaFileUpdatePanelOpen","setAppMode","appMode","getAppMode","setIsFileInfoPanelOpen","getIsFileInfoPanelOpen","setIsMultiMetaFileUpdatePanelOpen","getIsMultiMetaFileUpdatePanelOpen","setOpenPanelUploadPanel","getOpenPanelUploadPanel","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":""}