UNPKG

@kwiz/common

Version:

KWIZ common utilities and helpers for M365 platform

107 lines 4.28 kB
import { getCacheItem, setCacheItem } from "../../exports-index"; import { isNullOrEmptyString, isNullOrUndefined, isNumber } from "../../helpers/typecheckers"; import { SPFxAuthTokenType } from "../../types/auth"; import { GetJson, GetJsonSync } from "../rest"; import { GetRestBaseUrl } from "../sharepoint.rest/common"; export function GetTokenAudiencePrefix(appId) { return `api://${appId}`; } export function GetDefaultScope(appId) { return `${GetTokenAudiencePrefix(appId)}/access_as_user`; } export function GetMSALSiteScope(hostName) { return `https://${hostName}`; } function _getGetSPFxClientAuthTokenParams(siteUrl, spfxTokenType = SPFxAuthTokenType.Graph) { let acquireURL = `${GetRestBaseUrl(siteUrl)}/SP.OAuth.Token/Acquire`; //todo: add all the resource end points (ie. OneNote, Yammer, Stream) let resource = ""; let isSPOToken = false; switch (spfxTokenType) { case SPFxAuthTokenType.Outlook: resource = "https://outlook.office365.com/search"; break; case SPFxAuthTokenType.SharePoint: case SPFxAuthTokenType.MySite: isSPOToken = true; resource = new URL(acquireURL).origin; if (spfxTokenType === SPFxAuthTokenType.MySite) { let split = resource.split("."); split[0] += "-my"; resource = split.join("."); } break; default: resource = "https://graph.microsoft.com"; } let data = { resource: resource, tokenType: isSPOToken ? "SPO" : undefined }; let params = { url: acquireURL, body: JSON.stringify(data), options: { allowCache: false, // ...shortLocalCache, // postCacheKey: `${spfxTokenType}_${_spPageContextInfo.webId}`, includeDigestInPost: true, headers: { "Accept": "application/json;odata.metadata=minimal", "content-type": "application/json; charset=UTF-8", "odata-version": "4.0", } } }; return params; } function _parseAndCacheGetSPFxClientAuthTokenResult(result, spfxTokenType = SPFxAuthTokenType.Graph) { if (!isNullOrUndefined(result) && !isNullOrEmptyString(result.access_token)) { let expiration = isNumber(result.expires_on) ? new Date(result.expires_on * 1000) : { minutes: 15 }; setCacheItem(`access_token_${spfxTokenType}_${_spPageContextInfo.webId}`, result.access_token, expiration); return result.access_token; } return null; } function _getSPFxClientAuthTokenFromCache(spfxTokenType = SPFxAuthTokenType.Graph) { let cachedToken = getCacheItem(`access_token_${spfxTokenType}_${_spPageContextInfo.webId}`); if (!isNullOrEmptyString(cachedToken)) { return cachedToken; } return null; } /** Acquire an authorization token for a Outlook, Graph, or SharePoint the same way SPFx clients do */ export async function GetSPFxClientAuthToken(siteUrl, spfxTokenType = SPFxAuthTokenType.Graph) { try { let cachedToken = _getSPFxClientAuthTokenFromCache(spfxTokenType); if (!isNullOrEmptyString(cachedToken)) { return cachedToken; } let { url, body, options } = _getGetSPFxClientAuthTokenParams(siteUrl, spfxTokenType); let result = await GetJson(url, body, options); return _parseAndCacheGetSPFxClientAuthTokenResult(result, spfxTokenType); } catch { } return null; } /** Acquire an authorization token for a Outlook, Graph, or SharePoint the same way SPFx clients do */ export function GetSPFxClientAuthTokenSync(siteUrl, spfxTokenType = SPFxAuthTokenType.Graph) { try { let cachedToken = _getSPFxClientAuthTokenFromCache(spfxTokenType); if (!isNullOrEmptyString(cachedToken)) { return cachedToken; } let { url, body, options } = _getGetSPFxClientAuthTokenParams(siteUrl, spfxTokenType); let response = GetJsonSync(url, body, options); return _parseAndCacheGetSPFxClientAuthTokenResult(response.result, spfxTokenType); } catch { } return null; } //# sourceMappingURL=common.js.map