UNPKG

@kwiz/common

Version:

KWIZ common utilities and helpers for M365 platform

115 lines 4.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GetSPFxClientAuthTokenSync = exports.GetSPFxClientAuthToken = exports.GetMSALSiteScope = exports.GetDefaultScope = exports.GetTokenAudiencePrefix = void 0; const exports_index_1 = require("../../exports-index"); const typecheckers_1 = require("../../helpers/typecheckers"); const auth_1 = require("../../types/auth"); const rest_1 = require("../rest"); const common_1 = require("../sharepoint.rest/common"); function GetTokenAudiencePrefix(appId) { return `api://${appId}`; } exports.GetTokenAudiencePrefix = GetTokenAudiencePrefix; function GetDefaultScope(appId) { return `${GetTokenAudiencePrefix(appId)}/access_as_user`; } exports.GetDefaultScope = GetDefaultScope; function GetMSALSiteScope(hostName) { return `https://${hostName}`; } exports.GetMSALSiteScope = GetMSALSiteScope; function _getGetSPFxClientAuthTokenParams(siteUrl, spfxTokenType = auth_1.SPFxAuthTokenType.Graph) { let acquireURL = `${(0, common_1.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 auth_1.SPFxAuthTokenType.Outlook: resource = "https://outlook.office365.com/search"; break; case auth_1.SPFxAuthTokenType.SharePoint: case auth_1.SPFxAuthTokenType.MySite: isSPOToken = true; resource = new URL(acquireURL).origin; if (spfxTokenType === auth_1.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 = auth_1.SPFxAuthTokenType.Graph) { if (!(0, typecheckers_1.isNullOrUndefined)(result) && !(0, typecheckers_1.isNullOrEmptyString)(result.access_token)) { let expiration = (0, typecheckers_1.isNumber)(result.expires_on) ? new Date(result.expires_on * 1000) : { minutes: 15 }; (0, exports_index_1.setCacheItem)(`access_token_${spfxTokenType}_${_spPageContextInfo.webId}`, result.access_token, expiration); return result.access_token; } return null; } function _getSPFxClientAuthTokenFromCache(spfxTokenType = auth_1.SPFxAuthTokenType.Graph) { let cachedToken = (0, exports_index_1.getCacheItem)(`access_token_${spfxTokenType}_${_spPageContextInfo.webId}`); if (!(0, typecheckers_1.isNullOrEmptyString)(cachedToken)) { return cachedToken; } return null; } /** Acquire an authorization token for a Outlook, Graph, or SharePoint the same way SPFx clients do */ async function GetSPFxClientAuthToken(siteUrl, spfxTokenType = auth_1.SPFxAuthTokenType.Graph) { try { let cachedToken = _getSPFxClientAuthTokenFromCache(spfxTokenType); if (!(0, typecheckers_1.isNullOrEmptyString)(cachedToken)) { return cachedToken; } let { url, body, options } = _getGetSPFxClientAuthTokenParams(siteUrl, spfxTokenType); let result = await (0, rest_1.GetJson)(url, body, options); return _parseAndCacheGetSPFxClientAuthTokenResult(result, spfxTokenType); } catch { } return null; } exports.GetSPFxClientAuthToken = GetSPFxClientAuthToken; /** Acquire an authorization token for a Outlook, Graph, or SharePoint the same way SPFx clients do */ function GetSPFxClientAuthTokenSync(siteUrl, spfxTokenType = auth_1.SPFxAuthTokenType.Graph) { try { let cachedToken = _getSPFxClientAuthTokenFromCache(spfxTokenType); if (!(0, typecheckers_1.isNullOrEmptyString)(cachedToken)) { return cachedToken; } let { url, body, options } = _getGetSPFxClientAuthTokenParams(siteUrl, spfxTokenType); let response = (0, rest_1.GetJsonSync)(url, body, options); return _parseAndCacheGetSPFxClientAuthTokenResult(response.result, spfxTokenType); } catch { } return null; } exports.GetSPFxClientAuthTokenSync = GetSPFxClientAuthTokenSync; //# sourceMappingURL=common.js.map