UNPKG

@forestadmin/forestadmin-client

Version:

This package contains the logic to use the ForestAdmin API inside an agent.

83 lines 6.51 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const openid_client_1 = require("openid-client"); const errors_1 = require("./errors"); const server_1 = __importDefault(require("../utils/server")); class AuthService { constructor(options) { this.options = options; } /** * Initialize the authentication client upfront. This speeds up the first * authentication request. */ async init() { try { await this.createClient(); } catch (e) { // Sometimes the authentication client can't be initialized because of a // server or network error. We don't want the application to crash. this.options.logger('Warn', `Error while registering the authentication client. Authentication might not work: ${e.message}`); } } async getUserInfo(renderingId, accessToken) { const url = `/liana/v2/renderings/${renderingId}/authorization`; const headers = { 'forest-token': accessToken }; // eslint-disable-next-line @typescript-eslint/no-explicit-any const response = await server_1.default.query(this.options, 'get', url, headers); return { id: Number(response.data.id), email: response.data.attributes.email, firstName: response.data.attributes.first_name, lastName: response.data.attributes.last_name, team: response.data.attributes.teams[0], role: response.data.attributes.role, permissionLevel: response.data.attributes.permission_level, renderingId, tags: response.data.attributes.tags?.reduce((memo, { key, value }) => ({ ...memo, [key]: value }), {}), }; } async generateAuthorizationUrl({ scope, state, }) { await this.createClient(); return this.client.authorizationUrl({ scope, state, }); } async generateTokens({ query, state, }) { await this.createClient(); try { const tokens = await this.client.callback(undefined, query, { state }); return { accessToken: tokens.access_token, }; } catch (e) { this.handleError(e); } } async createClient() { if (this.client) return; // We can't use async 'Issuer.discover' because the oidc config is behind an auth-wall. const url = '/oidc/.well-known/openid-configuration'; const config = await server_1.default.query(this.options, 'get', url); const issuer = new openid_client_1.Issuer(config); const registration = { token_endpoint_auth_method: 'none' }; this.client = await issuer.Client.register(registration, { initialAccessToken: this.options.envSecret, }); } handleError(e) { if (e instanceof openid_client_1.errors.OPError) { throw new errors_1.AuthenticationError(e); } throw e; } } exports.default = AuthService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUE2RjtBQUc3RixxQ0FBK0M7QUFJL0MsNkRBQTBDO0FBRTFDLE1BQXFCLFdBQVc7SUFHOUIsWUFBb0IsT0FBNkM7UUFBN0MsWUFBTyxHQUFQLE9BQU8sQ0FBc0M7SUFBRyxDQUFDO0lBRXJFOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSTtZQUNGLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzNCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVix3RUFBd0U7WUFDeEUsbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNqQixNQUFNLEVBQ04scUZBQXFGLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FDakcsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBbUIsRUFBRSxXQUFtQjtRQUMvRCxNQUFNLEdBQUcsR0FBRyx3QkFBd0IsV0FBVyxnQkFBZ0IsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUVoRCw4REFBOEQ7UUFDOUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBVyxDQUFDLEtBQUssQ0FBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakYsT0FBTztZQUNMLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7WUFDckMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVU7WUFDOUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJ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