diff --git a/index.d.ts b/index.d.ts index 78aa0b5..7ee64f7 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,14 +1,15 @@ /// /// +// Expose classes export class Position { constructor(commitPosition: number|Long, preparePosition: number|Long); readonly commitPosition: Long; readonly preparePosition: Long; + static readonly start: number; + static readonly end: number; } -// Expose classes - export class UserCredentials { constructor(username: string, password: string); readonly username: string; @@ -35,6 +36,57 @@ export class GossipSeed { readonly hostHeader: string; } +export interface ProjectionDetails { + readonly coreProcessingTime: number, + readonly version: number, + readonly epoch: number, + readonly effectiveName: string, + readonly writesInProgress: number, + readonly readsInProgress: number, + readonly partitionsCached: number, + readonly status: string, + readonly stateReason: string, + readonly name: string, + readonly mode: string, + readonly position: string, + readonly progress: number, + readonly lastCheckpoint: string, + readonly eventsProcessedAfterRestart: number, + readonly statusUrl: string, + readonly stateUrl: string, + readonly resultUrl: string, + readonly queryUrl: string, + readonly enableCommandUrl: string, + readonly disableCommandUrl: string, + readonly checkpointStatus: string, + readonly bufferedEvents: number, + readonly writePendingEventsBeforeCheckpoint: number, + readonly writePendingEventsAfterCheckpoint: number +} + +export class ProjectionsManager { + constructor(log: Logger, httpEndPoint: string, operationTimeout: number); + enable(name: string, userCredentials: UserCredentials): Promise; + disable(name: string, userCredentials: UserCredentials): Promise; + abort(name: string, userCredentials: UserCredentials): Promise; + createOneTime(query: string, userCredentials: UserCredentials): Promise; + createTransient(name: string, query: string, userCredentials: UserCredentials): Promise; + createContinuous(name: string, query: string, trackEmittedStreams: boolean, userCredentials: UserCredentials): Promise; + listAll(userCredentials: UserCredentials): Promise; + listOneTime(userCredentials: UserCredentials): Promise; + listContinuous(userCredentials: UserCredentials): Promise; + getStatus(name: string, userCredentials: UserCredentials): Promise; + getState(name: string, userCredentials: UserCredentials): Promise; + getPartitionState(name: string, partitionId: string, userCredentials: UserCredentials): Promise; + getResult(name: string, userCredentials: UserCredentials): Promise; + getPartitionResult(name: string, partitionId: string, userCredentials: UserCredentials): Promise; + getStatistics(name: string, userCredentials: UserCredentials): Promise; + getQuery(name: string, userCredentials: UserCredentials): Promise; + getState(name: string, userCredentials: UserCredentials): Promise; + updateQuery(name: string, query: string, userCredentials: UserCredentials): Promise; + deleteQuery(name: string, deleteEmittedStreams: boolean, userCredentials: UserCredentials): Promise; +} + // Expose errors export class WrongExpectedVersionError { readonly name: string; @@ -59,8 +111,12 @@ export class AccessDeniedError { readonly transactionId?: Long; } -// Expose enums/constants +export class ProjectionCommandFailedError { + readonly httpStatusCode: number; + readonly message: string; +} +// Expose enums/constants export namespace expectedVersion { const any: number; const noStream: number; @@ -72,12 +128,17 @@ export namespace positions { const end: Position; } +export namespace streamPosition { + const start: number; + const end: number; +} + +//TODO // systemMetadata // eventReadStatus // sliceReadStatus // Expose loggers - export interface Logger { debug(fmt: string, ...args: any[]): void; info(fmt: string, ...args: any[]): void; @@ -228,12 +289,12 @@ export interface TcpEndPoint { } export interface HeartbeatInfo { - connectionId: string; - remoteEndPoint: TcpEndPoint; - requestSentAt: number; - requestPkgNumber: number; - responseReceivedAt: number; - responsePkgNumber: number; + readonly connectionId: string; + readonly remoteEndPoint: TcpEndPoint; + readonly requestSentAt: number; + readonly requestPkgNumber: number; + readonly responseReceivedAt: number; + readonly responsePkgNumber: number; } export interface EventData { @@ -277,7 +338,6 @@ export interface EventStoreNodeConnection { } // Expose helper functions - export interface ConnectionSettings { log?: Logger, verboseLogging?: boolean, @@ -310,58 +370,7 @@ export interface ConnectionSettings { gossipTimeout?: number } +// Expose Helper functions export function createConnection(settings: ConnectionSettings, endPointOrGossipSeed: string | TcpEndPoint | GossipSeed[], connectionName?: string): EventStoreNodeConnection; export function createJsonEventData(eventId: string, event: any, metadata?: any, type?: string): EventData; export function createEventData(eventId: string, type: string, isJson: boolean, data: Buffer, metadata?: Buffer): EventData; - -// Projections -export interface ProjectionDetails { - coreProcessingTime: number, - version: number, - epoch: number, - effectiveName: string, - writesInProgress: number, - readsInProgress: number, - partitionsCached: number, - status: string, - stateReason: string, - name: string, - mode: string, - position: string, - progress: number, - lastCheckpoint: string, - eventsProcessedAfterRestart: number, - statusUrl: string, - stateUrl: string, - resultUrl: string, - queryUrl: string, - enableCommandUrl: string, - disableCommandUrl: string, - checkpointStatus: string, - bufferedEvents: number, - writePendingEventsBeforeCheckpoint: number, - writePendingEventsAfterCheckpoint: number -} - -export class ProjectionsManager { - constructor(log: Logger, httpEndPoint: string, operationTimeout: number); - enable(name: string, userCredentials: UserCredentials): Promise; - disable(name: string, userCredentials: UserCredentials): Promise; - abort(name: string, userCredentials: UserCredentials): Promise; - createOneTime(query: string, userCredentials: UserCredentials): Promise; - createTransient(name: string, query: string, userCredentials: UserCredentials): Promise; - createContinuous(name: string, query: string, trackEmittedStreams: boolean, userCredentials: UserCredentials): Promise; - listAll(userCredentials: UserCredentials): Promise; - listOneTime(userCredentials: UserCredentials): Promise; - listContinuous(userCredentials: UserCredentials): Promise; - getStatus(name: string, userCredentials: UserCredentials): Promise; - getState(name: string, userCredentials: UserCredentials): Promise; - getPartitionState(name: string, partitionId: string, userCredentials: UserCredentials): Promise; - getResult(name: string, userCredentials: UserCredentials): Promise; - getPartitionResult(name: string, partitionId: string, userCredentials: UserCredentials): Promise; - getStatistics(name: string, userCredentials: UserCredentials): Promise; - getQuery(name: string, userCredentials: UserCredentials): Promise; - getState(name: string, userCredentials: UserCredentials): Promise; - updateQuery(name: string, query: string, userCredentials: UserCredentials): Promise; - deleteQuery(name: string, deleteEmittedStreams: boolean, userCredentials: UserCredentials): Promise; -} diff --git a/package.json b/package.json index d46c824..692885f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-eventstore-client", - "version": "0.2.1", + "version": "0.2.2", "description": "A port of the EventStore .Net ClientAPI to Node.js", "main": "index.js", "types": "index.d.ts", diff --git a/src/client.js b/src/client.js index a79f797..7ca9d09 100644 --- a/src/client.js +++ b/src/client.js @@ -4,15 +4,23 @@ var results = require('./results'); const expectedVersion = { any: -2, noStream: -1, - emptyStream: -1 + emptyStream: -1, + streamExists: -4 }; Object.freeze(expectedVersion); + const positions = { start: new results.Position(0, 0), end: new results.Position(-1, -1) }; Object.freeze(positions); +const streamPosition = { + start: 0, + end: -1 +}; +Object.freeze(streamPosition); + /** * Create an EventData object from JavaScript event/metadata that will be serialized as json * @public @@ -60,6 +68,7 @@ module.exports.ProjectionCommandFailedError = require('./errors/projectionComman // Expose enums/constants module.exports.expectedVersion = expectedVersion; module.exports.positions = positions; +module.exports.streamPosition = streamPosition; module.exports.systemMetadata = require('./common/systemMetadata'); module.exports.eventReadStatus = results.EventReadStatus; module.exports.sliceReadStatus = require('./sliceReadStatus'); diff --git a/src/results.js b/src/results.js index a5e5f10..649eb2e 100644 --- a/src/results.js +++ b/src/results.js @@ -30,6 +30,8 @@ Position.prototype.toString = function() { return [this.commitPosition.toString(), this.preparePosition.toString()].join("/"); }; +Position.start = new Position(0,0); +Position.end = new Position(-1,-1); const EventReadStatus = { Success: 'success',