UNPKG

@jorsek/ezd-client

Version:
144 lines 6.39 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const axios_1 = require("axios"); const rateLimit = require("axios-rate-limit"); const nookies_1 = require("nookies"); require("reflect-metadata"); const auth_1 = require("./browser_auth/auth"); const Config_1 = require("./Config"); const Content_1 = require("./resources/Content"); const Contribute_1 = require("./resources/Contribute"); const Search_1 = require("./resources/Search"); const EZD_CLIENT_VERSION = "0.1.0"; const API_VERSION = "v1"; class Client { constructor(args) { const { org, token, rootMapId, timeout = 3000, scheme = "https://", hostname = "content.easydita.com", env = "latest", content_root = "content", interceptors = [], rateLimit: rateLimitConfig = { maxRPS: 5, maxRequests: 2 } } = args; this.initial_args = args; if (!org) { throw new Error("easyDITA org not set"); } if (!token) { throw new Error("easyDITA token not set"); } if (!rootMapId) { throw new Error("easyDITA rootMapId not set"); } this.base_url = `${scheme}${hostname}/org/${org}/env/${env}/map/${rootMapId}/`; this.content_service_token = token; const config = { baseURL: this.base_url, timeout, // withCredentials: true, headers: { // "X-EZD-Client": "JS/" + EZD_CLIENT_VERSION, }, }; this.content_axios = rateLimit(axios_1.default.create(config), rateLimitConfig); this.content_axios.interceptors.request.use(intercepted_config => { if (!intercepted_config.params) { intercepted_config.params = {}; } // intercepted_config.headers["Content-Type"] = "application/text"; intercepted_config.params.token = this.user_token() ? this.user_token() : this.content_service_token; intercepted_config.params.link_root = content_root; return intercepted_config; }); interceptors.forEach(interceptor => interceptor(this.content_axios)); this.contribute_axios = axios_1.default.create(config); this.contribute_axios.interceptors.request.use(intercepted_config => { if (!intercepted_config.params) { intercepted_config.params = {}; } intercepted_config.params.rootMapId = rootMapId; intercepted_config.params.token = this.user_token(); return intercepted_config; }); const portal_config = new Config_1.Config(this.content_axios); this.content = new Content_1.Content({ axios: this.content_axios, config: portal_config }); this.search = new Search_1.Search({ axios: this.content_axios, rootMapId, config: portal_config }); this.contribute = new Contribute_1.Contribute({ axios: this.contribute_axios, config: portal_config }); } iframe_url() { let s = this.base_url; s = s.replace("https://", ""); s = s.replace("http://", ""); return s; } user_token() { if (typeof window !== "undefined") { return auth_1.getUserTokens().idToken; } else { return null; } } login() { return __awaiter(this, void 0, void 0, function* () { // create an ezd session so the editor will load without asking user to login first const response = yield this.content_axios.post("/auth"); }); } prepare(args) { return __awaiter(this, void 0, void 0, function* () { const redirect_path = args.req ? `${args.req.protocol}://${args.req.get("host")}${args.req.path}` : `${window.location.protocol}//${window.location.host}${window.location.pathname}`; const cookies = args.req ? args.req.cookies : nookies_1.parseCookies(); const token = (args.req && args.req.query.portal_auth_token) || (cookies && cookies.portal_auth_token); // Make sure to keep this order -- query param overrides cookie const requireLogin = () => { const destination = `${this.initial_args.loginRedirect}?redirect_to=${encodeURI(redirect_path)}`; if (args.res) { return args.res.redirect(destination); } else { window.location.href = destination; return; } }; if (!token) { if (this.initial_args.loginRequired) { return requireLogin(); } else { return this; } } try { const client = new Client(Object.assign({}, this.initial_args, { token })); yield client.content.getSections(); if (args.req && args.req.query.portal_auth_token) { args.res.cookie("portal_auth_token", args.req.query.portal_auth_token, { path: "/", domain: args.req.hostname }); } return client; } catch (e) { if (e.response && e.response.status === 403) { if (args.res) { args.res.clearCookie("portal_auth_token"); } if (this.initial_args.loginRedirect) { return requireLogin(); } return new Client(this.initial_args); } else { throw e; } } }); } } exports.default = Client; //# sourceMappingURL=Client.js.map