node-eventstore-client/src/clientOperations/readStreamEventsBackwardOperation.js
Nicolas Dextraze 5059892bc0 fix docker-compose files to work with 21.10
fixes to match TCP protocol of 21.10
fixes so that we can gossip on SSL
2022-10-22 20:07:01 -04:00

80 lines
3.3 KiB
JavaScript

var util = require('util');
var TcpCommand = require('../systemData/tcpCommand');
var ClientMessage = require('../messages/clientMessage');
var ReadDirection = require('../readDirection');
var StatusCode = require('../systemData/statusCode');
var InspectionResult = require('./../systemData/inspectionResult');
var InspectionDecision = require('../systemData/inspectionDecision');
var results = require('../results');
var AccessDeniedError = require('../errors/accessDeniedError');
var OperationBase = require('./operationBase');
function ReadStreamEventsBackwardOperation(
log, cb, stream, fromEventNumber, maxCount, resolveLinkTos, requireMaster, userCredentials
) {
OperationBase.call(this, log, cb, TcpCommand.ReadStreamEventsBackward, TcpCommand.ReadStreamEventsBackwardCompleted, userCredentials);
this._responseType = ClientMessage.ReadStreamEventsCompleted;
this._stream = stream;
this._fromEventNumber = fromEventNumber;
this._maxCount = maxCount;
this._resolveLinkTos = resolveLinkTos;
this._requireMaster = requireMaster;
}
util.inherits(ReadStreamEventsBackwardOperation, OperationBase);
ReadStreamEventsBackwardOperation.prototype._createRequestDto = function() {
return new ClientMessage.ReadStreamEvents({
eventStreamId: this._stream,
fromEventNumber: this._fromEventNumber,
maxCount: this._maxCount,
resolveLinkTos: this._resolveLinkTos,
requireLeader: this._requireMaster
});
};
ReadStreamEventsBackwardOperation.prototype._inspectResponse = function(response) {
switch (response.result)
{
case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.Success:
this._succeed();
return new InspectionResult(InspectionDecision.EndOperation, "Success");
case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.StreamDeleted:
this._succeed();
return new InspectionResult(InspectionDecision.EndOperation, "StreamDeleted");
case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.NoStream:
this._succeed();
return new InspectionResult(InspectionDecision.EndOperation, "NoStream");
case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.Error:
this.fail(new Error("Server error: " + response.error));
return new InspectionResult(InspectionDecision.EndOperation, "Error");
case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.AccessDenied:
this.fail(new AccessDeniedError("Read", this._stream));
return new InspectionResult(InspectionDecision.EndOperation, "AccessDenied");
default:
throw new Error(util.format("Unexpected ReadStreamResult: %s.", response.result));
}
};
ReadStreamEventsBackwardOperation.prototype._transformResponse = function(response) {
return new results.StreamEventsSlice(
StatusCode.convert(response.result),
this._stream,
this._fromEventNumber,
ReadDirection.Backward,
response.events,
response.nextEventNumber,
response.lastEventNumber,
response.isEndOfStream
)
};
ReadStreamEventsBackwardOperation.prototype.toString = function() {
return util.format("Stream: %s, FromEventNumber: %d, MaxCount: %d, ResolveLinkTos: %s, RequireMaster: %s",
this._stream, this._fromEventNumber, this._maxCount, this._resolveLinkTos, this._requireMaster);
};
module.exports = ReadStreamEventsBackwardOperation;