UNPKG

@arcblock/did-auth

Version:

Helper function to setup DID authentication support on a node.js web server

50 lines (41 loc) 1.56 kB
const { EventEmitter } = require('events'); const omit = require('lodash/omit'); const { PROTECTED_KEYS } = require('../protocol'); class BaseHandler extends EventEmitter { /** * Creates an instance of DID Auth Handlers. * * @class * @param {object} config * @param {function} config.pathTransformer - function to transform path when generate action; * @param {object} config.tokenStorage - function to generate action token * @param {object} config.authenticator - Authenticator instance that can to jwt sign/verify * @param {function} [config.onConnect=noop] - function called when wallet selected did */ constructor({ pathTransformer, tokenStorage, authenticator, onConnect }) { super(); this.authenticator = authenticator; this.tokenStorage = tokenStorage; // Handle events from Auth Token Storage this.tokenStorage.on('create', (data) => this.emit('created', data)); this.tokenStorage.on('destroy', (token) => this.emit('deleted', { token })); this.tokenStorage.on('update', async (data) => { if (!data) { return; } const payload = await this.tokenStorage.read(data.token); this.emit('updated', omit(payload, PROTECTED_KEYS)); }); if (typeof pathTransformer === 'function') { this.pathTransformer = pathTransformer; } else { this.pathTransformer = (v) => v; } if (typeof onConnect === 'function') { this.onConnect = onConnect; } else { this.onConnect = () => {}; } } } module.exports = BaseHandler;