@kwiz/common
Version:
KWIZ common utilities and helpers for M365 platform
115 lines • 4.94 kB
JavaScript
;
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