@arcblock/did-auth
Version:
Helper function to setup DID authentication support on a node.js web server
50 lines (41 loc) • 1.56 kB
JavaScript
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;