@bett3r-dev/pv3 1.0.0 → 2.5.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/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,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const pv3_types_1 = require("@bett3r-dev/pv3-types");
|
|
4
|
+
const index_1 = require("./index");
|
|
5
|
+
describe('MemoryDb createMany atomic unique-index reject', () => {
|
|
6
|
+
const setup = async () => {
|
|
7
|
+
const db = (0, index_1.MemoryDb)();
|
|
8
|
+
await db.start();
|
|
9
|
+
const collection = db.getCollection('people');
|
|
10
|
+
await collection.ensureIndex(['email'], { isUnique: true });
|
|
11
|
+
return { db, collection };
|
|
12
|
+
};
|
|
13
|
+
it('rejects with DuplicatedValueInIndexError and leaves the collection unmutated when any doc collides with an existing row on a unique index', async () => {
|
|
14
|
+
// Given a collection holding one row
|
|
15
|
+
const { collection } = await setup();
|
|
16
|
+
await collection.createMany([{ id: '1', email: 'a@a.com' }]);
|
|
17
|
+
const before = await collection.query({});
|
|
18
|
+
// When createMany-ing a batch whose second doc collides on the unique `email` index
|
|
19
|
+
await expect(collection.createMany([
|
|
20
|
+
{ id: '2', email: 'b@b.com' },
|
|
21
|
+
{ id: '3', email: 'a@a.com' }
|
|
22
|
+
])).rejects.toBeInstanceOf(pv3_types_1.DuplicatedValueInIndexError);
|
|
23
|
+
// Then NONE of the batch was written — all-or-nothing, including the non-colliding doc '2'
|
|
24
|
+
expect(await collection.query({})).toEqual(before);
|
|
25
|
+
expect(await collection.readById('2')).toBeNull();
|
|
26
|
+
expect(await collection.readById('3')).toBeNull();
|
|
27
|
+
});
|
|
28
|
+
it('inserts every row when the batch does not collide', async () => {
|
|
29
|
+
const { collection } = await setup();
|
|
30
|
+
const result = await collection.createMany([
|
|
31
|
+
{ id: '1', email: 'a@a.com' },
|
|
32
|
+
{ id: '2', email: 'b@b.com' }
|
|
33
|
+
]);
|
|
34
|
+
expect(result).toHaveLength(2);
|
|
35
|
+
expect(await collection.readById('1')).toEqual({ id: '1', email: 'a@a.com' });
|
|
36
|
+
expect(await collection.readById('2')).toEqual({ id: '2', email: 'b@b.com' });
|
|
37
|
+
});
|
|
38
|
+
it('does not treat null indexed values as colliding (SQL NULL-distinctness — versionless streams)', async () => {
|
|
39
|
+
// Compound unique index on (stream, version), matching the eventstore.
|
|
40
|
+
const db = (0, index_1.MemoryDb)();
|
|
41
|
+
await db.start();
|
|
42
|
+
const events = db.getCollection('events');
|
|
43
|
+
await events.ensureIndex(['stream', 'version'], { isUnique: true });
|
|
44
|
+
// A versionless stream commits many events all at version === null.
|
|
45
|
+
await events.createMany([{ id: '1', stream: 'S-1', version: null }]);
|
|
46
|
+
await expect(events.createMany([{ id: '2', stream: 'S-1', version: null }]))
|
|
47
|
+
.resolves.toHaveLength(1);
|
|
48
|
+
expect(await events.query({})).toHaveLength(2);
|
|
49
|
+
// Non-null duplicates on the same index still collide.
|
|
50
|
+
await events.createMany([{ id: '3', stream: 'S-1', version: 0 }]);
|
|
51
|
+
await expect(events.createMany([{ id: '4', stream: 'S-1', version: 0 }]))
|
|
52
|
+
.rejects.toBeInstanceOf(pv3_types_1.DuplicatedValueInIndexError);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('MemoryDb transaction isolation (TV1-1976)', () => {
|
|
56
|
+
it("a rolled-back transaction does not clobber a concurrent transaction's committed write", async () => {
|
|
57
|
+
// Given a db and a transaction B whose snapshot is taken (at BEGIN) while the
|
|
58
|
+
// db is still empty, but which acts LATER — the exact window the old
|
|
59
|
+
// whole-_db snapshot/restore clobbered.
|
|
60
|
+
const db = (0, index_1.MemoryDb)();
|
|
61
|
+
await db.start();
|
|
62
|
+
const coll = 'accounts';
|
|
63
|
+
let release = () => { };
|
|
64
|
+
const gate = new Promise((r) => { release = r; });
|
|
65
|
+
const txB = db.initTransaction(async (transaction) => {
|
|
66
|
+
await gate; // B was BEGUN (snapshot empty) but does its write only after A commits.
|
|
67
|
+
await transaction.getCollection(coll).upsert('b', { id: 'b', v: 2 });
|
|
68
|
+
throw new Error('boom'); // force B to roll back
|
|
69
|
+
});
|
|
70
|
+
// When a concurrent transaction A commits a write to a DIFFERENT key while B is paused,
|
|
71
|
+
await db.initTransaction(async (transaction) => {
|
|
72
|
+
await transaction.getCollection(coll).upsert('a', { id: 'a', keep: true });
|
|
73
|
+
});
|
|
74
|
+
// ...and only then B resumes, writes 'b', and rolls back.
|
|
75
|
+
release();
|
|
76
|
+
await expect(txB).rejects.toThrow('boom');
|
|
77
|
+
// Then A's committed write SURVIVES B's rollback (old code wiped it), and B's
|
|
78
|
+
// own write is undone.
|
|
79
|
+
expect(await db.getCollection(coll).readById('a')).toEqual({ id: 'a', keep: true });
|
|
80
|
+
expect(await db.getCollection(coll).readById('b')).toBeNull();
|
|
81
|
+
});
|
|
82
|
+
it('rolls back only its own writes, leaving pre-existing committed rows untouched', async () => {
|
|
83
|
+
// Given a committed baseline row
|
|
84
|
+
const db = (0, index_1.MemoryDb)();
|
|
85
|
+
await db.start();
|
|
86
|
+
const coll = 'accounts';
|
|
87
|
+
await db.getCollection(coll).upsert('base', { id: 'base', v: 0 });
|
|
88
|
+
// When a transaction updates the baseline AND inserts a new row, then rolls back
|
|
89
|
+
await expect(db.initTransaction(async (transaction) => {
|
|
90
|
+
await transaction.getCollection(coll).upsert('base', { id: 'base', v: 99 });
|
|
91
|
+
await transaction.getCollection(coll).upsert('new', { id: 'new', v: 1 });
|
|
92
|
+
throw new Error('rollback');
|
|
93
|
+
})).rejects.toThrow('rollback');
|
|
94
|
+
// Then the baseline is restored to its pre-transaction value and the insert is gone
|
|
95
|
+
expect(await db.getCollection(coll).readById('base')).toEqual({ id: 'base', v: 0 });
|
|
96
|
+
expect(await db.getCollection(coll).readById('new')).toBeNull();
|
|
97
|
+
});
|
|
98
|
+
it('undoes a non-unique arrayPush on rollback (the in-place push must not corrupt its own pre-image)', async () => {
|
|
99
|
+
// Given a committed row with an array field
|
|
100
|
+
const db = (0, index_1.MemoryDb)();
|
|
101
|
+
await db.start();
|
|
102
|
+
const coll = 'docs';
|
|
103
|
+
await db.getCollection(coll).upsert('r1', { id: 'r1', tags: ['a'] });
|
|
104
|
+
// When a transaction arrayPushes a NON-UNIQUE element then rolls back
|
|
105
|
+
await expect(db.initTransaction(async (transaction) => {
|
|
106
|
+
await transaction.getCollection(coll).arrayPush([{ field: 'id', op: 'eq', value: 'r1' }], ['tags'], 'b');
|
|
107
|
+
throw new Error('rollback');
|
|
108
|
+
})).rejects.toThrow('rollback');
|
|
109
|
+
// Then the push is undone — the pre-image is intact. (Regression: the old
|
|
110
|
+
// in-place `array.push` mutated the row's array before the journal captured
|
|
111
|
+
// its pre-image by reference, so the rollback left the pushed 'b' behind.)
|
|
112
|
+
expect(await db.getCollection(coll).readById('r1')).toEqual({ id: 'r1', tags: ['a'] });
|
|
113
|
+
});
|
|
114
|
+
it('a committed non-unique arrayPush still persists the pushed element', async () => {
|
|
115
|
+
// Control: the fresh-array rewrite must not change normal (commit) behavior.
|
|
116
|
+
const db = (0, index_1.MemoryDb)();
|
|
117
|
+
await db.start();
|
|
118
|
+
const coll = 'docs';
|
|
119
|
+
await db.getCollection(coll).upsert('r1', { id: 'r1', tags: ['a'] });
|
|
120
|
+
await db.initTransaction(async (transaction) => {
|
|
121
|
+
await transaction.getCollection(coll).arrayPush([{ field: 'id', op: 'eq', value: 'r1' }], ['tags'], 'b');
|
|
122
|
+
});
|
|
123
|
+
expect(await db.getCollection(coll).readById('r1')).toEqual({ id: 'r1', tags: ['a', 'b'] });
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
// A CHARACTERIZATION test: it pins the behavior MemoryDb already has, on purpose. It is green from
|
|
127
|
+
// the moment it is written and it must STAY green — if it ever goes red, somebody "fixed" the
|
|
128
|
+
// non-isolation and (see below) broke the OCC retry while they were at it.
|
|
129
|
+
describe('MemoryDb transactions are ATOMIC, not ISOLATED (TV1-1985)', () => {
|
|
130
|
+
it('a read taken from the POOL sees a write made inside an OPEN, UNCOMMITTED transaction', async () => {
|
|
131
|
+
// Given a db and an open transaction
|
|
132
|
+
const db = (0, index_1.MemoryDb)();
|
|
133
|
+
await db.start();
|
|
134
|
+
const coll = 'accounts';
|
|
135
|
+
// When the transaction writes a row and, BEFORE it commits, the POOL reads the same collection.
|
|
136
|
+
// (`initTransaction` only resolves after the callback returns, so everything read inside the
|
|
137
|
+
// callback is read while the transaction is still open — nothing is committed yet.)
|
|
138
|
+
let readByIdFromPool = 'never read';
|
|
139
|
+
let queriedFromPool = [];
|
|
140
|
+
await db.initTransaction(async (transaction) => {
|
|
141
|
+
await transaction.getCollection(coll).upsert('a', { id: 'a', uncommitted: true });
|
|
142
|
+
readByIdFromPool = await db.getCollection(coll).readById('a');
|
|
143
|
+
queriedFromPool = await db.getCollection(coll).query({});
|
|
144
|
+
});
|
|
145
|
+
// Then the UNCOMMITTED row IS visible from the pool. This is the true, deliberate behavior —
|
|
146
|
+
// NOT a bug to be asserted away. MemoryDb applies transaction writes IN PLACE on the shared
|
|
147
|
+
// `_db` behind an undo-journal Proxy and its commit is a no-op (index.ts:341-421): the journal
|
|
148
|
+
// exists only to restore this transaction's touched keys on ROLLBACK. It therefore buys
|
|
149
|
+
// ATOMICITY, not ISOLATION. index.ts:360-364 records the rejection of the alternative
|
|
150
|
+
// explicitly: a snapshot-clone-then-apply-on-commit (MVCC-style) overlay was turned down
|
|
151
|
+
// because applying writes only at commit defers the UNIQUE-index violation to commit time,
|
|
152
|
+
// which (a) diverges from Postgres, which fails at INSERT, and (b) bypasses the eventstore's
|
|
153
|
+
// `createMany` -> ConcurrencyError remap that the command-handler's optimistic retry is keyed
|
|
154
|
+
// on. Isolate MemoryDb and you break the OCC retry.
|
|
155
|
+
expect(readByIdFromPool).toEqual({ id: 'a', uncommitted: true });
|
|
156
|
+
expect(queriedFromPool).toEqual([{ id: 'a', uncommitted: true }]);
|
|
157
|
+
// The consequence, and the reason this fact is worth an executed assertion: NO MemoryDb-backed
|
|
158
|
+
// test can witness a transaction-ISOLATION bug. `DatabaseEventstore.reduceMultipleStream`
|
|
159
|
+
// silently dropped the transaction it was handed and read from the pool for three months — and
|
|
160
|
+
// because a MemoryDb pool read returns exactly what the transaction wrote, the buggy and the
|
|
161
|
+
// fixed adapter reduce to IDENTICAL state here. The entire default (infra-free) tier could only
|
|
162
|
+
// ever pass VACUOUSLY on that contract; the ticket even produced a false P1 off the confusion.
|
|
163
|
+
// Isolation contracts must therefore be proven in a `.deps.test.ts` over a REAL Postgres:
|
|
164
|
+
// packages/pv3-adapter-eventstore-postgres/__tests__/multiStreamTransaction.deps.test.ts.
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/adapters/database/memory/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagingCursorZero.test.d.ts","sourceRoot":"","sources":["../../../../src/adapters/database/memory/pagingCursorZero.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("./index");
|
|
4
|
+
/**
|
|
5
|
+
* A paging walk over a readmodel whose cursor legitimately takes the value `0`.
|
|
6
|
+
*
|
|
7
|
+
* The cursor is the key column's value, so on a zero-based numeric key page 1's last key IS `0`.
|
|
8
|
+
* The adapter used to guard the cursor with `if ( after )`; `0` being falsy, page 2 was fetched
|
|
9
|
+
* UNCURSORED and returned page 1 again — whose last key is again `0` — so the walk never
|
|
10
|
+
* terminated and re-yielded page 1 forever.
|
|
11
|
+
*
|
|
12
|
+
* The walk below is BOUNDED by MAX_PAGES: a regression FAILS the assertion rather than hanging
|
|
13
|
+
* the suite.
|
|
14
|
+
*/
|
|
15
|
+
describe('MemoryDb paging cursor of 0', () => {
|
|
16
|
+
const MAX_PAGES = 10;
|
|
17
|
+
const setup = async () => {
|
|
18
|
+
const db = (0, index_1.MemoryDb)();
|
|
19
|
+
await db.start();
|
|
20
|
+
const collection = db.getCollection('items');
|
|
21
|
+
// Zero-based numeric keys — '0' is a real, reachable cursor value.
|
|
22
|
+
await collection.createMany([
|
|
23
|
+
{ id: '0', name: 'zero' },
|
|
24
|
+
{ id: '1', name: 'one' },
|
|
25
|
+
{ id: '2', name: 'two' }
|
|
26
|
+
]);
|
|
27
|
+
return collection;
|
|
28
|
+
};
|
|
29
|
+
it('Given a page-1 cursor of 0 when fetching page 2 then page 2 does NOT repeat page 1', async () => {
|
|
30
|
+
const collection = await setup();
|
|
31
|
+
const pageOne = await collection.query({ limit: 1 });
|
|
32
|
+
expect(pageOne.map(r => r.id)).toEqual(['0']);
|
|
33
|
+
// The cursor page 1 hands forward is the literal value 0 — the falsy value that used to be dropped.
|
|
34
|
+
const cursor = Number(pageOne[pageOne.length - 1].id);
|
|
35
|
+
expect(cursor).toBe(0);
|
|
36
|
+
const pageTwo = await collection.query({ limit: 1, after: cursor });
|
|
37
|
+
expect(pageTwo.map(r => r.id)).not.toEqual(pageOne.map(r => r.id));
|
|
38
|
+
expect(pageTwo.map(r => r.id)).toEqual(['1']);
|
|
39
|
+
});
|
|
40
|
+
it('Given a full paged walk from a 0 cursor when draining the collection then it TERMINATES and visits each row exactly once', async () => {
|
|
41
|
+
const collection = await setup();
|
|
42
|
+
const seen = [];
|
|
43
|
+
let cursor = undefined;
|
|
44
|
+
let pages = 0;
|
|
45
|
+
while (pages < MAX_PAGES) {
|
|
46
|
+
const page = await collection.query(cursor === undefined ? { limit: 1 } : { limit: 1, after: cursor });
|
|
47
|
+
if (page.length === 0)
|
|
48
|
+
break;
|
|
49
|
+
pages++;
|
|
50
|
+
seen.push(...page.map(r => r.id));
|
|
51
|
+
cursor = Number(page[page.length - 1].id);
|
|
52
|
+
}
|
|
53
|
+
// Terminated well inside the bound — a re-yielding pager would burn all MAX_PAGES.
|
|
54
|
+
expect(pages).toBe(3);
|
|
55
|
+
// Each row exactly once, in key order — no repeats.
|
|
56
|
+
expect(seen).toEqual(['0', '1', '2']);
|
|
57
|
+
expect(new Set(seen).size).toBe(seen.length);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=pagingCursorZero.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagingCursorZero.test.js","sourceRoot":"","sources":["../../../../src/adapters/database/memory/pagingCursorZero.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagingVanishedCursor.test.d.ts","sourceRoot":"","sources":["../../../../src/adapters/database/memory/pagingVanishedCursor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("./index");
|
|
4
|
+
/**
|
|
5
|
+
* A paging walk over a collection whose CURSOR ROW IS DELETED between page 1 and page 2.
|
|
6
|
+
*
|
|
7
|
+
* The adapter resolved the cursor with `sortedKeys.indexOf( after.toString())`. When the cursor
|
|
8
|
+
* key has vanished, `indexOf` returns -1 and the follow-on `slice( -1 + 1 )` === `slice( 0 )`
|
|
9
|
+
* re-yields the WHOLE collection from the beginning — the same non-terminating-pager class as the
|
|
10
|
+
* falsy-cursor bug in `pagingCursorZero.test.ts`, reached by a different route.
|
|
11
|
+
*
|
|
12
|
+
* Correct semantics are taken from the Postgres adapter, the contract oracle: it compiles the
|
|
13
|
+
* cursor to `<key> > $n` (`postgres.utils.ts` `translateSQL`), so deleting the cursor row changes
|
|
14
|
+
* nothing and rows after it still match — SKIP-FORWARD, not empty, and certainly not restart.
|
|
15
|
+
* Mongo agrees ( `{ id: { $gt: after }}` ).
|
|
16
|
+
*
|
|
17
|
+
* The walk below is BOUNDED by MAX_PAGES: a regression FAILS the assertion rather than hanging
|
|
18
|
+
* the suite.
|
|
19
|
+
*/
|
|
20
|
+
describe('MemoryDb paging over a vanished cursor', () => {
|
|
21
|
+
const MAX_PAGES = 10;
|
|
22
|
+
const setup = async () => {
|
|
23
|
+
const db = (0, index_1.MemoryDb)();
|
|
24
|
+
await db.start();
|
|
25
|
+
const collection = db.getCollection('items');
|
|
26
|
+
await collection.createMany([
|
|
27
|
+
{ id: '1', name: 'one' },
|
|
28
|
+
{ id: '2', name: 'two' },
|
|
29
|
+
{ id: '3', name: 'three' },
|
|
30
|
+
{ id: '4', name: 'four' },
|
|
31
|
+
{ id: '5', name: 'five' }
|
|
32
|
+
]);
|
|
33
|
+
return collection;
|
|
34
|
+
};
|
|
35
|
+
it('Given the cursor row is deleted when fetching the next page then it SKIPS FORWARD to the next key, not back to the start', async () => {
|
|
36
|
+
const collection = await setup();
|
|
37
|
+
const pageOne = await collection.query({ limit: 2 });
|
|
38
|
+
expect(pageOne.map(r => r.id)).toEqual(['1', '2']);
|
|
39
|
+
const cursor = pageOne[pageOne.length - 1].id;
|
|
40
|
+
// The row the cursor names disappears between pages.
|
|
41
|
+
await collection.destroyById(cursor);
|
|
42
|
+
const pageTwo = await collection.query({ limit: 2, after: cursor });
|
|
43
|
+
// Skip-forward: everything ordered after the vanished key, nothing before it.
|
|
44
|
+
expect(pageTwo.map(r => r.id)).toEqual(['3', '4']);
|
|
45
|
+
expect(pageTwo.map(r => r.id)).not.toContain('1');
|
|
46
|
+
});
|
|
47
|
+
it('Given a paged walk whose cursor row vanishes each page then it TERMINATES and never re-yields an earlier row', async () => {
|
|
48
|
+
const collection = await setup();
|
|
49
|
+
// Pages of 2, deleting only the row the cursor NAMES (the page's last). Row '1' is never the
|
|
50
|
+
// cursor, so it stays in the collection for the whole walk — which is what makes a restarting
|
|
51
|
+
// pager observable: broken, every page leads with '1' again, and the walk burns pages until
|
|
52
|
+
// the bound. Deleting the head instead would mask the defect.
|
|
53
|
+
const seen = [];
|
|
54
|
+
let cursor = undefined;
|
|
55
|
+
let pages = 0;
|
|
56
|
+
while (pages < MAX_PAGES) {
|
|
57
|
+
const page = await collection.query(cursor === undefined ? { limit: 2 } : { limit: 2, after: cursor });
|
|
58
|
+
if (page.length === 0)
|
|
59
|
+
break;
|
|
60
|
+
pages++;
|
|
61
|
+
seen.push(...page.map(r => r.id));
|
|
62
|
+
cursor = page[page.length - 1].id;
|
|
63
|
+
await collection.destroyById(cursor);
|
|
64
|
+
}
|
|
65
|
+
// Terminated well inside the bound — a restarting pager burns MAX_PAGES instead.
|
|
66
|
+
expect(pages).toBe(3);
|
|
67
|
+
// Each row exactly once, in key order — no row re-yielded from the start.
|
|
68
|
+
expect(seen).toEqual(['1', '2', '3', '4', '5']);
|
|
69
|
+
expect(new Set(seen).size).toBe(seen.length);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=pagingVanishedCursor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagingVanishedCursor.test.js","sourceRoot":"","sources":["../../../../src/adapters/database/memory/pagingVanishedCursor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { EndpointsAdapter } from '@bett3r-dev/pv3-types';
|
|
2
2
|
/**
|
|
3
|
-
* Adds the user object to the request context
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Adds the user object to the request context.
|
|
4
|
+
*
|
|
5
|
+
* X-Auth-* headers — set by an API gateway (e.g., Caddy subrequest).
|
|
6
|
+
* The gateway resolves JWT/session and forwards user identity as headers.
|
|
7
|
+
* @param headersToContextMap - Maps request headers to context paths (e.g., { 'x-auth-user-id': 'context.user.id' })
|
|
6
8
|
*/
|
|
7
|
-
export declare const AddAuthUserToRequest: (
|
|
9
|
+
export declare const AddAuthUserToRequest: (headersToContextMap?: Record<string, string>) => EndpointsAdapter;
|
|
8
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/endpoints/addAuthUser/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/endpoints/addAuthUser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGpG;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,yBACV,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC1C,gBA2BF,CAAC"}
|
|
@@ -2,40 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AddAuthUserToRequest = void 0;
|
|
4
4
|
const ramda_1 = require("ramda");
|
|
5
|
-
const __1 = require("../../..");
|
|
6
|
-
const propMapper = (map, object) => {
|
|
7
|
-
const result = {};
|
|
8
|
-
Object.keys(map).forEach(key => {
|
|
9
|
-
result[map[key]] = (0, ramda_1.path)(key.split('.'), object);
|
|
10
|
-
});
|
|
11
|
-
return result;
|
|
12
|
-
};
|
|
13
5
|
/**
|
|
14
|
-
* Adds the user object to the request context
|
|
15
|
-
*
|
|
16
|
-
*
|
|
6
|
+
* Adds the user object to the request context.
|
|
7
|
+
*
|
|
8
|
+
* X-Auth-* headers — set by an API gateway (e.g., Caddy subrequest).
|
|
9
|
+
* The gateway resolves JWT/session and forwards user identity as headers.
|
|
10
|
+
* @param headersToContextMap - Maps request headers to context paths (e.g., { 'x-auth-user-id': 'context.user.id' })
|
|
17
11
|
*/
|
|
18
|
-
const AddAuthUserToRequest = (
|
|
12
|
+
const AddAuthUserToRequest = (headersToContextMap = {}) => {
|
|
19
13
|
const addUserToContext = async (params) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
params.context = {};
|
|
27
|
-
params.context.token = token.slice(token.lastIndexOf(' ') + 1);
|
|
28
|
-
params.context.user = propMapper({
|
|
29
|
-
'email': 'email',
|
|
30
|
-
'realm_access.roles': 'roles',
|
|
31
|
-
'app_id': 'id',
|
|
32
|
-
...customTokenAttributes
|
|
33
|
-
}, payload);
|
|
34
|
-
return Promise.resolve(params);
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
return Promise.reject((0, __1.createError)((0, __1.AuthenticationError)(), { description: 'Invalid Token' }));
|
|
38
|
-
}
|
|
14
|
+
Object.entries(headersToContextMap).forEach(([header, contextPath]) => {
|
|
15
|
+
if (params.context?.req?.headers?.[header]) {
|
|
16
|
+
params = (0, ramda_1.assocPath)(contextPath.split('.'), params.context.req.headers[header], params);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
return params;
|
|
39
20
|
};
|
|
40
21
|
const registerEndpoint = (endpoint) => {
|
|
41
22
|
const originalAction = endpoint.action;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/endpoints/addAuthUser/index.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/endpoints/addAuthUser/index.ts"],"names":[],"mappings":";;;AACA,iCAAkC;AAElC;;;;;;GAMG;AACI,MAAM,oBAAoB,GAAG,CAClC,mBAAmB,GAA2B,EAAE,EAC9B,EAAE;IACpB,MAAM,gBAAgB,GAAG,KAAK,EAAG,MAA4B,EAAkC,EAAE;QAC/F,MAAM,CAAC,OAAO,CAAE,mBAAmB,CAAE,CAAC,OAAO,CAAC,CAAC,CAAE,MAAM,EAAE,WAAW,CAAE,EAAE,EAAE;YACxE,IAAK,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAE,MAAM,CAAE,EAAE,CAAC;gBAC9C,MAAM,GAAG,IAAA,iBAAS,EAAE,WAAW,CAAC,KAAK,CAAE,GAAG,CAAE,EAAE,MAAM,CAAC,OAAO,CAAC,GAAI,CAAC,OAAO,CAAE,MAAM,CAAE,EAAE,MAAM,CAAE,CAAC;YAChG,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAE,QAAkB,EAAG,EAAE;QAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;QACvC,QAAQ,CAAC,MAAM,GAAG,CAAE,MAA2C,EAAG,EAAE;YAClE,OAAO,gBAAgB,CAAE,MAAM,CAAE;iBAC9B,IAAI,CAAE,cAAc,CAAE,CAAC;QAC5B,CAAC,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACrB,IAAI,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACpB,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,oBAAoB,GAApB,oBAAoB,CA6B/B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EndpointActionParams, EndpointsAdapter } from '@bett3r-dev/pv3-types';
|
|
2
|
+
/**
|
|
3
|
+
* A pre-action interceptor. Receives the action params, returns the same
|
|
4
|
+
* (or a transformed) params object. May be sync or async.
|
|
5
|
+
*
|
|
6
|
+
* Typical use is to populate `params.context.user` from whatever credential
|
|
7
|
+
* the deployment supplies (a JWT in `Authorization`, an opaque session
|
|
8
|
+
* cookie, upstream-gateway headers, etc.). All such concerns live in
|
|
9
|
+
* consumer code so this adapter carries no transport, provider, or
|
|
10
|
+
* authentication-library knowledge.
|
|
11
|
+
*
|
|
12
|
+
* Returning the params unmodified is a valid no-op.
|
|
13
|
+
*/
|
|
14
|
+
export type RequestInterceptor = (params: EndpointActionParams) => Promise<EndpointActionParams> | EndpointActionParams;
|
|
15
|
+
/**
|
|
16
|
+
* Endpoints adapter that runs a consumer-supplied interceptor before each
|
|
17
|
+
* endpoint's action. The interceptor is the only injection point — this
|
|
18
|
+
* adapter has no opinion about how identity is resolved, where credentials
|
|
19
|
+
* live, or which libraries verify them.
|
|
20
|
+
*
|
|
21
|
+
* When `interceptor` is omitted, the adapter is a no-op (every endpoint
|
|
22
|
+
* action runs unchanged), which lets callers wire the adapter
|
|
23
|
+
* unconditionally even when the dev-only interceptor build failed (e.g.,
|
|
24
|
+
* because optional auth-resolution dependencies aren't installed in a
|
|
25
|
+
* production image).
|
|
26
|
+
*
|
|
27
|
+
* Naming: kept as `AddDevAuthUserToRequest` for backwards compatibility
|
|
28
|
+
* with existing call sites. The semantics are now generic — see
|
|
29
|
+
* `RequestInterceptor`.
|
|
30
|
+
*/
|
|
31
|
+
export declare const AddDevAuthUserToRequest: (interceptor?: RequestInterceptor) => EndpointsAdapter;
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/endpoints/addDevAuthUser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,oBAAoB,KACzB,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC;AAE1D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,iBACpB,kBAAkB,KAC/B,gBAiBF,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddDevAuthUserToRequest = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Endpoints adapter that runs a consumer-supplied interceptor before each
|
|
6
|
+
* endpoint's action. The interceptor is the only injection point — this
|
|
7
|
+
* adapter has no opinion about how identity is resolved, where credentials
|
|
8
|
+
* live, or which libraries verify them.
|
|
9
|
+
*
|
|
10
|
+
* When `interceptor` is omitted, the adapter is a no-op (every endpoint
|
|
11
|
+
* action runs unchanged), which lets callers wire the adapter
|
|
12
|
+
* unconditionally even when the dev-only interceptor build failed (e.g.,
|
|
13
|
+
* because optional auth-resolution dependencies aren't installed in a
|
|
14
|
+
* production image).
|
|
15
|
+
*
|
|
16
|
+
* Naming: kept as `AddDevAuthUserToRequest` for backwards compatibility
|
|
17
|
+
* with existing call sites. The semantics are now generic — see
|
|
18
|
+
* `RequestInterceptor`.
|
|
19
|
+
*/
|
|
20
|
+
const AddDevAuthUserToRequest = (interceptor) => {
|
|
21
|
+
const registerEndpoint = (endpoint) => {
|
|
22
|
+
if (!interceptor)
|
|
23
|
+
return endpoint;
|
|
24
|
+
const originalAction = endpoint.action;
|
|
25
|
+
endpoint.action = (params) => {
|
|
26
|
+
return Promise.resolve(interceptor(params)).then(originalAction);
|
|
27
|
+
};
|
|
28
|
+
return endpoint;
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
_adapter: () => { },
|
|
32
|
+
name: 'addDevAuthUser',
|
|
33
|
+
start: async () => { },
|
|
34
|
+
stop: async () => { },
|
|
35
|
+
registerEndpoint
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
exports.AddDevAuthUserToRequest = AddDevAuthUserToRequest;
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/endpoints/addDevAuthUser/index.ts"],"names":[],"mappings":";;;AAkBA;;;;;;;;;;;;;;;GAeG;AACI,MAAM,uBAAuB,GAAG,CACrC,WAAgC,EACd,EAAE;IACpB,MAAM,gBAAgB,GAAG,CAAE,QAAkB,EAAG,EAAE;QAChD,IAAK,CAAC,WAAW;YAAG,OAAO,QAAQ,CAAC;QACpC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;QACvC,QAAQ,CAAC,MAAM,GAAG,CAAE,MAA2C,EAAG,EAAE;YAClE,OAAO,OAAO,CAAC,OAAO,CAAE,WAAW,CAAE,MAAM,CAAE,CAAC,CAAC,IAAI,CAAE,cAAc,CAAE,CAAC;QACxE,CAAC,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACrB,IAAI,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACpB,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,uBAAuB,GAAvB,uBAAuB,CAmBlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncLocalStorage.test.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/endpoints/asyncLocalStorage/__tests__/asyncLocalStorage.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const executionContext_1 = require("../../../../libraries/eventsourcing/executionContext");
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
const buildEndpoint = (action) => ({
|
|
6
|
+
name: 'test',
|
|
7
|
+
loggingModule: 'test',
|
|
8
|
+
route: '/test',
|
|
9
|
+
method: 'GET',
|
|
10
|
+
action,
|
|
11
|
+
schemas: {}
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* The shape every real `extractContext` in this ecosystem has: it enumerates every
|
|
15
|
+
* field it knows about and returns `correlationId` / `causationId` EXPLICITLY as
|
|
16
|
+
* `undefined` when the request carries none. That is exactly what a naive
|
|
17
|
+
* `{ ...outer, ...ctx }` would use to erase an inherited correlation, and why the
|
|
18
|
+
* adapter drops undefined-valued keys before overriding.
|
|
19
|
+
*/
|
|
20
|
+
const requestShapedExtractor = (params) => {
|
|
21
|
+
const accountId = params.context?.user?.accountId;
|
|
22
|
+
const userId = params.context?.user?.id;
|
|
23
|
+
const correlationId = params.query?.correlationId;
|
|
24
|
+
const causationId = params.query?.causationId;
|
|
25
|
+
if (!accountId && !userId && !correlationId && !causationId)
|
|
26
|
+
return undefined;
|
|
27
|
+
return {
|
|
28
|
+
accountId: accountId ?? '',
|
|
29
|
+
userId: userId ?? '',
|
|
30
|
+
correlationId,
|
|
31
|
+
causationId
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
describe('AsyncLocalStorageContext adapter', () => {
|
|
35
|
+
const adapter = (0, __1.AsyncLocalStorageContext)(requestShapedExtractor);
|
|
36
|
+
const runEndpoint = async (params) => {
|
|
37
|
+
let seen;
|
|
38
|
+
const ep = adapter.registerEndpoint(buildEndpoint(async () => { seen = (0, executionContext_1.getExecutionContext)(); }));
|
|
39
|
+
await ep.action(params);
|
|
40
|
+
return seen;
|
|
41
|
+
};
|
|
42
|
+
it('establishes the extracted context when there is no outer one', async () => {
|
|
43
|
+
const seen = await runEndpoint({ context: { user: { id: 'u1', accountId: 'a1' } }, query: {} });
|
|
44
|
+
expect(seen).toMatchObject({ accountId: 'a1', userId: 'u1' });
|
|
45
|
+
});
|
|
46
|
+
it('runs the action with NO context when the extractor declines', async () => {
|
|
47
|
+
const seen = await runEndpoint({ context: {}, query: {} });
|
|
48
|
+
expect(seen).toBeUndefined();
|
|
49
|
+
});
|
|
50
|
+
it('INHERITS an ambient field the request cannot carry (tags) into a nested endpoint call', async () => {
|
|
51
|
+
// The whole point: an in-process caller (a worker, a policy, another endpoint
|
|
52
|
+
// action) sets ambient context and dispatches through the client library. The
|
|
53
|
+
// request itself has no transport for `tags`, so replacing the store would drop it.
|
|
54
|
+
const seen = await (0, executionContext_1.runWithExecutionContext)({ accountId: 'a1', userId: 'u1', correlationId: 'outer-corr', tags: { channelSyncReason: 'observationGoLive' } }, () => runEndpoint({ context: { user: { id: 'u1', accountId: 'a1' } }, query: {} }));
|
|
55
|
+
expect(seen?.tags).toEqual({ channelSyncReason: 'observationGoLive' });
|
|
56
|
+
});
|
|
57
|
+
it('INHERITS `userAttributes` across a hop, so an authorization tier needs no forgeable header', async () => {
|
|
58
|
+
// The reason this field exists. A hop serializes its identity into `x-auth-*`
|
|
59
|
+
// headers on a synthetic request, and a header is forgeable by anything that can
|
|
60
|
+
// set one. `userAttributes` has no transport at all: it survives the hop purely by
|
|
61
|
+
// this inherit-and-override merge, so a host can carry an authorization-scope map
|
|
62
|
+
// (or an acting principal) in-process without widening the forgeable surface.
|
|
63
|
+
const seen = await (0, executionContext_1.runWithExecutionContext)({
|
|
64
|
+
accountId: 'a1',
|
|
65
|
+
userId: 'u1',
|
|
66
|
+
userAttributes: { scopesByCapability: { 'sales:order-read': 'own' }, executedBy: 'system@a1' }
|
|
67
|
+
}, () => runEndpoint({ context: { user: { id: 'u1', accountId: 'a1' } }, query: {} }));
|
|
68
|
+
expect(seen?.userAttributes).toEqual({
|
|
69
|
+
scopesByCapability: { 'sales:order-read': 'own' },
|
|
70
|
+
executedBy: 'system@a1'
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
it('does NOT let an extractor emitting `correlationId: undefined` clobber the inherited correlation', async () => {
|
|
74
|
+
const seen = await (0, executionContext_1.runWithExecutionContext)({ accountId: 'a1', userId: 'u1', correlationId: 'outer-corr', causationId: 'outer-caus' }, () => runEndpoint({ context: { user: { id: 'u1', accountId: 'a1' } }, query: {} }));
|
|
75
|
+
expect(seen?.correlationId).toBe('outer-corr');
|
|
76
|
+
expect(seen?.causationId).toBe('outer-caus');
|
|
77
|
+
});
|
|
78
|
+
it('still lets the REQUEST win for every field it actually defines', async () => {
|
|
79
|
+
const seen = await (0, executionContext_1.runWithExecutionContext)({ accountId: 'outer-account', userId: 'outer-user', correlationId: 'outer-corr', tags: { t: '1' } }, () => runEndpoint({
|
|
80
|
+
context: { user: { id: 'inner-user', accountId: 'inner-account' } },
|
|
81
|
+
query: { correlationId: 'inner-corr' }
|
|
82
|
+
}));
|
|
83
|
+
expect(seen).toMatchObject({
|
|
84
|
+
accountId: 'inner-account',
|
|
85
|
+
userId: 'inner-user',
|
|
86
|
+
correlationId: 'inner-corr',
|
|
87
|
+
tags: { t: '1' }
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
it('restores the OUTER context after the nested action resolves', async () => {
|
|
91
|
+
await (0, executionContext_1.runWithExecutionContext)({ accountId: 'a1', userId: 'u1', tags: { t: '1' } }, async () => {
|
|
92
|
+
await runEndpoint({ context: { user: { id: 'u2', accountId: 'a2' } }, query: {} });
|
|
93
|
+
expect((0, executionContext_1.getExecutionContext)()).toEqual({ accountId: 'a1', userId: 'u1', tags: { t: '1' } });
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=asyncLocalStorage.test.js.map
|