UNPKG

@bitblit/ratchet-epsilon-common

Version:

Tiny adapter to simplify building API gateway Lambda APIS

60 lines 2.62 kB
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