GetEventStore client wrapper using promises
npm install geteventstore-promise
In your Node.js application:
> const EventStore = require('geteventstore-promise');
``javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
`
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
protocol: 'https',
hostname: 'localhost',
port: 2113,
validateServer: true, //defaults to true when protocol is https, set to false when using self-signed certs`
credentials: {
username: 'admin',
password: 'changeit'
}
});
Returns events from a given stream.
##### streamName
The name of the stream to read from.
##### startPosition (optional)
If specified, the stream will be read starting at event number startPosition, otherwise 0
'head' will start reading from the back of the stream, if direction is specified as 'backward'
##### count (optional)
The number of events to be read, defaults to 1000, max of 4096
##### direction (optional)
The direction to the read the stream. Can be either 'forward' or 'backward'. Defaults to 'forward'.
##### resolveLinkTos (optional)
Resolve linked events. Defaults to true
##### embed (optional)
Resolve linked events. Options: 'body' and 'rich'. Defaults to body
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
// defaults for getEvents if not specified
const events = await client.getEvents('TestStream', 0, 1000, 'forward')
`
---
Returns all events from a given stream.
##### streamName
The name of the stream to read from.
##### chunkSize (optional)
The amount of events to read in each call to Event Store, defaults to 1000,
##### startPosition (optional)
If specified, the stream will be read starting at event number startPosition, otherwise 0
##### resolveLinkTos (optional)
Resolve linked events. Defaults to true
##### embed (optional)
Resolve linked events. Options: 'body' and 'rich'. Defaults to body
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
const allStreamEvents = await client.getAllStreamEvents('TestStream');
`
Returns read metadata and events from a given stream.
##### streamName
The name of the stream to read from.
##### startPosition (optional)
If specified, the stream will be read starting at event number startPosition, otherwise 0
'head' will start reading from the back of the stream, if direction is specified as 'backward'
##### count (optional)
The number of events to be read, defaults to 1000, max of 4096
##### resolveLinkTos (optional)
Resolve linked events. Defaults to true
##### embed (optional)
Resolve linked events. Options: 'body' and 'rich'. Defaults to body
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
// defaults for readEventsForward if not specified
const readResult = await client.readEventsForward('TestStream', 0, 1000)
`
Returns read metadata and events from a given stream.
##### streamName
The name of the stream to read from.
##### startPosition (optional)
If specified, the stream will be read starting at event number startPosition, otherwise 0
'head' will start reading from the back of the stream, if direction is specified as 'backward'
##### count (optional)
The number of events to be read, defaults to 1000, max of 4096
##### resolveLinkTos (optional)
Resolve linked events. Defaults to true
##### embed (optional)
Resolve linked events. Options: 'body' and 'rich'. Defaults to body
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
// defaults for readEventsBackward if not specified
const readResult = await client.readEventsBackward('TestStream', 0, 1000)
`
---
Writes a single event of a specific type to a stream.
##### streamName
The name of the stream to read from.
##### eventType
The type of event to save. Any string value is accepted.
##### data
The data to be contained in the event as a JSON object.
##### metaData (optional)
Any MetaData to be saved in the event as a JSON object.
##### options (optional)
Any options to be specified (as documented in GetEvent Store documentation). Default is simply ExpectedVersion = -2.
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const { v4: generateEventId } = require('uuid');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
await client.writeEvent('TestStream-' + generateEventId(), 'TestEventType', { something: '123' });
const events = await client.getEvents(testStream);
`
---
Writes an array of Event Store ready events to a stream.
##### streamName
The name of the stream to read from.
##### events
The array of Event Store ready events to save.
You can call `new EventStore.EventFactory().newEvent('TestType', {something: 123});` to get an Event Store ready event.
##### options (optional)
Any options to be specified (as documented in GetEvent Store documentation). Default is simply ExpectedVersion = -2.
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const { v4: generateEventId } = require('uuid');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
const events = [new EventStore.EventFactory().newEvent('TestEventType', { something: '456'})];
await client.writeEvents('TestStream-' + generateEventId(), events);
const events = await client.getEvents(testStream);
`
---
Check if a stream exists, returns true or false.
##### streamName
The name of the stream to check.
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
const exists = await client.checkStreamExists('ExistingProjectionStreamName');
`
---
Deletes a stream, fails the promise if stream does not exist.
##### streamName
The name of the stream to delete.
##### hardDelete
Hard delete the stream, defaults to false
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
try {
await client.delete('ExistingStreamName');
} catch(err) {
// should only happen if something went wrong or the stream does not exist
console.log(err);
}
`
---
Performs Ping command, rejects promise if unsuccessful
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
await client.ping();
`
---
* assert(subscriptionName, streamName, options)
* getEvents(subscriptionName, streamName, count, embed)
* getSubscriptionInfo(subscriptionName, streamName)
* getStreamSubscriptionsInfo(streamName)
* getAllSubscriptionsInfo()
* remove(subscriptionName, streamName)
#### subscriptionName
The name of the subscription group
#### streamName
The stream name
#### options(optional)
The mode of the projection to create, defaults to 'continuous'
##### resolveLinkTos
Tells the subscription to resolve link events.
##### startFrom
Start the subscription from the position-th event in the stream.
##### extraStatistics
Tells the backend to measure timings on the clients so statistics will contain histograms of them.
##### checkPointAfterMilliseconds
The amount of time the system should try to checkpoint after.
##### liveBufferSize
The size of the live buffer (in memory) before resorting to paging.
##### readBatchSize
The size of the read batch when in paging mode.
##### bufferSize
The number of messages that should be buffered when in paging mode.
##### maxCheckPointCount
The maximum number of messages not checkpointed before forcing a checkpoint.
##### maxRetryCount
Sets the number of times a message should be retried before being considered a bad message.
##### maxSubscriberCount
Sets the maximum number of allowed subscribers
##### messageTimeoutMilliseconds
Sets the timeout for a client before the message will be retried.
##### minCheckPointCount
The minimum number of messages to write a checkpoint for.
##### namedConsumerStrategy
RoundRobin/DispatchToSingle/Pinned
#### subscriptionName
The name of the subscription group
#### streamName
The stream name
#### count (optional)
Number of events to return(defaults to 1)
#### embed (optional)
None, Content, Rich, Body, PrettyBody, TryHarder(defaults to 'Body')
#### subscriptionName
The name of the subscription group
#### streamName
The stream name
#### streamName
The stream name
---
* start(projectionName)
#### projectionName
The name of the projection
* stop(projectionName)
#### projectionName
The name of the projection
* reset(projectionName)
#### projectionName
The name of the projection
* remove(projectionName)
#### projectionName
The name of the projection
* config(projectionName)
#### projectionName
The name of the projection
* getState(projectionName, options)
#### projectionName
The name of the projection
#### options
Object, partition used to specify the partition to query the state with. e.g. { partition: 1 }
* getInfo(projectionName, includeConfig)
#### projectionName
The name of the projection
#### includeConfig
Specify if we want to include the projection config in the projection info result set
* enableAll()
* disableAll()
* getAllProjectionsInfo()
* assert(projectionName, projectionContent, mode, enabled, checkpointsEnabled, emitEnabled, trackEmittedStreams)
#### projectionName
The name of the projection
#### projectionContent
The content of the projection
#### mode(optional)
The mode of the projection to create, defaults to 'continuous'
#### enabled(optional)
Projection enabled by default, defaults to true
#### checkpointsEnabled(optional)
Should enable checkpoints, defaults to true for continuous projections and false for onetime projections
#### emitEnabled(optional)
Should enable emitting, defaults to false
#### trackEmittedStreams(optional)
Should track the emitted streams (tracking emitted streams enables you to delete a projection and all the streams that it has created), defaults to false
Returns the state of the Projection as a JSON object.
##### projectionName
The name of the projection to get state of.
##### options(optional)
##### partition
The name of the partition to retrieve.
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
const projectionState = await client.projections.getState('TestProjection');
`
---
Sends scavenge command to Event Store.
If the promise is fulfilled then the scavenge command has been sent, it does not guarantee that the scavenge will be successful.
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
await client.admin.scavenge();
console.log('Scavenge command sent!');
`
---
Sends shutdown command to Event Store.
If the promise is fulfilled then the shutdown command has been sent, it does not guarantee that the shutdown will be successful.
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.HTTPClient({
hostname: 'localhost',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
await client.admin.shutdown();
console.log('Shutdown command sent!');
`
---
Uses the node-eventstore-client as authored by nicdex
Github: https://github.com/nicdex/node-eventstore-client
`javascript`
const client = new EventStore.TCPClient({
hostname: 'localhost',
port: 1113,
credentials: {
username: 'admin',
password: 'changeit'
},
poolOptions: {
min: 0,
max: 10
}
});
`javascripttrue
const client = new EventStore.TCPClient({
hostname: 'localhost',
port: 1113,
useSslConnection: true,
validateServer: true, //defaults to when useSslConnection is true, set to false when using self-signed certs`
credentials: {
username: 'admin',
password: 'changeit'
},
poolOptions: {
min: 0,
max: 10
}
});
`javascript
const { v4: generateId } = require('uuid');
const client = new EventStore.TCPClient({
hostname: 'localhost',
port: 1113,
credentials: {
username: 'admin',
password: 'changeit'
},
poolOptions: {
min: 0,
max: 10
},
connectionNameGenerator: () => APP_NAME_${generateId()}`
});
`javascript`
const client = new EventStore.TCPClient({
gossipSeeds: [
{ hostname: '192.168.0.10', port: 2113 },
{ hostname: '192.168.0.11', port: 2113 },
{ hostname: '192.168.0.12', port: 2113 }
],
credentials: {
username: 'admin',
password: 'changeit'
},
poolOptions: {
min: 0,
max: 10
}
});
`javascript`
const client = new EventStore.TCPClient({
protocol: 'discover',
hostname: 'my.host',
port: 2113,
credentials: {
username: 'admin',
password: 'changeit'
},
poolOptions: {
min: 0,
max: 10
}
});
* getEvents(streamName, startPosition, count, direction, resolveLinkTos)
* readEventsForward(streamName, startPosition, count, resolveLinkTos)
* readEventsBackward(streamName, startPosition, count, resolveLinkTos)
* writeEvent(streamName, eventType, data, metaData, options)
* writeEvents(streamName, events, options)
* deleteStream(streamName, hardDelete)
Returns all events from a given stream by Event Types.
##### streamName
The name of the stream to read from.
##### eventTypes
An array of event types to filter by.
##### startPosition (optional)
If specified, the stream will be read starting at event number startPosition, otherwise 0
##### count (optional)
The number of events to be read, defaults to 1000, max of 4096
##### direction (optional)
The direction to the read the stream. Can be either 'forward' or 'backward'. Defaults to 'forward'.
##### resolveLinkTos (optional)
Resolve linked events. Defaults to true
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.TCPClient({
hostname: 'localhost',
port: 1113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
const eventsByType = await client.getEventsByType('TestStream', ['TestType']);
`
---
Returns all events from a given stream.
##### streamName
The name of the stream to read from.
##### chunkSize (optional)
The amount of events to read in each call to Event Store, defaults to 1000,
##### startPosition (optional)
If specified, the stream will be read starting at event number startPosition, otherwise 0
##### resolveLinkTos (optional)
Resolve linked events. Defaults to true
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.TCPClient({
hostname: 'localhost',
port: 1113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
const allStreamEvents = await client.getAllStreamEvents('TestStream');
`
---
Subscribes to a Stream (live subscription)
##### streamName
The name of the stream to read from.
##### onEventAppeared (optional)
function
##### onDropped
function
##### resolveLinkTos
Resolve linked events
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.TCPClient({
hostname: 'localhost',
port: 1113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
function onEventAppeared(subscription, ev) {
processedEventCount++;
return;
};
function onDropped(subscription, reason, error) {
};
await client.subscribeToStream('TestStream', onEventAppeared, onDropped, false);
`
---
Subscribes to a Stream from a given event number (Catch up Subscription)
##### streamName
The name of the stream to read from.
##### fromEventNumber
The event number to subscribe from
##### onEventAppeared (optional)
function
##### onLiveProcessingStarted
function
##### onDropped
function
##### settings
resolveLinkTos - Whether or not to resolve link events
maxLiveQueueSize - The max amount to buffer when processing from live subscription
readBatchSize - The number of events to read per batch when reading history
debug - in debug mode(true/false)
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.TCPClient({
hostname: 'localhost',
port: 1113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
let processedEventCount = 0;
function onEventAppeared(subscription, ev) {
processedEventCount++;
return;
};
function onLiveProcessingStarted() {
return;
}
function onDropped(subscription, reason, error) {
};
await client.subscribeToStreamFrom('TestStream', 0, onEventAppeared, onLiveProcessingStarted,onDropped);
`
---
Returns an events enumerator on which events can be iterated.
##### streamName
The name of the stream to read from.
##### direction (optional)
The direction to the read the stream. Can be either 'forward' or 'backward'. Defaults to 'forward'.
##### resolveLinkTos (optional)
Resolve linked events. Defaults to true
* next(batchSize)
* previous(batchSize)
* first(batchSize)
* last(batchSize)
##### batchSize
The number of events to read per enumeration.
#### Example
`javascript
const EventStore = require('geteventstore-promise');
const client = new EventStore.TCPClient({
hostname: 'localhost',
port: 1113,
credentials: {
username: 'admin',
password: 'changeit'
}
});
const streamName = 'TestStream';
const enumerator = client.eventEnumerator(streamName);
const result = await enumerator.next(20);
//result
// {
// isEndOfStream: true/false,
// events: [ ..., ..., ... ]
// }
``
---