vtex
Version:
The platform for e-commerce apps
78 lines (77 loc) • 3.63 kB
JavaScript
;
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';