@cratis/chronicle 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChronicleClient.ts +453 -0
- package/ChronicleOptions.ts +104 -0
- package/EventSequences/AppendError.ts +10 -0
- package/EventSequences/AppendOptions.ts +15 -0
- package/EventSequences/AppendResult.ts +23 -0
- package/EventSequences/ConstraintViolation.ts +16 -0
- package/EventSequences/EventLog.ts +21 -0
- package/EventSequences/EventSequence.ts +372 -0
- package/EventSequences/EventSequenceId.ts +17 -0
- package/EventSequences/EventSequenceNumber.ts +38 -0
- package/EventSequences/IEventLog.ts +10 -0
- package/EventSequences/IEventSequence.ts +47 -0
- package/EventSequences/index.ts +13 -0
- package/EventStore.ts +132 -0
- package/EventStoreName.ts +14 -0
- package/EventStoreNamespaceName.ts +17 -0
- package/Events/AppendedEvent.ts +19 -0
- package/Events/CausationEntry.ts +13 -0
- package/Events/Constraints/ConstraintBuilder.ts +86 -0
- package/Events/Constraints/ConstraintId.ts +14 -0
- package/Events/Constraints/Constraints.ts +117 -0
- package/Events/Constraints/IConstraint.ts +18 -0
- package/Events/Constraints/IConstraintBuilder.ts +44 -0
- package/Events/Constraints/IConstraints.ts +28 -0
- package/Events/Constraints/IUniqueConstraintBuilder.ts +52 -0
- package/Events/Constraints/UniqueConstraintBuilder.ts +97 -0
- package/Events/Constraints/constraint.ts +56 -0
- package/Events/Constraints/index.ts +15 -0
- package/Events/EventContext.ts +28 -0
- package/Events/EventType.ts +41 -0
- package/Events/EventTypeGeneration.ts +20 -0
- package/Events/EventTypeId.ts +19 -0
- package/Events/EventTypes.ts +95 -0
- package/Events/IEventTypes.ts +39 -0
- package/Events/eventTypeDecorator.ts +147 -0
- package/Events/index.ts +14 -0
- package/IChronicleClient.ts +39 -0
- package/IEventStore.ts +56 -0
- package/Metrics.ts +109 -0
- package/Observation/ObserverId.ts +14 -0
- package/Observation/ObserverRunningState.ts +34 -0
- package/Observation/index.ts +5 -0
- package/Projections/IProjections.ts +19 -0
- package/Projections/ProjectionId.ts +14 -0
- package/Projections/Projections.ts +463 -0
- package/Projections/declarative/AllSetBuilder.ts +39 -0
- package/Projections/declarative/FromBuilder.ts +144 -0
- package/Projections/declarative/FromEveryBuilder.ts +46 -0
- package/Projections/declarative/IAddBuilder.ts +18 -0
- package/Projections/declarative/IAddChildBuilder.ts +25 -0
- package/Projections/declarative/IAllSetBuilder.ts +31 -0
- package/Projections/declarative/IChildrenBuilder.ts +31 -0
- package/Projections/declarative/ICompositeKeyBuilder.ts +22 -0
- package/Projections/declarative/IFromBuilder.ts +12 -0
- package/Projections/declarative/IFromEveryBuilder.ts +24 -0
- package/Projections/declarative/IJoinBuilder.ts +20 -0
- package/Projections/declarative/INestedBuilder.ts +19 -0
- package/Projections/declarative/IProjectionBuilder.ts +98 -0
- package/Projections/declarative/IProjectionBuilderFor.ts +38 -0
- package/Projections/declarative/IProjectionFor.ts +18 -0
- package/Projections/declarative/IReadModelPropertiesBuilder.ts +132 -0
- package/Projections/declarative/IRemovedWithBuilder.ts +25 -0
- package/Projections/declarative/IRemovedWithJoinBuilder.ts +25 -0
- package/Projections/declarative/ISetBuilder.ts +38 -0
- package/Projections/declarative/ISubtractBuilder.ts +18 -0
- package/Projections/declarative/JoinBuilder.ts +148 -0
- package/Projections/declarative/ProjectionBuilderFor.ts +277 -0
- package/Projections/declarative/RemovedWithBuilder.ts +40 -0
- package/Projections/declarative/RemovedWithJoinBuilder.ts +43 -0
- package/Projections/declarative/SetBuilder.ts +46 -0
- package/Projections/declarative/index.ts +26 -0
- package/Projections/declarative/projection.ts +59 -0
- package/Projections/index.ts +8 -0
- package/Projections/modelBound/FromEventMetadata.ts +10 -0
- package/Projections/modelBound/FromEventOptions.ts +12 -0
- package/Projections/modelBound/addFrom.ts +41 -0
- package/Projections/modelBound/childrenFrom.ts +52 -0
- package/Projections/modelBound/clearWith.ts +54 -0
- package/Projections/modelBound/count.ts +41 -0
- package/Projections/modelBound/decrement.ts +41 -0
- package/Projections/modelBound/fromEvent.ts +40 -0
- package/Projections/modelBound/fromEvery.ts +39 -0
- package/Projections/modelBound/increment.ts +41 -0
- package/Projections/modelBound/index.ts +38 -0
- package/Projections/modelBound/join.ts +44 -0
- package/Projections/modelBound/modelBound.ts +59 -0
- package/Projections/modelBound/nested.ts +29 -0
- package/Projections/modelBound/notRewindable.ts +24 -0
- package/Projections/modelBound/removedWith.ts +60 -0
- package/Projections/modelBound/removedWithJoin.ts +55 -0
- package/Projections/modelBound/setFrom.ts +41 -0
- package/Projections/modelBound/setFromContext.ts +41 -0
- package/Projections/modelBound/setValue.ts +41 -0
- package/Projections/modelBound/subtractFrom.ts +41 -0
- package/README.md +69 -0
- package/Reactors/IReactors.ts +19 -0
- package/Reactors/ReactorId.ts +14 -0
- package/Reactors/Reactors.ts +320 -0
- package/Reactors/index.ts +8 -0
- package/Reactors/reactor.ts +75 -0
- package/ReadModels/ReadModelId.ts +14 -0
- package/ReadModels/index.ts +6 -0
- package/ReadModels/readModel.ts +89 -0
- package/Reducers/IReducers.ts +19 -0
- package/Reducers/ReducerId.ts +14 -0
- package/Reducers/Reducers.ts +322 -0
- package/Reducers/index.ts +8 -0
- package/Reducers/reducer.ts +87 -0
- package/Schemas/JsonSchema.ts +18 -0
- package/Schemas/JsonSchemaGenerator.ts +107 -0
- package/Schemas/index.ts +6 -0
- package/Schemas/jsonSchemaProperty.ts +24 -0
- package/Tracing.ts +21 -0
- package/artifacts/DefaultClientArtifactsProvider.ts +56 -0
- package/artifacts/IClientArtifactsProvider.ts +30 -0
- package/artifacts/index.ts +5 -0
- package/connection/ChronicleConnection.ts +226 -0
- package/connection/ChronicleConnectionString.ts +4 -0
- package/connection/ChronicleServices.ts +4 -0
- package/connection/ConnectionLifecycle.ts +77 -0
- package/connection/DateTimeOffset.ts +4 -0
- package/connection/Guid.ts +4 -0
- package/connection/TokenProvider.ts +13 -0
- package/connection/index.ts +9 -0
- package/dist/ChronicleClient.d.ts +55 -0
- package/dist/ChronicleClient.d.ts.map +1 -0
- package/dist/ChronicleClient.js +396 -0
- package/dist/ChronicleClient.js.map +1 -0
- package/dist/ChronicleOptions.d.ts +54 -0
- package/dist/ChronicleOptions.d.ts.map +1 -0
- package/dist/ChronicleOptions.js +75 -0
- package/dist/ChronicleOptions.js.map +1 -0
- package/dist/EventSequences/AppendError.d.ts +8 -0
- package/dist/EventSequences/AppendError.d.ts.map +1 -0
- package/dist/EventSequences/AppendError.js +4 -0
- package/dist/EventSequences/AppendError.js.map +1 -0
- package/dist/EventSequences/AppendOptions.d.ts +11 -0
- package/dist/EventSequences/AppendOptions.d.ts.map +1 -0
- package/dist/EventSequences/AppendOptions.js +4 -0
- package/dist/EventSequences/AppendOptions.js.map +1 -0
- package/dist/EventSequences/AppendResult.d.ts +17 -0
- package/dist/EventSequences/AppendResult.d.ts.map +1 -0
- package/dist/EventSequences/AppendResult.js +4 -0
- package/dist/EventSequences/AppendResult.js.map +1 -0
- package/dist/EventSequences/ConstraintViolation.d.ts +12 -0
- package/dist/EventSequences/ConstraintViolation.d.ts.map +1 -0
- package/dist/EventSequences/ConstraintViolation.js +4 -0
- package/dist/EventSequences/ConstraintViolation.js.map +1 -0
- package/dist/EventSequences/EventLog.d.ts +11 -0
- package/dist/EventSequences/EventLog.d.ts.map +1 -0
- package/dist/EventSequences/EventLog.js +14 -0
- package/dist/EventSequences/EventLog.js.map +1 -0
- package/dist/EventSequences/EventSequence.d.ts +27 -0
- package/dist/EventSequences/EventSequence.d.ts.map +1 -0
- package/dist/EventSequences/EventSequence.js +337 -0
- package/dist/EventSequences/EventSequence.js.map +1 -0
- package/dist/EventSequences/EventSequenceId.d.ts +12 -0
- package/dist/EventSequences/EventSequenceId.d.ts.map +1 -0
- package/dist/EventSequences/EventSequenceId.js +18 -0
- package/dist/EventSequences/EventSequenceId.js.map +1 -0
- package/dist/EventSequences/EventSequenceNumber.d.ts +26 -0
- package/dist/EventSequences/EventSequenceNumber.d.ts.map +1 -0
- package/dist/EventSequences/EventSequenceNumber.js +36 -0
- package/dist/EventSequences/EventSequenceNumber.js.map +1 -0
- package/dist/EventSequences/IEventLog.d.ts +8 -0
- package/dist/EventSequences/IEventLog.d.ts.map +1 -0
- package/dist/EventSequences/IEventLog.js +4 -0
- package/dist/EventSequences/IEventLog.js.map +1 -0
- package/dist/EventSequences/IEventSequence.d.ts +40 -0
- package/dist/EventSequences/IEventSequence.d.ts.map +1 -0
- package/dist/EventSequences/IEventSequence.js +4 -0
- package/dist/EventSequences/IEventSequence.js.map +1 -0
- package/dist/EventSequences/index.d.ts +11 -0
- package/dist/EventSequences/index.d.ts.map +1 -0
- package/dist/EventSequences/index.js +7 -0
- package/dist/EventSequences/index.js.map +1 -0
- package/dist/EventStore.d.ts +42 -0
- package/dist/EventStore.d.ts.map +1 -0
- package/dist/EventStore.js +111 -0
- package/dist/EventStore.js.map +1 -0
- package/dist/EventStoreName.d.ts +10 -0
- package/dist/EventStoreName.d.ts.map +1 -0
- package/dist/EventStoreName.js +16 -0
- package/dist/EventStoreName.js.map +1 -0
- package/dist/EventStoreNamespaceName.d.ts +12 -0
- package/dist/EventStoreNamespaceName.d.ts.map +1 -0
- package/dist/EventStoreNamespaceName.js +18 -0
- package/dist/EventStoreNamespaceName.js.map +1 -0
- package/dist/Events/AppendedEvent.d.ts +14 -0
- package/dist/Events/AppendedEvent.d.ts.map +1 -0
- package/dist/Events/AppendedEvent.js +4 -0
- package/dist/Events/AppendedEvent.js.map +1 -0
- package/dist/Events/CausationEntry.d.ts +10 -0
- package/dist/Events/CausationEntry.d.ts.map +1 -0
- package/dist/Events/CausationEntry.js +4 -0
- package/dist/Events/CausationEntry.js.map +1 -0
- package/dist/Events/Constraints/ConstraintBuilder.d.ts +42 -0
- package/dist/Events/Constraints/ConstraintBuilder.d.ts.map +1 -0
- package/dist/Events/Constraints/ConstraintBuilder.js +55 -0
- package/dist/Events/Constraints/ConstraintBuilder.js.map +1 -0
- package/dist/Events/Constraints/ConstraintId.d.ts +10 -0
- package/dist/Events/Constraints/ConstraintId.d.ts.map +1 -0
- package/dist/Events/Constraints/ConstraintId.js +16 -0
- package/dist/Events/Constraints/ConstraintId.js.map +1 -0
- package/dist/Events/Constraints/Constraints.d.ts +27 -0
- package/dist/Events/Constraints/Constraints.d.ts.map +1 -0
- package/dist/Events/Constraints/Constraints.js +104 -0
- package/dist/Events/Constraints/Constraints.js.map +1 -0
- package/dist/Events/Constraints/IConstraint.d.ts +15 -0
- package/dist/Events/Constraints/IConstraint.d.ts.map +1 -0
- package/dist/Events/Constraints/IConstraint.js +4 -0
- package/dist/Events/Constraints/IConstraint.js.map +1 -0
- package/dist/Events/Constraints/IConstraintBuilder.d.ts +37 -0
- package/dist/Events/Constraints/IConstraintBuilder.d.ts.map +1 -0
- package/dist/Events/Constraints/IConstraintBuilder.js +4 -0
- package/dist/Events/Constraints/IConstraintBuilder.js.map +1 -0
- package/dist/Events/Constraints/IConstraints.d.ts +23 -0
- package/dist/Events/Constraints/IConstraints.d.ts.map +1 -0
- package/dist/Events/Constraints/IConstraints.js +4 -0
- package/dist/Events/Constraints/IConstraints.js.map +1 -0
- package/dist/Events/Constraints/IUniqueConstraintBuilder.d.ts +44 -0
- package/dist/Events/Constraints/IUniqueConstraintBuilder.d.ts.map +1 -0
- package/dist/Events/Constraints/IUniqueConstraintBuilder.js +4 -0
- package/dist/Events/Constraints/IUniqueConstraintBuilder.js.map +1 -0
- package/dist/Events/Constraints/UniqueConstraintBuilder.d.ts +42 -0
- package/dist/Events/Constraints/UniqueConstraintBuilder.d.ts.map +1 -0
- package/dist/Events/Constraints/UniqueConstraintBuilder.js +72 -0
- package/dist/Events/Constraints/UniqueConstraintBuilder.js.map +1 -0
- package/dist/Events/Constraints/constraint.d.ts +29 -0
- package/dist/Events/Constraints/constraint.d.ts.map +1 -0
- package/dist/Events/Constraints/constraint.js +39 -0
- package/dist/Events/Constraints/constraint.js.map +1 -0
- package/dist/Events/Constraints/index.d.ts +13 -0
- package/dist/Events/Constraints/index.d.ts.map +1 -0
- package/dist/Events/Constraints/index.js +8 -0
- package/dist/Events/Constraints/index.js.map +1 -0
- package/dist/Events/EventContext.d.ts +20 -0
- package/dist/Events/EventContext.d.ts.map +1 -0
- package/dist/Events/EventContext.js +4 -0
- package/dist/Events/EventContext.js.map +1 -0
- package/dist/Events/EventType.d.ts +23 -0
- package/dist/Events/EventType.d.ts.map +1 -0
- package/dist/Events/EventType.js +40 -0
- package/dist/Events/EventType.js.map +1 -0
- package/dist/Events/EventTypeGeneration.d.ts +14 -0
- package/dist/Events/EventTypeGeneration.d.ts.map +1 -0
- package/dist/Events/EventTypeGeneration.js +20 -0
- package/dist/Events/EventTypeGeneration.js.map +1 -0
- package/dist/Events/EventTypeId.d.ts +14 -0
- package/dist/Events/EventTypeId.d.ts.map +1 -0
- package/dist/Events/EventTypeId.js +20 -0
- package/dist/Events/EventTypeId.js.map +1 -0
- package/dist/Events/EventTypes.d.ts +33 -0
- package/dist/Events/EventTypes.d.ts.map +1 -0
- package/dist/Events/EventTypes.js +83 -0
- package/dist/Events/EventTypes.js.map +1 -0
- package/dist/Events/IEventTypes.d.ts +32 -0
- package/dist/Events/IEventTypes.d.ts.map +1 -0
- package/dist/Events/IEventTypes.js +4 -0
- package/dist/Events/IEventTypes.js.map +1 -0
- package/dist/Events/eventTypeDecorator.d.ts +71 -0
- package/dist/Events/eventTypeDecorator.d.ts.map +1 -0
- package/dist/Events/eventTypeDecorator.js +86 -0
- package/dist/Events/eventTypeDecorator.js.map +1 -0
- package/dist/Events/index.d.ts +12 -0
- package/dist/Events/index.d.ts.map +1 -0
- package/dist/Events/index.js +9 -0
- package/dist/Events/index.js.map +1 -0
- package/dist/Grpc.d.ts +19 -0
- package/dist/Grpc.d.ts.map +1 -0
- package/dist/Grpc.js +33 -0
- package/dist/Grpc.js.map +1 -0
- package/dist/IChronicleClient.d.ts +33 -0
- package/dist/IChronicleClient.d.ts.map +1 -0
- package/dist/IChronicleClient.js +4 -0
- package/dist/IChronicleClient.js.map +1 -0
- package/dist/IEventStore.d.ts +44 -0
- package/dist/IEventStore.d.ts.map +1 -0
- package/dist/IEventStore.js +4 -0
- package/dist/IEventStore.js.map +1 -0
- package/dist/Metrics.d.ts +70 -0
- package/dist/Metrics.d.ts.map +1 -0
- package/dist/Metrics.js +100 -0
- package/dist/Metrics.js.map +1 -0
- package/dist/Observation/ObserverId.d.ts +10 -0
- package/dist/Observation/ObserverId.d.ts.map +1 -0
- package/dist/Observation/ObserverId.js +16 -0
- package/dist/Observation/ObserverId.js.map +1 -0
- package/dist/Observation/ObserverRunningState.d.ts +24 -0
- package/dist/Observation/ObserverRunningState.d.ts.map +1 -0
- package/dist/Observation/ObserverRunningState.js +27 -0
- package/dist/Observation/ObserverRunningState.js.map +1 -0
- package/dist/Observation/index.d.ts +3 -0
- package/dist/Observation/index.d.ts.map +1 -0
- package/dist/Observation/index.js +5 -0
- package/dist/Observation/index.js.map +1 -0
- package/dist/Projections/IProjections.d.ts +16 -0
- package/dist/Projections/IProjections.d.ts.map +1 -0
- package/dist/Projections/IProjections.js +4 -0
- package/dist/Projections/IProjections.js.map +1 -0
- package/dist/Projections/ProjectionId.d.ts +10 -0
- package/dist/Projections/ProjectionId.d.ts.map +1 -0
- package/dist/Projections/ProjectionId.js +16 -0
- package/dist/Projections/ProjectionId.js.map +1 -0
- package/dist/Projections/Projections.d.ts +36 -0
- package/dist/Projections/Projections.d.ts.map +1 -0
- package/dist/Projections/Projections.js +390 -0
- package/dist/Projections/Projections.js.map +1 -0
- package/dist/Projections/declarative/AllSetBuilder.d.ts +20 -0
- package/dist/Projections/declarative/AllSetBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/AllSetBuilder.js +37 -0
- package/dist/Projections/declarative/AllSetBuilder.js.map +1 -0
- package/dist/Projections/declarative/FromBuilder.d.ts +56 -0
- package/dist/Projections/declarative/FromBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/FromBuilder.js +105 -0
- package/dist/Projections/declarative/FromBuilder.js.map +1 -0
- package/dist/Projections/declarative/FromEveryBuilder.d.ts +22 -0
- package/dist/Projections/declarative/FromEveryBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/FromEveryBuilder.js +28 -0
- package/dist/Projections/declarative/FromEveryBuilder.js.map +1 -0
- package/dist/Projections/declarative/IAddBuilder.d.ts +15 -0
- package/dist/Projections/declarative/IAddBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IAddBuilder.js +4 -0
- package/dist/Projections/declarative/IAddBuilder.js.map +1 -0
- package/dist/Projections/declarative/IAddChildBuilder.d.ts +21 -0
- package/dist/Projections/declarative/IAddChildBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IAddChildBuilder.js +4 -0
- package/dist/Projections/declarative/IAddChildBuilder.js.map +1 -0
- package/dist/Projections/declarative/IAllSetBuilder.d.ts +26 -0
- package/dist/Projections/declarative/IAllSetBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IAllSetBuilder.js +4 -0
- package/dist/Projections/declarative/IAllSetBuilder.js.map +1 -0
- package/dist/Projections/declarative/IChildrenBuilder.d.ts +22 -0
- package/dist/Projections/declarative/IChildrenBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IChildrenBuilder.js +4 -0
- package/dist/Projections/declarative/IChildrenBuilder.js.map +1 -0
- package/dist/Projections/declarative/ICompositeKeyBuilder.d.ts +16 -0
- package/dist/Projections/declarative/ICompositeKeyBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/ICompositeKeyBuilder.js +4 -0
- package/dist/Projections/declarative/ICompositeKeyBuilder.js.map +1 -0
- package/dist/Projections/declarative/IFromBuilder.d.ts +9 -0
- package/dist/Projections/declarative/IFromBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IFromBuilder.js +4 -0
- package/dist/Projections/declarative/IFromBuilder.js.map +1 -0
- package/dist/Projections/declarative/IFromEveryBuilder.d.ts +20 -0
- package/dist/Projections/declarative/IFromEveryBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IFromEveryBuilder.js +4 -0
- package/dist/Projections/declarative/IFromEveryBuilder.js.map +1 -0
- package/dist/Projections/declarative/IJoinBuilder.d.ts +16 -0
- package/dist/Projections/declarative/IJoinBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IJoinBuilder.js +4 -0
- package/dist/Projections/declarative/IJoinBuilder.js.map +1 -0
- package/dist/Projections/declarative/INestedBuilder.d.ts +15 -0
- package/dist/Projections/declarative/INestedBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/INestedBuilder.js +4 -0
- package/dist/Projections/declarative/INestedBuilder.js.map +1 -0
- package/dist/Projections/declarative/IProjectionBuilder.d.ts +80 -0
- package/dist/Projections/declarative/IProjectionBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IProjectionBuilder.js +4 -0
- package/dist/Projections/declarative/IProjectionBuilder.js.map +1 -0
- package/dist/Projections/declarative/IProjectionBuilderFor.d.ts +31 -0
- package/dist/Projections/declarative/IProjectionBuilderFor.d.ts.map +1 -0
- package/dist/Projections/declarative/IProjectionBuilderFor.js +4 -0
- package/dist/Projections/declarative/IProjectionBuilderFor.js.map +1 -0
- package/dist/Projections/declarative/IProjectionFor.d.ts +15 -0
- package/dist/Projections/declarative/IProjectionFor.d.ts.map +1 -0
- package/dist/Projections/declarative/IProjectionFor.js +4 -0
- package/dist/Projections/declarative/IProjectionFor.js.map +1 -0
- package/dist/Projections/declarative/IReadModelPropertiesBuilder.d.ts +111 -0
- package/dist/Projections/declarative/IReadModelPropertiesBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IReadModelPropertiesBuilder.js +4 -0
- package/dist/Projections/declarative/IReadModelPropertiesBuilder.js.map +1 -0
- package/dist/Projections/declarative/IRemovedWithBuilder.d.ts +21 -0
- package/dist/Projections/declarative/IRemovedWithBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IRemovedWithBuilder.js +4 -0
- package/dist/Projections/declarative/IRemovedWithBuilder.js.map +1 -0
- package/dist/Projections/declarative/IRemovedWithJoinBuilder.d.ts +21 -0
- package/dist/Projections/declarative/IRemovedWithJoinBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/IRemovedWithJoinBuilder.js +4 -0
- package/dist/Projections/declarative/IRemovedWithJoinBuilder.js.map +1 -0
- package/dist/Projections/declarative/ISetBuilder.d.ts +32 -0
- package/dist/Projections/declarative/ISetBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/ISetBuilder.js +4 -0
- package/dist/Projections/declarative/ISetBuilder.js.map +1 -0
- package/dist/Projections/declarative/ISubtractBuilder.d.ts +15 -0
- package/dist/Projections/declarative/ISubtractBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/ISubtractBuilder.js +4 -0
- package/dist/Projections/declarative/ISubtractBuilder.js.map +1 -0
- package/dist/Projections/declarative/JoinBuilder.d.ts +58 -0
- package/dist/Projections/declarative/JoinBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/JoinBuilder.js +107 -0
- package/dist/Projections/declarative/JoinBuilder.js.map +1 -0
- package/dist/Projections/declarative/ProjectionBuilderFor.d.ts +68 -0
- package/dist/Projections/declarative/ProjectionBuilderFor.d.ts.map +1 -0
- package/dist/Projections/declarative/ProjectionBuilderFor.js +207 -0
- package/dist/Projections/declarative/ProjectionBuilderFor.js.map +1 -0
- package/dist/Projections/declarative/RemovedWithBuilder.d.ts +22 -0
- package/dist/Projections/declarative/RemovedWithBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/RemovedWithBuilder.js +28 -0
- package/dist/Projections/declarative/RemovedWithBuilder.js.map +1 -0
- package/dist/Projections/declarative/RemovedWithJoinBuilder.d.ts +22 -0
- package/dist/Projections/declarative/RemovedWithJoinBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/RemovedWithJoinBuilder.js +31 -0
- package/dist/Projections/declarative/RemovedWithJoinBuilder.js.map +1 -0
- package/dist/Projections/declarative/SetBuilder.d.ts +23 -0
- package/dist/Projections/declarative/SetBuilder.d.ts.map +1 -0
- package/dist/Projections/declarative/SetBuilder.js +43 -0
- package/dist/Projections/declarative/SetBuilder.js.map +1 -0
- package/dist/Projections/declarative/index.d.ts +24 -0
- package/dist/Projections/declarative/index.d.ts.map +1 -0
- package/dist/Projections/declarative/index.js +8 -0
- package/dist/Projections/declarative/index.js.map +1 -0
- package/dist/Projections/declarative/projection.d.ts +31 -0
- package/dist/Projections/declarative/projection.d.ts.map +1 -0
- package/dist/Projections/declarative/projection.js +39 -0
- package/dist/Projections/declarative/projection.js.map +1 -0
- package/dist/Projections/index.d.ts +6 -0
- package/dist/Projections/index.d.ts.map +1 -0
- package/dist/Projections/index.js +7 -0
- package/dist/Projections/index.js.map +1 -0
- package/dist/Projections/modelBound/FromEventMetadata.d.ts +7 -0
- package/dist/Projections/modelBound/FromEventMetadata.d.ts.map +1 -0
- package/dist/Projections/modelBound/FromEventMetadata.js +4 -0
- package/dist/Projections/modelBound/FromEventMetadata.js.map +1 -0
- package/dist/Projections/modelBound/FromEventOptions.d.ts +10 -0
- package/dist/Projections/modelBound/FromEventOptions.d.ts.map +1 -0
- package/dist/Projections/modelBound/FromEventOptions.js +4 -0
- package/dist/Projections/modelBound/FromEventOptions.js.map +1 -0
- package/dist/Projections/modelBound/addFrom.d.ts +23 -0
- package/dist/Projections/modelBound/addFrom.d.ts.map +1 -0
- package/dist/Projections/modelBound/addFrom.js +30 -0
- package/dist/Projections/modelBound/addFrom.js.map +1 -0
- package/dist/Projections/modelBound/childrenFrom.d.ts +29 -0
- package/dist/Projections/modelBound/childrenFrom.d.ts.map +1 -0
- package/dist/Projections/modelBound/childrenFrom.js +32 -0
- package/dist/Projections/modelBound/childrenFrom.js.map +1 -0
- package/dist/Projections/modelBound/clearWith.d.ts +28 -0
- package/dist/Projections/modelBound/clearWith.d.ts.map +1 -0
- package/dist/Projections/modelBound/clearWith.js +45 -0
- package/dist/Projections/modelBound/clearWith.js.map +1 -0
- package/dist/Projections/modelBound/count.d.ts +23 -0
- package/dist/Projections/modelBound/count.d.ts.map +1 -0
- package/dist/Projections/modelBound/count.js +30 -0
- package/dist/Projections/modelBound/count.js.map +1 -0
- package/dist/Projections/modelBound/decrement.d.ts +23 -0
- package/dist/Projections/modelBound/decrement.d.ts.map +1 -0
- package/dist/Projections/modelBound/decrement.js +30 -0
- package/dist/Projections/modelBound/decrement.js.map +1 -0
- package/dist/Projections/modelBound/fromEvent.d.ts +23 -0
- package/dist/Projections/modelBound/fromEvent.d.ts.map +1 -0
- package/dist/Projections/modelBound/fromEvent.js +34 -0
- package/dist/Projections/modelBound/fromEvent.js.map +1 -0
- package/dist/Projections/modelBound/fromEvery.d.ts +23 -0
- package/dist/Projections/modelBound/fromEvery.d.ts.map +1 -0
- package/dist/Projections/modelBound/fromEvery.js +28 -0
- package/dist/Projections/modelBound/fromEvery.js.map +1 -0
- package/dist/Projections/modelBound/increment.d.ts +23 -0
- package/dist/Projections/modelBound/increment.d.ts.map +1 -0
- package/dist/Projections/modelBound/increment.js +30 -0
- package/dist/Projections/modelBound/increment.js.map +1 -0
- package/dist/Projections/modelBound/index.d.ts +36 -0
- package/dist/Projections/modelBound/index.d.ts.map +1 -0
- package/dist/Projections/modelBound/index.js +21 -0
- package/dist/Projections/modelBound/index.js.map +1 -0
- package/dist/Projections/modelBound/join.d.ts +26 -0
- package/dist/Projections/modelBound/join.d.ts.map +1 -0
- package/dist/Projections/modelBound/join.js +31 -0
- package/dist/Projections/modelBound/join.js.map +1 -0
- package/dist/Projections/modelBound/modelBound.d.ts +31 -0
- package/dist/Projections/modelBound/modelBound.d.ts.map +1 -0
- package/dist/Projections/modelBound/modelBound.js +39 -0
- package/dist/Projections/modelBound/modelBound.js.map +1 -0
- package/dist/Projections/modelBound/nested.d.ts +16 -0
- package/dist/Projections/modelBound/nested.d.ts.map +1 -0
- package/dist/Projections/modelBound/nested.js +26 -0
- package/dist/Projections/modelBound/nested.js.map +1 -0
- package/dist/Projections/modelBound/notRewindable.d.ts +14 -0
- package/dist/Projections/modelBound/notRewindable.d.ts.map +1 -0
- package/dist/Projections/modelBound/notRewindable.js +21 -0
- package/dist/Projections/modelBound/notRewindable.js.map +1 -0
- package/dist/Projections/modelBound/removedWith.d.ts +34 -0
- package/dist/Projections/modelBound/removedWith.d.ts.map +1 -0
- package/dist/Projections/modelBound/removedWith.js +47 -0
- package/dist/Projections/modelBound/removedWith.js.map +1 -0
- package/dist/Projections/modelBound/removedWithJoin.d.ts +29 -0
- package/dist/Projections/modelBound/removedWithJoin.d.ts.map +1 -0
- package/dist/Projections/modelBound/removedWithJoin.js +44 -0
- package/dist/Projections/modelBound/removedWithJoin.js.map +1 -0
- package/dist/Projections/modelBound/setFrom.d.ts +23 -0
- package/dist/Projections/modelBound/setFrom.d.ts.map +1 -0
- package/dist/Projections/modelBound/setFrom.js +30 -0
- package/dist/Projections/modelBound/setFrom.js.map +1 -0
- package/dist/Projections/modelBound/setFromContext.d.ts +23 -0
- package/dist/Projections/modelBound/setFromContext.d.ts.map +1 -0
- package/dist/Projections/modelBound/setFromContext.js +30 -0
- package/dist/Projections/modelBound/setFromContext.js.map +1 -0
- package/dist/Projections/modelBound/setValue.d.ts +23 -0
- package/dist/Projections/modelBound/setValue.d.ts.map +1 -0
- package/dist/Projections/modelBound/setValue.js +30 -0
- package/dist/Projections/modelBound/setValue.js.map +1 -0
- package/dist/Projections/modelBound/subtractFrom.d.ts +23 -0
- package/dist/Projections/modelBound/subtractFrom.d.ts.map +1 -0
- package/dist/Projections/modelBound/subtractFrom.js +30 -0
- package/dist/Projections/modelBound/subtractFrom.js.map +1 -0
- package/dist/Reactors/IReactors.d.ts +16 -0
- package/dist/Reactors/IReactors.d.ts.map +1 -0
- package/dist/Reactors/IReactors.js +4 -0
- package/dist/Reactors/IReactors.js.map +1 -0
- package/dist/Reactors/ReactorId.d.ts +10 -0
- package/dist/Reactors/ReactorId.d.ts.map +1 -0
- package/dist/Reactors/ReactorId.js +16 -0
- package/dist/Reactors/ReactorId.js.map +1 -0
- package/dist/Reactors/Reactors.d.ts +38 -0
- package/dist/Reactors/Reactors.d.ts.map +1 -0
- package/dist/Reactors/Reactors.js +279 -0
- package/dist/Reactors/Reactors.js.map +1 -0
- package/dist/Reactors/index.d.ts +6 -0
- package/dist/Reactors/index.d.ts.map +1 -0
- package/dist/Reactors/index.js +6 -0
- package/dist/Reactors/index.js.map +1 -0
- package/dist/Reactors/reactor.d.ts +47 -0
- package/dist/Reactors/reactor.d.ts.map +1 -0
- package/dist/Reactors/reactor.js +55 -0
- package/dist/Reactors/reactor.js.map +1 -0
- package/dist/ReadModels/ReadModelId.d.ts +10 -0
- package/dist/ReadModels/ReadModelId.d.ts.map +1 -0
- package/dist/ReadModels/ReadModelId.js +16 -0
- package/dist/ReadModels/ReadModelId.js.map +1 -0
- package/dist/ReadModels/index.d.ts +4 -0
- package/dist/ReadModels/index.d.ts.map +1 -0
- package/dist/ReadModels/index.js +5 -0
- package/dist/ReadModels/index.js.map +1 -0
- package/dist/ReadModels/readModel.d.ts +33 -0
- package/dist/ReadModels/readModel.d.ts.map +1 -0
- package/dist/ReadModels/readModel.js +64 -0
- package/dist/ReadModels/readModel.js.map +1 -0
- package/dist/Reducers/IReducers.d.ts +16 -0
- package/dist/Reducers/IReducers.d.ts.map +1 -0
- package/dist/Reducers/IReducers.js +4 -0
- package/dist/Reducers/IReducers.js.map +1 -0
- package/dist/Reducers/ReducerId.d.ts +10 -0
- package/dist/Reducers/ReducerId.d.ts.map +1 -0
- package/dist/Reducers/ReducerId.js +16 -0
- package/dist/Reducers/ReducerId.js.map +1 -0
- package/dist/Reducers/Reducers.d.ts +38 -0
- package/dist/Reducers/Reducers.d.ts.map +1 -0
- package/dist/Reducers/Reducers.js +279 -0
- package/dist/Reducers/Reducers.js.map +1 -0
- package/dist/Reducers/index.d.ts +6 -0
- package/dist/Reducers/index.d.ts.map +1 -0
- package/dist/Reducers/index.js +6 -0
- package/dist/Reducers/index.js.map +1 -0
- package/dist/Reducers/reducer.d.ts +51 -0
- package/dist/Reducers/reducer.d.ts.map +1 -0
- package/dist/Reducers/reducer.js +59 -0
- package/dist/Reducers/reducer.js.map +1 -0
- package/dist/Schemas/JsonSchema.d.ts +16 -0
- package/dist/Schemas/JsonSchema.d.ts.map +1 -0
- package/dist/Schemas/JsonSchema.js +4 -0
- package/dist/Schemas/JsonSchema.js.map +1 -0
- package/dist/Schemas/JsonSchemaGenerator.d.ts +26 -0
- package/dist/Schemas/JsonSchemaGenerator.d.ts.map +1 -0
- package/dist/Schemas/JsonSchemaGenerator.js +90 -0
- package/dist/Schemas/JsonSchemaGenerator.js.map +1 -0
- package/dist/Schemas/index.d.ts +4 -0
- package/dist/Schemas/index.d.ts.map +1 -0
- package/dist/Schemas/index.js +5 -0
- package/dist/Schemas/index.js.map +1 -0
- package/dist/Schemas/jsonSchemaProperty.d.ts +13 -0
- package/dist/Schemas/jsonSchemaProperty.d.ts.map +1 -0
- package/dist/Schemas/jsonSchemaProperty.js +22 -0
- package/dist/Schemas/jsonSchemaProperty.js.map +1 -0
- package/dist/Tracing.d.ts +16 -0
- package/dist/Tracing.d.ts.map +1 -0
- package/dist/Tracing.js +19 -0
- package/dist/Tracing.js.map +1 -0
- package/dist/artifacts/DefaultClientArtifactsProvider.d.ts +31 -0
- package/dist/artifacts/DefaultClientArtifactsProvider.d.ts.map +1 -0
- package/dist/artifacts/DefaultClientArtifactsProvider.js +48 -0
- package/dist/artifacts/DefaultClientArtifactsProvider.js.map +1 -0
- package/dist/artifacts/IClientArtifactsProvider.d.ts +21 -0
- package/dist/artifacts/IClientArtifactsProvider.d.ts.map +1 -0
- package/dist/artifacts/IClientArtifactsProvider.js +4 -0
- package/dist/artifacts/IClientArtifactsProvider.js.map +1 -0
- package/dist/artifacts/index.d.ts +3 -0
- package/dist/artifacts/index.d.ts.map +1 -0
- package/dist/artifacts/index.js +4 -0
- package/dist/artifacts/index.js.map +1 -0
- package/dist/connection/ChronicleConnection.d.ts +117 -0
- package/dist/connection/ChronicleConnection.d.ts.map +1 -0
- package/dist/connection/ChronicleConnection.js +194 -0
- package/dist/connection/ChronicleConnection.js.map +1 -0
- package/dist/connection/ChronicleConnectionString.d.ts +2 -0
- package/dist/connection/ChronicleConnectionString.d.ts.map +1 -0
- package/dist/connection/ChronicleConnectionString.js +4 -0
- package/dist/connection/ChronicleConnectionString.js.map +1 -0
- package/dist/connection/ChronicleServices.d.ts +2 -0
- package/dist/connection/ChronicleServices.d.ts.map +1 -0
- package/dist/connection/ChronicleServices.js +4 -0
- package/dist/connection/ChronicleServices.js.map +1 -0
- package/dist/connection/ConnectionLifecycle.d.ts +41 -0
- package/dist/connection/ConnectionLifecycle.d.ts.map +1 -0
- package/dist/connection/ConnectionLifecycle.js +66 -0
- package/dist/connection/ConnectionLifecycle.js.map +1 -0
- package/dist/connection/DateTimeOffset.d.ts +2 -0
- package/dist/connection/DateTimeOffset.d.ts.map +1 -0
- package/dist/connection/DateTimeOffset.js +4 -0
- package/dist/connection/DateTimeOffset.js.map +1 -0
- package/dist/connection/Guid.d.ts +2 -0
- package/dist/connection/Guid.d.ts.map +1 -0
- package/dist/connection/Guid.js +4 -0
- package/dist/connection/Guid.js.map +1 -0
- package/dist/connection/TokenProvider.d.ts +5 -0
- package/dist/connection/TokenProvider.d.ts.map +1 -0
- package/dist/connection/TokenProvider.js +4 -0
- package/dist/connection/TokenProvider.js.map +1 -0
- package/dist/connection/index.d.ts +7 -0
- package/dist/connection/index.d.ts.map +1 -0
- package/dist/connection/index.js +7 -0
- package/dist/connection/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/DecoratorType.d.ts +20 -0
- package/dist/types/DecoratorType.d.ts.map +1 -0
- package/dist/types/DecoratorType.js +23 -0
- package/dist/types/DecoratorType.js.map +1 -0
- package/dist/types/TypeDiscoverer.d.ts +54 -0
- package/dist/types/TypeDiscoverer.d.ts.map +1 -0
- package/dist/types/TypeDiscoverer.js +91 -0
- package/dist/types/TypeDiscoverer.js.map +1 -0
- package/dist/types/TypeIntrospector.d.ts +30 -0
- package/dist/types/TypeIntrospector.d.ts.map +1 -0
- package/dist/types/TypeIntrospector.js +154 -0
- package/dist/types/TypeIntrospector.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/index.ts +24 -0
- package/package.json +38 -0
- package/types/DecoratorType.ts +28 -0
- package/types/TypeDiscoverer.ts +109 -0
- package/types/TypeIntrospector.ts +176 -0
- package/types/index.ts +6 -0
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { diag } from '@opentelemetry/api';
|
|
5
|
+
import { SpanStatusCode } from '@opentelemetry/api';
|
|
6
|
+
import { ChronicleOptions } from './ChronicleOptions';
|
|
7
|
+
import { ChronicleConnection } from './connection';
|
|
8
|
+
import { ConnectionLifecycle } from './connection/ConnectionLifecycle';
|
|
9
|
+
import { EventStore } from './EventStore';
|
|
10
|
+
import { EventStoreName } from './EventStoreName';
|
|
11
|
+
import { EventStoreNamespaceName } from './EventStoreNamespaceName';
|
|
12
|
+
import { IChronicleClient } from './IChronicleClient';
|
|
13
|
+
import { IEventStore } from './IEventStore';
|
|
14
|
+
import { ChronicleMetrics } from './Metrics';
|
|
15
|
+
import { ChronicleTracer } from './Tracing';
|
|
16
|
+
import { TypeDiscoverer } from './types';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Implements {@link IChronicleClient} by managing a gRPC connection to the
|
|
20
|
+
* Chronicle Kernel via {@link ChronicleConnection}.
|
|
21
|
+
*
|
|
22
|
+
* Create a client by providing {@link ChronicleOptions} configured with a connection string:
|
|
23
|
+
*
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const client = new ChronicleClient(ChronicleOptions.fromConnectionString('chronicle://localhost:35000'));
|
|
26
|
+
* const store = await client.getEventStore('MyStore');
|
|
27
|
+
* await store.eventLog.append('my-entity-id', new MyEvent('data'));
|
|
28
|
+
* client.dispose();
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export class ChronicleClient implements IChronicleClient {
|
|
32
|
+
private static readonly _healthCheckIntervalMs = 5000;
|
|
33
|
+
|
|
34
|
+
private readonly _connection: ChronicleConnection;
|
|
35
|
+
private readonly _stores: Map<string, EventStore> = new Map();
|
|
36
|
+
private readonly _lifecycle = new ConnectionLifecycle();
|
|
37
|
+
|
|
38
|
+
private readonly _logger = diag.createComponentLogger({
|
|
39
|
+
namespace: '@cratis/chronicle/ChronicleClient'
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
private _watchdogHandle?: ReturnType<typeof setInterval>;
|
|
43
|
+
private _connectOperation?: Promise<void>;
|
|
44
|
+
private _reconnectOperation?: Promise<void>;
|
|
45
|
+
private _discoveryOperation?: Promise<void>;
|
|
46
|
+
private _isDisposed = false;
|
|
47
|
+
private _keepAliveAbortController?: AbortController;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Creates a new {@link ChronicleClient} using the provided options.
|
|
51
|
+
* @param options - The options to configure the client, including the connection string.
|
|
52
|
+
*/
|
|
53
|
+
constructor(readonly options: ChronicleOptions) {
|
|
54
|
+
// When TLS is disabled, pass pre-built insecure credentials directly.
|
|
55
|
+
// @cratis/chronicle.contracts ≤15.24.3 always composes call credentials with
|
|
56
|
+
// channel credentials, which gRPC forbids for insecure channels. Passing
|
|
57
|
+
// credentials explicitly bypasses that code path. Remove once a fixed version
|
|
58
|
+
// of chronicle.contracts is released.
|
|
59
|
+
const connectionOptions = options.connectionString.disableTls
|
|
60
|
+
? { connectionString: options.connectionString, credentials: options.connectionString.createCredentials() }
|
|
61
|
+
: { connectionString: options.connectionString };
|
|
62
|
+
this._connection = new ChronicleConnection(connectionOptions);
|
|
63
|
+
|
|
64
|
+
this._logger.info('Created Chronicle client', {
|
|
65
|
+
serverAddress: `${options.connectionString.serverAddress.host}:${options.connectionString.serverAddress.port}`,
|
|
66
|
+
disableTls: options.connectionString.disableTls
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
if (options.discoveryPatterns.length > 0) {
|
|
70
|
+
this._discoveryOperation = TypeDiscoverer.default.discover(options.discoveryPatterns);
|
|
71
|
+
this._discoveryOperation.catch(error => {
|
|
72
|
+
this._logger.error('Artifact file discovery failed', { error: String(error) });
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
this._lifecycle.onConnected(async () => {
|
|
77
|
+
if (this._stores.size === 0) {
|
|
78
|
+
this._logger.debug('No event stores cached; nothing to register on connected lifecycle callback', {
|
|
79
|
+
connectionId: this._lifecycle.connectionId
|
|
80
|
+
});
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
this._logger.info('Connection lifecycle connected; registering artifacts for cached event stores', {
|
|
85
|
+
connectionId: this._lifecycle.connectionId,
|
|
86
|
+
eventStoreCount: this._stores.size
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
await Promise.all([...this._stores.values()].map(store => this.registerArtifactsForStore(store, 'connected')));
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
this._lifecycle.onDisconnected(async () => {
|
|
93
|
+
this._logger.warn('Connection lifecycle disconnected', {
|
|
94
|
+
connectionId: this._lifecycle.connectionId
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
this.startConnectionWatchdog();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** @inheritdoc */
|
|
102
|
+
async getEventStore(name: string | EventStoreName, namespace?: string | EventStoreNamespaceName): Promise<IEventStore> {
|
|
103
|
+
const storeName = typeof name === 'string' ? new EventStoreName(name) : name;
|
|
104
|
+
const namespaceName = namespace === undefined
|
|
105
|
+
? EventStoreNamespaceName.default
|
|
106
|
+
: typeof namespace === 'string'
|
|
107
|
+
? new EventStoreNamespaceName(namespace)
|
|
108
|
+
: namespace;
|
|
109
|
+
|
|
110
|
+
return ChronicleTracer.startActiveSpan('chronicle.client.get_event_store', async span => {
|
|
111
|
+
span.setAttribute('chronicle.event_store', storeName.value);
|
|
112
|
+
span.setAttribute('chronicle.namespace', namespaceName.value);
|
|
113
|
+
try {
|
|
114
|
+
const store = await this.withReconnect('get_event_store', async () => {
|
|
115
|
+
await this.ensureConnected();
|
|
116
|
+
|
|
117
|
+
const key = `${storeName.value}/${namespaceName.value}`;
|
|
118
|
+
const existing = this._stores.get(key);
|
|
119
|
+
if (existing) {
|
|
120
|
+
this._logger.verbose('Returning cached event store', {
|
|
121
|
+
eventStore: storeName.value,
|
|
122
|
+
namespace: namespaceName.value
|
|
123
|
+
});
|
|
124
|
+
return existing;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
this._logger.debug('Ensuring event store exists in kernel', {
|
|
128
|
+
eventStore: storeName.value
|
|
129
|
+
});
|
|
130
|
+
await this._connection.eventStores.ensure({ Name: storeName.value });
|
|
131
|
+
|
|
132
|
+
const created = new EventStore(storeName, namespaceName, this._connection, this._lifecycle);
|
|
133
|
+
this._stores.set(key, created);
|
|
134
|
+
|
|
135
|
+
await this.registerArtifactsForStore(created, 'new-store');
|
|
136
|
+
return created;
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
ChronicleMetrics.eventStoreRetrievals.add(1, {
|
|
140
|
+
'chronicle.event_store': storeName.value,
|
|
141
|
+
'chronicle.namespace': namespaceName.value
|
|
142
|
+
});
|
|
143
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
144
|
+
return store;
|
|
145
|
+
} catch (error) {
|
|
146
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) });
|
|
147
|
+
span.recordException(error as Error);
|
|
148
|
+
this._logger.error('Failed getting event store', {
|
|
149
|
+
eventStore: storeName.value,
|
|
150
|
+
namespace: namespaceName.value,
|
|
151
|
+
error: this.toErrorMessage(error)
|
|
152
|
+
});
|
|
153
|
+
throw error;
|
|
154
|
+
} finally {
|
|
155
|
+
span.end();
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** @inheritdoc */
|
|
161
|
+
async getEventStores(): Promise<EventStoreName[]> {
|
|
162
|
+
return ChronicleTracer.startActiveSpan('chronicle.client.get_event_stores', async span => {
|
|
163
|
+
try {
|
|
164
|
+
const response = await this.withReconnect('get_event_stores', async () => {
|
|
165
|
+
await this.ensureConnected();
|
|
166
|
+
return this._connection.eventStores.getEventStores({});
|
|
167
|
+
});
|
|
168
|
+
const result = (response.items ?? []).map((name: string) => new EventStoreName(name));
|
|
169
|
+
this._logger.verbose('Retrieved event stores from kernel', {
|
|
170
|
+
count: result.length
|
|
171
|
+
});
|
|
172
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
173
|
+
return result;
|
|
174
|
+
} catch (error) {
|
|
175
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) });
|
|
176
|
+
span.recordException(error as Error);
|
|
177
|
+
this._logger.error('Failed retrieving event stores', {
|
|
178
|
+
error: this.toErrorMessage(error)
|
|
179
|
+
});
|
|
180
|
+
throw error;
|
|
181
|
+
} finally {
|
|
182
|
+
span.end();
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** @inheritdoc */
|
|
188
|
+
dispose(): void {
|
|
189
|
+
this._isDisposed = true;
|
|
190
|
+
|
|
191
|
+
if (this._watchdogHandle) {
|
|
192
|
+
clearInterval(this._watchdogHandle);
|
|
193
|
+
this._watchdogHandle = undefined;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (this._lifecycle.isConnected) {
|
|
197
|
+
void this._lifecycle.disconnected(error => {
|
|
198
|
+
this._logger.error('Disconnected lifecycle callback failed during dispose', {
|
|
199
|
+
error: this.toErrorMessage(error)
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
this._keepAliveAbortController?.abort();
|
|
205
|
+
this._keepAliveAbortController = undefined;
|
|
206
|
+
this._connection.disconnect();
|
|
207
|
+
this._logger.info('Disposed Chronicle client');
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private async connectWithRetry(): Promise<void> {
|
|
211
|
+
let attempt = 0;
|
|
212
|
+
|
|
213
|
+
while (!this._isDisposed) {
|
|
214
|
+
try {
|
|
215
|
+
if (attempt > 0) {
|
|
216
|
+
// Recreate the gRPC channel so we start from IDLE. A failed
|
|
217
|
+
// probe can leave the channel in TRANSIENT_FAILURE, which gRPC
|
|
218
|
+
// won't recover without a fresh channel. The contracts connect()
|
|
219
|
+
// is also bypassed here — it uses watchConnectivityState and
|
|
220
|
+
// rejects as soon as the state changes to CONNECTING (not READY),
|
|
221
|
+
// making it unreliable for initial connection establishment.
|
|
222
|
+
this._connection.resetChannel();
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
this._logger.debug('Connecting to Chronicle kernel', { attempt: attempt + 1 });
|
|
226
|
+
|
|
227
|
+
// Probe with a real RPC call. gRPC connects lazily on the first call,
|
|
228
|
+
// so this effectively waits until the channel reaches READY or fails.
|
|
229
|
+
await this._connection.server.getVersionInfo({}, { signal: AbortSignal.timeout(10_000) });
|
|
230
|
+
|
|
231
|
+
this._logger.info('Connected to Chronicle kernel');
|
|
232
|
+
await this.startKernelKeepAlive();
|
|
233
|
+
await this._lifecycle.connected(error => {
|
|
234
|
+
this._logger.error('Connected lifecycle callback failed', {
|
|
235
|
+
error: this.toErrorMessage(error)
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
return;
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
} catch (error) {
|
|
242
|
+
attempt++;
|
|
243
|
+
const delayMs = Math.min(1000 * Math.pow(2, attempt - 1), 30_000);
|
|
244
|
+
this._logger.warn('Connection attempt failed, retrying', {
|
|
245
|
+
attempt,
|
|
246
|
+
delayMs,
|
|
247
|
+
error: this.toErrorMessage(error)
|
|
248
|
+
});
|
|
249
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
throw new Error('ChronicleClient was disposed during connection attempt.');
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private async ensureConnected(): Promise<void> {
|
|
257
|
+
if (this._isDisposed) {
|
|
258
|
+
throw new Error('ChronicleClient is disposed. Create a new client instance before making calls.');
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (this._lifecycle.isConnected) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (!this._connectOperation) {
|
|
266
|
+
this._connectOperation = this.connectWithRetry().finally(() => {
|
|
267
|
+
this._connectOperation = undefined;
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
await this._connectOperation;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
private async reconnect(reason: string, error: unknown): Promise<void> {
|
|
275
|
+
if (!this._reconnectOperation) {
|
|
276
|
+
this._reconnectOperation = (async () => {
|
|
277
|
+
this._logger.warn('Reconnecting to Chronicle kernel', {
|
|
278
|
+
reason,
|
|
279
|
+
error: this.toErrorMessage(error)
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
if (this._lifecycle.isConnected) {
|
|
283
|
+
await this._lifecycle.disconnected(disconnectError => {
|
|
284
|
+
this._logger.error('Disconnected lifecycle callback failed', {
|
|
285
|
+
error: this.toErrorMessage(disconnectError)
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
let attempt = 0;
|
|
291
|
+
while (!this._isDisposed) {
|
|
292
|
+
try {
|
|
293
|
+
this._connection.resetChannel();
|
|
294
|
+
await this._connection.server.getVersionInfo({}, { signal: AbortSignal.timeout(10_000) });
|
|
295
|
+
this._logger.info('Reconnected to Chronicle kernel', { attempt: attempt + 1 });
|
|
296
|
+
await this.startKernelKeepAlive();
|
|
297
|
+
await this._lifecycle.connected(connectedError => {
|
|
298
|
+
this._logger.error('Connected lifecycle callback failed after reconnect', {
|
|
299
|
+
error: this.toErrorMessage(connectedError)
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
return;
|
|
303
|
+
} catch (reconnectError) {
|
|
304
|
+
attempt++;
|
|
305
|
+
const delayMs = Math.min(1000 * Math.pow(2, attempt - 1), 30_000);
|
|
306
|
+
this._logger.warn('Reconnect attempt failed, retrying', {
|
|
307
|
+
attempt,
|
|
308
|
+
delayMs,
|
|
309
|
+
error: this.toErrorMessage(reconnectError)
|
|
310
|
+
});
|
|
311
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
})().finally(() => {
|
|
315
|
+
this._reconnectOperation = undefined;
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
await this._reconnectOperation;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
private async withReconnect<T>(operation: string, action: () => Promise<T>): Promise<T> {
|
|
323
|
+
try {
|
|
324
|
+
return await action();
|
|
325
|
+
} catch (error) {
|
|
326
|
+
if (!this.shouldReconnect(error)) {
|
|
327
|
+
throw error;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
await this.reconnect(operation, error);
|
|
331
|
+
return action();
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
private shouldReconnect(error: unknown): boolean {
|
|
336
|
+
const code = Number((error as { code?: number })?.code ?? -1);
|
|
337
|
+
const details = String((error as { details?: string })?.details ?? '');
|
|
338
|
+
const message = this.toErrorMessage(error);
|
|
339
|
+
|
|
340
|
+
if (code === 4 || code === 13 || code === 14) {
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const connectionIndicators = [
|
|
345
|
+
'deadline exceeded',
|
|
346
|
+
'unavailable',
|
|
347
|
+
'connection',
|
|
348
|
+
'connectivity',
|
|
349
|
+
'channel',
|
|
350
|
+
'socket',
|
|
351
|
+
'econnrefused',
|
|
352
|
+
'etimedout'
|
|
353
|
+
];
|
|
354
|
+
|
|
355
|
+
const combined = `${details} ${message}`.toLowerCase();
|
|
356
|
+
return connectionIndicators.some(indicator => combined.includes(indicator));
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
private toErrorMessage(error: unknown): string {
|
|
360
|
+
if (error instanceof Error) {
|
|
361
|
+
return error.message;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
return String(error);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
private startConnectionWatchdog(): void {
|
|
368
|
+
this._watchdogHandle = setInterval(() => {
|
|
369
|
+
void this.runHealthCheck();
|
|
370
|
+
}, ChronicleClient._healthCheckIntervalMs);
|
|
371
|
+
|
|
372
|
+
this._watchdogHandle.unref?.();
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
private async runHealthCheck(): Promise<void> {
|
|
376
|
+
if (this._isDisposed || !this._lifecycle.isConnected) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
try {
|
|
381
|
+
await this._connection.server.getVersionInfo({});
|
|
382
|
+
this._logger.verbose('Connection health check passed');
|
|
383
|
+
} catch (error) {
|
|
384
|
+
await this.reconnect('watchdog-health-check', error);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
private async startKernelKeepAlive(): Promise<void> {
|
|
389
|
+
this._keepAliveAbortController?.abort();
|
|
390
|
+
this._keepAliveAbortController = new AbortController();
|
|
391
|
+
const { signal } = this._keepAliveAbortController;
|
|
392
|
+
|
|
393
|
+
const keepAliveStream = this._connection.connections.connect(
|
|
394
|
+
{ ConnectionId: this._lifecycle.connectionId, ClientVersion: '1.0.0', IsRunningWithDebugger: false },
|
|
395
|
+
{ signal }
|
|
396
|
+
);
|
|
397
|
+
const iterator = keepAliveStream[Symbol.asyncIterator]();
|
|
398
|
+
const firstResult = await iterator.next();
|
|
399
|
+
if (firstResult.done) {
|
|
400
|
+
throw new Error('Connection service stream ended before sending first keep-alive');
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
await this._connection.connections.connectionKeepAlive(firstResult.value);
|
|
404
|
+
this._logger.info('Client registered with kernel keep-alive mechanism', {
|
|
405
|
+
connectionId: this._lifecycle.connectionId
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
void this.runKeepAliveLoop(iterator, signal);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
private async runKeepAliveLoop(iterator: AsyncIterator<unknown, void>, signal: AbortSignal): Promise<void> {
|
|
412
|
+
try {
|
|
413
|
+
while (!signal.aborted) {
|
|
414
|
+
const result = await iterator.next();
|
|
415
|
+
if (result.done) {
|
|
416
|
+
this._logger.info('Keep-alive stream ended');
|
|
417
|
+
break;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
await this._connection.connections.connectionKeepAlive(result.value as object);
|
|
421
|
+
this._logger.verbose('Keep-alive ping responded', {
|
|
422
|
+
connectionId: this._lifecycle.connectionId
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
} catch (err) {
|
|
426
|
+
if (!signal.aborted) {
|
|
427
|
+
this._logger.warn('Keep-alive loop ended with error', {
|
|
428
|
+
error: this.toErrorMessage(err)
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
private async registerArtifactsForStore(store: EventStore, reason: string): Promise<void> {
|
|
435
|
+
this._logger.debug('Registering artifacts for event store', {
|
|
436
|
+
eventStore: store.name.value,
|
|
437
|
+
namespace: store.namespace.value,
|
|
438
|
+
reason
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
if (this._discoveryOperation) {
|
|
442
|
+
await this._discoveryOperation;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
await store.registerArtifacts();
|
|
446
|
+
|
|
447
|
+
this._logger.info('Registered artifacts for event store', {
|
|
448
|
+
eventStore: store.name.value,
|
|
449
|
+
namespace: store.namespace.value,
|
|
450
|
+
reason
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { DefaultClientArtifactsProvider, IClientArtifactsProvider } from './artifacts';
|
|
5
|
+
import { ChronicleConnectionString } from './connection';
|
|
6
|
+
|
|
7
|
+
type ChronicleOptionsConstructorParams = {
|
|
8
|
+
connectionString: ChronicleConnectionString;
|
|
9
|
+
programIdentifier?: string;
|
|
10
|
+
softwareVersion?: string;
|
|
11
|
+
softwareCommit?: string;
|
|
12
|
+
clientArtifactsProvider?: IClientArtifactsProvider;
|
|
13
|
+
discoveryPatterns?: string[];
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type ChronicleOptionsFactoryParams = {
|
|
17
|
+
clientArtifactsProvider?: IClientArtifactsProvider;
|
|
18
|
+
discoveryPatterns?: string[];
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Represents configuration options for the Chronicle client.
|
|
23
|
+
*/
|
|
24
|
+
export class ChronicleOptions {
|
|
25
|
+
/**
|
|
26
|
+
* The connection string used to connect to the Chronicle Kernel.
|
|
27
|
+
*/
|
|
28
|
+
readonly connectionString: ChronicleConnectionString;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The program identifier used in causation metadata.
|
|
32
|
+
*/
|
|
33
|
+
readonly programIdentifier: string;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The software version used in causation metadata.
|
|
37
|
+
*/
|
|
38
|
+
readonly softwareVersion: string;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The software commit hash used in causation metadata.
|
|
42
|
+
*/
|
|
43
|
+
readonly softwareCommit: string;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The provider used for client artifact discovery.
|
|
47
|
+
*/
|
|
48
|
+
readonly clientArtifactsProvider: IClientArtifactsProvider;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Glob patterns used to discover artifact files at startup.
|
|
52
|
+
* Patterns prefixed with '!' are treated as exclusions.
|
|
53
|
+
* Set to an empty array to disable automatic file discovery.
|
|
54
|
+
*/
|
|
55
|
+
readonly discoveryPatterns: string[];
|
|
56
|
+
|
|
57
|
+
private constructor(options: ChronicleOptionsConstructorParams) {
|
|
58
|
+
this.connectionString = options.connectionString;
|
|
59
|
+
this.programIdentifier = options.programIdentifier ?? 'Unknown';
|
|
60
|
+
this.softwareVersion = options.softwareVersion ?? '0.0.0';
|
|
61
|
+
this.softwareCommit = options.softwareCommit ?? 'Unknown';
|
|
62
|
+
this.clientArtifactsProvider = options.clientArtifactsProvider ?? DefaultClientArtifactsProvider.default;
|
|
63
|
+
this.discoveryPatterns = options.discoveryPatterns ?? [
|
|
64
|
+
'**/*.ts',
|
|
65
|
+
'!**/*.d.ts',
|
|
66
|
+
'!**/node_modules',
|
|
67
|
+
'!**/dist',
|
|
68
|
+
'!**/build',
|
|
69
|
+
'!**/.git',
|
|
70
|
+
'!**/.vscode',
|
|
71
|
+
'!**/*.spec.ts',
|
|
72
|
+
'!**/*.test.ts'
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Creates a {@link ChronicleOptions} instance from a connection string.
|
|
78
|
+
* @param connectionString - The connection string to parse and use.
|
|
79
|
+
* @returns A new ChronicleOptions instance.
|
|
80
|
+
*/
|
|
81
|
+
static fromConnectionString(
|
|
82
|
+
connectionString: string | ChronicleConnectionString,
|
|
83
|
+
options?: ChronicleOptionsFactoryParams
|
|
84
|
+
): ChronicleOptions {
|
|
85
|
+
const parsed = typeof connectionString === 'string'
|
|
86
|
+
? new ChronicleConnectionString(connectionString)
|
|
87
|
+
: connectionString;
|
|
88
|
+
return new ChronicleOptions({ connectionString: parsed, clientArtifactsProvider: options?.clientArtifactsProvider, discoveryPatterns: options?.discoveryPatterns });
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Creates a {@link ChronicleOptions} instance for local development.
|
|
93
|
+
* Connects to Chronicle on localhost:35000 using the standard development
|
|
94
|
+
* client credentials and with TLS disabled, matching the default Chronicle
|
|
95
|
+
* development server configuration.
|
|
96
|
+
* @returns A new ChronicleOptions instance for development.
|
|
97
|
+
*/
|
|
98
|
+
static development(options?: ChronicleOptionsFactoryParams): ChronicleOptions {
|
|
99
|
+
return ChronicleOptions.fromConnectionString(
|
|
100
|
+
'chronicle://chronicle-dev-client:chronicle-dev-secret@localhost:35000?disableTls=true',
|
|
101
|
+
options
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Represents an error that occurred while appending an event.
|
|
6
|
+
*/
|
|
7
|
+
export interface AppendError {
|
|
8
|
+
/** The error message describing the failure. */
|
|
9
|
+
readonly message: string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { Guid } from '@cratis/fundamentals';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Options for appending an event to an event sequence.
|
|
8
|
+
*/
|
|
9
|
+
export interface AppendOptions {
|
|
10
|
+
/** Optional correlation identifier for tracking the append operation. */
|
|
11
|
+
correlationId?: string | Guid;
|
|
12
|
+
|
|
13
|
+
/** Optional explicit sequence number to use for the event. */
|
|
14
|
+
eventSourceId?: string;
|
|
15
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { AppendError } from './AppendError';
|
|
5
|
+
import { ConstraintViolation } from './ConstraintViolation';
|
|
6
|
+
import { EventSequenceNumber } from './EventSequenceNumber';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Represents the result of appending a single event to an event sequence.
|
|
10
|
+
*/
|
|
11
|
+
export interface AppendResult {
|
|
12
|
+
/** The sequence number assigned to the appended event. */
|
|
13
|
+
readonly sequenceNumber: EventSequenceNumber;
|
|
14
|
+
|
|
15
|
+
/** Constraint violations that occurred, if any. */
|
|
16
|
+
readonly constraintViolations: ReadonlyArray<ConstraintViolation>;
|
|
17
|
+
|
|
18
|
+
/** Errors that occurred during appending, if any. */
|
|
19
|
+
readonly errors: ReadonlyArray<AppendError>;
|
|
20
|
+
|
|
21
|
+
/** Whether the append was successful (no violations or errors). */
|
|
22
|
+
readonly isSuccess: boolean;
|
|
23
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Represents a constraint violation that occurred while appending an event.
|
|
6
|
+
*/
|
|
7
|
+
export interface ConstraintViolation {
|
|
8
|
+
/** The constraint identifier that was violated. */
|
|
9
|
+
readonly constraintId: string;
|
|
10
|
+
|
|
11
|
+
/** The violation message. */
|
|
12
|
+
readonly message: string;
|
|
13
|
+
|
|
14
|
+
/** Additional details about the violation. */
|
|
15
|
+
readonly details: Readonly<Record<string, string>>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { ChronicleConnection } from '../connection';
|
|
5
|
+
import { EventSequence } from './EventSequence';
|
|
6
|
+
import { EventSequenceId } from './EventSequenceId';
|
|
7
|
+
import { IEventLog } from './IEventLog';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Implements {@link IEventLog} by extending the base {@link EventSequence}.
|
|
11
|
+
* The event log is the default event sequence used for all domain events.
|
|
12
|
+
*/
|
|
13
|
+
export class EventLog extends EventSequence implements IEventLog {
|
|
14
|
+
constructor(
|
|
15
|
+
eventStoreName: string,
|
|
16
|
+
namespace: string,
|
|
17
|
+
connection: ChronicleConnection
|
|
18
|
+
) {
|
|
19
|
+
super(EventSequenceId.eventLog, eventStoreName, namespace, connection);
|
|
20
|
+
}
|
|
21
|
+
}
|