@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.
Files changed (393) hide show
  1. package/build/adapters/cache/index.d.ts +2 -0
  2. package/build/adapters/cache/index.d.ts.map +1 -0
  3. package/build/adapters/cache/index.js +18 -0
  4. package/build/adapters/cache/index.js.map +1 -0
  5. package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts +1 -0
  6. package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts.map +1 -0
  7. package/build/adapters/cache/memory/__tests__/memoryCache.test.js +6 -0
  8. package/build/adapters/cache/memory/__tests__/memoryCache.test.js.map +1 -0
  9. package/build/adapters/cache/memory/index.d.ts +3 -0
  10. package/build/adapters/cache/memory/index.d.ts.map +1 -0
  11. package/build/adapters/cache/memory/index.js +119 -0
  12. package/build/adapters/cache/memory/index.js.map +1 -0
  13. package/build/adapters/configuration/__tests__/dotEnv.test.d.ts +2 -0
  14. package/build/adapters/configuration/__tests__/dotEnv.test.d.ts.map +1 -0
  15. package/build/adapters/configuration/__tests__/dotEnv.test.js +43 -0
  16. package/build/adapters/configuration/__tests__/dotEnv.test.js.map +1 -0
  17. package/build/adapters/configuration/dotEnv.d.ts +3 -0
  18. package/build/adapters/configuration/dotEnv.d.ts.map +1 -0
  19. package/build/adapters/configuration/dotEnv.js +35 -0
  20. package/build/adapters/configuration/dotEnv.js.map +1 -0
  21. package/build/adapters/configuration/index.d.ts +2 -0
  22. package/build/adapters/configuration/index.d.ts.map +1 -0
  23. package/build/adapters/configuration/index.js +18 -0
  24. package/build/adapters/configuration/index.js.map +1 -0
  25. package/build/adapters/database/index.d.ts +2 -0
  26. package/build/adapters/database/index.d.ts.map +1 -0
  27. package/build/adapters/database/index.js +18 -0
  28. package/build/adapters/database/index.js.map +1 -0
  29. package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts +1 -0
  30. package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts.map +1 -0
  31. package/build/adapters/database/memory/__tests__/memoryDb.test.js +36 -0
  32. package/build/adapters/database/memory/__tests__/memoryDb.test.js.map +1 -0
  33. package/build/adapters/database/memory/index.d.ts +3 -0
  34. package/build/adapters/database/memory/index.d.ts.map +1 -0
  35. package/build/adapters/database/memory/index.js +241 -0
  36. package/build/adapters/database/memory/index.js.map +1 -0
  37. package/build/adapters/endpoints/addAuthUser/index.d.ts +8 -0
  38. package/build/adapters/endpoints/addAuthUser/index.d.ts.map +1 -0
  39. package/build/adapters/endpoints/addAuthUser/index.js +57 -0
  40. package/build/adapters/endpoints/addAuthUser/index.js.map +1 -0
  41. package/build/adapters/endpoints/endpointValidation/index.d.ts +4 -0
  42. package/build/adapters/endpoints/endpointValidation/index.d.ts.map +1 -0
  43. package/build/adapters/endpoints/endpointValidation/index.js +27 -0
  44. package/build/adapters/endpoints/endpointValidation/index.js.map +1 -0
  45. package/build/adapters/endpoints/index.d.ts +4 -0
  46. package/build/adapters/endpoints/index.d.ts.map +1 -0
  47. package/build/adapters/endpoints/index.js +21 -0
  48. package/build/adapters/endpoints/index.js.map +1 -0
  49. package/build/adapters/endpoints/localAuthorization/index.d.ts +1 -0
  50. package/build/adapters/endpoints/localAuthorization/index.d.ts.map +1 -0
  51. package/build/adapters/endpoints/localAuthorization/index.js +68 -0
  52. package/build/adapters/endpoints/localAuthorization/index.js.map +1 -0
  53. package/build/adapters/endpoints/tcpConsumer/index.d.ts +3 -0
  54. package/build/adapters/endpoints/tcpConsumer/index.d.ts.map +1 -0
  55. package/build/adapters/endpoints/tcpConsumer/index.js +64 -0
  56. package/build/adapters/endpoints/tcpConsumer/index.js.map +1 -0
  57. package/build/adapters/endpoints/userSession/index.d.ts +8 -0
  58. package/build/adapters/endpoints/userSession/index.d.ts.map +1 -0
  59. package/build/adapters/endpoints/userSession/index.js +43 -0
  60. package/build/adapters/endpoints/userSession/index.js.map +1 -0
  61. package/build/adapters/eventstore/database.d.ts +3 -0
  62. package/build/adapters/eventstore/database.d.ts.map +1 -0
  63. package/build/adapters/eventstore/database.js +156 -0
  64. package/build/adapters/eventstore/database.js.map +1 -0
  65. package/build/adapters/eventstore/index.d.ts +2 -0
  66. package/build/adapters/eventstore/index.d.ts.map +1 -0
  67. package/build/adapters/eventstore/index.js +18 -0
  68. package/build/adapters/eventstore/index.js.map +1 -0
  69. package/build/adapters/infrastructure/index.d.ts +2 -0
  70. package/build/adapters/infrastructure/index.d.ts.map +1 -0
  71. package/build/adapters/infrastructure/index.js +18 -0
  72. package/build/adapters/infrastructure/index.js.map +1 -0
  73. package/build/adapters/infrastructure/local/index.d.ts +4 -0
  74. package/build/adapters/infrastructure/local/index.d.ts.map +1 -0
  75. package/build/adapters/infrastructure/local/index.js +37 -0
  76. package/build/adapters/infrastructure/local/index.js.map +1 -0
  77. package/build/adapters/logger/console.d.ts +3 -0
  78. package/build/adapters/logger/console.d.ts.map +1 -0
  79. package/build/adapters/logger/console.js +38 -0
  80. package/build/adapters/logger/console.js.map +1 -0
  81. package/build/adapters/logger/index.d.ts +2 -0
  82. package/build/adapters/logger/index.d.ts.map +1 -0
  83. package/build/adapters/logger/index.js +18 -0
  84. package/build/adapters/logger/index.js.map +1 -0
  85. package/build/index.d.ts +23 -0
  86. package/build/index.d.ts.map +1 -0
  87. package/build/index.js +39 -0
  88. package/build/index.js.map +1 -0
  89. package/build/libraries/modules/fs.d.ts +12 -0
  90. package/build/libraries/modules/fs.d.ts.map +1 -0
  91. package/build/libraries/modules/fs.js +103 -0
  92. package/build/libraries/modules/fs.js.map +1 -0
  93. package/build/libraries/modules/index.d.ts +2 -0
  94. package/build/libraries/modules/index.d.ts.map +1 -0
  95. package/build/libraries/modules/index.js +18 -0
  96. package/build/libraries/modules/index.js.map +1 -0
  97. package/build/libraries/openApi/index.d.ts +2 -0
  98. package/build/libraries/openApi/index.d.ts.map +1 -0
  99. package/build/libraries/openApi/index.js +18 -0
  100. package/build/libraries/openApi/index.js.map +1 -0
  101. package/build/libraries/openApi/pruneUnusedRef.d.ts +3 -0
  102. package/build/libraries/openApi/pruneUnusedRef.d.ts.map +1 -0
  103. package/build/libraries/openApi/pruneUnusedRef.js +30 -0
  104. package/build/libraries/openApi/pruneUnusedRef.js.map +1 -0
  105. package/build/libraries/tcp/index.d.ts +8 -0
  106. package/build/libraries/tcp/index.d.ts.map +1 -0
  107. package/build/libraries/tcp/index.js +108 -0
  108. package/build/libraries/tcp/index.js.map +1 -0
  109. package/build/libraries/tcp/types.d.ts +45 -0
  110. package/build/libraries/tcp/types.d.ts.map +1 -0
  111. package/build/libraries/tcp/types.js +3 -0
  112. package/build/libraries/tcp/types.js.map +1 -0
  113. package/build/libraries/validation/__tests__/validation.test.d.ts +2 -0
  114. package/build/libraries/validation/__tests__/validation.test.d.ts.map +1 -0
  115. package/build/libraries/validation/__tests__/validation.test.js +53 -0
  116. package/build/libraries/validation/__tests__/validation.test.js.map +1 -0
  117. package/build/libraries/validation/index.d.ts +8 -0
  118. package/build/libraries/validation/index.d.ts.map +1 -0
  119. package/build/libraries/validation/index.js +51 -0
  120. package/build/libraries/validation/index.js.map +1 -0
  121. package/build/ports/authentication/index.d.ts +12 -0
  122. package/build/ports/authentication/index.d.ts.map +1 -0
  123. package/build/ports/authentication/index.js +23 -0
  124. package/build/ports/authentication/index.js.map +1 -0
  125. package/build/ports/base.d.ts +7 -0
  126. package/build/ports/base.d.ts.map +1 -0
  127. package/build/ports/base.js +25 -0
  128. package/build/ports/base.js.map +1 -0
  129. package/build/ports/cache/index.d.ts +3 -0
  130. package/build/ports/cache/index.d.ts.map +1 -0
  131. package/build/ports/cache/index.js +19 -0
  132. package/build/ports/cache/index.js.map +1 -0
  133. package/build/ports/configuration/__tests__/configurationPort.test.d.ts +2 -0
  134. package/build/ports/configuration/__tests__/configurationPort.test.d.ts.map +1 -0
  135. package/build/ports/configuration/__tests__/configurationPort.test.js +51 -0
  136. package/build/ports/configuration/__tests__/configurationPort.test.js.map +1 -0
  137. package/build/ports/configuration/args.d.ts +57 -0
  138. package/build/ports/configuration/args.d.ts.map +1 -0
  139. package/build/ports/configuration/args.js +44 -0
  140. package/build/ports/configuration/args.js.map +1 -0
  141. package/build/ports/configuration/common.d.ts +2 -0
  142. package/build/ports/configuration/common.d.ts.map +1 -0
  143. package/build/ports/configuration/common.js +19 -0
  144. package/build/ports/configuration/common.js.map +1 -0
  145. package/build/ports/configuration/index.d.ts +10 -0
  146. package/build/ports/configuration/index.d.ts.map +1 -0
  147. package/build/ports/configuration/index.js +96 -0
  148. package/build/ports/configuration/index.js.map +1 -0
  149. package/build/ports/configuration/localConfig.d.ts +3 -0
  150. package/build/ports/configuration/localConfig.d.ts.map +1 -0
  151. package/build/ports/configuration/localConfig.js +108 -0
  152. package/build/ports/configuration/localConfig.js.map +1 -0
  153. package/build/ports/database/index.d.ts +4 -0
  154. package/build/ports/database/index.d.ts.map +1 -0
  155. package/build/ports/database/index.js +27 -0
  156. package/build/ports/database/index.js.map +1 -0
  157. package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts +2 -0
  158. package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts.map +1 -0
  159. package/build/ports/endpoints/__tests__/endpointsCall.test.js +21 -0
  160. package/build/ports/endpoints/__tests__/endpointsCall.test.js.map +1 -0
  161. package/build/ports/endpoints/__tests__/test-client-library/base.d.ts +77 -0
  162. package/build/ports/endpoints/__tests__/test-client-library/base.d.ts.map +1 -0
  163. package/build/ports/endpoints/__tests__/test-client-library/base.js +91 -0
  164. package/build/ports/endpoints/__tests__/test-client-library/base.js.map +1 -0
  165. package/build/ports/endpoints/__tests__/test-client-library/index.d.ts +29 -0
  166. package/build/ports/endpoints/__tests__/test-client-library/index.d.ts.map +1 -0
  167. package/build/ports/endpoints/__tests__/test-client-library/index.js +43 -0
  168. package/build/ports/endpoints/__tests__/test-client-library/index.js.map +1 -0
  169. package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts +106 -0
  170. package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts.map +1 -0
  171. package/build/ports/endpoints/__tests__/test-client-library/services/service.js +62 -0
  172. package/build/ports/endpoints/__tests__/test-client-library/services/service.js.map +1 -0
  173. package/build/ports/endpoints/__tests__/utils.test.d.ts +1 -0
  174. package/build/ports/endpoints/__tests__/utils.test.d.ts.map +1 -0
  175. package/build/ports/endpoints/__tests__/utils.test.js +53 -0
  176. package/build/ports/endpoints/__tests__/utils.test.js.map +1 -0
  177. package/build/ports/endpoints/index.d.ts +29 -0
  178. package/build/ports/endpoints/index.d.ts.map +1 -0
  179. package/build/ports/endpoints/index.js +263 -0
  180. package/build/ports/endpoints/index.js.map +1 -0
  181. package/build/ports/endpoints/openApi.d.ts +16 -0
  182. package/build/ports/endpoints/openApi.d.ts.map +1 -0
  183. package/build/ports/endpoints/openApi.js +187 -0
  184. package/build/ports/endpoints/openApi.js.map +1 -0
  185. package/build/ports/endpoints/utils.d.ts +17 -0
  186. package/build/ports/endpoints/utils.d.ts.map +1 -0
  187. package/build/ports/endpoints/utils.js +31 -0
  188. package/build/ports/endpoints/utils.js.map +1 -0
  189. package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts +2 -0
  190. package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts.map +1 -0
  191. package/build/ports/eventsourcing/__tests__/eventhandlers.test.js +35 -0
  192. package/build/ports/eventsourcing/__tests__/eventhandlers.test.js.map +1 -0
  193. package/build/ports/eventsourcing/__tests__/invariants.test.d.ts +2 -0
  194. package/build/ports/eventsourcing/__tests__/invariants.test.d.ts.map +1 -0
  195. package/build/ports/eventsourcing/__tests__/invariants.test.js +210 -0
  196. package/build/ports/eventsourcing/__tests__/invariants.test.js.map +1 -0
  197. package/build/ports/eventsourcing/commandHandlers/index.d.ts +25 -0
  198. package/build/ports/eventsourcing/commandHandlers/index.d.ts.map +1 -0
  199. package/build/ports/eventsourcing/commandHandlers/index.js +392 -0
  200. package/build/ports/eventsourcing/commandHandlers/index.js.map +1 -0
  201. package/build/ports/eventsourcing/commandTemplates/index.d.ts +3 -0
  202. package/build/ports/eventsourcing/commandTemplates/index.d.ts.map +1 -0
  203. package/build/ports/eventsourcing/commandTemplates/index.js +19 -0
  204. package/build/ports/eventsourcing/commandTemplates/index.js.map +1 -0
  205. package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts +4 -0
  206. package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts.map +1 -0
  207. package/build/ports/eventsourcing/commandTemplates/multiStream.js +73 -0
  208. package/build/ports/eventsourcing/commandTemplates/multiStream.js.map +1 -0
  209. package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts +9 -0
  210. package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts.map +1 -0
  211. package/build/ports/eventsourcing/commandTemplates/snapshot.js +39 -0
  212. package/build/ports/eventsourcing/commandTemplates/snapshot.js.map +1 -0
  213. package/build/ports/eventsourcing/eventHandlers/index.d.ts +33 -0
  214. package/build/ports/eventsourcing/eventHandlers/index.d.ts.map +1 -0
  215. package/build/ports/eventsourcing/eventHandlers/index.js +276 -0
  216. package/build/ports/eventsourcing/eventHandlers/index.js.map +1 -0
  217. package/build/ports/eventsourcing/index.d.ts +9 -0
  218. package/build/ports/eventsourcing/index.d.ts.map +1 -0
  219. package/build/ports/eventsourcing/index.js +101 -0
  220. package/build/ports/eventsourcing/index.js.map +1 -0
  221. package/build/ports/eventsourcing/invariants/combinators.d.ts +4 -0
  222. package/build/ports/eventsourcing/invariants/combinators.d.ts.map +1 -0
  223. package/build/ports/eventsourcing/invariants/combinators.js +20 -0
  224. package/build/ports/eventsourcing/invariants/combinators.js.map +1 -0
  225. package/build/ports/eventsourcing/invariants/common.d.ts +10 -0
  226. package/build/ports/eventsourcing/invariants/common.d.ts.map +1 -0
  227. package/build/ports/eventsourcing/invariants/common.js +37 -0
  228. package/build/ports/eventsourcing/invariants/common.js.map +1 -0
  229. package/build/ports/eventsourcing/invariants/comparisons.d.ts +19 -0
  230. package/build/ports/eventsourcing/invariants/comparisons.d.ts.map +1 -0
  231. package/build/ports/eventsourcing/invariants/comparisons.js +83 -0
  232. package/build/ports/eventsourcing/invariants/comparisons.js.map +1 -0
  233. package/build/ports/eventsourcing/invariants/index.d.ts +5 -0
  234. package/build/ports/eventsourcing/invariants/index.d.ts.map +1 -0
  235. package/build/ports/eventsourcing/invariants/index.js +21 -0
  236. package/build/ports/eventsourcing/invariants/index.js.map +1 -0
  237. package/build/ports/eventsourcing/invariants/stateExistance.d.ts +4 -0
  238. package/build/ports/eventsourcing/invariants/stateExistance.d.ts.map +1 -0
  239. package/build/ports/eventsourcing/invariants/stateExistance.js +33 -0
  240. package/build/ports/eventsourcing/invariants/stateExistance.js.map +1 -0
  241. package/build/ports/eventsourcing/subscriptions/index.d.ts +2 -0
  242. package/build/ports/eventsourcing/subscriptions/index.d.ts.map +1 -0
  243. package/build/ports/eventsourcing/subscriptions/index.js +18 -0
  244. package/build/ports/eventsourcing/subscriptions/index.js.map +1 -0
  245. package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts +3 -0
  246. package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts.map +1 -0
  247. package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js +81 -0
  248. package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js.map +1 -0
  249. package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts +4 -0
  250. package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts.map +1 -0
  251. package/build/ports/eventsourcing/utils/aggregateBuilder.js +45 -0
  252. package/build/ports/eventsourcing/utils/aggregateBuilder.js.map +1 -0
  253. package/build/ports/eventsourcing/utils/commandBuilder.d.ts +3 -0
  254. package/build/ports/eventsourcing/utils/commandBuilder.d.ts.map +1 -0
  255. package/build/ports/eventsourcing/utils/commandBuilder.js +102 -0
  256. package/build/ports/eventsourcing/utils/commandBuilder.js.map +1 -0
  257. package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts +3 -0
  258. package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts.map +1 -0
  259. package/build/ports/eventsourcing/utils/eventHandlerBuilder.js +19 -0
  260. package/build/ports/eventsourcing/utils/eventHandlerBuilder.js.map +1 -0
  261. package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts +4 -0
  262. package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts.map +1 -0
  263. package/build/ports/eventsourcing/utils/externalSystemBuilder.js +34 -0
  264. package/build/ports/eventsourcing/utils/externalSystemBuilder.js.map +1 -0
  265. package/build/ports/eventsourcing/utils/index.d.ts +13 -0
  266. package/build/ports/eventsourcing/utils/index.d.ts.map +1 -0
  267. package/build/ports/eventsourcing/utils/index.js +45 -0
  268. package/build/ports/eventsourcing/utils/index.js.map +1 -0
  269. package/build/ports/eventsourcing/utils/policyBuilder.d.ts +3 -0
  270. package/build/ports/eventsourcing/utils/policyBuilder.d.ts.map +1 -0
  271. package/build/ports/eventsourcing/utils/policyBuilder.js +29 -0
  272. package/build/ports/eventsourcing/utils/policyBuilder.js.map +1 -0
  273. package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts +5 -0
  274. package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts.map +1 -0
  275. package/build/ports/eventsourcing/utils/readmodelBuilder.js +45 -0
  276. package/build/ports/eventsourcing/utils/readmodelBuilder.js.map +1 -0
  277. package/build/ports/eventstore/index.d.ts +3 -0
  278. package/build/ports/eventstore/index.d.ts.map +1 -0
  279. package/build/ports/eventstore/index.js +13 -0
  280. package/build/ports/eventstore/index.js.map +1 -0
  281. package/build/ports/infrastructure/__tests__/fixture/index.d.ts +3 -0
  282. package/build/ports/infrastructure/__tests__/fixture/index.d.ts.map +1 -0
  283. package/build/ports/infrastructure/__tests__/fixture/index.js +19 -0
  284. package/build/ports/infrastructure/__tests__/fixture/index.js.map +1 -0
  285. package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts +19 -0
  286. package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts.map +1 -0
  287. package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js +76 -0
  288. package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js.map +1 -0
  289. package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts +177 -0
  290. package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts.map +1 -0
  291. package/build/ports/infrastructure/__tests__/fixture/structureState.js +258 -0
  292. package/build/ports/infrastructure/__tests__/fixture/structureState.js.map +1 -0
  293. package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts +2 -0
  294. package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts.map +1 -0
  295. package/build/ports/infrastructure/__tests__/infrastructure.test.js +11 -0
  296. package/build/ports/infrastructure/__tests__/infrastructure.test.js.map +1 -0
  297. package/build/ports/infrastructure/index.d.ts +53 -0
  298. package/build/ports/infrastructure/index.d.ts.map +1 -0
  299. package/build/ports/infrastructure/index.js +149 -0
  300. package/build/ports/infrastructure/index.js.map +1 -0
  301. package/build/ports/infrastructure/utils.d.ts +14 -0
  302. package/build/ports/infrastructure/utils.d.ts.map +1 -0
  303. package/build/ports/infrastructure/utils.js +126 -0
  304. package/build/ports/infrastructure/utils.js.map +1 -0
  305. package/build/ports/logger/index.d.ts +3 -0
  306. package/build/ports/logger/index.d.ts.map +1 -0
  307. package/build/ports/logger/index.js +32 -0
  308. package/build/ports/logger/index.js.map +1 -0
  309. package/build/utils/index.d.ts +35 -0
  310. package/build/utils/index.d.ts.map +1 -0
  311. package/build/utils/index.js +190 -0
  312. package/build/utils/index.js.map +1 -0
  313. package/package.json +28 -0
  314. package/src/adapters/cache/index.ts +1 -0
  315. package/src/adapters/cache/memory/__tests__/memoryCache.test.ts +6 -0
  316. package/src/adapters/cache/memory/index.ts +142 -0
  317. package/src/adapters/configuration/__tests__/.env +4 -0
  318. package/src/adapters/configuration/__tests__/dotEnv.test.ts +38 -0
  319. package/src/adapters/configuration/dotEnv.ts +33 -0
  320. package/src/adapters/configuration/index.ts +1 -0
  321. package/src/adapters/database/index.ts +1 -0
  322. package/src/adapters/database/memory/__tests__/memoryDb.test.ts +37 -0
  323. package/src/adapters/database/memory/index.ts +279 -0
  324. package/src/adapters/endpoints/addAuthUser/index.ts +55 -0
  325. package/src/adapters/endpoints/endpointValidation/index.ts +26 -0
  326. package/src/adapters/endpoints/index.ts +4 -0
  327. package/src/adapters/endpoints/localAuthorization/index.ts +75 -0
  328. package/src/adapters/endpoints/tcpConsumer/index.ts +69 -0
  329. package/src/adapters/endpoints/userSession/index.ts +40 -0
  330. package/src/adapters/eventstore/database.ts +178 -0
  331. package/src/adapters/eventstore/index.ts +1 -0
  332. package/src/adapters/infrastructure/index.ts +1 -0
  333. package/src/adapters/infrastructure/local/index.ts +40 -0
  334. package/src/adapters/logger/console.ts +42 -0
  335. package/src/adapters/logger/index.ts +1 -0
  336. package/src/index.ts +25 -0
  337. package/src/libraries/modules/fs.ts +88 -0
  338. package/src/libraries/modules/index.ts +1 -0
  339. package/src/libraries/openApi/index.ts +1 -0
  340. package/src/libraries/openApi/pruneUnusedRef.ts +35 -0
  341. package/src/libraries/tcp/index.ts +98 -0
  342. package/src/libraries/tcp/types.ts +43 -0
  343. package/src/libraries/validation/__tests__/validation.test.ts +25 -0
  344. package/src/libraries/validation/index.ts +48 -0
  345. package/src/ports/authentication/index.ts +25 -0
  346. package/src/ports/base.ts +20 -0
  347. package/src/ports/cache/index.ts +17 -0
  348. package/src/ports/configuration/__tests__/configurationPort.test.ts +47 -0
  349. package/src/ports/configuration/args.ts +39 -0
  350. package/src/ports/configuration/common.ts +12 -0
  351. package/src/ports/configuration/index.ts +110 -0
  352. package/src/ports/configuration/localConfig.ts +117 -0
  353. package/src/ports/database/index.ts +25 -0
  354. package/src/ports/endpoints/__tests__/endpointsCall.test.ts +20 -0
  355. package/src/ports/endpoints/__tests__/test-client-library/base.ts +167 -0
  356. package/src/ports/endpoints/__tests__/test-client-library/index.ts +23 -0
  357. package/src/ports/endpoints/__tests__/test-client-library/services/service.ts +181 -0
  358. package/src/ports/endpoints/__tests__/utils.test.ts +54 -0
  359. package/src/ports/endpoints/index.ts +272 -0
  360. package/src/ports/endpoints/openApi.ts +191 -0
  361. package/src/ports/endpoints/utils.ts +31 -0
  362. package/src/ports/eventsourcing/__tests__/eventhandlers.test.ts +30 -0
  363. package/src/ports/eventsourcing/__tests__/invariants.test.ts +213 -0
  364. package/src/ports/eventsourcing/commandHandlers/index.ts +625 -0
  365. package/src/ports/eventsourcing/commandTemplates/index.ts +2 -0
  366. package/src/ports/eventsourcing/commandTemplates/multiStream.ts +70 -0
  367. package/src/ports/eventsourcing/commandTemplates/snapshot.ts +43 -0
  368. package/src/ports/eventsourcing/eventHandlers/index.ts +429 -0
  369. package/src/ports/eventsourcing/index.ts +98 -0
  370. package/src/ports/eventsourcing/invariants/combinators.ts +25 -0
  371. package/src/ports/eventsourcing/invariants/common.ts +42 -0
  372. package/src/ports/eventsourcing/invariants/comparisons.ts +90 -0
  373. package/src/ports/eventsourcing/invariants/index.ts +4 -0
  374. package/src/ports/eventsourcing/invariants/stateExistance.ts +34 -0
  375. package/src/ports/eventsourcing/subscriptions/index.ts +1 -0
  376. package/src/ports/eventsourcing/subscriptions/sseSubscriptions.ts +103 -0
  377. package/src/ports/eventsourcing/utils/aggregateBuilder.ts +49 -0
  378. package/src/ports/eventsourcing/utils/commandBuilder.ts +113 -0
  379. package/src/ports/eventsourcing/utils/eventHandlerBuilder.ts +22 -0
  380. package/src/ports/eventsourcing/utils/externalSystemBuilder.ts +42 -0
  381. package/src/ports/eventsourcing/utils/index.ts +25 -0
  382. package/src/ports/eventsourcing/utils/policyBuilder.ts +31 -0
  383. package/src/ports/eventsourcing/utils/readmodelBuilder.ts +52 -0
  384. package/src/ports/eventstore/index.ts +11 -0
  385. package/src/ports/infrastructure/__tests__/fixture/index.ts +2 -0
  386. package/src/ports/infrastructure/__tests__/fixture/infrastructureServices.ts +72 -0
  387. package/src/ports/infrastructure/__tests__/fixture/structureState.ts +254 -0
  388. package/src/ports/infrastructure/__tests__/infrastructure.test.ts +11 -0
  389. package/src/ports/infrastructure/index.ts +162 -0
  390. package/src/ports/infrastructure/utils.ts +130 -0
  391. package/src/ports/logger/index.ts +34 -0
  392. package/src/utils/index.ts +186 -0
  393. 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
+