https://github.com/norjs/event-service
NorJS Event Service
https://github.com/norjs/event-service
events observer
Last synced: 3 months 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 (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-30T17:35:52.000Z (over 3 years ago)
- Last Synced: 2026-01-03T17:17:49.816Z (7 months ago)
- Topics: events, observer
- Language: JavaScript
- Size: 138 KB
- Stars: 1
- Watchers: 2
- 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.