UNPKG

vtex

Version:

The platform for e-commerce apps

78 lines (77 loc) 3.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VTEXID = exports.RefreshFailedError = void 0; const tslib_1 = require("tslib"); const api_1 = require("@vtex/api"); const querystring_1 = tslib_1.__importDefault(require("querystring")); const set_cookie_parser_1 = require("set-cookie-parser"); const storeUrl_1 = require("../../../storeUrl"); const IOClientFactory_1 = require("../IOClientFactory"); const featureFlagDecider_1 = require("../../../../modules/featureFlag/featureFlagDecider"); class RefreshFailedError extends Error { } exports.RefreshFailedError = RefreshFailedError; class VTEXID extends api_1.IOClient { static createClient(customContext = {}, customOptions = {}) { return IOClientFactory_1.IOClientFactory.createClient(VTEXID, customContext, customOptions, { requireAuth: false }); } static async invalidateBrowserAuthCookie(account) { return (0, featureFlagDecider_1.switchOpen)((0, storeUrl_1.storeUrl)({ account, addWorkspace: false, path: `${VTEXID.API_PATH_PREFIX}/pub/single-sign-out?scope=` }), { wait: false }); } constructor(ioContext, opts) { super(ioContext, { timeout: VTEXID.DEFAULT_TIMEOUT, retries: VTEXID.DEFAULT_RETRIES, ...opts, baseURL: `https://${ioContext.account}.myvtex.com`, }); } startToolbeltLogin({ secretHash, loopbackUrl }) { const body = querystring_1.default.stringify({ secretHash, loopbackUrl, }); return this.http.post(`${VTEXID.TOOLBELT_API_PATH_PREFIX}/start`, body); } validateToolbeltLogin({ state, secret, ott }) { const body = querystring_1.default.stringify({ state, secret, ott, }); return this.http.post(`${VTEXID.TOOLBELT_API_PATH_PREFIX}/validate`, body); } async refreshToken(refreshToken) { var _a, _b; const { data, headers } = await this.http.postRaw(`${VTEXID.API_PATH_PREFIX}/refreshtoken/admin`, null, { headers: { Cookie: `${VTEXID.VTEX_ID_REFRESH_TOKEN_COOKIE}=${refreshToken}`, }, }); if (data.status !== 'Success') { throw new RefreshFailedError(`Failed to refresh: status ${data.status}.`); } const setCookieHeader = headers['set-cookie']; const cookieMap = (0, set_cookie_parser_1.parseSetCookie)(setCookieHeader !== null && setCookieHeader !== void 0 ? setCookieHeader : [], { map: true }); const token = (_a = cookieMap[VTEXID.VTEX_ID_AUTH_COOKIE]) === null || _a === void 0 ? void 0 : _a.value; const newRefreshToken = (_b = cookieMap[VTEXID.VTEX_ID_REFRESH_TOKEN_COOKIE]) === null || _b === void 0 ? void 0 : _b.value; if (token == null || newRefreshToken == null || token === '' || newRefreshToken === '') { throw new RefreshFailedError('Failed to refresh: Set-Cookie headers did not include both VtexIdclientAutCookie and vid_rt cookies.'); } return { token, refreshToken: newRefreshToken }; } invalidateToolbeltToken(token) { return this.http.get(`/api/vtexid/pub/logout?scope=`, { headers: { Cookie: `${VTEXID.VTEX_ID_AUTH_COOKIE}=${token}`, }, }); } } exports.VTEXID = VTEXID; VTEXID.DEFAULT_TIMEOUT = 10000; VTEXID.DEFAULT_RETRIES = 2; VTEXID.API_PATH_PREFIX = '/api/vtexid'; VTEXID.TOOLBELT_API_PATH_PREFIX = `${VTEXID.API_PATH_PREFIX}/toolbelt`; VTEXID.VTEX_ID_AUTH_COOKIE = 'VtexIdclientAutCookie'; VTEXID.VTEX_ID_REFRESH_TOKEN_COOKIE = 'vid_rt';