@forestadmin/forestadmin-client
Version:
This package contains the logic to use the ForestAdmin API inside an agent.
83 lines • 6.51 kB
JavaScript
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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
;