@bitblit/ratchet-epsilon-common
Version:
Tiny adapter to simplify building API gateway Lambda APIS
60 lines • 2.62 kB
JavaScript
import { Logger } from '@bitblit/ratchet-common/logger/logger';
import { NotFoundError } from '../../http/error/not-found-error.js';
import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
export class DaemonHandler {
daemon;
inConfig;
static ALLOW_EVERYTHING_AUTHORIZER = async (_evt, _proc) => {
return true;
};
config;
constructor(daemon, inConfig) {
this.daemon = daemon;
this.inConfig = inConfig;
this.config = inConfig || {};
this.config.authorizer = this.config.authorizer || DaemonHandler.ALLOW_EVERYTHING_AUTHORIZER;
this.config.groupSelector = this.config.groupSelector || ((_evt) => Promise.resolve(daemon.defaultGroup));
this.config.fetchDaemonStatusByPublicTokenPathParameter =
StringRatchet.trimToNull(this.config.fetchDaemonStatusByPublicTokenPathParameter) || 'publicToken';
this.config.fetchDaemonStatusPathParameter = StringRatchet.trimToNull(this.config.fetchDaemonStatusPathParameter) || 'key';
}
async fetchDaemonStatusByPublicToken(evt) {
const publicToken = evt.pathParameters[this.config.fetchDaemonStatusByPublicTokenPathParameter];
Logger.info('Fetching daemon status for token: %s', publicToken);
let rval = await this.daemon.statFromPublicToken(publicToken);
const canRead = rval ? await this.config.authorizer(evt, rval) : false;
rval = canRead ? rval : null;
if (rval === null) {
throw new NotFoundError('No such token : ' + publicToken);
}
return rval;
}
async fetchDaemonStatus(evt) {
const daemonKey = evt.pathParameters[this.config.fetchDaemonStatusPathParameter];
Logger.info('Fetching daemon status for : %s', daemonKey);
let rval = await this.daemon.stat(daemonKey);
const canRead = rval ? await this.config.authorizer(evt, rval) : false;
rval = canRead ? rval : null;
if (rval === null) {
throw new NotFoundError('No such key : ' + daemonKey);
}
return rval;
}
async listDaemonStatus(evt) {
const group = await this.config.groupSelector(evt);
const keys = await this.daemon.list(group);
const allowed = [];
for (const kVal of keys) {
const canRead = await this.config.authorizer(evt, kVal);
if (canRead) {
allowed.push(kVal);
}
}
const rval = {
results: allowed,
nextToken: null,
};
return rval;
}
}
//# sourceMappingURL=daemon-handler.js.map