Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/norjs/event-service
NorJS Event Service
https://github.com/norjs/event-service
events observer
Last synced: about 1 month ago
JSON representation
NorJS Event Service
- Host: GitHub
- URL: https://github.com/norjs/event-service
- Owner: norjs
- License: mit
- Created: 2019-03-29T16:32:10.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-30T17:35:52.000Z (about 2 years ago)
- Last Synced: 2024-03-24T09:40:37.458Z (10 months ago)
- Topics: events, observer
- Language: JavaScript
- Size: 138 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NorJS Event Service
This is a local service which passes on events to
[event servers](https://github.com/norjs/event-server) and
[observers](https://github.com/norjs/event).### Design
It is a NodeJS service which has one or more configured top level event servers.
Local observers can connect to it over a UNIX socket file.
Event must be triggered on only one top level server, unless the server is unavailable.
Communication between the service and a top level server is implemented using either a long
polling HTTP(S) connection (if the server cannot connect to the service directly) or direct
two-way HTTP(S)/UNIX-Socket connection (if connection is possible both ways).Communication between the service and observers is implemented over a UNIX socket file with
HTTP long polling.### Install
`npm install -g @norjs/event-service`
### Usage
#### Start a service on `./socket.sock`:
```
NODE_LISTEN=socket.sock \
nor-event-service
```#### Wait for an event:
```
if NODE_CONNECT=/path/to/socket.sock nor-event --wait=foo; then
echo Event happened
else
echo Timeout happened
fi
```#### Trigger an event:
```
NODE_CONNECT=/path/to/socket.sock nor-event --trigger=foo --payload='{"hello":"world"}'
```#### Start a service on `./socket.sock` with configured types:
```
NOR_EVENT_LOAD_TYPES='./types.js' \
NOR_EVENT_PAYLOAD_TYPES='{"my-resource:created": "MyResourceDTO"}' \
NODE_LISTEN=./socket.sock \
nor-event-service
```And define your types using JSDoc-style in a file named `./types.js`:
```js
const TypeUtils = require('@norjs/utils/Type');/**
* @typedef {Object} MyResourceDTO
* @property {number} id - My resource id
* @property {string} name - My resource name
* @property {boolean} deleted - Deleted or not?
* @property {Array.} items - My items
*/
TypeUtils.defineType(
"MyResourceDTO",
{
"id": "number",
"name": "string",
"deleted": "boolean",
"items": "Array."
}
);```
You can use this file from your own application. It also integrates to WebStorm's
quick documentation, too, since it is standard JavaScript and JSDoc.