@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,372 @@
|
|
|
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 {
|
|
5
|
+
ChronicleConnection,
|
|
6
|
+
Guid as ContractsGuid
|
|
7
|
+
} from '../connection';
|
|
8
|
+
import { SpanStatusCode } from '@opentelemetry/api';
|
|
9
|
+
import { Guid } from '@cratis/fundamentals';
|
|
10
|
+
import { getEventTypeFor } from '../Events/eventTypeDecorator';
|
|
11
|
+
import { AppendOptions } from './AppendOptions';
|
|
12
|
+
import { AppendResult } from './AppendResult';
|
|
13
|
+
import { ConstraintViolation } from './ConstraintViolation';
|
|
14
|
+
import { IEventSequence } from './IEventSequence';
|
|
15
|
+
import { EventSequenceId } from './EventSequenceId';
|
|
16
|
+
import { EventSequenceNumber } from './EventSequenceNumber';
|
|
17
|
+
import { ChronicleTracer } from '../Tracing';
|
|
18
|
+
import { ChronicleMetrics } from '../Metrics';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Implements {@link IEventSequence} by communicating with the Chronicle Kernel
|
|
22
|
+
* via gRPC using the {@link ChronicleConnection}.
|
|
23
|
+
*/
|
|
24
|
+
export class EventSequence implements IEventSequence {
|
|
25
|
+
constructor(
|
|
26
|
+
readonly id: EventSequenceId,
|
|
27
|
+
private readonly _eventStoreName: string,
|
|
28
|
+
private readonly _namespace: string,
|
|
29
|
+
private readonly _connection: ChronicleConnection
|
|
30
|
+
) {}
|
|
31
|
+
|
|
32
|
+
/** @inheritdoc */
|
|
33
|
+
async append(eventSourceId: string, event: object, options?: AppendOptions): Promise<AppendResult> {
|
|
34
|
+
const eventType = getEventTypeFor(event.constructor as Function);
|
|
35
|
+
const correlationId = options?.correlationId === undefined
|
|
36
|
+
? Guid.create()
|
|
37
|
+
: Guid.as(options.correlationId);
|
|
38
|
+
const content = JSON.stringify(event);
|
|
39
|
+
|
|
40
|
+
const metricAttributes = {
|
|
41
|
+
'chronicle.event_store': this._eventStoreName,
|
|
42
|
+
'chronicle.namespace': this._namespace,
|
|
43
|
+
'chronicle.event_sequence_id': this.id.value,
|
|
44
|
+
'chronicle.event_type_id': eventType.id.value
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
return ChronicleTracer.startActiveSpan('chronicle.event_sequences.append', async span => {
|
|
48
|
+
span.setAttribute('chronicle.event_store', this._eventStoreName);
|
|
49
|
+
span.setAttribute('chronicle.namespace', this._namespace);
|
|
50
|
+
span.setAttribute('chronicle.event_sequence_id', this.id.value);
|
|
51
|
+
span.setAttribute('chronicle.event_source_id', eventSourceId);
|
|
52
|
+
span.setAttribute('chronicle.event_type_id', eventType.id.value);
|
|
53
|
+
span.setAttribute('chronicle.event_type_generation', eventType.generation.value);
|
|
54
|
+
const startTime = Date.now();
|
|
55
|
+
try {
|
|
56
|
+
const response = await this._connection.eventSequences.append({
|
|
57
|
+
EventStore: this._eventStoreName,
|
|
58
|
+
Namespace: this._namespace,
|
|
59
|
+
EventSequenceId: this.id.value,
|
|
60
|
+
CorrelationId: toContractsGuid(correlationId),
|
|
61
|
+
EventSourceType: 'Default',
|
|
62
|
+
EventSourceId: eventSourceId,
|
|
63
|
+
EventStreamType: 'Default',
|
|
64
|
+
EventStreamId: eventSourceId,
|
|
65
|
+
EventType: {
|
|
66
|
+
Id: eventType.id.value,
|
|
67
|
+
Generation: eventType.generation.value,
|
|
68
|
+
Tombstone: eventType.tombstone
|
|
69
|
+
},
|
|
70
|
+
Content: content,
|
|
71
|
+
Causation: [{
|
|
72
|
+
Occurred: { Value: new Date().toISOString() },
|
|
73
|
+
Type: 'TypeScriptClient.Append',
|
|
74
|
+
Properties: {}
|
|
75
|
+
}],
|
|
76
|
+
CausedBy: {
|
|
77
|
+
Subject: '5d032c92-9d5e-41eb-947a-ee5314ed0032',
|
|
78
|
+
Name: '[System]',
|
|
79
|
+
UserName: '[System]',
|
|
80
|
+
OnBehalfOf: undefined
|
|
81
|
+
},
|
|
82
|
+
ConcurrencyScope: {
|
|
83
|
+
// ulong.MaxValue sent as BigInt so the server recognises it as ConcurrencyScope.None (no validation)
|
|
84
|
+
SequenceNumber: 18446744073709551615n as unknown as number,
|
|
85
|
+
EventSourceId: false,
|
|
86
|
+
EventStreamType: '',
|
|
87
|
+
EventStreamId: '',
|
|
88
|
+
EventSourceType: '',
|
|
89
|
+
EventTypes: []
|
|
90
|
+
},
|
|
91
|
+
Tags: [],
|
|
92
|
+
Occurred: undefined,
|
|
93
|
+
Subject: eventSourceId
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const duration = Date.now() - startTime;
|
|
97
|
+
const result = this.mapAppendResponse(
|
|
98
|
+
response.SequenceNumber,
|
|
99
|
+
response.ConstraintViolations ?? [],
|
|
100
|
+
response.Errors ?? []
|
|
101
|
+
);
|
|
102
|
+
span.setAttribute('chronicle.sequence_number', result.sequenceNumber.value);
|
|
103
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
104
|
+
|
|
105
|
+
ChronicleMetrics.eventsAppended.add(1, metricAttributes);
|
|
106
|
+
ChronicleMetrics.appendDuration.record(duration, metricAttributes);
|
|
107
|
+
if (result.constraintViolations.length > 0) {
|
|
108
|
+
ChronicleMetrics.constraintViolations.add(result.constraintViolations.length, {
|
|
109
|
+
'chronicle.event_store': this._eventStoreName,
|
|
110
|
+
'chronicle.namespace': this._namespace,
|
|
111
|
+
'chronicle.event_sequence_id': this.id.value
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (result.errors.length > 0) {
|
|
115
|
+
ChronicleMetrics.appendErrors.add(result.errors.length, {
|
|
116
|
+
'chronicle.event_store': this._eventStoreName,
|
|
117
|
+
'chronicle.namespace': this._namespace,
|
|
118
|
+
'chronicle.event_sequence_id': this.id.value
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
} catch (error) {
|
|
123
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) });
|
|
124
|
+
span.recordException(error as Error);
|
|
125
|
+
ChronicleMetrics.appendErrors.add(1, {
|
|
126
|
+
'chronicle.event_store': this._eventStoreName,
|
|
127
|
+
'chronicle.namespace': this._namespace,
|
|
128
|
+
'chronicle.event_sequence_id': this.id.value
|
|
129
|
+
});
|
|
130
|
+
throw error;
|
|
131
|
+
} finally {
|
|
132
|
+
span.end();
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** @inheritdoc */
|
|
138
|
+
async appendMany(eventSourceId: string, events: object[], options?: AppendOptions): Promise<AppendResult[]> {
|
|
139
|
+
const correlationId = options?.correlationId === undefined
|
|
140
|
+
? Guid.create()
|
|
141
|
+
: Guid.as(options.correlationId);
|
|
142
|
+
|
|
143
|
+
const eventsToAppend = events.map(event => {
|
|
144
|
+
const eventType = getEventTypeFor(event.constructor as Function);
|
|
145
|
+
return {
|
|
146
|
+
EventSourceType: 'Default',
|
|
147
|
+
EventSourceId: eventSourceId,
|
|
148
|
+
EventStreamType: 'Default',
|
|
149
|
+
EventStreamId: eventSourceId,
|
|
150
|
+
EventType: {
|
|
151
|
+
Id: eventType.id.value,
|
|
152
|
+
Generation: eventType.generation.value,
|
|
153
|
+
Tombstone: eventType.tombstone
|
|
154
|
+
},
|
|
155
|
+
Content: JSON.stringify(event),
|
|
156
|
+
Causation: [{
|
|
157
|
+
Occurred: { Value: new Date().toISOString() },
|
|
158
|
+
Type: 'TypeScriptClient.AppendMany.Event',
|
|
159
|
+
Properties: {}
|
|
160
|
+
}],
|
|
161
|
+
CausedBy: {
|
|
162
|
+
Subject: '5d032c92-9d5e-41eb-947a-ee5314ed0032',
|
|
163
|
+
Name: '[System]',
|
|
164
|
+
UserName: '[System]',
|
|
165
|
+
OnBehalfOf: undefined
|
|
166
|
+
},
|
|
167
|
+
ConcurrencyScope: {
|
|
168
|
+
SequenceNumber: 18446744073709551615n as unknown as number,
|
|
169
|
+
EventSourceId: false,
|
|
170
|
+
EventStreamType: '',
|
|
171
|
+
EventStreamId: '',
|
|
172
|
+
EventSourceType: '',
|
|
173
|
+
EventTypes: []
|
|
174
|
+
},
|
|
175
|
+
Tags: [],
|
|
176
|
+
Occurred: undefined,
|
|
177
|
+
Subject: eventSourceId
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
const batchMetricAttributes = {
|
|
182
|
+
'chronicle.event_store': this._eventStoreName,
|
|
183
|
+
'chronicle.namespace': this._namespace,
|
|
184
|
+
'chronicle.event_sequence_id': this.id.value,
|
|
185
|
+
'chronicle.events_count': events.length
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
return ChronicleTracer.startActiveSpan('chronicle.event_sequences.append_many', async span => {
|
|
189
|
+
span.setAttribute('chronicle.event_store', this._eventStoreName);
|
|
190
|
+
span.setAttribute('chronicle.namespace', this._namespace);
|
|
191
|
+
span.setAttribute('chronicle.event_sequence_id', this.id.value);
|
|
192
|
+
span.setAttribute('chronicle.event_source_id', eventSourceId);
|
|
193
|
+
span.setAttribute('chronicle.events_count', events.length);
|
|
194
|
+
const startTime = Date.now();
|
|
195
|
+
try {
|
|
196
|
+
const response = await this._connection.eventSequences.appendMany({
|
|
197
|
+
EventStore: this._eventStoreName,
|
|
198
|
+
Namespace: this._namespace,
|
|
199
|
+
EventSequenceId: this.id.value,
|
|
200
|
+
CorrelationId: toContractsGuid(correlationId),
|
|
201
|
+
Events: eventsToAppend,
|
|
202
|
+
Causation: [{
|
|
203
|
+
Occurred: { Value: new Date().toISOString() },
|
|
204
|
+
Type: 'TypeScriptClient.AppendMany.Batch',
|
|
205
|
+
Properties: {}
|
|
206
|
+
}],
|
|
207
|
+
CausedBy: {
|
|
208
|
+
Subject: '5d032c92-9d5e-41eb-947a-ee5314ed0032',
|
|
209
|
+
Name: '[System]',
|
|
210
|
+
UserName: '[System]',
|
|
211
|
+
OnBehalfOf: undefined
|
|
212
|
+
},
|
|
213
|
+
ConcurrencyScopes: {}
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
const duration = Date.now() - startTime;
|
|
217
|
+
const result = (response.SequenceNumbers ?? []).map((sequenceNumber, index) =>
|
|
218
|
+
this.mapAppendResponse(
|
|
219
|
+
sequenceNumber,
|
|
220
|
+
response.ConstraintViolations ?? [],
|
|
221
|
+
(response.Errors ?? []).filter((_, errorIndex) => errorIndex === index)
|
|
222
|
+
)
|
|
223
|
+
);
|
|
224
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
225
|
+
|
|
226
|
+
ChronicleMetrics.batchAppendsPerformed.add(1, batchMetricAttributes);
|
|
227
|
+
ChronicleMetrics.eventsAppended.add(events.length, batchMetricAttributes);
|
|
228
|
+
ChronicleMetrics.appendManyDuration.record(duration, batchMetricAttributes);
|
|
229
|
+
|
|
230
|
+
const totalViolations = result.reduce((sum, appendResult) => sum + appendResult.constraintViolations.length, 0);
|
|
231
|
+
if (totalViolations > 0) {
|
|
232
|
+
ChronicleMetrics.constraintViolations.add(totalViolations, {
|
|
233
|
+
'chronicle.event_store': this._eventStoreName,
|
|
234
|
+
'chronicle.namespace': this._namespace,
|
|
235
|
+
'chronicle.event_sequence_id': this.id.value
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
const totalErrors = result.reduce((sum, appendResult) => sum + appendResult.errors.length, 0);
|
|
239
|
+
if (totalErrors > 0) {
|
|
240
|
+
ChronicleMetrics.appendErrors.add(totalErrors, {
|
|
241
|
+
'chronicle.event_store': this._eventStoreName,
|
|
242
|
+
'chronicle.namespace': this._namespace,
|
|
243
|
+
'chronicle.event_sequence_id': this.id.value
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return result;
|
|
247
|
+
} catch (error) {
|
|
248
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) });
|
|
249
|
+
span.recordException(error as Error);
|
|
250
|
+
ChronicleMetrics.appendErrors.add(1, {
|
|
251
|
+
'chronicle.event_store': this._eventStoreName,
|
|
252
|
+
'chronicle.namespace': this._namespace,
|
|
253
|
+
'chronicle.event_sequence_id': this.id.value
|
|
254
|
+
});
|
|
255
|
+
throw error;
|
|
256
|
+
} finally {
|
|
257
|
+
span.end();
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/** @inheritdoc */
|
|
263
|
+
async getTailSequenceNumber(eventSourceId?: string): Promise<EventSequenceNumber> {
|
|
264
|
+
return ChronicleTracer.startActiveSpan('chronicle.event_sequences.get_tail_sequence_number', async span => {
|
|
265
|
+
span.setAttribute('chronicle.event_store', this._eventStoreName);
|
|
266
|
+
span.setAttribute('chronicle.namespace', this._namespace);
|
|
267
|
+
span.setAttribute('chronicle.event_sequence_id', this.id.value);
|
|
268
|
+
if (eventSourceId !== undefined) {
|
|
269
|
+
span.setAttribute('chronicle.event_source_id', eventSourceId);
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
const response = await this._connection.eventSequences.getTailSequenceNumber({
|
|
273
|
+
EventStore: this._eventStoreName,
|
|
274
|
+
Namespace: this._namespace,
|
|
275
|
+
EventSequenceId: this.id.value,
|
|
276
|
+
EventSourceId: eventSourceId ?? '',
|
|
277
|
+
EventTypes: [],
|
|
278
|
+
EventSourceType: 'Default',
|
|
279
|
+
EventStreamId: '',
|
|
280
|
+
EventStreamType: 'Default'
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
const result = new EventSequenceNumber(response.SequenceNumber ?? 0);
|
|
284
|
+
span.setAttribute('chronicle.sequence_number', result.value);
|
|
285
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
286
|
+
return result;
|
|
287
|
+
} catch (error) {
|
|
288
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) });
|
|
289
|
+
span.recordException(error as Error);
|
|
290
|
+
throw error;
|
|
291
|
+
} finally {
|
|
292
|
+
span.end();
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/** @inheritdoc */
|
|
298
|
+
async hasEventsFor(eventSourceId: string): Promise<boolean> {
|
|
299
|
+
return ChronicleTracer.startActiveSpan('chronicle.event_sequences.has_events_for', async span => {
|
|
300
|
+
span.setAttribute('chronicle.event_store', this._eventStoreName);
|
|
301
|
+
span.setAttribute('chronicle.namespace', this._namespace);
|
|
302
|
+
span.setAttribute('chronicle.event_sequence_id', this.id.value);
|
|
303
|
+
span.setAttribute('chronicle.event_source_id', eventSourceId);
|
|
304
|
+
try {
|
|
305
|
+
const response = await this._connection.eventSequences.hasEventsForEventSourceId({
|
|
306
|
+
EventStore: this._eventStoreName,
|
|
307
|
+
Namespace: this._namespace,
|
|
308
|
+
EventSequenceId: this.id.value,
|
|
309
|
+
EventSourceId: eventSourceId
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
const result = response.HasEvents ?? false;
|
|
313
|
+
span.setAttribute('chronicle.has_events', result);
|
|
314
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
315
|
+
return result;
|
|
316
|
+
} catch (error) {
|
|
317
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) });
|
|
318
|
+
span.recordException(error as Error);
|
|
319
|
+
throw error;
|
|
320
|
+
} finally {
|
|
321
|
+
span.end();
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
private mapAppendResponse(
|
|
327
|
+
sequenceNumber: number,
|
|
328
|
+
constraintViolations: Array<{ ConstraintId?: string; Message?: string; Details?: Record<string, string> }>,
|
|
329
|
+
errors: string[]
|
|
330
|
+
): AppendResult {
|
|
331
|
+
const mappedViolations: ConstraintViolation[] = constraintViolations.map(violation => ({
|
|
332
|
+
constraintId: violation.ConstraintId ?? '',
|
|
333
|
+
message: violation.Message ?? '',
|
|
334
|
+
details: violation.Details ?? {}
|
|
335
|
+
}));
|
|
336
|
+
|
|
337
|
+
const mappedErrors = errors.map(message => ({ message }));
|
|
338
|
+
|
|
339
|
+
// The server uses ulong.MaxValue as a sentinel for "Unavailable" when an
|
|
340
|
+
// append fails (constraint violation, etc.). JS Number loses precision at
|
|
341
|
+
// that scale so we normalise anything >= MAX_SAFE_INTEGER to 0.
|
|
342
|
+
const safeSequenceNumber = sequenceNumber >= Number.MAX_SAFE_INTEGER ? 0 : sequenceNumber;
|
|
343
|
+
|
|
344
|
+
return {
|
|
345
|
+
sequenceNumber: new EventSequenceNumber(safeSequenceNumber),
|
|
346
|
+
constraintViolations: mappedViolations,
|
|
347
|
+
errors: mappedErrors,
|
|
348
|
+
isSuccess: mappedViolations.length === 0 && mappedErrors.length === 0
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Converts a RFC 4122 Guid string into the protobuf Guid shape used by Chronicle contracts.
|
|
355
|
+
* @param guid - The Guid to convert.
|
|
356
|
+
* @returns The converted protobuf Guid with fixed64-safe hi/lo values.
|
|
357
|
+
*/
|
|
358
|
+
function toContractsGuid(guid: Guid): ContractsGuid {
|
|
359
|
+
const hex = guid.toString().replace(/-/g, '');
|
|
360
|
+
const hi = BigInt(`0x${hex.substring(0, 16)}`);
|
|
361
|
+
const lo = BigInt(`0x${hex.substring(16, 32)}`);
|
|
362
|
+
|
|
363
|
+
// Mask to MAX_SAFE_INTEGER so the contracts package can decode the Guid
|
|
364
|
+
// from the response without a longToNumber overflow. Correlation IDs are
|
|
365
|
+
// opaque identifiers, so 52+52 bits of entropy is more than sufficient.
|
|
366
|
+
const safe = BigInt(Number.MAX_SAFE_INTEGER);
|
|
367
|
+
return {
|
|
368
|
+
hi: Number(hi & safe),
|
|
369
|
+
lo: Number(lo & safe)
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
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 the unique identifier of an event sequence.
|
|
6
|
+
*/
|
|
7
|
+
export class EventSequenceId {
|
|
8
|
+
/** The identifier of the default event log sequence. */
|
|
9
|
+
static readonly eventLog = new EventSequenceId('event-log');
|
|
10
|
+
|
|
11
|
+
constructor(readonly value: string) {}
|
|
12
|
+
|
|
13
|
+
/** @inheritdoc */
|
|
14
|
+
toString(): string {
|
|
15
|
+
return this.value;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 the sequence number of an event within an event sequence.
|
|
6
|
+
*/
|
|
7
|
+
export class EventSequenceNumber {
|
|
8
|
+
/** Represents the first possible sequence number. */
|
|
9
|
+
static readonly first = new EventSequenceNumber(0);
|
|
10
|
+
|
|
11
|
+
/** Represents an unset sequence number. */
|
|
12
|
+
static readonly unset = new EventSequenceNumber(Number.MAX_SAFE_INTEGER);
|
|
13
|
+
|
|
14
|
+
constructor(readonly value: number) {}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Determines whether this sequence number comes before another.
|
|
18
|
+
* @param other - The other sequence number to compare with.
|
|
19
|
+
* @returns True if this sequence number is before the other.
|
|
20
|
+
*/
|
|
21
|
+
isBefore(other: EventSequenceNumber): boolean {
|
|
22
|
+
return this.value < other.value;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Determines whether this sequence number comes after another.
|
|
27
|
+
* @param other - The other sequence number to compare with.
|
|
28
|
+
* @returns True if this sequence number is after the other.
|
|
29
|
+
*/
|
|
30
|
+
isAfter(other: EventSequenceNumber): boolean {
|
|
31
|
+
return this.value > other.value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** @inheritdoc */
|
|
35
|
+
toString(): string {
|
|
36
|
+
return this.value.toString();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -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
|
+
import { IEventSequence } from './IEventSequence';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Defines the API surface for the event log, which is the default event sequence.
|
|
8
|
+
* The event log is the primary event sequence where all domain events are appended.
|
|
9
|
+
*/
|
|
10
|
+
export interface IEventLog extends IEventSequence {}
|
|
@@ -0,0 +1,47 @@
|
|
|
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 { AppendOptions } from './AppendOptions';
|
|
5
|
+
import { AppendResult } from './AppendResult';
|
|
6
|
+
import { EventSequenceId } from './EventSequenceId';
|
|
7
|
+
import { EventSequenceNumber } from './EventSequenceNumber';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Defines the API surface for an event sequence.
|
|
11
|
+
*/
|
|
12
|
+
export interface IEventSequence {
|
|
13
|
+
/** The unique identifier of this event sequence. */
|
|
14
|
+
readonly id: EventSequenceId;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Appends a single event to the event sequence.
|
|
18
|
+
* @param eventSourceId - The identifier of the event source.
|
|
19
|
+
* @param event - The event to append.
|
|
20
|
+
* @param options - Optional append options.
|
|
21
|
+
* @returns The result of the append operation.
|
|
22
|
+
*/
|
|
23
|
+
append(eventSourceId: string, event: object, options?: AppendOptions): Promise<AppendResult>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Appends multiple events to the event sequence.
|
|
27
|
+
* @param eventSourceId - The identifier of the event source.
|
|
28
|
+
* @param events - The events to append.
|
|
29
|
+
* @param options - Optional append options.
|
|
30
|
+
* @returns The results of the append operations, one per event.
|
|
31
|
+
*/
|
|
32
|
+
appendMany(eventSourceId: string, events: object[], options?: AppendOptions): Promise<AppendResult[]>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Gets the tail sequence number (the number of the most recently appended event).
|
|
36
|
+
* @param eventSourceId - Optional event source identifier to filter by.
|
|
37
|
+
* @returns The tail sequence number.
|
|
38
|
+
*/
|
|
39
|
+
getTailSequenceNumber(eventSourceId?: string): Promise<EventSequenceNumber>;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Determines whether there are events for a given event source identifier.
|
|
43
|
+
* @param eventSourceId - The event source identifier to check.
|
|
44
|
+
* @returns True if there are events for the given event source.
|
|
45
|
+
*/
|
|
46
|
+
hasEventsFor(eventSourceId: string): Promise<boolean>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
export { EventSequenceId } from './EventSequenceId';
|
|
5
|
+
export { EventSequenceNumber } from './EventSequenceNumber';
|
|
6
|
+
export type { AppendError } from './AppendError';
|
|
7
|
+
export type { ConstraintViolation } from './ConstraintViolation';
|
|
8
|
+
export type { AppendResult } from './AppendResult';
|
|
9
|
+
export type { AppendOptions } from './AppendOptions';
|
|
10
|
+
export type { IEventSequence } from './IEventSequence';
|
|
11
|
+
export type { IEventLog } from './IEventLog';
|
|
12
|
+
export { EventSequence } from './EventSequence';
|
|
13
|
+
export { EventLog } from './EventLog';
|
package/EventStore.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
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 { ChronicleConnection } from './connection';
|
|
7
|
+
import { ConnectionLifecycle } from './connection/ConnectionLifecycle';
|
|
8
|
+
import { EventLog } from './EventSequences/EventLog';
|
|
9
|
+
import { EventSequence } from './EventSequences/EventSequence';
|
|
10
|
+
import { EventSequenceId } from './EventSequences/EventSequenceId';
|
|
11
|
+
import { IEventLog } from './EventSequences/IEventLog';
|
|
12
|
+
import { IEventSequence } from './EventSequences/IEventSequence';
|
|
13
|
+
import { EventStoreName } from './EventStoreName';
|
|
14
|
+
import { EventStoreNamespaceName } from './EventStoreNamespaceName';
|
|
15
|
+
import { IEventStore } from './IEventStore';
|
|
16
|
+
import { EventTypes } from './Events/EventTypes';
|
|
17
|
+
import { IEventTypes } from './Events/IEventTypes';
|
|
18
|
+
import { Constraints } from './Events/Constraints/Constraints';
|
|
19
|
+
import { IConstraints } from './Events/Constraints/IConstraints';
|
|
20
|
+
import { Projections } from './Projections/Projections';
|
|
21
|
+
import { IProjections } from './Projections/IProjections';
|
|
22
|
+
import { Reactors } from './Reactors/Reactors';
|
|
23
|
+
import { IReactors } from './Reactors/IReactors';
|
|
24
|
+
import { Reducers } from './Reducers/Reducers';
|
|
25
|
+
import { IReducers } from './Reducers/IReducers';
|
|
26
|
+
import { ChronicleTracer } from './Tracing';
|
|
27
|
+
import { DefaultClientArtifactsProvider } from './artifacts/DefaultClientArtifactsProvider';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Implements {@link IEventStore} by communicating with the Chronicle Kernel
|
|
31
|
+
* via gRPC using the provided {@link ChronicleConnection}.
|
|
32
|
+
*/
|
|
33
|
+
export class EventStore implements IEventStore {
|
|
34
|
+
private readonly _logger = diag.createComponentLogger({
|
|
35
|
+
namespace: '@cratis/chronicle/EventStore'
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
readonly eventLog: IEventLog;
|
|
39
|
+
readonly eventTypes: IEventTypes;
|
|
40
|
+
readonly constraints: IConstraints;
|
|
41
|
+
readonly projections: IProjections;
|
|
42
|
+
readonly reactors: IReactors;
|
|
43
|
+
readonly reducers: IReducers;
|
|
44
|
+
|
|
45
|
+
private readonly _sequences: Map<string, IEventSequence> = new Map();
|
|
46
|
+
|
|
47
|
+
constructor(
|
|
48
|
+
readonly name: EventStoreName,
|
|
49
|
+
readonly namespace: EventStoreNamespaceName,
|
|
50
|
+
private readonly _connection: ChronicleConnection,
|
|
51
|
+
lifecycle: ConnectionLifecycle
|
|
52
|
+
) {
|
|
53
|
+
this.eventLog = new EventLog(name.value, namespace.value, _connection);
|
|
54
|
+
this._sequences.set(EventSequenceId.eventLog.value, this.eventLog);
|
|
55
|
+
|
|
56
|
+
const artifacts = DefaultClientArtifactsProvider.default;
|
|
57
|
+
this.eventTypes = new EventTypes(name.value, _connection, artifacts);
|
|
58
|
+
this.constraints = new Constraints(name.value, _connection, artifacts);
|
|
59
|
+
this.projections = new Projections(name.value, _connection, artifacts);
|
|
60
|
+
this.reactors = new Reactors(artifacts, _connection, name.value, namespace.value, lifecycle);
|
|
61
|
+
this.reducers = new Reducers(artifacts, _connection, name.value, namespace.value, lifecycle);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Registers all discovered artifacts with the Chronicle Kernel.
|
|
66
|
+
* Called on initial connect and on reconnect.
|
|
67
|
+
* @returns A promise that resolves when all registrations are complete.
|
|
68
|
+
*/
|
|
69
|
+
async registerArtifacts(): Promise<void> {
|
|
70
|
+
this._logger.debug('Discovering artifacts for registration', {
|
|
71
|
+
eventStore: this.name.value,
|
|
72
|
+
namespace: this.namespace.value
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
await this.eventTypes.discover();
|
|
76
|
+
await Promise.all([
|
|
77
|
+
this.constraints.discover(),
|
|
78
|
+
this.projections.discover(),
|
|
79
|
+
this.reactors.discover(),
|
|
80
|
+
this.reducers.discover()
|
|
81
|
+
]);
|
|
82
|
+
|
|
83
|
+
this._logger.debug('Registering discovered artifacts', {
|
|
84
|
+
eventStore: this.name.value,
|
|
85
|
+
namespace: this.namespace.value
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
await this.eventTypes.register();
|
|
89
|
+
await Promise.all([
|
|
90
|
+
this.constraints.register(),
|
|
91
|
+
this.projections.register(),
|
|
92
|
+
this.reactors.register(),
|
|
93
|
+
this.reducers.register()
|
|
94
|
+
]);
|
|
95
|
+
|
|
96
|
+
this._logger.info('Artifact registration completed', {
|
|
97
|
+
eventStore: this.name.value,
|
|
98
|
+
namespace: this.namespace.value
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** @inheritdoc */
|
|
103
|
+
getEventSequence(id: EventSequenceId): IEventSequence {
|
|
104
|
+
const existing = this._sequences.get(id.value);
|
|
105
|
+
if (existing) {
|
|
106
|
+
return existing;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const sequence = new EventSequence(id, this.name.value, this.namespace.value, this._connection);
|
|
110
|
+
this._sequences.set(id.value, sequence);
|
|
111
|
+
return sequence;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** @inheritdoc */
|
|
115
|
+
async getNamespaces(): Promise<EventStoreNamespaceName[]> {
|
|
116
|
+
return ChronicleTracer.startActiveSpan('chronicle.event_store.get_namespaces', async span => {
|
|
117
|
+
span.setAttribute('chronicle.event_store', this.name.value);
|
|
118
|
+
try {
|
|
119
|
+
const response = await this._connection.namespaces.getNamespaces({ EventStore: this.name.value });
|
|
120
|
+
const result = (response.items ?? []).map((namespace: string) => new EventStoreNamespaceName(namespace));
|
|
121
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
122
|
+
return result;
|
|
123
|
+
} catch (error) {
|
|
124
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) });
|
|
125
|
+
span.recordException(error as Error);
|
|
126
|
+
throw error;
|
|
127
|
+
} finally {
|
|
128
|
+
span.end();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
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 the name of an event store.
|
|
6
|
+
*/
|
|
7
|
+
export class EventStoreName {
|
|
8
|
+
constructor(readonly value: string) {}
|
|
9
|
+
|
|
10
|
+
/** @inheritdoc */
|
|
11
|
+
toString(): string {
|
|
12
|
+
return this.value;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 the name of a namespace within an event store.
|
|
6
|
+
*/
|
|
7
|
+
export class EventStoreNamespaceName {
|
|
8
|
+
/** The default namespace name. */
|
|
9
|
+
static readonly default = new EventStoreNamespaceName('Default');
|
|
10
|
+
|
|
11
|
+
constructor(readonly value: string) {}
|
|
12
|
+
|
|
13
|
+
/** @inheritdoc */
|
|
14
|
+
toString(): string {
|
|
15
|
+
return this.value;
|
|
16
|
+
}
|
|
17
|
+
}
|