@bett3r-dev/pv3 1.0.0
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/build/adapters/cache/index.d.ts +2 -0
- package/build/adapters/cache/index.d.ts.map +1 -0
- package/build/adapters/cache/index.js +18 -0
- package/build/adapters/cache/index.js.map +1 -0
- package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts +1 -0
- package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts.map +1 -0
- package/build/adapters/cache/memory/__tests__/memoryCache.test.js +6 -0
- package/build/adapters/cache/memory/__tests__/memoryCache.test.js.map +1 -0
- package/build/adapters/cache/memory/index.d.ts +3 -0
- package/build/adapters/cache/memory/index.d.ts.map +1 -0
- package/build/adapters/cache/memory/index.js +119 -0
- package/build/adapters/cache/memory/index.js.map +1 -0
- package/build/adapters/configuration/__tests__/dotEnv.test.d.ts +2 -0
- package/build/adapters/configuration/__tests__/dotEnv.test.d.ts.map +1 -0
- package/build/adapters/configuration/__tests__/dotEnv.test.js +43 -0
- package/build/adapters/configuration/__tests__/dotEnv.test.js.map +1 -0
- package/build/adapters/configuration/dotEnv.d.ts +3 -0
- package/build/adapters/configuration/dotEnv.d.ts.map +1 -0
- package/build/adapters/configuration/dotEnv.js +35 -0
- package/build/adapters/configuration/dotEnv.js.map +1 -0
- package/build/adapters/configuration/index.d.ts +2 -0
- package/build/adapters/configuration/index.d.ts.map +1 -0
- package/build/adapters/configuration/index.js +18 -0
- package/build/adapters/configuration/index.js.map +1 -0
- package/build/adapters/database/index.d.ts +2 -0
- package/build/adapters/database/index.d.ts.map +1 -0
- package/build/adapters/database/index.js +18 -0
- package/build/adapters/database/index.js.map +1 -0
- package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts +1 -0
- package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts.map +1 -0
- package/build/adapters/database/memory/__tests__/memoryDb.test.js +36 -0
- package/build/adapters/database/memory/__tests__/memoryDb.test.js.map +1 -0
- package/build/adapters/database/memory/index.d.ts +3 -0
- package/build/adapters/database/memory/index.d.ts.map +1 -0
- package/build/adapters/database/memory/index.js +241 -0
- package/build/adapters/database/memory/index.js.map +1 -0
- package/build/adapters/endpoints/addAuthUser/index.d.ts +8 -0
- package/build/adapters/endpoints/addAuthUser/index.d.ts.map +1 -0
- package/build/adapters/endpoints/addAuthUser/index.js +57 -0
- package/build/adapters/endpoints/addAuthUser/index.js.map +1 -0
- package/build/adapters/endpoints/endpointValidation/index.d.ts +4 -0
- package/build/adapters/endpoints/endpointValidation/index.d.ts.map +1 -0
- package/build/adapters/endpoints/endpointValidation/index.js +27 -0
- package/build/adapters/endpoints/endpointValidation/index.js.map +1 -0
- package/build/adapters/endpoints/index.d.ts +4 -0
- package/build/adapters/endpoints/index.d.ts.map +1 -0
- package/build/adapters/endpoints/index.js +21 -0
- package/build/adapters/endpoints/index.js.map +1 -0
- package/build/adapters/endpoints/localAuthorization/index.d.ts +1 -0
- package/build/adapters/endpoints/localAuthorization/index.d.ts.map +1 -0
- package/build/adapters/endpoints/localAuthorization/index.js +68 -0
- package/build/adapters/endpoints/localAuthorization/index.js.map +1 -0
- package/build/adapters/endpoints/tcpConsumer/index.d.ts +3 -0
- package/build/adapters/endpoints/tcpConsumer/index.d.ts.map +1 -0
- package/build/adapters/endpoints/tcpConsumer/index.js +64 -0
- package/build/adapters/endpoints/tcpConsumer/index.js.map +1 -0
- package/build/adapters/endpoints/userSession/index.d.ts +8 -0
- package/build/adapters/endpoints/userSession/index.d.ts.map +1 -0
- package/build/adapters/endpoints/userSession/index.js +43 -0
- package/build/adapters/endpoints/userSession/index.js.map +1 -0
- package/build/adapters/eventstore/database.d.ts +3 -0
- package/build/adapters/eventstore/database.d.ts.map +1 -0
- package/build/adapters/eventstore/database.js +156 -0
- package/build/adapters/eventstore/database.js.map +1 -0
- package/build/adapters/eventstore/index.d.ts +2 -0
- package/build/adapters/eventstore/index.d.ts.map +1 -0
- package/build/adapters/eventstore/index.js +18 -0
- package/build/adapters/eventstore/index.js.map +1 -0
- package/build/adapters/infrastructure/index.d.ts +2 -0
- package/build/adapters/infrastructure/index.d.ts.map +1 -0
- package/build/adapters/infrastructure/index.js +18 -0
- package/build/adapters/infrastructure/index.js.map +1 -0
- package/build/adapters/infrastructure/local/index.d.ts +4 -0
- package/build/adapters/infrastructure/local/index.d.ts.map +1 -0
- package/build/adapters/infrastructure/local/index.js +37 -0
- package/build/adapters/infrastructure/local/index.js.map +1 -0
- package/build/adapters/logger/console.d.ts +3 -0
- package/build/adapters/logger/console.d.ts.map +1 -0
- package/build/adapters/logger/console.js +38 -0
- package/build/adapters/logger/console.js.map +1 -0
- package/build/adapters/logger/index.d.ts +2 -0
- package/build/adapters/logger/index.d.ts.map +1 -0
- package/build/adapters/logger/index.js +18 -0
- package/build/adapters/logger/index.js.map +1 -0
- package/build/index.d.ts +23 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +39 -0
- package/build/index.js.map +1 -0
- package/build/libraries/modules/fs.d.ts +12 -0
- package/build/libraries/modules/fs.d.ts.map +1 -0
- package/build/libraries/modules/fs.js +103 -0
- package/build/libraries/modules/fs.js.map +1 -0
- package/build/libraries/modules/index.d.ts +2 -0
- package/build/libraries/modules/index.d.ts.map +1 -0
- package/build/libraries/modules/index.js +18 -0
- package/build/libraries/modules/index.js.map +1 -0
- package/build/libraries/openApi/index.d.ts +2 -0
- package/build/libraries/openApi/index.d.ts.map +1 -0
- package/build/libraries/openApi/index.js +18 -0
- package/build/libraries/openApi/index.js.map +1 -0
- package/build/libraries/openApi/pruneUnusedRef.d.ts +3 -0
- package/build/libraries/openApi/pruneUnusedRef.d.ts.map +1 -0
- package/build/libraries/openApi/pruneUnusedRef.js +30 -0
- package/build/libraries/openApi/pruneUnusedRef.js.map +1 -0
- package/build/libraries/tcp/index.d.ts +8 -0
- package/build/libraries/tcp/index.d.ts.map +1 -0
- package/build/libraries/tcp/index.js +108 -0
- package/build/libraries/tcp/index.js.map +1 -0
- package/build/libraries/tcp/types.d.ts +45 -0
- package/build/libraries/tcp/types.d.ts.map +1 -0
- package/build/libraries/tcp/types.js +3 -0
- package/build/libraries/tcp/types.js.map +1 -0
- package/build/libraries/validation/__tests__/validation.test.d.ts +2 -0
- package/build/libraries/validation/__tests__/validation.test.d.ts.map +1 -0
- package/build/libraries/validation/__tests__/validation.test.js +53 -0
- package/build/libraries/validation/__tests__/validation.test.js.map +1 -0
- package/build/libraries/validation/index.d.ts +8 -0
- package/build/libraries/validation/index.d.ts.map +1 -0
- package/build/libraries/validation/index.js +51 -0
- package/build/libraries/validation/index.js.map +1 -0
- package/build/ports/authentication/index.d.ts +12 -0
- package/build/ports/authentication/index.d.ts.map +1 -0
- package/build/ports/authentication/index.js +23 -0
- package/build/ports/authentication/index.js.map +1 -0
- package/build/ports/base.d.ts +7 -0
- package/build/ports/base.d.ts.map +1 -0
- package/build/ports/base.js +25 -0
- package/build/ports/base.js.map +1 -0
- package/build/ports/cache/index.d.ts +3 -0
- package/build/ports/cache/index.d.ts.map +1 -0
- package/build/ports/cache/index.js +19 -0
- package/build/ports/cache/index.js.map +1 -0
- package/build/ports/configuration/__tests__/configurationPort.test.d.ts +2 -0
- package/build/ports/configuration/__tests__/configurationPort.test.d.ts.map +1 -0
- package/build/ports/configuration/__tests__/configurationPort.test.js +51 -0
- package/build/ports/configuration/__tests__/configurationPort.test.js.map +1 -0
- package/build/ports/configuration/args.d.ts +57 -0
- package/build/ports/configuration/args.d.ts.map +1 -0
- package/build/ports/configuration/args.js +44 -0
- package/build/ports/configuration/args.js.map +1 -0
- package/build/ports/configuration/common.d.ts +2 -0
- package/build/ports/configuration/common.d.ts.map +1 -0
- package/build/ports/configuration/common.js +19 -0
- package/build/ports/configuration/common.js.map +1 -0
- package/build/ports/configuration/index.d.ts +10 -0
- package/build/ports/configuration/index.d.ts.map +1 -0
- package/build/ports/configuration/index.js +96 -0
- package/build/ports/configuration/index.js.map +1 -0
- package/build/ports/configuration/localConfig.d.ts +3 -0
- package/build/ports/configuration/localConfig.d.ts.map +1 -0
- package/build/ports/configuration/localConfig.js +108 -0
- package/build/ports/configuration/localConfig.js.map +1 -0
- package/build/ports/database/index.d.ts +4 -0
- package/build/ports/database/index.d.ts.map +1 -0
- package/build/ports/database/index.js +27 -0
- package/build/ports/database/index.js.map +1 -0
- package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts +2 -0
- package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/endpointsCall.test.js +21 -0
- package/build/ports/endpoints/__tests__/endpointsCall.test.js.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/base.d.ts +77 -0
- package/build/ports/endpoints/__tests__/test-client-library/base.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/base.js +91 -0
- package/build/ports/endpoints/__tests__/test-client-library/base.js.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/index.d.ts +29 -0
- package/build/ports/endpoints/__tests__/test-client-library/index.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/index.js +43 -0
- package/build/ports/endpoints/__tests__/test-client-library/index.js.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts +106 -0
- package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/services/service.js +62 -0
- package/build/ports/endpoints/__tests__/test-client-library/services/service.js.map +1 -0
- package/build/ports/endpoints/__tests__/utils.test.d.ts +1 -0
- package/build/ports/endpoints/__tests__/utils.test.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/utils.test.js +53 -0
- package/build/ports/endpoints/__tests__/utils.test.js.map +1 -0
- package/build/ports/endpoints/index.d.ts +29 -0
- package/build/ports/endpoints/index.d.ts.map +1 -0
- package/build/ports/endpoints/index.js +263 -0
- package/build/ports/endpoints/index.js.map +1 -0
- package/build/ports/endpoints/openApi.d.ts +16 -0
- package/build/ports/endpoints/openApi.d.ts.map +1 -0
- package/build/ports/endpoints/openApi.js +187 -0
- package/build/ports/endpoints/openApi.js.map +1 -0
- package/build/ports/endpoints/utils.d.ts +17 -0
- package/build/ports/endpoints/utils.d.ts.map +1 -0
- package/build/ports/endpoints/utils.js +31 -0
- package/build/ports/endpoints/utils.js.map +1 -0
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts +2 -0
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts.map +1 -0
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.js +35 -0
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.js.map +1 -0
- package/build/ports/eventsourcing/__tests__/invariants.test.d.ts +2 -0
- package/build/ports/eventsourcing/__tests__/invariants.test.d.ts.map +1 -0
- package/build/ports/eventsourcing/__tests__/invariants.test.js +210 -0
- package/build/ports/eventsourcing/__tests__/invariants.test.js.map +1 -0
- package/build/ports/eventsourcing/commandHandlers/index.d.ts +25 -0
- package/build/ports/eventsourcing/commandHandlers/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/commandHandlers/index.js +392 -0
- package/build/ports/eventsourcing/commandHandlers/index.js.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/index.d.ts +3 -0
- package/build/ports/eventsourcing/commandTemplates/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/index.js +19 -0
- package/build/ports/eventsourcing/commandTemplates/index.js.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts +4 -0
- package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/multiStream.js +73 -0
- package/build/ports/eventsourcing/commandTemplates/multiStream.js.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts +9 -0
- package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/snapshot.js +39 -0
- package/build/ports/eventsourcing/commandTemplates/snapshot.js.map +1 -0
- package/build/ports/eventsourcing/eventHandlers/index.d.ts +33 -0
- package/build/ports/eventsourcing/eventHandlers/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/eventHandlers/index.js +276 -0
- package/build/ports/eventsourcing/eventHandlers/index.js.map +1 -0
- package/build/ports/eventsourcing/index.d.ts +9 -0
- package/build/ports/eventsourcing/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/index.js +101 -0
- package/build/ports/eventsourcing/index.js.map +1 -0
- package/build/ports/eventsourcing/invariants/combinators.d.ts +4 -0
- package/build/ports/eventsourcing/invariants/combinators.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/combinators.js +20 -0
- package/build/ports/eventsourcing/invariants/combinators.js.map +1 -0
- package/build/ports/eventsourcing/invariants/common.d.ts +10 -0
- package/build/ports/eventsourcing/invariants/common.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/common.js +37 -0
- package/build/ports/eventsourcing/invariants/common.js.map +1 -0
- package/build/ports/eventsourcing/invariants/comparisons.d.ts +19 -0
- package/build/ports/eventsourcing/invariants/comparisons.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/comparisons.js +83 -0
- package/build/ports/eventsourcing/invariants/comparisons.js.map +1 -0
- package/build/ports/eventsourcing/invariants/index.d.ts +5 -0
- package/build/ports/eventsourcing/invariants/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/index.js +21 -0
- package/build/ports/eventsourcing/invariants/index.js.map +1 -0
- package/build/ports/eventsourcing/invariants/stateExistance.d.ts +4 -0
- package/build/ports/eventsourcing/invariants/stateExistance.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/stateExistance.js +33 -0
- package/build/ports/eventsourcing/invariants/stateExistance.js.map +1 -0
- package/build/ports/eventsourcing/subscriptions/index.d.ts +2 -0
- package/build/ports/eventsourcing/subscriptions/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/subscriptions/index.js +18 -0
- package/build/ports/eventsourcing/subscriptions/index.js.map +1 -0
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts +3 -0
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts.map +1 -0
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js +81 -0
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js.map +1 -0
- package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts +4 -0
- package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/aggregateBuilder.js +45 -0
- package/build/ports/eventsourcing/utils/aggregateBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/commandBuilder.d.ts +3 -0
- package/build/ports/eventsourcing/utils/commandBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/commandBuilder.js +102 -0
- package/build/ports/eventsourcing/utils/commandBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts +3 -0
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.js +19 -0
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts +4 -0
- package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/externalSystemBuilder.js +34 -0
- package/build/ports/eventsourcing/utils/externalSystemBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/index.d.ts +13 -0
- package/build/ports/eventsourcing/utils/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/index.js +45 -0
- package/build/ports/eventsourcing/utils/index.js.map +1 -0
- package/build/ports/eventsourcing/utils/policyBuilder.d.ts +3 -0
- package/build/ports/eventsourcing/utils/policyBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/policyBuilder.js +29 -0
- package/build/ports/eventsourcing/utils/policyBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts +5 -0
- package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/readmodelBuilder.js +45 -0
- package/build/ports/eventsourcing/utils/readmodelBuilder.js.map +1 -0
- package/build/ports/eventstore/index.d.ts +3 -0
- package/build/ports/eventstore/index.d.ts.map +1 -0
- package/build/ports/eventstore/index.js +13 -0
- package/build/ports/eventstore/index.js.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/index.d.ts +3 -0
- package/build/ports/infrastructure/__tests__/fixture/index.d.ts.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/index.js +19 -0
- package/build/ports/infrastructure/__tests__/fixture/index.js.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts +19 -0
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js +76 -0
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts +177 -0
- package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/structureState.js +258 -0
- package/build/ports/infrastructure/__tests__/fixture/structureState.js.map +1 -0
- package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts +2 -0
- package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts.map +1 -0
- package/build/ports/infrastructure/__tests__/infrastructure.test.js +11 -0
- package/build/ports/infrastructure/__tests__/infrastructure.test.js.map +1 -0
- package/build/ports/infrastructure/index.d.ts +53 -0
- package/build/ports/infrastructure/index.d.ts.map +1 -0
- package/build/ports/infrastructure/index.js +149 -0
- package/build/ports/infrastructure/index.js.map +1 -0
- package/build/ports/infrastructure/utils.d.ts +14 -0
- package/build/ports/infrastructure/utils.d.ts.map +1 -0
- package/build/ports/infrastructure/utils.js +126 -0
- package/build/ports/infrastructure/utils.js.map +1 -0
- package/build/ports/logger/index.d.ts +3 -0
- package/build/ports/logger/index.d.ts.map +1 -0
- package/build/ports/logger/index.js +32 -0
- package/build/ports/logger/index.js.map +1 -0
- package/build/utils/index.d.ts +35 -0
- package/build/utils/index.d.ts.map +1 -0
- package/build/utils/index.js +190 -0
- package/build/utils/index.js.map +1 -0
- package/package.json +28 -0
- package/src/adapters/cache/index.ts +1 -0
- package/src/adapters/cache/memory/__tests__/memoryCache.test.ts +6 -0
- package/src/adapters/cache/memory/index.ts +142 -0
- package/src/adapters/configuration/__tests__/.env +4 -0
- package/src/adapters/configuration/__tests__/dotEnv.test.ts +38 -0
- package/src/adapters/configuration/dotEnv.ts +33 -0
- package/src/adapters/configuration/index.ts +1 -0
- package/src/adapters/database/index.ts +1 -0
- package/src/adapters/database/memory/__tests__/memoryDb.test.ts +37 -0
- package/src/adapters/database/memory/index.ts +279 -0
- package/src/adapters/endpoints/addAuthUser/index.ts +55 -0
- package/src/adapters/endpoints/endpointValidation/index.ts +26 -0
- package/src/adapters/endpoints/index.ts +4 -0
- package/src/adapters/endpoints/localAuthorization/index.ts +75 -0
- package/src/adapters/endpoints/tcpConsumer/index.ts +69 -0
- package/src/adapters/endpoints/userSession/index.ts +40 -0
- package/src/adapters/eventstore/database.ts +178 -0
- package/src/adapters/eventstore/index.ts +1 -0
- package/src/adapters/infrastructure/index.ts +1 -0
- package/src/adapters/infrastructure/local/index.ts +40 -0
- package/src/adapters/logger/console.ts +42 -0
- package/src/adapters/logger/index.ts +1 -0
- package/src/index.ts +25 -0
- package/src/libraries/modules/fs.ts +88 -0
- package/src/libraries/modules/index.ts +1 -0
- package/src/libraries/openApi/index.ts +1 -0
- package/src/libraries/openApi/pruneUnusedRef.ts +35 -0
- package/src/libraries/tcp/index.ts +98 -0
- package/src/libraries/tcp/types.ts +43 -0
- package/src/libraries/validation/__tests__/validation.test.ts +25 -0
- package/src/libraries/validation/index.ts +48 -0
- package/src/ports/authentication/index.ts +25 -0
- package/src/ports/base.ts +20 -0
- package/src/ports/cache/index.ts +17 -0
- package/src/ports/configuration/__tests__/configurationPort.test.ts +47 -0
- package/src/ports/configuration/args.ts +39 -0
- package/src/ports/configuration/common.ts +12 -0
- package/src/ports/configuration/index.ts +110 -0
- package/src/ports/configuration/localConfig.ts +117 -0
- package/src/ports/database/index.ts +25 -0
- package/src/ports/endpoints/__tests__/endpointsCall.test.ts +20 -0
- package/src/ports/endpoints/__tests__/test-client-library/base.ts +167 -0
- package/src/ports/endpoints/__tests__/test-client-library/index.ts +23 -0
- package/src/ports/endpoints/__tests__/test-client-library/services/service.ts +181 -0
- package/src/ports/endpoints/__tests__/utils.test.ts +54 -0
- package/src/ports/endpoints/index.ts +272 -0
- package/src/ports/endpoints/openApi.ts +191 -0
- package/src/ports/endpoints/utils.ts +31 -0
- package/src/ports/eventsourcing/__tests__/eventhandlers.test.ts +30 -0
- package/src/ports/eventsourcing/__tests__/invariants.test.ts +213 -0
- package/src/ports/eventsourcing/commandHandlers/index.ts +625 -0
- package/src/ports/eventsourcing/commandTemplates/index.ts +2 -0
- package/src/ports/eventsourcing/commandTemplates/multiStream.ts +70 -0
- package/src/ports/eventsourcing/commandTemplates/snapshot.ts +43 -0
- package/src/ports/eventsourcing/eventHandlers/index.ts +429 -0
- package/src/ports/eventsourcing/index.ts +98 -0
- package/src/ports/eventsourcing/invariants/combinators.ts +25 -0
- package/src/ports/eventsourcing/invariants/common.ts +42 -0
- package/src/ports/eventsourcing/invariants/comparisons.ts +90 -0
- package/src/ports/eventsourcing/invariants/index.ts +4 -0
- package/src/ports/eventsourcing/invariants/stateExistance.ts +34 -0
- package/src/ports/eventsourcing/subscriptions/index.ts +1 -0
- package/src/ports/eventsourcing/subscriptions/sseSubscriptions.ts +103 -0
- package/src/ports/eventsourcing/utils/aggregateBuilder.ts +49 -0
- package/src/ports/eventsourcing/utils/commandBuilder.ts +113 -0
- package/src/ports/eventsourcing/utils/eventHandlerBuilder.ts +22 -0
- package/src/ports/eventsourcing/utils/externalSystemBuilder.ts +42 -0
- package/src/ports/eventsourcing/utils/index.ts +25 -0
- package/src/ports/eventsourcing/utils/policyBuilder.ts +31 -0
- package/src/ports/eventsourcing/utils/readmodelBuilder.ts +52 -0
- package/src/ports/eventstore/index.ts +11 -0
- package/src/ports/infrastructure/__tests__/fixture/index.ts +2 -0
- package/src/ports/infrastructure/__tests__/fixture/infrastructureServices.ts +72 -0
- package/src/ports/infrastructure/__tests__/fixture/structureState.ts +254 -0
- package/src/ports/infrastructure/__tests__/infrastructure.test.ts +11 -0
- package/src/ports/infrastructure/index.ts +162 -0
- package/src/ports/infrastructure/utils.ts +130 -0
- package/src/ports/logger/index.ts +34 -0
- package/src/utils/index.ts +186 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
export const structureState = {
|
|
2
|
+
state: {
|
|
3
|
+
brokers: {
|
|
4
|
+
'10.0.0.13': {
|
|
5
|
+
subscriptions: {
|
|
6
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
7
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel-0': {
|
|
8
|
+
host: '10.0.0.13',
|
|
9
|
+
index: 0,
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
13
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel-0': {
|
|
14
|
+
host: '10.0.0.13',
|
|
15
|
+
index: 0,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
'10.0.0.14': {
|
|
21
|
+
subscriptions: {
|
|
22
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
23
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel-1': {
|
|
24
|
+
host: '10.0.0.14',
|
|
25
|
+
index: 1,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
29
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel-1': {
|
|
30
|
+
host: '10.0.0.14',
|
|
31
|
+
index: 1,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
'10.0.0.15': {
|
|
37
|
+
subscriptions: {
|
|
38
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
39
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel-2': {
|
|
40
|
+
host: '10.0.0.15',
|
|
41
|
+
index: 2,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
45
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel-2': {
|
|
46
|
+
host: '10.0.0.15',
|
|
47
|
+
index: 2,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
'10.0.0.16': {
|
|
53
|
+
subscriptions: {
|
|
54
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
55
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel-3': {
|
|
56
|
+
host: '10.0.0.16',
|
|
57
|
+
index: 3,
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
61
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel-3': {
|
|
62
|
+
host: '10.0.0.16',
|
|
63
|
+
index: 3,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
'10.0.0.18': {
|
|
69
|
+
subscriptions: {
|
|
70
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
71
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel-4': {
|
|
72
|
+
host: '10.0.0.18',
|
|
73
|
+
index: 4,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
77
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel-4': {
|
|
78
|
+
host: '10.0.0.18',
|
|
79
|
+
index: 4,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
'10.0.0.19': {
|
|
85
|
+
subscriptions: {
|
|
86
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
87
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel-5': {
|
|
88
|
+
host: '10.0.0.19',
|
|
89
|
+
index: 5,
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
93
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel-5': {
|
|
94
|
+
host: '10.0.0.19',
|
|
95
|
+
index: 5,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
'10.0.0.20': {
|
|
101
|
+
subscriptions: {
|
|
102
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
103
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel-6': {
|
|
104
|
+
host: '10.0.0.20',
|
|
105
|
+
index: 6,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
109
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel-6': {
|
|
110
|
+
host: '10.0.0.20',
|
|
111
|
+
index: 6,
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
'10.0.0.21': {
|
|
117
|
+
subscriptions: {
|
|
118
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
119
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel-7': {
|
|
120
|
+
host: '10.0.0.21',
|
|
121
|
+
index: 7,
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
125
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel-7': {
|
|
126
|
+
host: '10.0.0.21',
|
|
127
|
+
index: 7,
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
services: {
|
|
134
|
+
service0: {
|
|
135
|
+
port: 2013,
|
|
136
|
+
consumes: {
|
|
137
|
+
OperationCountByColorReadModel: [
|
|
138
|
+
'DividedBy_17',
|
|
139
|
+
'MultipliedBy_18',
|
|
140
|
+
'MultipliedBy_2',
|
|
141
|
+
'MultipliedBy_5',
|
|
142
|
+
'Subtracted_50',
|
|
143
|
+
'Added_20',
|
|
144
|
+
'Added_7',
|
|
145
|
+
'Added_3',
|
|
146
|
+
'DividedBy_3',
|
|
147
|
+
],
|
|
148
|
+
TotalByColorReadModel: [
|
|
149
|
+
'MultipliedBy_18',
|
|
150
|
+
'DividedBy_17',
|
|
151
|
+
'MultipliedBy_5',
|
|
152
|
+
'MultipliedBy_2',
|
|
153
|
+
'Subtracted_50',
|
|
154
|
+
'Added_20',
|
|
155
|
+
'Added_7',
|
|
156
|
+
'Added_3',
|
|
157
|
+
'DividedBy_3',
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
produces: {
|
|
161
|
+
ArithmeticOperationsAggregate: [
|
|
162
|
+
'DividedBy_17',
|
|
163
|
+
'Added_20',
|
|
164
|
+
'MultipliedBy_5',
|
|
165
|
+
'Added_3',
|
|
166
|
+
'Added_7',
|
|
167
|
+
'MultipliedBy_2',
|
|
168
|
+
'Subtracted_50',
|
|
169
|
+
'DividedBy_3',
|
|
170
|
+
'MultipliedBy_18',
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
isBroker: true,
|
|
174
|
+
isService: true,
|
|
175
|
+
endpoints: [
|
|
176
|
+
'GET:/arithmetic-operations-aggregate/{id}',
|
|
177
|
+
'GET:/arithmetic-operations-aggregate/{id}/stream',
|
|
178
|
+
'POST:/arithmetic-operations-aggregate/{id}/divide-by-17',
|
|
179
|
+
'POST:/arithmetic-operations-aggregate/{id}/add-20',
|
|
180
|
+
'POST:/arithmetic-operations-aggregate/{id}/multiply-by-5',
|
|
181
|
+
'POST:/arithmetic-operations-aggregate/{id}/add-3',
|
|
182
|
+
'POST:/arithmetic-operations-aggregate/{id}/add-7',
|
|
183
|
+
'POST:/arithmetic-operations-aggregate/{id}/multiply-by-2',
|
|
184
|
+
'POST:/arithmetic-operations-aggregate/{id}/subtract-50',
|
|
185
|
+
'POST:/arithmetic-operations-aggregate/{id}/divide-by-3',
|
|
186
|
+
'POST:/arithmetic-operations-aggregate/{id}/multiply-by-18',
|
|
187
|
+
'POST:/operation-count-by-color-read-model',
|
|
188
|
+
'GET:/operation-count-by-color-read-model/{id}?',
|
|
189
|
+
'POST:/total-by-color-read-model',
|
|
190
|
+
'GET:/total-by-color-read-model/{id}?',
|
|
191
|
+
],
|
|
192
|
+
possibleSubscriptions: [
|
|
193
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel',
|
|
194
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel',
|
|
195
|
+
],
|
|
196
|
+
hosts: [
|
|
197
|
+
'10.0.0.13',
|
|
198
|
+
'10.0.0.14',
|
|
199
|
+
'10.0.0.15',
|
|
200
|
+
'10.0.0.16',
|
|
201
|
+
'10.0.0.18',
|
|
202
|
+
'10.0.0.19',
|
|
203
|
+
'10.0.0.20',
|
|
204
|
+
'10.0.0.21',
|
|
205
|
+
],
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
subscriptions: {
|
|
209
|
+
'ArithmeticOperationsAggregate-OperationCountByColorReadModel': {
|
|
210
|
+
consumer: 'OperationCountByColorReadModel',
|
|
211
|
+
endpoint: '/operation-count-by-color-read-model',
|
|
212
|
+
events: [
|
|
213
|
+
'DividedBy_17',
|
|
214
|
+
'MultipliedBy_18',
|
|
215
|
+
'MultipliedBy_2',
|
|
216
|
+
'MultipliedBy_5',
|
|
217
|
+
'Subtracted_50',
|
|
218
|
+
'Added_20',
|
|
219
|
+
'Added_7',
|
|
220
|
+
'Added_3',
|
|
221
|
+
'DividedBy_3',
|
|
222
|
+
],
|
|
223
|
+
producer: 'ArithmeticOperationsAggregate',
|
|
224
|
+
dataSplits: {
|
|
225
|
+
manual: [],
|
|
226
|
+
custom: [],
|
|
227
|
+
automatic: [],
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
'ArithmeticOperationsAggregate-TotalByColorReadModel': {
|
|
231
|
+
consumer: 'OperationCountByColorReadModel',
|
|
232
|
+
endpoint: '/total-by-color-read-model',
|
|
233
|
+
events: [
|
|
234
|
+
'MultipliedBy_18',
|
|
235
|
+
'DividedBy_17',
|
|
236
|
+
'MultipliedBy_5',
|
|
237
|
+
'MultipliedBy_2',
|
|
238
|
+
'Subtracted_50',
|
|
239
|
+
'Added_20',
|
|
240
|
+
'Added_7',
|
|
241
|
+
'Added_3',
|
|
242
|
+
'DividedBy_3',
|
|
243
|
+
],
|
|
244
|
+
producer: 'ArithmeticOperationsAggregate',
|
|
245
|
+
dataSplits: {
|
|
246
|
+
manual: [],
|
|
247
|
+
custom: [],
|
|
248
|
+
automatic: [],
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
expectedVersion: 8,
|
|
254
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getStructureDifferences } from '..';
|
|
2
|
+
import { infrastructureServices, structureState } from './fixture';
|
|
3
|
+
|
|
4
|
+
describe( 'Infrastructure Port', () => {
|
|
5
|
+
describe( 'getStructureDifferences', () => {
|
|
6
|
+
it( 'works', async () => {
|
|
7
|
+
// const result = getStructureDifferences( structureState, infrastructureServices );
|
|
8
|
+
// result;//?
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { reduce } from '@bett3r-dev/bett3r-utils';
|
|
2
|
+
import { EnvironmentServiceType, InfrastructureAdapterType, InfrastructureConfigType, InfrastructurePortType, InfrastructureServiceType, InfrastructureThisServiceType, Ports, StructureServiceType } from '@bett3r-dev/pv3-types';
|
|
3
|
+
import { OpenAPIV3_1 } from 'openapi-types';
|
|
4
|
+
import { append, assoc, compose, converge, identity, omit } from 'ramda';
|
|
5
|
+
import { LocalInfrastructure } from '../../adapters/infrastructure';
|
|
6
|
+
import { ClusterStructureType, StructureState, UpsertHostCommandType } from '@bett3r-dev/pv3-types';
|
|
7
|
+
import { createPort } from '../base';
|
|
8
|
+
import { discoverSubscriptions, getServiceDefinition, getThisServiceIps } from './utils';
|
|
9
|
+
export { getThisServiceIps } from './utils';
|
|
10
|
+
|
|
11
|
+
export const getStructureDifferences = ( structureState: StructureState, infra: InfrastructureServiceType[]) => {
|
|
12
|
+
const serviceHostsSet = new Set( Object.values( structureState.state.services ).reduce(( hosts, service ) => hosts.concat( service.hosts ), [] as string[]));
|
|
13
|
+
const upsertHosts: UpsertHostCommandType[] = [];
|
|
14
|
+
const infraServices = infra.reduce(( services, service ) => {
|
|
15
|
+
if ( service.isService )
|
|
16
|
+
services[service.service] = service as any;
|
|
17
|
+
return services;
|
|
18
|
+
}, {} as Record<string, Omit<StructureServiceType, 'hosts'>> );
|
|
19
|
+
const { subscriptions, servicesSubscriptions } = discoverSubscriptions( infraServices );
|
|
20
|
+
for ( const service of infra ) {
|
|
21
|
+
for ( const { host } of service.instances ) {
|
|
22
|
+
serviceHostsSet.delete( host );
|
|
23
|
+
upsertHosts.push({
|
|
24
|
+
...omit(['instances'], service ),
|
|
25
|
+
host,
|
|
26
|
+
possibleSubscriptions: servicesSubscriptions[service.service]
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const removeHosts = Array.from( serviceHostsSet );
|
|
31
|
+
return {
|
|
32
|
+
upsertHosts,
|
|
33
|
+
removeHosts,
|
|
34
|
+
subscriptions
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const checkInfrastructureIntegrity = ( structure: ClusterStructureType ) => async ( infra: InfrastructureServiceType[], retryBackoff = 100 ) => {
|
|
39
|
+
const structureState = await structure.getCurrentState();
|
|
40
|
+
const differences = getStructureDifferences( structureState, infra );
|
|
41
|
+
console.log( '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ STRUCTURE DIFFERENCE Version', structureState.version, differences.upsertHosts.map( x => x.host ));
|
|
42
|
+
await structure.SetStructure( differences, structureState.version )
|
|
43
|
+
.catch(( e ) => {
|
|
44
|
+
if ( e.type !== 'ConcurrencyError' )
|
|
45
|
+
throw e;
|
|
46
|
+
else {
|
|
47
|
+
console.log( '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CONCURRENCY ERROR', e );
|
|
48
|
+
return new Promise(( resolve ) => {
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
checkInfrastructureIntegrity( structure )( infra, retryBackoff * 2 )
|
|
51
|
+
.then( resolve );
|
|
52
|
+
}, retryBackoff );
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return infra;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const getCurrentServiceInfo = ( services: InfrastructureServiceType[]): InfrastructureThisServiceType => {
|
|
60
|
+
const ips = getThisServiceIps();
|
|
61
|
+
|
|
62
|
+
const brokerHosts = services
|
|
63
|
+
.reduce(( brokers, service, index ) =>{
|
|
64
|
+
if ( !service.isBroker ) return brokers;
|
|
65
|
+
brokers.push( ...service.instances.map( assoc( 'serviceIndex', index )));
|
|
66
|
+
return brokers;
|
|
67
|
+
}, [] as {host: string, timeRunning: number, serviceIndex:number}[])
|
|
68
|
+
.sort(( a, b ) => a.timeRunning - b.timeRunning );
|
|
69
|
+
|
|
70
|
+
const hostIndex = brokerHosts
|
|
71
|
+
.findIndex( host => ips.includes( host.host ));
|
|
72
|
+
const brokerHost = brokerHosts[hostIndex];
|
|
73
|
+
|
|
74
|
+
if ( hostIndex === -1 ) throw new Error( 'Service not found in infrastructure' );
|
|
75
|
+
return {
|
|
76
|
+
...services[brokerHost.serviceIndex],
|
|
77
|
+
host: brokerHost.host,
|
|
78
|
+
leadershipRank: hostIndex,
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const getInfrastructureServicesDefinition = async ( infraServices: EnvironmentServiceType[]): Promise<InfrastructureServiceType[]> => {
|
|
83
|
+
return infraServices.map(( service ) => {
|
|
84
|
+
return {
|
|
85
|
+
service: service.service,
|
|
86
|
+
port: service.port,
|
|
87
|
+
instances: service.instances,
|
|
88
|
+
openApiEndpoint: service.openApiEndpoint,
|
|
89
|
+
...( service.openApi ? getServiceDefinition( service.openApi ) : {})
|
|
90
|
+
} as InfrastructureServiceType;
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
export const InfrastructurePort = ( ports: Pick<Ports, 'logger'|'endpoints'|'configuration'>, config: InfrastructureConfigType, structure: ClusterStructureType, adapter?: InfrastructureAdapterType ): InfrastructurePortType => {
|
|
96
|
+
let servicesOpenApiDocumentation: Record<string, OpenAPIV3_1.Document> = {};
|
|
97
|
+
let _adapter: InfrastructureAdapterType;
|
|
98
|
+
let thisService: InfrastructureThisServiceType;
|
|
99
|
+
let adapters: InfrastructureAdapterType[] = append( LocalInfrastructure( ports ), adapter ? [adapter] : []);
|
|
100
|
+
|
|
101
|
+
const assignOpenApiDocumentation = compose(
|
|
102
|
+
( services: any ) => servicesOpenApiDocumentation = services,
|
|
103
|
+
reduce(( docs, serviceDefinition ) => assoc( serviceDefinition.service, serviceDefinition.openApi, docs ), {})
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const setOpenApiDocs = converge(( x, _ ) => x, [ identity, assignOpenApiDocumentation ]);
|
|
107
|
+
|
|
108
|
+
const start = async () => {
|
|
109
|
+
const _adapters = await Promise.allSettled( adapters!.map( adapter => adapter.start()));
|
|
110
|
+
const index = _adapters.findIndex( adapter => adapter.status === 'fulfilled' );
|
|
111
|
+
_adapter = adapters![index];
|
|
112
|
+
const checkInfrastructure = checkInfrastructureIntegrity( structure );
|
|
113
|
+
const infraServices = await _adapter.getServices().then( setOpenApiDocs ) as EnvironmentServiceType[];
|
|
114
|
+
const infraServicesDefinition = await getInfrastructureServicesDefinition( infraServices );
|
|
115
|
+
thisService = getCurrentServiceInfo( infraServicesDefinition );
|
|
116
|
+
|
|
117
|
+
_adapter.listenForInfrastructureChanges(( action, info ) => {
|
|
118
|
+
console.log( 'LOS SERVICES QUE RECIBI --------- ', info.instances.map( i=>i.host ));
|
|
119
|
+
if ( action === 'create' && info.openApi.tags?.find( tag => tag.name === 'pv3.outbox' )){
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
//TODO: Crear una mejor manera de manejar el exponential backoff. y operaciones idempotentes
|
|
123
|
+
setTimeout(() => {
|
|
124
|
+
_adapter.getServices()
|
|
125
|
+
// .then(( s ) => {
|
|
126
|
+
// const service = s.find( s=> s.service === info.service );
|
|
127
|
+
// if ( service?.openApi.tags?.find( tag => tag.name === 'pv3.outbox' )){
|
|
128
|
+
// return Promise.reject( 'IgnoringOutboxService' );
|
|
129
|
+
// }
|
|
130
|
+
// // return s.filter(( s ) => {
|
|
131
|
+
// // info.service === s.service
|
|
132
|
+
// // return s.openApi.tags?.find(( tag ) => tag.name !== 'pv3.outbox' );
|
|
133
|
+
// // });
|
|
134
|
+
// })
|
|
135
|
+
.then( x=> { console.log( 'LOS SERVICES QUE VOY A AGREGAR --------- ', x.map( s=>s.instances.map( i=>i.host ))); return x; })
|
|
136
|
+
.then<EnvironmentServiceType[]>( setOpenApiDocs )
|
|
137
|
+
.then( getInfrastructureServicesDefinition )
|
|
138
|
+
.then( checkInfrastructure );
|
|
139
|
+
}, ( config.infrastructureLeaderRandomBackoff || 1000 ) * ( thisService.leadershipRank || 0 ));
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
await checkInfrastructure( infraServicesDefinition );
|
|
143
|
+
environments.isStarted = true;
|
|
144
|
+
environments.emitter.emit( 'started' );
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
const environments = createPort({
|
|
148
|
+
_adapter: () => _adapter,
|
|
149
|
+
name: 'Infrastructure',
|
|
150
|
+
getServicesOpenApiDocumentation: () => servicesOpenApiDocumentation,
|
|
151
|
+
getThisServiceInfo: () => thisService,
|
|
152
|
+
getServices: () => _adapter!.getServices(),
|
|
153
|
+
scaleService: ( service: string, replicasCount: number ) => _adapter!.scaleService( service, replicasCount ),
|
|
154
|
+
listenForInfrastructureChanges: ( callback: ( event: 'destroy' | 'create', service: EnvironmentServiceType ) => void ) => _adapter!.listenForInfrastructureChanges( callback ),
|
|
155
|
+
reloadLoadBalancer: () => _adapter!.reloadLoadBalancer(),
|
|
156
|
+
start,
|
|
157
|
+
stop: async () => _adapter.stop()
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
return environments;
|
|
161
|
+
};
|
|
162
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { reduce } from '@bett3r-dev/bett3r-utils';
|
|
2
|
+
import { StructureServiceType, StructureSubscriptionType } from '@bett3r-dev/pv3-types';
|
|
3
|
+
import { paramCase } from 'change-case';
|
|
4
|
+
import { OpenAPIV3_1 } from 'openapi-types';
|
|
5
|
+
import os from 'os';
|
|
6
|
+
import { omit } from 'ramda';
|
|
7
|
+
|
|
8
|
+
export type DiscoveredSubscriptions = {
|
|
9
|
+
subscriptions: {
|
|
10
|
+
[id: string]: StructureSubscriptionType;
|
|
11
|
+
};
|
|
12
|
+
servicesSubscriptions: {
|
|
13
|
+
[host: string]: string[]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const extractPathEndpoints = ( path: OpenAPIV3_1.PathItemObject, url: string ) => {
|
|
18
|
+
return [ 'post', 'get', 'put', 'delete', 'patch', 'head', 'options' ]
|
|
19
|
+
.reduce(( endpoints, method ) => {
|
|
20
|
+
if ( path[method]) endpoints.push( `${method.toUpperCase()}:${url}` );
|
|
21
|
+
return endpoints;
|
|
22
|
+
}, [] as string[]);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
export const getServiceDefinition = ( swagger: OpenAPIV3_1.Document ): StructureServiceType => {
|
|
27
|
+
const producerTags = [ 'aggregate', 'system' ];
|
|
28
|
+
const postSchemaProperty = 'responses';
|
|
29
|
+
const definition = Object.keys( swagger?.paths as OpenAPIV3_1.PathsObject || {}).reduce(( definition, url )=>{
|
|
30
|
+
const path = swagger.paths![url];
|
|
31
|
+
if ( path?.post?.tags?.some( t=> producerTags.includes( t ))){
|
|
32
|
+
const postSchemaBase = ( path.post as any )[postSchemaProperty];
|
|
33
|
+
const postSchema = postSchemaProperty === 'responses' ? postSchemaBase[200] : postSchemaBase;
|
|
34
|
+
const schema = postSchema.content['application/json'].schema;
|
|
35
|
+
let events;
|
|
36
|
+
if ( schema.anyOf ){
|
|
37
|
+
events = schema.anyOf
|
|
38
|
+
.map( s=>{
|
|
39
|
+
const ref = s.properties.data;
|
|
40
|
+
return ref.$ref.slice( ref.$ref.lastIndexOf( '/' ) + 1 );
|
|
41
|
+
});
|
|
42
|
+
} else if ( schema.properties?.events?.properties?.data?.anyOf ) {
|
|
43
|
+
events = schema.properties?.events?.properties?.data?.anyOf
|
|
44
|
+
.map( ref=>{
|
|
45
|
+
return ref.$ref.slice( ref.$ref.lastIndexOf( '/' ) + 1 );
|
|
46
|
+
});
|
|
47
|
+
} else {
|
|
48
|
+
events = [];
|
|
49
|
+
}
|
|
50
|
+
const handler = path.post?.tags?.filter( t=>!producerTags.includes( t ))[0];
|
|
51
|
+
definition.produces![handler] = [ ...( definition.produces![handler] || []), ...events ];
|
|
52
|
+
} else if ( path?.post?.tags?.some( t=> [ 'policy', 'readmodel' ].includes( t ))){
|
|
53
|
+
const events = ( path.post.requestBody as any ).content['application/json'].schema.anyOf.map( s=>{
|
|
54
|
+
const ref = s.properties.data;
|
|
55
|
+
return ref.$ref.slice( ref.$ref.lastIndexOf( '/' ) + 1 );
|
|
56
|
+
});
|
|
57
|
+
const handler = path.post?.tags?.filter( t=>![ 'policy', 'readmodel' ].includes( t ))[0];
|
|
58
|
+
definition.consumes![handler] = events;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
...definition,
|
|
62
|
+
endpoints: [ ...definition.endpoints, ...extractPathEndpoints( path!, url ) ]
|
|
63
|
+
};
|
|
64
|
+
}, { consumes: {}, produces: {}, endpoints: []});
|
|
65
|
+
return {
|
|
66
|
+
...omit(['endpoints'], definition ),
|
|
67
|
+
isBroker: swagger.tags?.some( t=>t.name === 'pv3.outbox' ),
|
|
68
|
+
isService: swagger.tags?.some( t=>t.name === 'pv3.service' ),
|
|
69
|
+
possibleModules: JSON.parse(( swagger.tags?.find( t=>t.name.startsWith( 'modules' )) || { name:'modules={}' }).name.split( 'modules=' )[1]),
|
|
70
|
+
endpoints: definition.endpoints
|
|
71
|
+
} as StructureServiceType;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export const discoverSubscriptions = ( services: Record<string, Omit<StructureServiceType, 'hosts'>> ): DiscoveredSubscriptions => {
|
|
75
|
+
const eventProducerMap = reduce(( eventMap, { produces }, service ) => {
|
|
76
|
+
const serviceMap = reduce(( eventMap, events, system: string ) => {
|
|
77
|
+
events.forEach( e=>{
|
|
78
|
+
eventMap[e] = { system, service: service };
|
|
79
|
+
});
|
|
80
|
+
return eventMap;
|
|
81
|
+
}, {} as Record<string, {system: string, service: string}>, produces );
|
|
82
|
+
return { ...eventMap, ...serviceMap };
|
|
83
|
+
} ,{} as Record<string, {system: string, service: string}>,services );
|
|
84
|
+
|
|
85
|
+
return reduce(( maps, { consumes, possibleModules }, service ) => {
|
|
86
|
+
const artifactModuleMap = Object.entries( possibleModules || {}).reduce(( acc, [ module, artifacts ]) => {
|
|
87
|
+
artifacts.forEach(( artifact ) => {
|
|
88
|
+
acc[artifact.split( '.' )[0]] = module;
|
|
89
|
+
});
|
|
90
|
+
return acc;
|
|
91
|
+
}, {} as Record<string, string> );
|
|
92
|
+
|
|
93
|
+
const serviceSubscriptions = !consumes ? {} : reduce(( subscriptions, events, eventHandler: string ) => {
|
|
94
|
+
const kebabHandler = paramCase( eventHandler );
|
|
95
|
+
const subscription = reduce(( subscription, event ) => {
|
|
96
|
+
const producer = eventProducerMap[event];
|
|
97
|
+
if ( producer ) {
|
|
98
|
+
subscription.events.push( event );
|
|
99
|
+
subscription.producers.add( producer.system );
|
|
100
|
+
}
|
|
101
|
+
return subscription;
|
|
102
|
+
}, { events: [], producers: new Set() } as { events: string[], producers: Set<string>}, events );
|
|
103
|
+
|
|
104
|
+
const id = `${subscription.producers.size > 1 ? 'multi' : Array.from( subscription.producers )[0]}-${eventHandler}`;
|
|
105
|
+
subscriptions[id] = {
|
|
106
|
+
consumer: eventHandler,
|
|
107
|
+
module: artifactModuleMap[eventHandler],
|
|
108
|
+
producers: Array.from( subscription.producers ),
|
|
109
|
+
endpoint: `/${kebabHandler}`,
|
|
110
|
+
events: subscription.events,
|
|
111
|
+
};
|
|
112
|
+
return subscriptions;
|
|
113
|
+
}, {} as Record<string, Partial<StructureSubscriptionType>>, consumes );
|
|
114
|
+
return {
|
|
115
|
+
subscriptions: {
|
|
116
|
+
...maps.subscriptions, ...serviceSubscriptions
|
|
117
|
+
},
|
|
118
|
+
servicesSubscriptions: { ...maps.servicesSubscriptions, [service]: Object.keys( serviceSubscriptions ) }
|
|
119
|
+
};
|
|
120
|
+
} ,{ subscriptions:{}, servicesSubscriptions: {}} as DiscoveredSubscriptions , services ) as DiscoveredSubscriptions;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export const getThisServiceIps = () => {
|
|
124
|
+
const interfaces = os.networkInterfaces();
|
|
125
|
+
return Object.values( interfaces ).reduce(( ips, interfaceInfo ) => {
|
|
126
|
+
if ( interfaceInfo )
|
|
127
|
+
return ips.concat( interfaceInfo.filter( info => info.family === 'IPv4' && info.internal === false ).map( info => info.address ));
|
|
128
|
+
else return ips;
|
|
129
|
+
}, [] as string[]);
|
|
130
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LevelLogMap, LoggerAdapter, LoggerConfig, LoggerPort, LoggerType, LogLevelMap } from '@bett3r-dev/pv3-types';
|
|
2
|
+
|
|
3
|
+
export const Logger = ( config: LoggerConfig, ...adapters: LoggerAdapter[]): LoggerPort => {
|
|
4
|
+
const skipModule = ( module: string ) =>
|
|
5
|
+
config?.modulesBlacklist?.includes( module ) || ( config?.modulesWhitelist && !config?.modulesWhitelist?.includes( module ));
|
|
6
|
+
|
|
7
|
+
function createLoggerInstance( module: string ): LoggerType {
|
|
8
|
+
const LogLevel = LogLevelMap[config.logLevel || 'info'];
|
|
9
|
+
|
|
10
|
+
const internalLog = skipModule( module ) ?
|
|
11
|
+
() => () => {}
|
|
12
|
+
: ( level: number ) => ( ...args: any[]) => {
|
|
13
|
+
if ( LogLevel >= level )
|
|
14
|
+
adapters.forEach( a=> {
|
|
15
|
+
a.log( args, LevelLogMap[level], module );
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const logger: LoggerType = {
|
|
20
|
+
error: internalLog( 0 ),
|
|
21
|
+
warn: internalLog( 1 ),
|
|
22
|
+
info: internalLog( 2 ),
|
|
23
|
+
log: internalLog( 3 ),
|
|
24
|
+
debug: internalLog( 4 ),
|
|
25
|
+
silly: internalLog( 5 ),
|
|
26
|
+
};
|
|
27
|
+
return logger;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
createLoggerInstance
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|