@bett3r-dev/pv3 1.0.0 → 1.1.7
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/CHANGELOG.md +329 -0
- package/build/adapters/cache/memory/index.d.ts.map +1 -1
- package/build/adapters/cache/memory/index.js +93 -20
- package/build/adapters/cache/memory/index.js.map +1 -1
- package/build/adapters/cache/memory/index.test.d.ts +2 -0
- package/build/adapters/cache/memory/index.test.d.ts.map +1 -0
- package/build/adapters/cache/memory/index.test.js +98 -0
- package/build/adapters/cache/memory/index.test.js.map +1 -0
- package/build/adapters/configuration/dotEnv.d.ts.map +1 -1
- package/build/adapters/configuration/dotEnv.js.map +1 -1
- package/build/adapters/database/memory/index.d.ts +5 -1
- package/build/adapters/database/memory/index.d.ts.map +1 -1
- package/build/adapters/database/memory/index.js +336 -44
- package/build/adapters/database/memory/index.js.map +1 -1
- package/build/adapters/database/memory/index.test.d.ts +2 -0
- package/build/adapters/database/memory/index.test.d.ts.map +1 -0
- package/build/adapters/database/memory/index.test.js +167 -0
- package/build/adapters/database/memory/index.test.js.map +1 -0
- package/build/adapters/database/memory/pagingCursorZero.test.d.ts +2 -0
- package/build/adapters/database/memory/pagingCursorZero.test.d.ts.map +1 -0
- package/build/adapters/database/memory/pagingCursorZero.test.js +60 -0
- package/build/adapters/database/memory/pagingCursorZero.test.js.map +1 -0
- package/build/adapters/database/memory/pagingVanishedCursor.test.d.ts +2 -0
- package/build/adapters/database/memory/pagingVanishedCursor.test.d.ts.map +1 -0
- package/build/adapters/database/memory/pagingVanishedCursor.test.js +72 -0
- package/build/adapters/database/memory/pagingVanishedCursor.test.js.map +1 -0
- package/build/adapters/endpoints/addAuthUser/index.d.ts +6 -4
- package/build/adapters/endpoints/addAuthUser/index.d.ts.map +1 -1
- package/build/adapters/endpoints/addAuthUser/index.js +12 -31
- package/build/adapters/endpoints/addAuthUser/index.js.map +1 -1
- package/build/adapters/endpoints/addDevAuthUser/index.d.ts +32 -0
- package/build/adapters/endpoints/addDevAuthUser/index.d.ts.map +1 -0
- package/build/adapters/endpoints/addDevAuthUser/index.js +39 -0
- package/build/adapters/endpoints/addDevAuthUser/index.js.map +1 -0
- package/build/adapters/endpoints/asyncLocalStorage/__tests__/asyncLocalStorage.test.d.ts +2 -0
- package/build/adapters/endpoints/asyncLocalStorage/__tests__/asyncLocalStorage.test.d.ts.map +1 -0
- package/build/adapters/endpoints/asyncLocalStorage/__tests__/asyncLocalStorage.test.js +97 -0
- package/build/adapters/endpoints/asyncLocalStorage/__tests__/asyncLocalStorage.test.js.map +1 -0
- package/build/adapters/endpoints/asyncLocalStorage/index.d.ts +22 -0
- package/build/adapters/endpoints/asyncLocalStorage/index.d.ts.map +1 -0
- package/build/adapters/endpoints/asyncLocalStorage/index.js +62 -0
- package/build/adapters/endpoints/asyncLocalStorage/index.js.map +1 -0
- package/build/adapters/endpoints/endpointValidation/__tests__/endpointValidation.test.d.ts +2 -0
- package/build/adapters/endpoints/endpointValidation/__tests__/endpointValidation.test.d.ts.map +1 -0
- package/build/adapters/endpoints/endpointValidation/__tests__/endpointValidation.test.js +98 -0
- package/build/adapters/endpoints/endpointValidation/__tests__/endpointValidation.test.js.map +1 -0
- package/build/adapters/endpoints/endpointValidation/index.d.ts +2 -2
- package/build/adapters/endpoints/endpointValidation/index.d.ts.map +1 -1
- package/build/adapters/endpoints/endpointValidation/index.js +19 -9
- package/build/adapters/endpoints/endpointValidation/index.js.map +1 -1
- package/build/adapters/endpoints/genericMiddleware/index.d.ts +23 -0
- package/build/adapters/endpoints/genericMiddleware/index.d.ts.map +1 -0
- package/build/adapters/endpoints/genericMiddleware/index.js +30 -0
- package/build/adapters/endpoints/genericMiddleware/index.js.map +1 -0
- package/build/adapters/endpoints/httpMethodOverride/index.d.ts +8 -0
- package/build/adapters/endpoints/httpMethodOverride/index.d.ts.map +1 -0
- package/build/adapters/endpoints/httpMethodOverride/index.js +44 -0
- package/build/adapters/endpoints/httpMethodOverride/index.js.map +1 -0
- package/build/adapters/endpoints/index.d.ts +5 -0
- package/build/adapters/endpoints/index.d.ts.map +1 -1
- package/build/adapters/endpoints/index.js +5 -1
- package/build/adapters/endpoints/index.js.map +1 -1
- package/build/adapters/endpoints/localAuthorization/index.d.ts +1 -0
- package/build/adapters/endpoints/localAuthorization/index.js +2 -0
- package/build/adapters/endpoints/localAuthorization/index.js.map +1 -1
- package/build/adapters/endpoints/mapQueryFromHeaders/index.d.ts +8 -0
- package/build/adapters/endpoints/mapQueryFromHeaders/index.d.ts.map +1 -0
- package/build/adapters/endpoints/mapQueryFromHeaders/index.js +36 -0
- package/build/adapters/endpoints/mapQueryFromHeaders/index.js.map +1 -0
- package/build/adapters/endpoints/tcpConsumer/index.d.ts.map +1 -1
- package/build/adapters/endpoints/tcpConsumer/index.js +8 -7
- package/build/adapters/endpoints/tcpConsumer/index.js.map +1 -1
- package/build/adapters/endpoints/userSession/__tests__/userSession.test.d.ts +2 -0
- package/build/adapters/endpoints/userSession/__tests__/userSession.test.d.ts.map +1 -0
- package/build/adapters/endpoints/userSession/__tests__/userSession.test.js +175 -0
- package/build/adapters/endpoints/userSession/__tests__/userSession.test.js.map +1 -0
- package/build/adapters/endpoints/userSession/index.d.ts +2 -2
- package/build/adapters/endpoints/userSession/index.d.ts.map +1 -1
- package/build/adapters/endpoints/userSession/index.js +36 -2
- package/build/adapters/endpoints/userSession/index.js.map +1 -1
- package/build/adapters/eventstore/database.d.ts.map +1 -1
- package/build/adapters/eventstore/database.js +261 -58
- package/build/adapters/eventstore/database.js.map +1 -1
- package/build/adapters/eventstore/database.test.d.ts +2 -0
- package/build/adapters/eventstore/database.test.d.ts.map +1 -0
- package/build/adapters/eventstore/database.test.js +123 -0
- package/build/adapters/eventstore/database.test.js.map +1 -0
- package/build/adapters/infrastructure/local/index.d.ts +2 -2
- package/build/adapters/infrastructure/local/index.d.ts.map +1 -1
- package/build/adapters/infrastructure/local/index.js +3 -3
- package/build/adapters/infrastructure/local/index.js.map +1 -1
- package/build/adapters/logger/__tests__/json.test.d.ts +2 -0
- package/build/adapters/logger/__tests__/json.test.d.ts.map +1 -0
- package/build/adapters/logger/__tests__/json.test.js +125 -0
- package/build/adapters/logger/__tests__/json.test.js.map +1 -0
- package/build/adapters/logger/console.d.ts.map +1 -1
- package/build/adapters/logger/console.js +4 -2
- package/build/adapters/logger/console.js.map +1 -1
- package/build/adapters/logger/http.d.ts +3 -0
- package/build/adapters/logger/http.d.ts.map +1 -0
- package/build/adapters/logger/http.js +49 -0
- package/build/adapters/logger/http.js.map +1 -0
- package/build/adapters/logger/index.d.ts +3 -0
- package/build/adapters/logger/index.d.ts.map +1 -1
- package/build/adapters/logger/index.js +3 -0
- package/build/adapters/logger/index.js.map +1 -1
- package/build/adapters/logger/json.d.ts +3 -0
- package/build/adapters/logger/json.d.ts.map +1 -0
- package/build/adapters/logger/json.js +41 -0
- package/build/adapters/logger/json.js.map +1 -0
- package/build/adapters/logger/stdout.d.ts +3 -0
- package/build/adapters/logger/stdout.d.ts.map +1 -0
- package/build/adapters/logger/stdout.js +52 -0
- package/build/adapters/logger/stdout.js.map +1 -0
- package/build/index.d.ts +3 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/libraries/deployment-units/computeMDUs.d.ts +11 -0
- package/build/libraries/deployment-units/computeMDUs.d.ts.map +1 -0
- package/build/libraries/deployment-units/computeMDUs.js +695 -0
- package/build/libraries/deployment-units/computeMDUs.js.map +1 -0
- package/build/libraries/deployment-units/computeMDUs.test.d.ts +2 -0
- package/build/libraries/deployment-units/computeMDUs.test.d.ts.map +1 -0
- package/build/libraries/deployment-units/computeMDUs.test.js +996 -0
- package/build/libraries/deployment-units/computeMDUs.test.js.map +1 -0
- package/build/libraries/deployment-units/index.d.ts +6 -0
- package/build/libraries/deployment-units/index.d.ts.map +1 -0
- package/build/libraries/deployment-units/index.js +8 -0
- package/build/libraries/deployment-units/index.js.map +1 -0
- package/build/libraries/deployment-units/manifestWriter.d.ts +11 -0
- package/build/libraries/deployment-units/manifestWriter.d.ts.map +1 -0
- package/build/libraries/deployment-units/manifestWriter.js +28 -0
- package/build/libraries/deployment-units/manifestWriter.js.map +1 -0
- package/build/libraries/deployment-units/types.d.ts +43 -0
- package/build/libraries/deployment-units/types.d.ts.map +1 -0
- package/build/libraries/deployment-units/types.js +3 -0
- package/build/libraries/deployment-units/types.js.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/defaultVisibilityThings.readmodel.d.ts +2 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/defaultVisibilityThings.readmodel.d.ts.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/defaultVisibilityThings.readmodel.js +17 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/defaultVisibilityThings.readmodel.js.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/dupA/things.readmodel.d.ts +2 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/dupA/things.readmodel.d.ts.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/dupA/things.readmodel.js +13 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/dupA/things.readmodel.js.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/dupB/things.readmodel.d.ts +2 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/dupB/things.readmodel.d.ts.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/dupB/things.readmodel.js +12 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/dupB/things.readmodel.js.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/publicThings.readmodel.d.ts +2 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/publicThings.readmodel.d.ts.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/publicThings.readmodel.js +21 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/publicThings.readmodel.js.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/queryOnlyThings.readmodel.d.ts +2 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/queryOnlyThings.readmodel.d.ts.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/queryOnlyThings.readmodel.js +16 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/queryOnlyThings.readmodel.js.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/subscribingThings.readmodel.d.ts +2 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/subscribingThings.readmodel.d.ts.map +1 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/subscribingThings.readmodel.js +14 -0
- package/build/libraries/eventsourcing/__tests__/fixtures/subscribingThings.readmodel.js.map +1 -0
- package/build/libraries/eventsourcing/__tests__/queryOnlyReadmodel.test.d.ts +2 -0
- package/build/libraries/eventsourcing/__tests__/queryOnlyReadmodel.test.d.ts.map +1 -0
- package/build/libraries/eventsourcing/__tests__/queryOnlyReadmodel.test.js +88 -0
- package/build/libraries/eventsourcing/__tests__/queryOnlyReadmodel.test.js.map +1 -0
- package/build/libraries/eventsourcing/__tests__/queryVisibility.test.d.ts +2 -0
- package/build/libraries/eventsourcing/__tests__/queryVisibility.test.d.ts.map +1 -0
- package/build/libraries/eventsourcing/__tests__/queryVisibility.test.js +82 -0
- package/build/libraries/eventsourcing/__tests__/queryVisibility.test.js.map +1 -0
- package/build/libraries/eventsourcing/commandHandlers/index.d.ts +40 -0
- package/build/libraries/eventsourcing/commandHandlers/index.d.ts.map +1 -0
- package/build/libraries/eventsourcing/commandHandlers/index.js +1065 -0
- package/build/libraries/eventsourcing/commandHandlers/index.js.map +1 -0
- package/build/libraries/eventsourcing/commandTemplates/index.d.ts.map +1 -0
- package/build/libraries/eventsourcing/commandTemplates/index.js.map +1 -0
- package/build/libraries/eventsourcing/commandTemplates/multiStream.d.ts +7 -0
- package/build/libraries/eventsourcing/commandTemplates/multiStream.d.ts.map +1 -0
- package/build/libraries/eventsourcing/commandTemplates/multiStream.js +116 -0
- package/build/libraries/eventsourcing/commandTemplates/multiStream.js.map +1 -0
- package/build/libraries/eventsourcing/commandTemplates/snapshot.d.ts +108 -0
- package/build/libraries/eventsourcing/commandTemplates/snapshot.d.ts.map +1 -0
- package/build/libraries/eventsourcing/commandTemplates/snapshot.js +127 -0
- package/build/libraries/eventsourcing/commandTemplates/snapshot.js.map +1 -0
- package/build/libraries/eventsourcing/eventHandlers/__tests__/queryResponseFormatterCaller.test.d.ts +2 -0
- package/build/libraries/eventsourcing/eventHandlers/__tests__/queryResponseFormatterCaller.test.d.ts.map +1 -0
- package/build/libraries/eventsourcing/eventHandlers/__tests__/queryResponseFormatterCaller.test.js +77 -0
- package/build/libraries/eventsourcing/eventHandlers/__tests__/queryResponseFormatterCaller.test.js.map +1 -0
- package/build/libraries/eventsourcing/eventHandlers/index.d.ts +52 -0
- package/build/libraries/eventsourcing/eventHandlers/index.d.ts.map +1 -0
- package/build/libraries/eventsourcing/eventHandlers/index.js +474 -0
- package/build/libraries/eventsourcing/eventHandlers/index.js.map +1 -0
- package/build/libraries/eventsourcing/executionContext.d.ts +50 -0
- package/build/libraries/eventsourcing/executionContext.d.ts.map +1 -0
- package/build/libraries/eventsourcing/executionContext.js +10 -0
- package/build/libraries/eventsourcing/executionContext.js.map +1 -0
- package/build/libraries/eventsourcing/idempotencyChecks/index.d.ts +5 -0
- package/build/libraries/eventsourcing/idempotencyChecks/index.d.ts.map +1 -0
- package/build/libraries/eventsourcing/idempotencyChecks/index.js +26 -0
- package/build/libraries/eventsourcing/idempotencyChecks/index.js.map +1 -0
- package/build/libraries/eventsourcing/index.d.ts +14 -0
- package/build/libraries/eventsourcing/index.d.ts.map +1 -0
- package/build/{ports → libraries}/eventsourcing/index.js +50 -15
- package/build/{ports → libraries}/eventsourcing/index.js.map +1 -1
- package/build/libraries/eventsourcing/invariants/combinators.d.ts +4 -0
- package/build/libraries/eventsourcing/invariants/combinators.d.ts.map +1 -0
- package/build/{ports → libraries}/eventsourcing/invariants/combinators.js +3 -3
- package/build/libraries/eventsourcing/invariants/combinators.js.map +1 -0
- package/build/libraries/eventsourcing/invariants/common.d.ts +15 -0
- package/build/libraries/eventsourcing/invariants/common.d.ts.map +1 -0
- package/build/libraries/eventsourcing/invariants/common.js +27 -0
- package/build/libraries/eventsourcing/invariants/common.js.map +1 -0
- package/build/libraries/eventsourcing/invariants/comparisons.d.ts +16 -0
- package/build/libraries/eventsourcing/invariants/comparisons.d.ts.map +1 -0
- package/build/libraries/eventsourcing/invariants/comparisons.js +35 -0
- package/build/libraries/eventsourcing/invariants/comparisons.js.map +1 -0
- package/build/libraries/eventsourcing/invariants/comparisons.test.d.ts +2 -0
- package/build/libraries/eventsourcing/invariants/comparisons.test.d.ts.map +1 -0
- package/build/libraries/eventsourcing/invariants/comparisons.test.js +25 -0
- package/build/libraries/eventsourcing/invariants/comparisons.test.js.map +1 -0
- package/build/libraries/eventsourcing/invariants/index.d.ts +17 -0
- package/build/libraries/eventsourcing/invariants/index.d.ts.map +1 -0
- package/build/libraries/eventsourcing/invariants/index.js +47 -0
- package/build/libraries/eventsourcing/invariants/index.js.map +1 -0
- package/build/libraries/eventsourcing/invariants/stateExistance.d.ts +4 -0
- package/build/libraries/eventsourcing/invariants/stateExistance.d.ts.map +1 -0
- package/build/libraries/eventsourcing/invariants/stateExistance.js +22 -0
- package/build/libraries/eventsourcing/invariants/stateExistance.js.map +1 -0
- package/build/libraries/eventsourcing/subscriptions/__tests__/sseSubscriptions.test.d.ts +2 -0
- package/build/libraries/eventsourcing/subscriptions/__tests__/sseSubscriptions.test.d.ts.map +1 -0
- package/build/libraries/eventsourcing/subscriptions/__tests__/sseSubscriptions.test.js +563 -0
- package/build/libraries/eventsourcing/subscriptions/__tests__/sseSubscriptions.test.js.map +1 -0
- package/build/libraries/eventsourcing/subscriptions/index.d.ts.map +1 -0
- package/build/libraries/eventsourcing/subscriptions/index.js.map +1 -0
- package/build/libraries/eventsourcing/subscriptions/sseSubscriptions.d.ts +5 -0
- package/build/libraries/eventsourcing/subscriptions/sseSubscriptions.d.ts.map +1 -0
- package/build/libraries/eventsourcing/subscriptions/sseSubscriptions.js +198 -0
- package/build/libraries/eventsourcing/subscriptions/sseSubscriptions.js.map +1 -0
- package/build/libraries/eventsourcing/utils/aggregateBuilder.d.ts +5 -0
- package/build/libraries/eventsourcing/utils/aggregateBuilder.d.ts.map +1 -0
- package/build/{ports → libraries}/eventsourcing/utils/aggregateBuilder.js +17 -3
- package/build/libraries/eventsourcing/utils/aggregateBuilder.js.map +1 -0
- package/build/libraries/eventsourcing/utils/commandBuilder.d.ts +3 -0
- package/build/libraries/eventsourcing/utils/commandBuilder.d.ts.map +1 -0
- package/build/{ports → libraries}/eventsourcing/utils/commandBuilder.js +44 -1
- package/build/libraries/eventsourcing/utils/commandBuilder.js.map +1 -0
- package/build/{ports → libraries}/eventsourcing/utils/eventHandlerBuilder.d.ts +2 -2
- package/build/libraries/eventsourcing/utils/eventHandlerBuilder.d.ts.map +1 -0
- package/build/libraries/eventsourcing/utils/eventHandlerBuilder.js.map +1 -0
- package/build/libraries/eventsourcing/utils/externalSystemBuilder.d.ts +5 -0
- package/build/libraries/eventsourcing/utils/externalSystemBuilder.d.ts.map +1 -0
- package/build/libraries/eventsourcing/utils/externalSystemBuilder.js +43 -0
- package/build/libraries/eventsourcing/utils/externalSystemBuilder.js.map +1 -0
- package/build/libraries/eventsourcing/utils/index.d.ts +22 -0
- package/build/libraries/eventsourcing/utils/index.d.ts.map +1 -0
- package/build/libraries/eventsourcing/utils/index.js +88 -0
- package/build/libraries/eventsourcing/utils/index.js.map +1 -0
- package/build/libraries/eventsourcing/utils/policyBuilder.d.ts +4 -0
- package/build/libraries/eventsourcing/utils/policyBuilder.d.ts.map +1 -0
- package/build/libraries/eventsourcing/utils/policyBuilder.js +53 -0
- package/build/libraries/eventsourcing/utils/policyBuilder.js.map +1 -0
- package/build/libraries/eventsourcing/utils/readmodelBuilder.d.ts +6 -0
- package/build/libraries/eventsourcing/utils/readmodelBuilder.d.ts.map +1 -0
- package/build/libraries/eventsourcing/utils/readmodelBuilder.js +68 -0
- package/build/libraries/eventsourcing/utils/readmodelBuilder.js.map +1 -0
- package/build/libraries/localOutbox/index.d.ts +6 -0
- package/build/libraries/localOutbox/index.d.ts.map +1 -0
- package/build/libraries/localOutbox/index.js +72 -0
- package/build/libraries/localOutbox/index.js.map +1 -0
- package/build/libraries/modulePath.d.ts +14 -0
- package/build/libraries/modulePath.d.ts.map +1 -0
- package/build/libraries/modulePath.js +21 -0
- package/build/libraries/modulePath.js.map +1 -0
- package/build/libraries/modules/fs.d.ts +2 -4
- package/build/libraries/modules/fs.d.ts.map +1 -1
- package/build/libraries/modules/fs.js +21 -84
- package/build/libraries/modules/fs.js.map +1 -1
- package/build/libraries/modules/index.d.ts +2 -0
- package/build/libraries/modules/index.d.ts.map +1 -1
- package/build/libraries/modules/index.js +2 -0
- package/build/libraries/modules/index.js.map +1 -1
- package/build/libraries/modules/scopedPortsView.d.ts +42 -0
- package/build/libraries/modules/scopedPortsView.d.ts.map +1 -0
- package/build/libraries/modules/scopedPortsView.js +55 -0
- package/build/libraries/modules/scopedPortsView.js.map +1 -0
- package/build/libraries/modules/scopedPortsView.test.d.ts +10 -0
- package/build/libraries/modules/scopedPortsView.test.d.ts.map +1 -0
- package/build/libraries/modules/scopedPortsView.test.js +103 -0
- package/build/libraries/modules/scopedPortsView.test.js.map +1 -0
- package/build/libraries/modules/selectiveLoader.d.ts +21 -0
- package/build/libraries/modules/selectiveLoader.d.ts.map +1 -0
- package/build/libraries/modules/selectiveLoader.js +164 -0
- package/build/libraries/modules/selectiveLoader.js.map +1 -0
- package/build/libraries/modules/selectiveLoader.test.d.ts +2 -0
- package/build/libraries/modules/selectiveLoader.test.d.ts.map +1 -0
- package/build/libraries/modules/selectiveLoader.test.js +471 -0
- package/build/libraries/modules/selectiveLoader.test.js.map +1 -0
- package/build/libraries/openApi/pruneUnusedRef.d.ts.map +1 -1
- package/build/libraries/openApi/pruneUnusedRef.js.map +1 -1
- package/build/libraries/tcp/index.d.ts +0 -1
- package/build/libraries/tcp/index.d.ts.map +1 -1
- package/build/libraries/tcp/index.js +32 -9
- package/build/libraries/tcp/index.js.map +1 -1
- package/build/libraries/tcp/types.d.ts +0 -1
- package/build/libraries/tcp/types.d.ts.map +1 -1
- package/build/libraries/validation/__tests__/readmodelQuerySchema.test.d.ts +2 -0
- package/build/libraries/validation/__tests__/readmodelQuerySchema.test.d.ts.map +1 -0
- package/build/libraries/validation/__tests__/readmodelQuerySchema.test.js +100 -0
- package/build/libraries/validation/__tests__/readmodelQuerySchema.test.js.map +1 -0
- package/build/libraries/validation/__tests__/validation.test.js +17 -7
- package/build/libraries/validation/__tests__/validation.test.js.map +1 -1
- package/build/libraries/validation/index.d.ts +3 -3
- package/build/libraries/validation/index.d.ts.map +1 -1
- package/build/libraries/validation/index.js +49 -15
- package/build/libraries/validation/index.js.map +1 -1
- package/build/ports/authentication/index.js.map +1 -1
- package/build/ports/authentication/index.test.d.ts +2 -0
- package/build/ports/authentication/index.test.d.ts.map +1 -0
- package/build/ports/authentication/index.test.js +38 -0
- package/build/ports/authentication/index.test.js.map +1 -0
- package/build/ports/base.d.ts.map +1 -1
- package/build/ports/base.js +39 -5
- package/build/ports/base.js.map +1 -1
- package/build/ports/base.test.d.ts +2 -0
- package/build/ports/base.test.d.ts.map +1 -0
- package/build/ports/base.test.js +92 -0
- package/build/ports/base.test.js.map +1 -0
- package/build/ports/cache/index.js.map +1 -1
- package/build/ports/cache/index.test.d.ts +2 -0
- package/build/ports/cache/index.test.d.ts.map +1 -0
- package/build/ports/cache/index.test.js +43 -0
- package/build/ports/cache/index.test.js.map +1 -0
- package/build/ports/configuration/__tests__/cliArgs.test.d.ts +2 -0
- package/build/ports/configuration/__tests__/cliArgs.test.d.ts.map +1 -0
- package/build/ports/configuration/__tests__/cliArgs.test.js +158 -0
- package/build/ports/configuration/__tests__/cliArgs.test.js.map +1 -0
- package/build/ports/configuration/__tests__/configurationPortEmitter.test.d.ts +2 -0
- package/build/ports/configuration/__tests__/configurationPortEmitter.test.d.ts.map +1 -0
- package/build/ports/configuration/__tests__/configurationPortEmitter.test.js +63 -0
- package/build/ports/configuration/__tests__/configurationPortEmitter.test.js.map +1 -0
- package/build/ports/configuration/__tests__/getArgsSync.test.d.ts +2 -0
- package/build/ports/configuration/__tests__/getArgsSync.test.d.ts.map +1 -0
- package/build/ports/configuration/__tests__/getArgsSync.test.js +85 -0
- package/build/ports/configuration/__tests__/getArgsSync.test.js.map +1 -0
- package/build/ports/configuration/args.d.ts +50 -43
- package/build/ports/configuration/args.d.ts.map +1 -1
- package/build/ports/configuration/args.js +76 -13
- package/build/ports/configuration/args.js.map +1 -1
- package/build/ports/configuration/common.js +1 -2
- package/build/ports/configuration/common.js.map +1 -1
- package/build/ports/configuration/index.d.ts +1 -1
- package/build/ports/configuration/index.d.ts.map +1 -1
- package/build/ports/configuration/index.js +85 -17
- package/build/ports/configuration/index.js.map +1 -1
- package/build/ports/configuration/localConfig.d.ts.map +1 -1
- package/build/ports/configuration/localConfig.js +46 -27
- package/build/ports/configuration/localConfig.js.map +1 -1
- package/build/ports/database/index.d.ts +1 -2
- package/build/ports/database/index.d.ts.map +1 -1
- package/build/ports/database/index.js +23 -17
- package/build/ports/database/index.js.map +1 -1
- package/build/ports/database/index.test.d.ts +2 -0
- package/build/ports/database/index.test.d.ts.map +1 -0
- package/build/ports/database/index.test.js +43 -0
- package/build/ports/database/index.test.js.map +1 -0
- package/build/ports/endpoints/__tests__/declarationSite.test.d.ts +2 -0
- package/build/ports/endpoints/__tests__/declarationSite.test.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/declarationSite.test.js +165 -0
- package/build/ports/endpoints/__tests__/declarationSite.test.js.map +1 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/appLoginUrl.d.ts +9 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/appLoginUrl.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/appLoginUrl.js +20 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/appLoginUrl.js.map +1 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/index.d.ts +10 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/index.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/index.js +21 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/index.js.map +1 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/orders.endpoints.d.ts +15 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/orders.endpoints.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/orders.endpoints.js +46 -0
- package/build/ports/endpoints/__tests__/fixtures/modules/sales/orders.endpoints.js.map +1 -0
- package/build/ports/endpoints/__tests__/manifestEndpoints.test.d.ts +2 -0
- package/build/ports/endpoints/__tests__/manifestEndpoints.test.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/manifestEndpoints.test.js +117 -0
- package/build/ports/endpoints/__tests__/manifestEndpoints.test.js.map +1 -0
- package/build/ports/endpoints/declarationSite.d.ts +63 -0
- package/build/ports/endpoints/declarationSite.d.ts.map +1 -0
- package/build/ports/endpoints/declarationSite.js +126 -0
- package/build/ports/endpoints/declarationSite.js.map +1 -0
- package/build/ports/endpoints/health.d.ts +26 -0
- package/build/ports/endpoints/health.d.ts.map +1 -0
- package/build/ports/endpoints/health.js +96 -0
- package/build/ports/endpoints/health.js.map +1 -0
- package/build/ports/endpoints/index.d.ts +43 -7
- package/build/ports/endpoints/index.d.ts.map +1 -1
- package/build/ports/endpoints/index.js +317 -67
- package/build/ports/endpoints/index.js.map +1 -1
- package/build/ports/endpoints/openApi.d.ts +3 -2
- package/build/ports/endpoints/openApi.d.ts.map +1 -1
- package/build/ports/endpoints/openApi.js +184 -55
- package/build/ports/endpoints/openApi.js.map +1 -1
- package/build/ports/endpoints/utils.d.ts.map +1 -1
- package/build/ports/endpoints/utils.js.map +1 -1
- package/build/ports/eventstore/index.d.ts.map +1 -1
- package/build/ports/eventstore/index.js +37 -5
- package/build/ports/eventstore/index.js.map +1 -1
- package/build/ports/eventstore/index.test.d.ts +2 -0
- package/build/ports/eventstore/index.test.d.ts.map +1 -0
- package/build/ports/eventstore/index.test.js +68 -0
- package/build/ports/eventstore/index.test.js.map +1 -0
- package/build/ports/infrastructure/index.d.ts +61 -23
- package/build/ports/infrastructure/index.d.ts.map +1 -1
- package/build/ports/infrastructure/index.js +187 -37
- package/build/ports/infrastructure/index.js.map +1 -1
- package/build/ports/infrastructure/index.test.d.ts +2 -0
- package/build/ports/infrastructure/index.test.d.ts.map +1 -0
- package/build/ports/infrastructure/index.test.js +228 -0
- package/build/ports/infrastructure/index.test.js.map +1 -0
- package/build/ports/infrastructure/utils.d.ts +2 -1
- package/build/ports/infrastructure/utils.d.ts.map +1 -1
- package/build/ports/infrastructure/utils.js +48 -22
- package/build/ports/infrastructure/utils.js.map +1 -1
- package/build/ports/logger/__tests__/logger.test.d.ts +2 -0
- package/build/ports/logger/__tests__/logger.test.d.ts.map +1 -0
- package/build/ports/logger/__tests__/logger.test.js +69 -0
- package/build/ports/logger/__tests__/logger.test.js.map +1 -0
- package/build/ports/logger/index.d.ts.map +1 -1
- package/build/ports/logger/index.js +3 -2
- package/build/ports/logger/index.js.map +1 -1
- package/build/utils/__tests__/applyCollectionFilterInMemory.test.d.ts +2 -0
- package/build/utils/__tests__/applyCollectionFilterInMemory.test.d.ts.map +1 -0
- package/build/utils/__tests__/applyCollectionFilterInMemory.test.js +33 -0
- package/build/utils/__tests__/applyCollectionFilterInMemory.test.js.map +1 -0
- package/build/utils/__tests__/decodeObjectQueryParams.test.d.ts +2 -0
- package/build/utils/__tests__/decodeObjectQueryParams.test.d.ts.map +1 -0
- package/build/utils/__tests__/decodeObjectQueryParams.test.js +118 -0
- package/build/utils/__tests__/decodeObjectQueryParams.test.js.map +1 -0
- package/build/utils/index.d.ts +26 -34
- package/build/utils/index.d.ts.map +1 -1
- package/build/utils/index.js +159 -170
- package/build/utils/index.js.map +1 -1
- package/package.json +31 -11
- package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts +0 -1
- package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts.map +0 -1
- package/build/adapters/cache/memory/__tests__/memoryCache.test.js +0 -6
- package/build/adapters/cache/memory/__tests__/memoryCache.test.js.map +0 -1
- package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts +0 -1
- package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts.map +0 -1
- package/build/adapters/database/memory/__tests__/memoryDb.test.js +0 -36
- package/build/adapters/database/memory/__tests__/memoryDb.test.js.map +0 -1
- package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts +0 -2
- package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts.map +0 -1
- package/build/ports/endpoints/__tests__/endpointsCall.test.js +0 -21
- package/build/ports/endpoints/__tests__/endpointsCall.test.js.map +0 -1
- package/build/ports/endpoints/__tests__/test-client-library/base.d.ts +0 -77
- package/build/ports/endpoints/__tests__/test-client-library/base.d.ts.map +0 -1
- package/build/ports/endpoints/__tests__/test-client-library/base.js +0 -91
- package/build/ports/endpoints/__tests__/test-client-library/base.js.map +0 -1
- package/build/ports/endpoints/__tests__/test-client-library/index.d.ts +0 -29
- package/build/ports/endpoints/__tests__/test-client-library/index.d.ts.map +0 -1
- package/build/ports/endpoints/__tests__/test-client-library/index.js +0 -43
- package/build/ports/endpoints/__tests__/test-client-library/index.js.map +0 -1
- package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts +0 -106
- package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts.map +0 -1
- package/build/ports/endpoints/__tests__/test-client-library/services/service.js +0 -62
- package/build/ports/endpoints/__tests__/test-client-library/services/service.js.map +0 -1
- package/build/ports/endpoints/__tests__/utils.test.d.ts +0 -1
- package/build/ports/endpoints/__tests__/utils.test.d.ts.map +0 -1
- package/build/ports/endpoints/__tests__/utils.test.js +0 -53
- package/build/ports/endpoints/__tests__/utils.test.js.map +0 -1
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts +0 -2
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts.map +0 -1
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.js +0 -35
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.js.map +0 -1
- package/build/ports/eventsourcing/__tests__/invariants.test.d.ts +0 -2
- package/build/ports/eventsourcing/__tests__/invariants.test.d.ts.map +0 -1
- package/build/ports/eventsourcing/__tests__/invariants.test.js +0 -210
- package/build/ports/eventsourcing/__tests__/invariants.test.js.map +0 -1
- package/build/ports/eventsourcing/commandHandlers/index.d.ts +0 -25
- package/build/ports/eventsourcing/commandHandlers/index.d.ts.map +0 -1
- package/build/ports/eventsourcing/commandHandlers/index.js +0 -392
- package/build/ports/eventsourcing/commandHandlers/index.js.map +0 -1
- package/build/ports/eventsourcing/commandTemplates/index.d.ts.map +0 -1
- package/build/ports/eventsourcing/commandTemplates/index.js.map +0 -1
- package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts +0 -4
- package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts.map +0 -1
- package/build/ports/eventsourcing/commandTemplates/multiStream.js +0 -73
- package/build/ports/eventsourcing/commandTemplates/multiStream.js.map +0 -1
- package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts +0 -9
- package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts.map +0 -1
- package/build/ports/eventsourcing/commandTemplates/snapshot.js +0 -39
- package/build/ports/eventsourcing/commandTemplates/snapshot.js.map +0 -1
- package/build/ports/eventsourcing/eventHandlers/index.d.ts +0 -33
- package/build/ports/eventsourcing/eventHandlers/index.d.ts.map +0 -1
- package/build/ports/eventsourcing/eventHandlers/index.js +0 -276
- package/build/ports/eventsourcing/eventHandlers/index.js.map +0 -1
- package/build/ports/eventsourcing/index.d.ts +0 -9
- package/build/ports/eventsourcing/index.d.ts.map +0 -1
- package/build/ports/eventsourcing/invariants/combinators.d.ts +0 -4
- package/build/ports/eventsourcing/invariants/combinators.d.ts.map +0 -1
- package/build/ports/eventsourcing/invariants/combinators.js.map +0 -1
- package/build/ports/eventsourcing/invariants/common.d.ts +0 -10
- package/build/ports/eventsourcing/invariants/common.d.ts.map +0 -1
- package/build/ports/eventsourcing/invariants/common.js +0 -37
- package/build/ports/eventsourcing/invariants/common.js.map +0 -1
- package/build/ports/eventsourcing/invariants/comparisons.d.ts +0 -19
- package/build/ports/eventsourcing/invariants/comparisons.d.ts.map +0 -1
- package/build/ports/eventsourcing/invariants/comparisons.js +0 -83
- package/build/ports/eventsourcing/invariants/comparisons.js.map +0 -1
- package/build/ports/eventsourcing/invariants/index.d.ts +0 -5
- package/build/ports/eventsourcing/invariants/index.d.ts.map +0 -1
- package/build/ports/eventsourcing/invariants/index.js +0 -21
- package/build/ports/eventsourcing/invariants/index.js.map +0 -1
- package/build/ports/eventsourcing/invariants/stateExistance.d.ts +0 -4
- package/build/ports/eventsourcing/invariants/stateExistance.d.ts.map +0 -1
- package/build/ports/eventsourcing/invariants/stateExistance.js +0 -33
- package/build/ports/eventsourcing/invariants/stateExistance.js.map +0 -1
- package/build/ports/eventsourcing/subscriptions/index.d.ts.map +0 -1
- package/build/ports/eventsourcing/subscriptions/index.js.map +0 -1
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts +0 -3
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts.map +0 -1
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js +0 -81
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js.map +0 -1
- package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts +0 -4
- package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts.map +0 -1
- package/build/ports/eventsourcing/utils/aggregateBuilder.js.map +0 -1
- package/build/ports/eventsourcing/utils/commandBuilder.d.ts +0 -3
- package/build/ports/eventsourcing/utils/commandBuilder.d.ts.map +0 -1
- package/build/ports/eventsourcing/utils/commandBuilder.js.map +0 -1
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts.map +0 -1
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.js.map +0 -1
- package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts +0 -4
- package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts.map +0 -1
- package/build/ports/eventsourcing/utils/externalSystemBuilder.js +0 -34
- package/build/ports/eventsourcing/utils/externalSystemBuilder.js.map +0 -1
- package/build/ports/eventsourcing/utils/index.d.ts +0 -13
- package/build/ports/eventsourcing/utils/index.d.ts.map +0 -1
- package/build/ports/eventsourcing/utils/index.js +0 -45
- package/build/ports/eventsourcing/utils/index.js.map +0 -1
- package/build/ports/eventsourcing/utils/policyBuilder.d.ts +0 -3
- package/build/ports/eventsourcing/utils/policyBuilder.d.ts.map +0 -1
- package/build/ports/eventsourcing/utils/policyBuilder.js +0 -29
- package/build/ports/eventsourcing/utils/policyBuilder.js.map +0 -1
- package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts +0 -5
- package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts.map +0 -1
- package/build/ports/eventsourcing/utils/readmodelBuilder.js +0 -45
- package/build/ports/eventsourcing/utils/readmodelBuilder.js.map +0 -1
- package/build/ports/infrastructure/__tests__/fixture/index.d.ts +0 -3
- package/build/ports/infrastructure/__tests__/fixture/index.d.ts.map +0 -1
- package/build/ports/infrastructure/__tests__/fixture/index.js +0 -19
- package/build/ports/infrastructure/__tests__/fixture/index.js.map +0 -1
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts +0 -19
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts.map +0 -1
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js +0 -76
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js.map +0 -1
- package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts +0 -177
- package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts.map +0 -1
- package/build/ports/infrastructure/__tests__/fixture/structureState.js +0 -258
- package/build/ports/infrastructure/__tests__/fixture/structureState.js.map +0 -1
- package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts +0 -2
- package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts.map +0 -1
- package/build/ports/infrastructure/__tests__/infrastructure.test.js +0 -11
- package/build/ports/infrastructure/__tests__/infrastructure.test.js.map +0 -1
- package/src/adapters/cache/index.ts +0 -1
- package/src/adapters/cache/memory/__tests__/memoryCache.test.ts +0 -6
- package/src/adapters/cache/memory/index.ts +0 -142
- package/src/adapters/configuration/__tests__/.env +0 -4
- package/src/adapters/configuration/__tests__/dotEnv.test.ts +0 -38
- package/src/adapters/configuration/dotEnv.ts +0 -33
- package/src/adapters/configuration/index.ts +0 -1
- package/src/adapters/database/index.ts +0 -1
- package/src/adapters/database/memory/__tests__/memoryDb.test.ts +0 -37
- package/src/adapters/database/memory/index.ts +0 -279
- package/src/adapters/endpoints/addAuthUser/index.ts +0 -55
- package/src/adapters/endpoints/endpointValidation/index.ts +0 -26
- package/src/adapters/endpoints/index.ts +0 -4
- package/src/adapters/endpoints/localAuthorization/index.ts +0 -75
- package/src/adapters/endpoints/tcpConsumer/index.ts +0 -69
- package/src/adapters/endpoints/userSession/index.ts +0 -40
- package/src/adapters/eventstore/database.ts +0 -178
- package/src/adapters/eventstore/index.ts +0 -1
- package/src/adapters/infrastructure/index.ts +0 -1
- package/src/adapters/infrastructure/local/index.ts +0 -40
- package/src/adapters/logger/console.ts +0 -42
- package/src/adapters/logger/index.ts +0 -1
- package/src/index.ts +0 -25
- package/src/libraries/modules/fs.ts +0 -88
- package/src/libraries/modules/index.ts +0 -1
- package/src/libraries/openApi/index.ts +0 -1
- package/src/libraries/openApi/pruneUnusedRef.ts +0 -35
- package/src/libraries/tcp/index.ts +0 -98
- package/src/libraries/tcp/types.ts +0 -43
- package/src/libraries/validation/__tests__/validation.test.ts +0 -25
- package/src/libraries/validation/index.ts +0 -48
- package/src/ports/authentication/index.ts +0 -25
- package/src/ports/base.ts +0 -20
- package/src/ports/cache/index.ts +0 -17
- package/src/ports/configuration/__tests__/configurationPort.test.ts +0 -47
- package/src/ports/configuration/args.ts +0 -39
- package/src/ports/configuration/common.ts +0 -12
- package/src/ports/configuration/index.ts +0 -110
- package/src/ports/configuration/localConfig.ts +0 -117
- package/src/ports/database/index.ts +0 -25
- package/src/ports/endpoints/__tests__/endpointsCall.test.ts +0 -20
- package/src/ports/endpoints/__tests__/test-client-library/base.ts +0 -167
- package/src/ports/endpoints/__tests__/test-client-library/index.ts +0 -23
- package/src/ports/endpoints/__tests__/test-client-library/services/service.ts +0 -181
- package/src/ports/endpoints/__tests__/utils.test.ts +0 -54
- package/src/ports/endpoints/index.ts +0 -272
- package/src/ports/endpoints/openApi.ts +0 -191
- package/src/ports/endpoints/utils.ts +0 -31
- package/src/ports/eventsourcing/__tests__/eventhandlers.test.ts +0 -30
- package/src/ports/eventsourcing/__tests__/invariants.test.ts +0 -213
- package/src/ports/eventsourcing/commandHandlers/index.ts +0 -625
- package/src/ports/eventsourcing/commandTemplates/index.ts +0 -2
- package/src/ports/eventsourcing/commandTemplates/multiStream.ts +0 -70
- package/src/ports/eventsourcing/commandTemplates/snapshot.ts +0 -43
- package/src/ports/eventsourcing/eventHandlers/index.ts +0 -429
- package/src/ports/eventsourcing/index.ts +0 -98
- package/src/ports/eventsourcing/invariants/combinators.ts +0 -25
- package/src/ports/eventsourcing/invariants/common.ts +0 -42
- package/src/ports/eventsourcing/invariants/comparisons.ts +0 -90
- package/src/ports/eventsourcing/invariants/index.ts +0 -4
- package/src/ports/eventsourcing/invariants/stateExistance.ts +0 -34
- package/src/ports/eventsourcing/subscriptions/index.ts +0 -1
- package/src/ports/eventsourcing/subscriptions/sseSubscriptions.ts +0 -103
- package/src/ports/eventsourcing/utils/aggregateBuilder.ts +0 -49
- package/src/ports/eventsourcing/utils/commandBuilder.ts +0 -113
- package/src/ports/eventsourcing/utils/eventHandlerBuilder.ts +0 -22
- package/src/ports/eventsourcing/utils/externalSystemBuilder.ts +0 -42
- package/src/ports/eventsourcing/utils/index.ts +0 -25
- package/src/ports/eventsourcing/utils/policyBuilder.ts +0 -31
- package/src/ports/eventsourcing/utils/readmodelBuilder.ts +0 -52
- package/src/ports/eventstore/index.ts +0 -11
- package/src/ports/infrastructure/__tests__/fixture/index.ts +0 -2
- package/src/ports/infrastructure/__tests__/fixture/infrastructureServices.ts +0 -72
- package/src/ports/infrastructure/__tests__/fixture/structureState.ts +0 -254
- package/src/ports/infrastructure/__tests__/infrastructure.test.ts +0 -11
- package/src/ports/infrastructure/index.ts +0 -162
- package/src/ports/infrastructure/utils.ts +0 -130
- package/src/ports/logger/index.ts +0 -34
- package/src/utils/index.ts +0 -186
- package/tsconfig.json +0 -19
- /package/build/{ports → libraries}/eventsourcing/commandTemplates/index.d.ts +0 -0
- /package/build/{ports → libraries}/eventsourcing/commandTemplates/index.js +0 -0
- /package/build/{ports → libraries}/eventsourcing/subscriptions/index.d.ts +0 -0
- /package/build/{ports → libraries}/eventsourcing/subscriptions/index.js +0 -0
- /package/build/{ports → libraries}/eventsourcing/utils/eventHandlerBuilder.js +0 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createEventHandlers = exports.defaultQueryParamsTranslator = exports.formatAggregate = exports.formatSelect = exports.formatSort = exports.formatFilter = exports.coerceFilterType = void 0;
|
|
7
|
+
const bett3r_utils_1 = require("@bett3r-dev/bett3r-utils");
|
|
8
|
+
const jsonschema_definer_1 = __importDefault(require("@bett3r-dev/jsonschema-definer"));
|
|
9
|
+
const pv3_dev_utils_1 = require("@bett3r-dev/pv3-dev-utils");
|
|
10
|
+
const pv3_types_1 = require("@bett3r-dev/pv3-types");
|
|
11
|
+
const rison_1 = __importDefault(require("@bett3r-dev/rison"));
|
|
12
|
+
const change_case_1 = require("change-case");
|
|
13
|
+
const validation_1 = require("../../../libraries/validation");
|
|
14
|
+
const utils_1 = require("../../../utils");
|
|
15
|
+
const executionContext_1 = require("../executionContext");
|
|
16
|
+
//TODO: Consider Objects
|
|
17
|
+
const coerceFilterType = (value, targetType, op) => {
|
|
18
|
+
const inOrNin = op === 'in' || op === 'nin';
|
|
19
|
+
if (!value.length || ['exists', 'notExists'].includes(op))
|
|
20
|
+
return undefined;
|
|
21
|
+
if (targetType === 'string')
|
|
22
|
+
return !inOrNin ? value[0] : value;
|
|
23
|
+
else if (targetType === 'number')
|
|
24
|
+
return !inOrNin ? Number(value[0]) : value.map((v) => Number(v));
|
|
25
|
+
else if (targetType === 'boolean')
|
|
26
|
+
return !inOrNin ? value[0] === 'true' : value.map((v) => v === 'true');
|
|
27
|
+
};
|
|
28
|
+
exports.coerceFilterType = coerceFilterType;
|
|
29
|
+
const formatFilter = (filter) => {
|
|
30
|
+
const decoded = typeof filter === 'string' ? rison_1.default.decode(decodeURIComponent(filter)) : filter;
|
|
31
|
+
const filterArray = (0, bett3r_utils_1.ensureArray)(decoded);
|
|
32
|
+
const result = (0, validation_1.validateSchema)(jsonschema_definer_1.default.array().items(pv3_types_1.CollectionFilterSchema), true)(filterArray);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
exports.formatFilter = formatFilter;
|
|
36
|
+
const formatSort = (sort) => {
|
|
37
|
+
const sortDecoded = typeof sort === 'string' ? rison_1.default.decode(decodeURIComponent(sort)) : sort;
|
|
38
|
+
const sortArray = (0, validation_1.validateSchema)(jsonschema_definer_1.default.array().items(pv3_types_1.CollectionSortSchema), true)((0, bett3r_utils_1.ensureArray)(sortDecoded));
|
|
39
|
+
return sortArray;
|
|
40
|
+
};
|
|
41
|
+
exports.formatSort = formatSort;
|
|
42
|
+
const formatSelect = (select, schema) => {
|
|
43
|
+
const selectDecoded = typeof select === 'string' ? rison_1.default.decode(decodeURIComponent(select)) : select;
|
|
44
|
+
const selectArray = (0, validation_1.validateSchema)(jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.string()), true)((0, bett3r_utils_1.ensureArray)(selectDecoded));
|
|
45
|
+
const omit = selectArray.filter((s) => s[0] === '!').map((s) => s.slice(1));
|
|
46
|
+
if (omit?.length) {
|
|
47
|
+
return Object.keys(schema.plain.properties).filter((key) => !omit.includes(key));
|
|
48
|
+
}
|
|
49
|
+
return selectArray;
|
|
50
|
+
};
|
|
51
|
+
exports.formatSelect = formatSelect;
|
|
52
|
+
/**
|
|
53
|
+
* TV1-2342 slice 7 — decodes and RE-VALIDATES an aggregation spec arriving in the query string.
|
|
54
|
+
*
|
|
55
|
+
* The encoding path is `filter`'s, deliberately and verbatim: rison in the query string, decoded
|
|
56
|
+
* with `rison.decode( decodeURIComponent( ... ))`, then validated with `validateSchema`. A second
|
|
57
|
+
* wire format for the same kind of value is a thing that drifts, and `filter` already crosses this
|
|
58
|
+
* boundary — including inside this very spec, where `spec.filter` is validated by the SAME filter
|
|
59
|
+
* DEFINITION `formatFilter` uses, under its own `$id` (`AggregateFilterSchema`) because both
|
|
60
|
+
* filters are materialised in one document — see `collectionFilterSchemaWithId`.
|
|
61
|
+
*
|
|
62
|
+
* The three checks run in this ORDER, and the order is load-bearing:
|
|
63
|
+
* 1. STATIC (I5) — a runtime-supplied identifier makes the row shape underivable. Checked first
|
|
64
|
+
* so a `{ from: 'input.x' }` reports that, rather than a confusing type error.
|
|
65
|
+
* 2. SAFE IDENTIFIERS — `as`/`groupBy`/`field` are interpolated into SQL. Checked before the
|
|
66
|
+
* model-membership check, so an injection attempt does not get reported as "not a property
|
|
67
|
+
* of the model".
|
|
68
|
+
* 3. `deriveAggregateSchema` — the FULL slice-3 semantic validation. Not re-implemented here:
|
|
69
|
+
* calling the same derivation is what makes an HTTP caller inherit exactly the guarantees an
|
|
70
|
+
* in-process caller and teselly's authoring-time validator get, with no second rule set to
|
|
71
|
+
* drift. Its rejections are already `ValidationError` (400), which is why this path is a 4xx
|
|
72
|
+
* naming the offending field rather than a 500 or a silently empty result.
|
|
73
|
+
*/
|
|
74
|
+
const formatAggregate = (aggregate, schema) => {
|
|
75
|
+
const decoded = typeof aggregate === 'string' ? rison_1.default.decode(decodeURIComponent(aggregate)) : aggregate;
|
|
76
|
+
(0, pv3_types_1.assertStaticAggregateSpec)(decoded);
|
|
77
|
+
(0, pv3_types_1.assertSafeAggregateIdentifiers)(decoded);
|
|
78
|
+
// `rison.decode` returns `unknown`, and `validateSchema<T>` takes the schema's own `T`. The two
|
|
79
|
+
// assertions below are NARROWING, not erasure — no `any` — and each is discharged immediately:
|
|
80
|
+
// - `decoded` is asserted to the SCHEMA's type and then handed straight to the validator that
|
|
81
|
+
// PROVES it at runtime (the two guards above have already established it is an object with a
|
|
82
|
+
// literal groupBy/aggregates);
|
|
83
|
+
// - the validated value is asserted to `AggregateSpec<Model>` because `Model` is erased at
|
|
84
|
+
// runtime, so `string & keyof Model` is unprovable HERE by construction; it is proven one
|
|
85
|
+
// line later by `deriveAggregateSchema`, which checks every key against the model SCHEMA.
|
|
86
|
+
// This mirrors `formatFilter`'s `result as CollectionFilter<Model>[]` exactly.
|
|
87
|
+
const validated = (0, validation_1.validateSchema)(pv3_types_1.AggregateSpecSchema, true)(decoded);
|
|
88
|
+
const spec = validated;
|
|
89
|
+
// Derive and DISCARD: the derivation is called for its VALIDATION here. The schema it returns is
|
|
90
|
+
// the response shape, which under Option B varies per request and is therefore recovered at
|
|
91
|
+
// authoring time in teselly (see the response-schema note at the endpoint registration).
|
|
92
|
+
(0, pv3_types_1.deriveAggregateSchema)(schema, spec);
|
|
93
|
+
return spec;
|
|
94
|
+
};
|
|
95
|
+
exports.formatAggregate = formatAggregate;
|
|
96
|
+
const defaultQueryParamsTranslator = (schema, { params, query, body }, idProperty = 'id') => {
|
|
97
|
+
return {
|
|
98
|
+
...(Object.fromEntries(Object.entries(params || {}).filter(([k, v]) => k !== idProperty))),
|
|
99
|
+
idValue: params?.[idProperty],
|
|
100
|
+
limit: query?.limit ? Number(query.limit) : undefined,
|
|
101
|
+
offset: query?.offset ? Number(query.offset) : undefined,
|
|
102
|
+
after: query?.after,
|
|
103
|
+
select: query?.select
|
|
104
|
+
? (0, exports.formatSelect)(query?.select, schema)
|
|
105
|
+
: undefined,
|
|
106
|
+
filter: query?.filter
|
|
107
|
+
? (0, exports.formatFilter)(query?.filter)
|
|
108
|
+
: undefined,
|
|
109
|
+
sort: query?.sort
|
|
110
|
+
? (0, exports.formatSort)(query?.sort)
|
|
111
|
+
: undefined,
|
|
112
|
+
aggregate: query?.aggregate
|
|
113
|
+
? (0, exports.formatAggregate)(query?.aggregate, schema)
|
|
114
|
+
: undefined,
|
|
115
|
+
...(body ? { body } : {})
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
exports.defaultQueryParamsTranslator = defaultQueryParamsTranslator;
|
|
119
|
+
const identityDecrypt = (event) => Promise.resolve(event);
|
|
120
|
+
const createEventHandlers = (logger, endpoints, decryptEvent = identityDecrypt) => {
|
|
121
|
+
const activeSubscriptions = {};
|
|
122
|
+
const closeHandlersBySubscriptionManager = new Map();
|
|
123
|
+
const eventHandlerMap = {};
|
|
124
|
+
/**
|
|
125
|
+
* Every event-handler name this instance has registered — SUBSCRIPTION OR NOT.
|
|
126
|
+
*
|
|
127
|
+
* `eventHandlerMap` cannot answer this (TV1-2275): it is only written for a handler
|
|
128
|
+
* that has events, so a query-only readmodel is invisible to it. Since a readmodel
|
|
129
|
+
* with no subscription now yields an MDU node keyed by NAME, two same-named ones in
|
|
130
|
+
* different modules would silently overwrite each other's node and one artifact would
|
|
131
|
+
* quietly leave the deployment manifest. Names are file-derived, so that collision is
|
|
132
|
+
* reachable. This set is what makes it loud.
|
|
133
|
+
*/
|
|
134
|
+
const registeredEventHandlerNames = new Set();
|
|
135
|
+
const processEvent = (eventHandlerName) => (event) => {
|
|
136
|
+
const { eventHandler, executeCommand } = eventHandlerMap[eventHandlerName];
|
|
137
|
+
const label = getEventHandlerLabel(eventHandler);
|
|
138
|
+
const start = Date.now();
|
|
139
|
+
if (!eventHandler.events[event.name || ''])
|
|
140
|
+
return Promise.reject(Error(`Event ${event.name} Not recognized for ${label} ${eventHandler.name}`));
|
|
141
|
+
logger.log('Handling Event', event.name, 'with position:', event.position, 'in', label, eventHandler.name);
|
|
142
|
+
return Promise.resolve(event)
|
|
143
|
+
.then(handleEvent(eventHandler, executeCommand))
|
|
144
|
+
.then((result) => {
|
|
145
|
+
logger.log('Event', event.name, ' with position', event.position, ` Processed at ${eventHandler.name} in`, ((Date.now() - start) / 1000).toFixed(2), 's');
|
|
146
|
+
return result;
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
const getEventHandlerLabel = (eventHandler) => `${eventHandler.eventHandlers ? 'Policy' : 'Projector'}`;
|
|
150
|
+
const checkIsReadmodel = (eventHandler) => !!eventHandler.isReadmodel;
|
|
151
|
+
const handleEvent = (eventHandler, executeCommand) => (event) => {
|
|
152
|
+
const _isReadmodel = checkIsReadmodel(eventHandler);
|
|
153
|
+
const handler = (eventHandler.eventProjectors || {})[event.name] || eventHandler.eventHandlers[event.name];
|
|
154
|
+
const executeHandler = () => Promise.resolve(event)
|
|
155
|
+
// Decrypt at the consumer seam BEFORE schema validation: the WAL-reader
|
|
156
|
+
// outbox delivers on-disk encrypted envelopes (it bypasses the
|
|
157
|
+
// eventstore decorator), and validation would reject an envelope object
|
|
158
|
+
// where a `string` field is declared. No-op when encryption is unwired
|
|
159
|
+
// or the event is already plaintext.
|
|
160
|
+
.then(decryptEvent)
|
|
161
|
+
.then((0, validation_1.validateSchema)(getEventSchema(eventHandler)(event.name), true))
|
|
162
|
+
.then(handler)
|
|
163
|
+
.then((response) => {
|
|
164
|
+
//FIXME: Typings for handleEVENTS
|
|
165
|
+
if (!response || _isReadmodel)
|
|
166
|
+
return Promise.resolve();
|
|
167
|
+
const policy = eventHandler;
|
|
168
|
+
if (policy.commandHandler && response.name) {
|
|
169
|
+
return executeCommand(policy.commandHandler, response.name)({
|
|
170
|
+
body: response.data,
|
|
171
|
+
params: { id: response.id }
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
})
|
|
175
|
+
.catch((error) => {
|
|
176
|
+
logger.debug('Handling error for event', event.name, 'with position', event.position, 'in event handler', eventHandler.name);
|
|
177
|
+
if (eventHandler.errorHandlers && eventHandler.errorHandlers[event.name] && typeof eventHandler.errorHandlers[event.name] === 'function')
|
|
178
|
+
return eventHandler.errorHandlers[event.name](error, event);
|
|
179
|
+
if (error instanceof pv3_types_1.ValidationError) {
|
|
180
|
+
logger.error('Validation Error handling event', event.name, 'with position', event.position, 'in event handler', eventHandler.name, error);
|
|
181
|
+
}
|
|
182
|
+
return Promise.reject(error);
|
|
183
|
+
});
|
|
184
|
+
// Wrap in ALS context from event metadata
|
|
185
|
+
const ctx = {
|
|
186
|
+
accountId: event.metadata?.accountId,
|
|
187
|
+
userId: event.metadata?.userId,
|
|
188
|
+
correlationId: event.metadata?.correlationId,
|
|
189
|
+
causationId: event.id,
|
|
190
|
+
impersonatedBy: event.metadata?.impersonatedBy
|
|
191
|
+
};
|
|
192
|
+
if (ctx.accountId || ctx.userId) {
|
|
193
|
+
return (0, executionContext_1.runWithExecutionContext)(ctx, executeHandler);
|
|
194
|
+
}
|
|
195
|
+
return executeHandler();
|
|
196
|
+
};
|
|
197
|
+
const addEventHandlerToMap = (eventHandler, executeCommand) => {
|
|
198
|
+
eventHandlerMap[eventHandler.name] = {
|
|
199
|
+
eventHandler: {
|
|
200
|
+
...eventHandler
|
|
201
|
+
},
|
|
202
|
+
events: Object.keys(eventHandler.events),
|
|
203
|
+
executeCommand
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
const getEventSchema = (eventHandler) => (eventName) => {
|
|
207
|
+
if (typeof eventHandler.events[eventName] !== 'function') {
|
|
208
|
+
throw new Error(`Event ${eventName} not found in ${eventHandler.name}`);
|
|
209
|
+
}
|
|
210
|
+
const definition = eventHandler.events[eventName]();
|
|
211
|
+
return (0, pv3_types_1.CommittedEventSchema)((definition.schema || jsonschema_definer_1.default.null()).copyWith({
|
|
212
|
+
plain: {
|
|
213
|
+
$id: eventName,
|
|
214
|
+
...(definition.friendlyName ? { 'x-friendly-name': definition.friendlyName } : {}),
|
|
215
|
+
...(definition.description ? { description: definition.description } : {})
|
|
216
|
+
}
|
|
217
|
+
}), eventName)
|
|
218
|
+
.required(['name', 'id']);
|
|
219
|
+
};
|
|
220
|
+
const registerEventHandlerEndpoint = (eventHandler, route, label, isReadmodel, tags) => {
|
|
221
|
+
endpoints.registerEndpoint({
|
|
222
|
+
loggingModule: (0, change_case_1.paramCase)(eventHandler.name),
|
|
223
|
+
subdomain: eventHandler.subdomain,
|
|
224
|
+
visibility: 'internal',
|
|
225
|
+
artifact: {
|
|
226
|
+
type: (isReadmodel ? 'readmodel' : 'policy'),
|
|
227
|
+
name: eventHandler.name
|
|
228
|
+
},
|
|
229
|
+
name: `Subscription endpoint for ${eventHandler.name}`,
|
|
230
|
+
description: `Process events sent to the ${label}`,
|
|
231
|
+
tags,
|
|
232
|
+
schemas: {
|
|
233
|
+
body: jsonschema_definer_1.default.anyOf(...Object.keys(eventHandler.events).map(getEventSchema(eventHandler)))
|
|
234
|
+
},
|
|
235
|
+
// It is not validated because the event handler will validate it as part of the event handling process. That way the error can be handled by the event handler.
|
|
236
|
+
shouldValidate: false,
|
|
237
|
+
route,
|
|
238
|
+
method: 'POST',
|
|
239
|
+
action: ({ body }) => processEvent(eventHandler.name)(body)
|
|
240
|
+
});
|
|
241
|
+
return route;
|
|
242
|
+
};
|
|
243
|
+
const defaultQueryHandler = async (repository, { idValue, limit, after, filter, sort, select, aggregate }, _query, readModel) => {
|
|
244
|
+
if (aggregate) {
|
|
245
|
+
// A DIFFERENT OPERATION, not a modified query — `aggregate` returns grouped rows, not model
|
|
246
|
+
// rows, which is precisely why it is not an option on `query`.
|
|
247
|
+
//
|
|
248
|
+
// The query-string `filter` and `idValue` are folded into the spec's own `filter` rather
|
|
249
|
+
// than being dropped: `filter` is PRE-grouping on both operations (slice 4), so narrowing
|
|
250
|
+
// the input rows means the same thing whichever of the two ways the caller expressed it.
|
|
251
|
+
// The teselly node contract passes `aggregate` and `filter` as SEPARATE inputs, so both
|
|
252
|
+
// arriving at once is the expected shape, not an error case.
|
|
253
|
+
const idFilter = idValue ? [{ field: readModel.idProperty, op: 'eq', value: idValue }] : [];
|
|
254
|
+
const combined = [...(aggregate.filter || []), ...(filter || []), ...idFilter];
|
|
255
|
+
return repository.aggregate({ ...aggregate, ...(combined.length ? { filter: combined } : {}) });
|
|
256
|
+
}
|
|
257
|
+
if (idValue) {
|
|
258
|
+
const idFilter = [...(filter || []), { field: readModel.idProperty, op: 'eq', value: idValue }];
|
|
259
|
+
const data = await repository.query({ limit, after, filter: idFilter, sort, select });
|
|
260
|
+
return data[0] || null;
|
|
261
|
+
}
|
|
262
|
+
return repository.query({ limit, after, filter, sort, select });
|
|
263
|
+
};
|
|
264
|
+
const wireSubscriptions = ({ snapshot, count, projectionParams, params, query, readmodelName }) => {
|
|
265
|
+
if (!query.subscriptions?.length)
|
|
266
|
+
return false;
|
|
267
|
+
const snapshotHeader = params.context?.req?.headers?.['x-subscription-snapshot'];
|
|
268
|
+
const wantsSnapshot = snapshotHeader !== 'false';
|
|
269
|
+
const items = snapshot == null ? [] : (0, bett3r_utils_1.ensureArray)(snapshot);
|
|
270
|
+
let subscribed = false;
|
|
271
|
+
query.subscriptions.forEach((s) => {
|
|
272
|
+
const manager = 'type' in s ? s : s.manager;
|
|
273
|
+
const id = manager.startSubscription(projectionParams, params.context?.req, params.context?.res, params.context?.user,
|
|
274
|
+
// Pass the authoritative route-derived name so the registration key matches the
|
|
275
|
+
// notify key (EventSource can't send the x-realtime-session-subscription header).
|
|
276
|
+
readmodelName,
|
|
277
|
+
// Retain the opening request as the subscription's `caller`, so per-subscriber
|
|
278
|
+
// shaping can use the same `EndpointActionParams` the query path passes.
|
|
279
|
+
params);
|
|
280
|
+
if (!id)
|
|
281
|
+
return;
|
|
282
|
+
subscribed = true;
|
|
283
|
+
activeSubscriptions[id] = readmodelName;
|
|
284
|
+
endpoints.callEventConnectionsActive();
|
|
285
|
+
if (wantsSnapshot) {
|
|
286
|
+
manager.send(id, {
|
|
287
|
+
type: 'realtime-session-subscription',
|
|
288
|
+
ref: readmodelName,
|
|
289
|
+
data: {
|
|
290
|
+
type: 'snapshot',
|
|
291
|
+
data: { items, count }
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
return subscribed;
|
|
297
|
+
};
|
|
298
|
+
const registerReadmodelQueryEndpoint = (query, readModel, route) => {
|
|
299
|
+
//TODO: Eliminar el idProperty del readmodel y sacarlo de la database
|
|
300
|
+
const idProperty = route.indexOf(`:${readModel.idProperty || 'id'}`) !== -1 ? readModel.idProperty || 'id' : '';
|
|
301
|
+
const readmodelName = (0, pv3_dev_utils_1.getReadmodelNameFromRoute)(route);
|
|
302
|
+
const readmodelSchema = readModel.schema.id(readModel.name);
|
|
303
|
+
const paramsSchemas = idProperty ? jsonschema_definer_1.default.shape({
|
|
304
|
+
[readModel.idProperty]: jsonschema_definer_1.default.string().optional()
|
|
305
|
+
}) : jsonschema_definer_1.default.shape({});
|
|
306
|
+
if (query.schemas?.responseQuerySchemaRef) {
|
|
307
|
+
query.schemas.response = query.schemas.response?.copyWith({
|
|
308
|
+
plain: {
|
|
309
|
+
['x-response-query-schema']: query.schemas?.responseQuerySchemaRef
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
const schemas = {
|
|
314
|
+
query: query.schemas?.query || pv3_types_1.defaultQuerySchemas.query,
|
|
315
|
+
params: query.schemas?.params || paramsSchemas,
|
|
316
|
+
responses: {
|
|
317
|
+
200: [
|
|
318
|
+
{
|
|
319
|
+
name: 'OK',
|
|
320
|
+
/**
|
|
321
|
+
* THE THIRD BRANCH IS THE AGGREGATE RESPONSE, AND IT IS DELIBERATELY PERMISSIVE.
|
|
322
|
+
*
|
|
323
|
+
* This is the one visible consequence of the resolved fork (Option B, authoring-time):
|
|
324
|
+
* the aggregation spec arrives PER REQUEST, and the row shape is a function of that
|
|
325
|
+
* spec — `{ accountId, netDelta }` for one caller, `{ currency, entryCount }` for the
|
|
326
|
+
* next. A concrete response schema is therefore impossible BY CONSTRUCTION, not
|
|
327
|
+
* merely unwritten. Do not "tighten" it; there is nothing to tighten it to.
|
|
328
|
+
*
|
|
329
|
+
* Tightness is not lost, it RELOCATES: teselly's authoring-time validator calls the
|
|
330
|
+
* exported `deriveAggregateSchema( modelSchema, spec )` on the concrete spec when a
|
|
331
|
+
* rule is SAVED, and gets the exact row schema — facets included — for the node's
|
|
332
|
+
* output ports. That export (slice 8) is the mechanism, which is why it is a
|
|
333
|
+
* deliverable rather than a convenience.
|
|
334
|
+
*
|
|
335
|
+
* Kept as `oneOf` rather than `anyOf` on purpose: `endpoints/index.ts` and the client
|
|
336
|
+
* library generator both read `plain.oneOf[0]` / `oneOf[1]` POSITIONALLY, so this
|
|
337
|
+
* branch is APPENDED and those two indices are unchanged. Response schemas are
|
|
338
|
+
* documentation here — neither the express nor the fastify adapter validates or
|
|
339
|
+
* serialises a response against them — so the strict "exactly one" reading of `oneOf`
|
|
340
|
+
* has no runtime consequence.
|
|
341
|
+
*/
|
|
342
|
+
schema: query.schemas?.response || jsonschema_definer_1.default.oneOf(readmodelSchema, jsonschema_definer_1.default.array().items(readmodelSchema), jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.object().additionalProperties(true)))
|
|
343
|
+
}
|
|
344
|
+
]
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
query.subscriptions && query.subscriptions.forEach((subscription) => {
|
|
348
|
+
if ('notificationSchema' in subscription && subscription.notificationSchema) {
|
|
349
|
+
schemas.responses[206] ||= [];
|
|
350
|
+
schemas.responses[206]?.push({
|
|
351
|
+
name: 'Subscription',
|
|
352
|
+
schema: subscription.notificationSchema
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
//FIXME: #TECHDEBT abstraer esto para soportar analytics
|
|
357
|
+
if (query.subscriptions) {
|
|
358
|
+
query.subscriptions.forEach((subscriptionManager) => {
|
|
359
|
+
const isWrapped = !('type' in subscriptionManager);
|
|
360
|
+
const manager = isWrapped ? subscriptionManager.manager : subscriptionManager;
|
|
361
|
+
const watchCollection = (isWrapped && subscriptionManager.collection) || readModel.collection;
|
|
362
|
+
if (!closeHandlersBySubscriptionManager.has(manager.type)) {
|
|
363
|
+
closeHandlersBySubscriptionManager.set(manager.type, (idValue) => {
|
|
364
|
+
logger.silly(`Subscription Closed for ${idProperty}`, idValue, 'in subscription');
|
|
365
|
+
delete activeSubscriptions[idValue];
|
|
366
|
+
if (Object.keys(activeSubscriptions).length === 0)
|
|
367
|
+
endpoints.callEventConnectionsInactive();
|
|
368
|
+
});
|
|
369
|
+
manager.readModelSubscriptionCloseEmitter.on('close', closeHandlersBySubscriptionManager.get(manager.type));
|
|
370
|
+
}
|
|
371
|
+
// Carry the formatter down to the manager: it is applied once per matching SUBSCRIBER
|
|
372
|
+
// (with that subscriber's retained `caller`), not once per change up here (TV1-2282).
|
|
373
|
+
const notifier = manager.notifySubscriptions(logger, watchCollection, readmodelName, query.responseFormatter);
|
|
374
|
+
if (readModel.database) {
|
|
375
|
+
readModel.database.onStarted(() => {
|
|
376
|
+
(readModel.sessionDatabase || readModel.database).getCollection(watchCollection)
|
|
377
|
+
// Forward the RAW change. Formatting here ran once per change, upstream of the
|
|
378
|
+
// subscriber fan-out, so a caller-dependent formatter had to leak to everyone or
|
|
379
|
+
// break everyone — and it also handed `subscriptionIncludes` and the account
|
|
380
|
+
// routing a row shape their filters were not built against.
|
|
381
|
+
.watch(['delete', 'insert', 'update', 'invalidate'], (data) => notifier(data));
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
endpoints.registerEndpoint({
|
|
387
|
+
method: 'GET',
|
|
388
|
+
loggingModule: (0, change_case_1.paramCase)(readModel.name),
|
|
389
|
+
subdomain: readModel.subdomain,
|
|
390
|
+
artifact: {
|
|
391
|
+
type: 'readmodel',
|
|
392
|
+
name: readModel.name
|
|
393
|
+
},
|
|
394
|
+
subscription: !!query.subscriptions,
|
|
395
|
+
name: `Readmodel Query endpoint for ${readModel.name}`,
|
|
396
|
+
description: query.description,
|
|
397
|
+
// Forwarded, not defaulted — `registerEndpoint` supplies `'private'` when
|
|
398
|
+
// absent, so spreading only when set preserves that default exactly.
|
|
399
|
+
// Mirrors the command path (`commandHandlers/index.ts`, `command.visibility`).
|
|
400
|
+
// Both were declared on the config type and only ONE was ever read here:
|
|
401
|
+
// `visibility` had no home at all, and `permissions` was silently dropped
|
|
402
|
+
// despite `Endpoint.permissions` existing and being emitted as
|
|
403
|
+
// `x-permissions`. A field a caller can set and nothing consumes is worse
|
|
404
|
+
// than no field, because the caller believes the route is configured.
|
|
405
|
+
...(query.visibility ? { visibility: query.visibility } : {}),
|
|
406
|
+
...(query.permissions ? { permissions: query.permissions } : {}),
|
|
407
|
+
schemas,
|
|
408
|
+
route,
|
|
409
|
+
action: async (params) => {
|
|
410
|
+
const projectionParams = (query.translator || exports.defaultQueryParamsTranslator)(readModel.schema, params, idProperty);
|
|
411
|
+
const transformedProjectionParams = !query.transformers
|
|
412
|
+
? projectionParams
|
|
413
|
+
: await query.transformers.reduce((promise, transformer) => {
|
|
414
|
+
return promise.then((projectionParams) => transformer(projectionParams, params));
|
|
415
|
+
}, Promise.resolve(projectionParams));
|
|
416
|
+
const repository = readModel.database?.getCollection(readModel.collection || readModel.name);
|
|
417
|
+
const handler = query.queryHandler || defaultQueryHandler;
|
|
418
|
+
const rawData = await handler(repository, { ...transformedProjectionParams, params }, query, readModel, readmodelName);
|
|
419
|
+
// Pass the live request as the `caller` so the formatter can shape the response
|
|
420
|
+
// for whoever is asking.
|
|
421
|
+
const data = query.responseFormatter ? query.responseFormatter(rawData, params) : rawData;
|
|
422
|
+
if (query.subscriptions?.length) {
|
|
423
|
+
const isDefaultListResult = !query.queryHandler && Array.isArray(rawData);
|
|
424
|
+
const count = isDefaultListResult
|
|
425
|
+
? await repository.count({ filter: transformedProjectionParams.filter })
|
|
426
|
+
: (data == null ? 0 : (0, bett3r_utils_1.ensureArray)(data).length);
|
|
427
|
+
const subscribed = wireSubscriptions({
|
|
428
|
+
snapshot: data,
|
|
429
|
+
count,
|
|
430
|
+
projectionParams: transformedProjectionParams,
|
|
431
|
+
params,
|
|
432
|
+
query,
|
|
433
|
+
readmodelName
|
|
434
|
+
});
|
|
435
|
+
if (subscribed)
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
return data;
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
return route;
|
|
442
|
+
};
|
|
443
|
+
const registerEventHandler = (eventHandler, executeCommand) => {
|
|
444
|
+
const isReadmodel = checkIsReadmodel(eventHandler);
|
|
445
|
+
let eventHandlerRoute = '';
|
|
446
|
+
// HOISTED out of the `events.length` branch below (TV1-2275). Inside it, the guard
|
|
447
|
+
// could not fire for a subscription-less readmodel — precisely the handler whose
|
|
448
|
+
// duplicate name is now able to drop an artifact from the deployment manifest.
|
|
449
|
+
if (registeredEventHandlerNames.has(eventHandler.name)) {
|
|
450
|
+
(0, validation_1.dieOnError)(logger)(`A policy or projector with the name ${eventHandler.name} already exists on this instance.`);
|
|
451
|
+
}
|
|
452
|
+
registeredEventHandlerNames.add(eventHandler.name);
|
|
453
|
+
if (eventHandler.events && Object.keys(eventHandler.events).length) {
|
|
454
|
+
const label = getEventHandlerLabel(eventHandler);
|
|
455
|
+
addEventHandlerToMap(eventHandler, executeCommand);
|
|
456
|
+
eventHandlerRoute = (0, utils_1.getEventHandlerPostRoute)(isReadmodel ? 'readmodel' : 'policy', eventHandler);
|
|
457
|
+
registerEventHandlerEndpoint(eventHandler, eventHandlerRoute, label, isReadmodel, []);
|
|
458
|
+
}
|
|
459
|
+
if (isReadmodel) {
|
|
460
|
+
const qs = eventHandler.queries || [{}];
|
|
461
|
+
qs.forEach((q) => {
|
|
462
|
+
registerReadmodelQueryEndpoint(q, eventHandler, q.route || (0, utils_1.getReadmodelQueryRoute)(eventHandler));
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
return eventHandlerRoute;
|
|
466
|
+
};
|
|
467
|
+
return {
|
|
468
|
+
handleEvent,
|
|
469
|
+
defaultQueryHandler,
|
|
470
|
+
registerEventHandler
|
|
471
|
+
};
|
|
472
|
+
};
|
|
473
|
+
exports.createEventHandlers = createEventHandlers;
|
|
474
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/libraries/eventsourcing/eventHandlers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
export type ExecutionContext = {
|
|
3
|
+
accountId: string;
|
|
4
|
+
userId: string;
|
|
5
|
+
correlationId?: string;
|
|
6
|
+
causationId?: string;
|
|
7
|
+
impersonatedBy?: string;
|
|
8
|
+
/**
|
|
9
|
+
* AMBIENT, STRING-ONLY key/value pairs stamped onto the metadata of every event the
|
|
10
|
+
* commands running inside this context emit, NESTED under `metadata.tags` — never
|
|
11
|
+
* spread. Set only by an in-process `runWithExecutionContext`; there is deliberately
|
|
12
|
+
* NO transport (no header, no query param, no `INFRA_QUERY_PARAMS` entry) that can
|
|
13
|
+
* populate it from outside the process.
|
|
14
|
+
*
|
|
15
|
+
* `Record<string, string>` is a SECURITY constraint, not a style choice. Event
|
|
16
|
+
* metadata is `additionalProperties: true`, so an open `Record<string, unknown>`
|
|
17
|
+
* envelope merged into it would let anything that can set a tag forge metadata that
|
|
18
|
+
* consumers treat as infrastructure truth — most sharply `isRedelivery: true`, which
|
|
19
|
+
* makes an at-most-once egress guard skip its side effect entirely. String-only kills
|
|
20
|
+
* that class (`"true" !== true`); the `tags` nesting makes a collision with a reserved
|
|
21
|
+
* metadata key structurally impossible.
|
|
22
|
+
*/
|
|
23
|
+
tags?: Readonly<Record<string, string>>;
|
|
24
|
+
/**
|
|
25
|
+
* HOST-DEFINED attributes of the acting identity, merged into `context.user` for
|
|
26
|
+
* commands dispatched from inside this context. Exists so a host can carry an
|
|
27
|
+
* identity or authorization tier pv3 has no vocabulary for — an authorization-scope
|
|
28
|
+
* map, an "executed by" principal — across an in-process hop WITHOUT inventing a
|
|
29
|
+
* request header for it.
|
|
30
|
+
*
|
|
31
|
+
* That distinction is the point. A hop's identity is otherwise serialized into
|
|
32
|
+
* `x-auth-*` headers on a synthetic request, and a header is forgeable by anything
|
|
33
|
+
* that can set one. An `ExecutionContext` field is not: it is ambient, in-process,
|
|
34
|
+
* and reachable only through `runWithExecutionContext`. Authorization tiers belong
|
|
35
|
+
* here; identity a downstream service must independently verify does not.
|
|
36
|
+
*
|
|
37
|
+
* The RESERVED keys (`id`, `accountId`) always win over this bag — see the merge in
|
|
38
|
+
* `commandHandlers`. Otherwise a host attribute could redefine the acting user's
|
|
39
|
+
* identity by name collision, which is the same forgery hazard `tags` avoids by
|
|
40
|
+
* nesting.
|
|
41
|
+
*
|
|
42
|
+
* Unlike `tags` this is NOT stamped onto event metadata, so it needs no string-only
|
|
43
|
+
* constraint: it never reaches the `additionalProperties: true` metadata envelope.
|
|
44
|
+
*/
|
|
45
|
+
userAttributes?: Readonly<Record<string, unknown>>;
|
|
46
|
+
};
|
|
47
|
+
export declare const executionContext: AsyncLocalStorage<ExecutionContext>;
|
|
48
|
+
export declare const getExecutionContext: () => ExecutionContext | undefined;
|
|
49
|
+
export declare const runWithExecutionContext: <T>(ctx: ExecutionContext, fn: () => T) => T;
|
|
50
|
+
//# sourceMappingURL=executionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionContext.d.ts","sourceRoot":"","sources":["../../../src/libraries/eventsourcing/executionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,gBAAgB,qCAA4C,CAAC;AAE1E,eAAO,MAAM,mBAAmB,QAAO,gBAAgB,GAAG,SAC7B,CAAC;AAE9B,eAAO,MAAM,uBAAuB,GAAI,CAAC,OAAQ,gBAAgB,MAAM,MAAM,CAAC,KAAI,CACjD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runWithExecutionContext = exports.getExecutionContext = exports.executionContext = void 0;
|
|
4
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
5
|
+
exports.executionContext = new node_async_hooks_1.AsyncLocalStorage();
|
|
6
|
+
const getExecutionContext = () => exports.executionContext.getStore();
|
|
7
|
+
exports.getExecutionContext = getExecutionContext;
|
|
8
|
+
const runWithExecutionContext = (ctx, fn) => exports.executionContext.run(ctx, fn);
|
|
9
|
+
exports.runWithExecutionContext = runWithExecutionContext;
|
|
10
|
+
//# sourceMappingURL=executionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionContext.js","sourceRoot":"","sources":["../../../src/libraries/eventsourcing/executionContext.ts"],"names":[],"mappings":";;;AAAA,uDAAqD;AAgDxC,QAAA,gBAAgB,GAAG,IAAI,oCAAiB,EAAoB,CAAC;AAEnE,MAAM,mBAAmB,GAAG,GAAiC,EAAE,CACpE,QAAA,gBAAgB,CAAC,QAAQ,EAAE,CAAC;AADjB,QAAA,mBAAmB,GAAnB,mBAAmB,CACF;AAEvB,MAAM,uBAAuB,GAAG,CAAK,GAAqB,EAAE,EAAW,EAAM,EAAE,CACpF,QAAA,gBAAgB,CAAC,GAAG,CAAE,GAAG,EAAE,EAAE,CAAE,CAAC;AADrB,QAAA,uBAAuB,GAAvB,uBAAuB,CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CommandHandlerState, DatabaseOps, IdempotencyCheckType } from '@bett3r-dev/pv3-types';
|
|
2
|
+
export declare const idempotency: {
|
|
3
|
+
check: <Model, CommandPayload>(value1: ((state: CommandHandlerState<any, CommandPayload, Model>) => any), op: DatabaseOps, value2?: ((state: CommandHandlerState<any, CommandPayload, Model>) => any)) => IdempotencyCheckType<Model, CommandPayload>;
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libraries/eventsourcing/idempotencyChecks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAsB/F,eAAO,MAAM,WAAW;YATT,KAAK,EAAE,cAAc,UAAW,CAAC,CAAE,KAAK,EAAC,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,KAAM,GAAG,CAAE,MAAM,WAAW,WAAW,CAAC,CAAE,KAAK,EAAC,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,KAAM,GAAG,CAAE,KAAG,oBAAoB,CAAC,KAAK,EAAE,cAAc,CAAC;CAW9P,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.idempotency = void 0;
|
|
4
|
+
const ramda_1 = require("ramda");
|
|
5
|
+
const common_1 = require("../invariants/common");
|
|
6
|
+
function createIdempotencyCheck(check) {
|
|
7
|
+
return {
|
|
8
|
+
check: async (handlerState) => {
|
|
9
|
+
return check(handlerState)
|
|
10
|
+
.then((0, ramda_1.always)(handlerState));
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
const check = (value1, op, value2) => {
|
|
15
|
+
return createIdempotencyCheck(async (handlerState) => {
|
|
16
|
+
const path1Value = await value1(handlerState);
|
|
17
|
+
const path2Value = value2 && await value2(handlerState);
|
|
18
|
+
const result = (0, common_1.compareCheck)(path1Value, path2Value, op);
|
|
19
|
+
if (result)
|
|
20
|
+
return Promise.reject({ ignore: '--IdempotencyCheck--', handlerState });
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
exports.idempotency = {
|
|
24
|
+
check
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/libraries/eventsourcing/idempotencyChecks/index.ts"],"names":[],"mappings":";;;AACA,iCAA+B;AAC/B,iDAAoD;AAEpD,SAAS,sBAAsB,CAAkB,KAAkF;IACjI,OAAO;QACL,KAAK,EAAE,KAAK,EAAG,YAAY,EAAG,EAAE;YAC9B,OAAO,KAAK,CAAE,YAAY,CAAE;iBACzB,IAAI,CAAE,IAAA,cAAM,EAAE,YAAY,CAAE,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAAG,CAAyB,MAA2E,EAAE,EAAe,EAAE,MAA4E,EAA+C,EAAE;IAChQ,OAAO,sBAAsB,CAAE,KAAK,EAAG,YAA6D,EAAG,EAAE;QACvG,MAAM,UAAU,GAAG,MAAM,MAAM,CAAE,YAAY,CAAE,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,MAAM,CAAE,YAAY,CAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,CAAE,CAAC;QAC1D,IAAK,MAAM;YAAG,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,YAAY,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEW,QAAA,WAAW,GAAG;IACzB,KAAK;CACN,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EndpointActionParamsContext, EndpointsPort, EventSourcingLibraryType, EventStorePort, InstrumentCommandExecution, LoggerPort } from '@bett3r-dev/pv3-types';
|
|
2
|
+
import { ObjectSchema } from '@bett3r-dev/jsonschema-definer';
|
|
3
|
+
import { EventDecryptFn } from './eventHandlers';
|
|
4
|
+
export * from './commandHandlers';
|
|
5
|
+
export * from './commandTemplates';
|
|
6
|
+
export * from './eventHandlers';
|
|
7
|
+
export * from './idempotencyChecks';
|
|
8
|
+
export * from './invariants';
|
|
9
|
+
export * from './subscriptions';
|
|
10
|
+
export * from './utils';
|
|
11
|
+
export { getExecutionContext, runWithExecutionContext, executionContext } from './executionContext';
|
|
12
|
+
export type { ExecutionContext } from './executionContext';
|
|
13
|
+
export declare const EventSourcing: <METADATA extends Record<string, any> = any, USER = any>(loggerPort: LoggerPort, eventstore: EventStorePort, endpoints: EndpointsPort<USER>, metadataSchema?: ObjectSchema<METADATA>, contextToMetadata?: (context: Partial<EndpointActionParamsContext<USER>>) => METADATA, instrumentCommandExecution?: InstrumentCommandExecution, decryptEvent?: EventDecryptFn) => EventSourcingLibraryType<METADATA, USER>;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|