UNPKG

secure-event-emitter

Version:

SecureEventEmitter is a tiny javascript package that uses restrict rules and mechanisms to build safer and protected event-driven architecture. It's similar to nodejs EventEmitter, but dictates stricter rules to prevent misuse.

212 lines (140 loc) 5.21 kB
# [Secure Event Emitter](https://secure-event-emitter.js.org) > You can find the full documentation on the <https://secure-event-emitter.js.org> **secure-event-emitter** is a tiny javascript package that uses restrict rules and mechanisms to build safer and protected event-driven architecture. It's similar to nodejs [EventEmitter](https://nodejs.org/api/events.html), but dictates stricter rules to prevent misuse. ## The Main Features - All event types must be **predefined**․ - Not possible to call the `emit()` method anywhere without the **emitterKey**. - Ability to **validate** emitted values․ ## Installation ```bash npm install secure-event-emitter ``` <br/> ## SecureEventEmitter SecureEventEmitter is the main constructor for creating emitter instances. #### Import ```js import {SecureEventEmitter} from 'secure-event-emitter' ``` #### Syntax #### `new SecureEventEmitter(eventTypes, emitterKey, validator?)` - **eventTypes** `<string[]>` An non-empty array of all event types. - **emitterKey** `<string>` | `<symbol>` Any string or symbol value without which we won't be able to call the `.emit()` method. - **validator** `<Function>` Function to validate the emitted values․ The function receives the emitted values in the argument and returns an error message if something is wrong there. #### Usage ```js import {SecureEventEmitter} from 'secure-event-emitter' const eventTypes = ['event-1', 'event-2'] const emitterKey = Symbol() const myEmitter = new SecureEventEmitter(eventTypes, emitterKey) myEmitter.on('event-1', (a, b) => { console.log(a, b) }) myEmitter.on('event-2', (x) => { console.log(x) }) myEmitter.unlock(emitterKey).emit('event-1', 2021, 2022) myEmitter.unlock(emitterKey).emit('event-2', 123) ``` <br/> ### Validator We can define a validator function to validate the emitted values. The function receives the emitted values in the argument and returns an error message if something is wrong there. #### Example This example defines a validator function that ensures that the emitter can emit only numbers. ```js const validator = (x) => { if (typeof x !== 'number') { return 'Can emit only numbers!' // error message } } ``` #### Usage ```js import {SecureEventEmitter} from 'secure-event-emitter' const eventTypes = ['event-1'] const emitterKey = Symbol() const validator = (x) => { if (typeof x !== 'number') { return 'Can emit only numbers!' // error message } } const myEmitter = new SecureEventEmitter(eventTypes, emitterKey, validator) myEmitter.on('event-1', (a) => { console.log(a) }) myEmitter.unlock(emitterKey).emit('event-1', 2021) myEmitter.unlock(emitterKey).emit('event-1', '2021') // TypeError: Can emit only numbers! ``` <br/> <br/> ## SingularEventEmitter **SingularEventEmitter** is a special case of **SecureEventEmitter** where each emitter is designed to trigger one type of event․ ### basic usage ```js import {SingularEventEmitter} from 'secure-event-emitter' // create emitterKey const emitterKey = Symbol('My Singular Emitter Key') // create onFoo instance const onFoo = new SingularEventEmitter( emitterKey // emitter key is an any Symbol type value ) // add listeners onFoo.on((a) => { // ... }) onFoo.on((a) => { // ... }) onFoo.unlock(emitterKey).emit(2021) onFoo.unlock(emitterKey).emit(2022) ``` ## Payload **Payload** is a class with which we can create objects that meet certain standards ### basic usage ```js import {Payload} from 'secure-event-emitter' // first argument is an origin, can be only symbol type and required const payload_1 = new Payload(Symbol('My Origin 1'), 1, 2, 3) // { // origin: Symbol('My Origin 1'), // args: [1, 2, 3], // meta: { // date: 545125412152, // _index: 1 // } // } const payload_2 = new Payload(Symbol('My Origin 2'), 'a', 'b') // { // origin: Symbol('My Origin 2'), // args: [1, 2, 3], // meta: { // date: 54512541999, // _index: 1 // } // } ``` ## useListener **useListener** is a helper hook for use emitter in react component ### basic usage ```js import {useListener} from 'secure-event-emitter/react' // ... // ... useListener(emitter, 'event-type', () => { // ... }) // ... // ... ``` ## [Contributing](https://github.com/ruben-arushanyan/secure-event-emitter/blob/master/CONTRIBUTING.md) Read our [contributing guide](https://github.com/ruben-arushanyan/secure-event-emitter/blob/master/CONTRIBUTING.md) to learn about our development process. ## [Code of Conduct](https://github.com/ruben-arushanyan/secure-event-emitter/blob/master/CODE_OF_CONDUCT.md) This project has adopted the [Contributor Covenant](https://www.contributor-covenant.org) as its Code of Conduct, and we expect project participants to adhere to it. Please read the [full text](https://github.com/ruben-arushanyan/secure-event-emitter/blob/master/CODE_OF_CONDUCT.md) so that you can understand what actions will and will not be tolerated. ## Authors - [Ruben Arushanyan](https://github.com/ruben-arushanyan) ## License [MIT](https://github.com/ruben-arushanyan/secure-event-emitter/blob/master/LICENSE)