@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,181 @@
1
+
2
+ import { BackendConfig, CommandExecutionResponse, CommandParams, parseQueryParams, QueryParams, ReadModelChange, Requests, ReadModelQueryBase } from '../base';
3
+
4
+ //*******************************************
5
+ // Schemas
6
+ //*******************************************
7
+
8
+ export type UpsertApplication = {
9
+ [key: string]: unknown | undefined;
10
+ };
11
+ export type ApplicationUpserted = {
12
+ name: string;
13
+ description?: string;
14
+ [key: string]: unknown | undefined;
15
+ };
16
+ export type ApplicationsState = {
17
+ [key: string]: unknown | undefined;
18
+ };
19
+ export type ApplicationsReadmodel = {
20
+ id: string;
21
+ [key: string]: unknown | undefined;
22
+ };
23
+ export type UpsertFlow = {
24
+ [key: string]: unknown | undefined;
25
+ };
26
+ export type FlowUpserted = {
27
+ [key: string]: unknown | undefined;
28
+ };
29
+ export type FlowGroupsState = {
30
+ [key: string]: unknown | undefined;
31
+ };
32
+ export type UpsertFlowGroup = {
33
+ [key: string]: unknown | undefined;
34
+ };
35
+ export type FlowGroupUpserted = {
36
+ [key: string]: unknown | undefined;
37
+ };
38
+ export type UpsertFlowArtifacts = {
39
+ [key: string]: unknown | undefined;
40
+ };
41
+ export type FlowArtifactsUpserted = {
42
+ [key: string]: unknown | undefined;
43
+ };
44
+ export type InitFlowTransfer = {
45
+ [key: string]: unknown | undefined;
46
+ };
47
+ export type FlowTransferInitiated = {
48
+ [key: string]: unknown | undefined;
49
+ };
50
+ export type AssignFlowGroup = {
51
+ [key: string]: unknown | undefined;
52
+ };
53
+ export type FlowGroupAssigned = {
54
+ [key: string]: unknown | undefined;
55
+ };
56
+ export type FlowGroupsReadmodel = {
57
+ id: string;
58
+ [key: string]: unknown | undefined;
59
+ };
60
+ export type GenerateFlowCompletion = {
61
+ prompt: string;
62
+ };
63
+ export type FlowCompletionGenerated = {
64
+ prompt: string;
65
+ response: Record<string, never>;
66
+ };
67
+ export type FlowCompletionsState = ({
68
+ prompt: string;
69
+ response: Record<string, never>;
70
+ })[];
71
+ export type FlowsReadmodel = {
72
+ id: string;
73
+ [key: string]: unknown | undefined;
74
+ };
75
+
76
+ export type ApplicationsReadmodelParams = {
77
+ id: string;
78
+ };
79
+ export type ApplicationsReadmodelQuery = ReadModelQueryBase<ApplicationsReadmodel> & {
80
+
81
+ };
82
+ export type FlowGroupsReadmodelParams = {
83
+ id: string;
84
+ };
85
+ export type FlowGroupsReadmodelQuery = ReadModelQueryBase<FlowGroupsReadmodel> & {
86
+
87
+ };
88
+ export type FlowsReadmodelParams = {
89
+ id: string;
90
+ };
91
+ export type FlowsReadmodelQuery = ReadModelQueryBase<FlowsReadmodel> & {
92
+
93
+ };
94
+
95
+ //*******************************************
96
+ // Operations
97
+ //*******************************************
98
+
99
+ export type Commands = {
100
+ UpsertApplication: ({ id, query, body }: CommandParams<UpsertApplication> ) => Promise<CommandExecutionResponse<ApplicationsState, ApplicationUpserted>>;
101
+ UpsertFlow: ({ id, query, body }: CommandParams<UpsertFlow> ) => Promise<CommandExecutionResponse<FlowGroupsState, FlowUpserted>>;
102
+ UpsertFlowGroup: ({ id, query, body }: CommandParams<UpsertFlowGroup> ) => Promise<CommandExecutionResponse<FlowGroupsState, FlowGroupUpserted>>;
103
+ UpsertFlowArtifacts: ({ id, query, body }: CommandParams<UpsertFlowArtifacts> ) => Promise<CommandExecutionResponse<FlowGroupsState, FlowArtifactsUpserted>>;
104
+ InitFlowTransfer: ({ id, query, body }: CommandParams<InitFlowTransfer> ) => Promise<CommandExecutionResponse<FlowGroupsState, FlowTransferInitiated>>;
105
+ AssignFlowGroup: ({ id, query, body }: CommandParams<AssignFlowGroup> ) => Promise<CommandExecutionResponse<FlowGroupsState, FlowGroupAssigned>>;
106
+ GenerateFlowCompletion: ({ id, query, body }: CommandParams<GenerateFlowCompletion> ) => Promise<CommandExecutionResponse<FlowCompletionsState, FlowCompletionGenerated>>;
107
+ };
108
+ export type Queries = {
109
+ ApplicationsReadmodelById: ( id: string ) => Promise<ApplicationsReadmodel>;
110
+ ApplicationsReadmodel: ({ query }: QueryParams<ApplicationsReadmodelQuery,ApplicationsReadmodelParams> ) => Promise<ApplicationsReadmodel[]>;
111
+ FlowGroupsReadmodelById: ( id: string ) => Promise<FlowGroupsReadmodel>;
112
+ FlowGroupsReadmodel: ({ query }: QueryParams<FlowGroupsReadmodelQuery,FlowGroupsReadmodelParams> ) => Promise<FlowGroupsReadmodel[]>;
113
+ FlowsReadmodelById: ( id: string ) => Promise<FlowsReadmodel>;
114
+ FlowsReadmodel: ({ query }: QueryParams<FlowsReadmodelQuery,FlowsReadmodelParams> ) => Promise<FlowsReadmodel[]>;
115
+ };
116
+ export type Subscriptions = {
117
+ ApplicationsReadmodel: ({ query }: QueryParams<ApplicationsReadmodelQuery,ApplicationsReadmodelParams>, onChange: ( change: ReadModelChange<ApplicationsReadmodel> )=>void ) => void;
118
+ FlowGroupsReadmodel: ({ query }: QueryParams<FlowGroupsReadmodelQuery,FlowGroupsReadmodelParams>, onChange: ( change: ReadModelChange<FlowGroupsReadmodel> )=>void ) => void;
119
+ FlowsReadmodel: ({ query }: QueryParams<FlowsReadmodelQuery,FlowsReadmodelParams>, onChange: ( change: ReadModelChange<FlowsReadmodel> )=>void ) => void;
120
+ };
121
+ export const commands = ( requests: Requests, { token }: BackendConfig ): Commands => ({
122
+
123
+ UpsertApplication: ({ id, query, body }) => {
124
+ return requests.post( `/applications/${id}/upsert-application${parseQueryParams( query )}`, body );
125
+ },
126
+ UpsertFlow: ({ id, query, body }) => {
127
+ return requests.post( `/flow-groups/${id}/upsert-flow${parseQueryParams( query )}`, body );
128
+ },
129
+ UpsertFlowGroup: ({ id, query, body }) => {
130
+ return requests.post( `/flow-groups/${id}/upsert-flow-group${parseQueryParams( query )}`, body );
131
+ },
132
+ UpsertFlowArtifacts: ({ id, query, body }) => {
133
+ return requests.post( `/flow-groups/${id}/upsert-flow-artifacts${parseQueryParams( query )}`, body );
134
+ },
135
+ InitFlowTransfer: ({ id, query, body }) => {
136
+ return requests.post( `/flow-groups/${id}/init-flow-transfer${parseQueryParams( query )}`, body );
137
+ },
138
+ AssignFlowGroup: ({ id, query, body }) => {
139
+ return requests.post( `/flow-groups/${id}/assign-flow-group${parseQueryParams( query )}`, body );
140
+ },
141
+ GenerateFlowCompletion: ({ id, query, body }) => {
142
+ return requests.post( `/flow-completions/${id}/generate-flow-completion${parseQueryParams( query )}`, body );
143
+ }
144
+ });
145
+
146
+ export const queries = ( requests: Requests, { token }: BackendConfig ): Queries => ({
147
+
148
+ ApplicationsReadmodelById: ( id ) => {
149
+ return requests.get( `/applications-readmodel/${id}?` );
150
+ },
151
+ ApplicationsReadmodel: ({ query }) => {
152
+ return requests.get( `/applications-readmodel/?${parseQueryParams( query )}` );
153
+ },
154
+ FlowGroupsReadmodelById: ( id ) => {
155
+ return requests.get( `/flow-groups-readmodel/${id}?` );
156
+ },
157
+ FlowGroupsReadmodel: ({ query }) => {
158
+ return requests.get( `/flow-groups-readmodel/?${parseQueryParams( query )}` );
159
+ },
160
+ FlowsReadmodelById: ( id ) => {
161
+ return requests.get( `/flows-readmodel/${id}?` );
162
+ },
163
+ FlowsReadmodel: ({ query }) => {
164
+ return requests.get( `/flows-readmodel/?${parseQueryParams( query )}` );
165
+ }
166
+ });
167
+
168
+ export const subscriptions = ( requests: Requests, { token }: BackendConfig ): Subscriptions => ({
169
+
170
+ ApplicationsReadmodel: ({ query }, onChange ) => {
171
+ return requests.subscribe( `/applications-readmodel/?${parseQueryParams( Object.assign( query || {}, token ? { access_token: token } : {}))}`, 'ApplicationsReadmodel', onChange );
172
+ },
173
+ FlowGroupsReadmodel: ({ query }, onChange ) => {
174
+ return requests.subscribe( `/flow-groups-readmodel/?${parseQueryParams( Object.assign( query || {}, token ? { access_token: token } : {}))}`, 'FlowGroupsReadmodel', onChange );
175
+ },
176
+ FlowsReadmodel: ({ query }, onChange ) => {
177
+ return requests.subscribe( `/flows-readmodel/?${parseQueryParams( Object.assign( query || {}, token ? { access_token: token } : {}))}`, 'FlowsReadmodel', onChange );
178
+ }
179
+ });
180
+
181
+
@@ -0,0 +1,54 @@
1
+ // import { FetchResponse, processFetchResponse } from './utils';
2
+
3
+ // import { AddressInfo } from 'net';
4
+ // import fetch from 'node-fetch';
5
+ // import { createFakeServer } from './tests';
6
+
7
+ // describe( 'http', function() {
8
+ // describe('processFetchJsonResponse', function() {
9
+ // it('process the response from a fetch request when request is ok', done => {
10
+ // const server = createFakeServer({body:{ name:'tomas' }});
11
+ // fetch( `http://localhost:${(server.address() as AddressInfo).port}` )
12
+ // .then(processFetchResponse)
13
+ // .then((response: FetchResponse) => {
14
+ // assert.deepEqual( response.body, { name:'tomas' });
15
+ // server.close(() => {
16
+ // done();
17
+ // });
18
+ // }, done);
19
+ // });
20
+ // it('process the response from a fetch request when request is not ok and body is object', done => {
21
+ // const server = createFakeServer({code:400, body:{ name:'tomas' }});
22
+ // fetch( `http://localhost:${(server.address() as AddressInfo).port}` )
23
+ // .then(processFetchResponse)
24
+ // .then((response: FetchResponse) => {
25
+ // assert.deepEqual( response.body, { name:'tomas' });
26
+ // server.close(() => {
27
+ // done();
28
+ // });
29
+ // }, done);
30
+ // });
31
+ // it('process the response from a fetch request when request is not ok and body is text', done => {
32
+ // const server = createFakeServer({code:400, body:"Error"});
33
+ // fetch( `http://localhost:${(server.address() as AddressInfo).port}` )
34
+ // .then(processFetchResponse<string>)
35
+ // .then((response) => {
36
+ // assert.equal( response.body, "Error");
37
+ // server.close(() => {
38
+ // done();
39
+ // });
40
+ // }, done);
41
+ // });
42
+ // it('process the response from a fetch request when request is not ok and body is number', done => {
43
+ // const server = createFakeServer({code:400, body:234});
44
+ // fetch( `http://localhost:${(server.address() as AddressInfo).port}` )
45
+ // .then(processFetchResponse<number>)
46
+ // .then((response: FetchResponse<number>) => {
47
+ // assert.equal( response.body, 234);
48
+ // server.close(() => {
49
+ // done();
50
+ // });
51
+ // }, done);
52
+ // });
53
+ // });
54
+ // });
@@ -0,0 +1,272 @@
1
+ import { noop } from '@bett3r-dev/bett3r-utils';
2
+ import S, { BaseSchema } from '@bett3r-dev/jsonschema-definer';
3
+ import { ConfigurationPort, Endpoint, EndpointActionParams, EndpointsAdapter, EndpointsFetchInterfaceResponse, EndpointsPort, InjectHandlerContext, errorStatusCodeMap } from '@bett3r-dev/pv3-types';
4
+ import fs from 'fs/promises';
5
+ import { JSONSchema7 } from 'json-schema';
6
+ import { match } from 'node-match-path';
7
+ import { OpenAPIV3_1 } from 'openapi-types';
8
+ import path from 'path';
9
+ import querystring from 'querystring';
10
+ import { createPort } from '../base';
11
+ import { generateOpenApiDocument, registerCommandSchema, registerConsumerEventsSchemas, registerOpenApiEndpoint, registerOpenApiSchema, registerProducerEventSchemas, registerReadmodelSchema } from './openApi';
12
+ export * from './utils';
13
+
14
+ export const optionalParamRegexp = /(\/:[^/()]*?)\?(\/?)/;
15
+ export const pathRegex = /\/(.+?)($|\/$|\/?\??|\/(.+?)\/?)($|\?(.+))/;
16
+
17
+ export const getPathInfo = ( path: string ) =>{
18
+ const r = pathRegex.exec( path );
19
+ return r && {
20
+ original: r[0],
21
+ base: r[1],
22
+ path: r[3],
23
+ query: r[5] && querystring.parse( r[5])
24
+ };
25
+ };
26
+
27
+ export const PackageJsonSchema = S.shape({
28
+ name: S.string(),
29
+ version: S.string(),
30
+ host: S.string().optional()
31
+ });
32
+ export type PackageJsonType = typeof PackageJsonSchema.type;
33
+
34
+ export const EndpointsConfigSchema = S.shape({
35
+ outOpenApiFileFilePath: S.string().optional(),
36
+ serviceDiscoveryUrl: S.string().optional(),
37
+ });
38
+ export type EndpointsConfigType = typeof EndpointsConfigSchema.type;
39
+
40
+ export const Endpoints = ( params: {packageJson: PackageJsonType, configuration: ConfigurationPort, supportedModules?: Record<string,string[]>}, ...adapters: EndpointsAdapter[]): EndpointsPort => {
41
+ const { packageJson, configuration } = params;
42
+ const { config: { outOpenApiFileFilePath, serviceDiscoveryUrl }} = configuration.getModuleConfig( 'endpoints', EndpointsConfigSchema.optional());
43
+ const openApiTags = new Set<string>();
44
+ let servicesDirectory: Record<string, string> = {};
45
+ let openApiDocument: OpenAPIV3_1.Document;
46
+ let paths: OpenAPIV3_1.PathsObject = {};
47
+ let schemas: Record<string, OpenAPIV3_1.SchemaObject> = {};
48
+ let endpoints: Record<string, Endpoint> = {};
49
+ let supportedModules = params.supportedModules;
50
+
51
+ configuration.configureCliCommand({
52
+ name: 'generateDocumentation [servicePath]',
53
+ description: 'Generates OpenApi documentation for the endpoints and stores it in the .openapi.json file',
54
+ arguments: [{
55
+ name: 'servicePath',
56
+ type: 'string',
57
+ description: 'The service path to generate the documentation for'
58
+ }],
59
+ handler: ({ servicePath }) => {
60
+ const rootFolder = path.resolve();
61
+ const stackServiceFilePath = !servicePath || rootFolder.endsWith( servicePath ) ? rootFolder : path.resolve( servicePath );
62
+ const openApiDocument = generateOpenApiDocument( paths, schemas, packageJson );
63
+ return generateOpenApiSpec( stackServiceFilePath, openApiDocument )
64
+ .then(() => {
65
+ console.log( 'OpenApi documentation generated' );
66
+ process.exit( 0 );
67
+ })
68
+ .catch(( err ) => {
69
+ console.error( err );
70
+ process.exit( 1 );
71
+ });
72
+ }
73
+ });
74
+
75
+ const fetchServiceDiscovery = async () => {
76
+ if ( serviceDiscoveryUrl ){
77
+ const response = await fetch( serviceDiscoveryUrl );
78
+ const json = await response.json();
79
+ return json;
80
+ }
81
+ };
82
+
83
+ const injectHandler = ( context: InjectHandlerContext ) => {
84
+ return Promise.all(
85
+ adapters
86
+ .filter( a=> a.adapterType === 'httpHandler' )
87
+ .map(( a ) => a.injectHandler && a.injectHandler( context ))
88
+ )
89
+ .then( noop );
90
+ };
91
+ const callEventConnectionsActive = () => {
92
+ adapters
93
+ .forEach(( a ) => a.callEventConnectionsActive && a.callEventConnectionsActive());
94
+ };
95
+ const callEventConnectionsInactive = () => {
96
+ adapters
97
+ .forEach(( a ) => a.callEventConnectionsInactive && a.callEventConnectionsInactive());
98
+ };
99
+
100
+ const getEndpoints = () => Object.values( endpoints );
101
+
102
+ const registerSchema = ( name:string, schema: JSONSchema7, tags: string[]) => {
103
+ schemas = registerOpenApiSchema( schemas, name, schema, tags );
104
+ };
105
+
106
+ function registerEndpoint( endpoint: Endpoint ) {
107
+ const optionalParamMatch = endpoint.route.match( optionalParamRegexp );
108
+ if ( optionalParamMatch ) {
109
+ const pathFull = endpoint.route.replace( optionalParamRegexp, '$1$2' );
110
+ const pathOptional = endpoint.route.replace( optionalParamRegexp, '$2' );
111
+ endpoints[`${endpoint.method}:${pathFull}`] = endpoint;
112
+ endpoints[`${endpoint.method}:${pathOptional}`] = endpoint;
113
+ } else {
114
+ endpoints[`${endpoint.method}:${endpoint.route}`] = endpoint;
115
+ }
116
+
117
+ if ( endpoint.method === 'POST' && endpoint.tags?.some( t=> [ 'aggregate', 'system' ].includes( t ))){
118
+ registerCommandSchema( schemas, endpoint.name as string, endpoint.schemas?.body as BaseSchema );
119
+ ( Object.values(( endpoint?.schemas?.responses || {})['200']) || []).forEach(( response ) => {
120
+ registerProducerEventSchemas( schemas, response.schema as BaseSchema );
121
+ });
122
+ }
123
+ if ( endpoint.method === 'POST' && endpoint.tags?.some( t=> [ 'readmodel', 'policy' ].includes( t ))){
124
+ registerConsumerEventsSchemas( schemas, endpoint.schemas?.body as BaseSchema );
125
+ }
126
+
127
+ if ( endpoint.method === 'GET' && endpoint.tags?.some( t=> t === 'readmodel' )){
128
+ registerReadmodelSchema( schemas, ( endpoint.schemas as any ).responses['200'][0].schema.plain.oneOf[0]);
129
+ }
130
+
131
+ paths = registerOpenApiEndpoint( paths, endpoint );
132
+ adapters.forEach( a => a.registerEndpoint( endpoint ));
133
+ }
134
+
135
+ const call = async <Type, R=Type>( route: string, method: string = 'GET', params?: Pick<EndpointActionParams<Type>, 'body'|'context'> ): Promise<R> =>{
136
+ const p = getPathInfo( route );
137
+ let routeParams: Record<string, string> | null = {};
138
+ const path = Object.keys( endpoints ).find( k => {
139
+ if ( k.startsWith( `${method}:/${p?.base}` )){
140
+ const m = match( k.replace( `${method}:`, '' ), route.replace( /\?.+?$/, '' ));
141
+ if ( m.matches ){
142
+ routeParams = m.params;
143
+ return true;
144
+ }
145
+ }
146
+ });
147
+ if ( !path ){
148
+ if ( !servicesDirectory ){
149
+ servicesDirectory = await fetchServiceDiscovery();
150
+ }
151
+ if ( servicesDirectory[`${method}:${route}`]){
152
+ return fetch( servicesDirectory[`${method}:${route}`], {
153
+ method: method.toUpperCase(),
154
+ headers: params?.context?.headers,
155
+ body: JSON.stringify( params?.body )
156
+ })
157
+ .then( r => r.json());
158
+ }
159
+ return Promise.reject( Error( `Endpoint not identified for ${method}:${route}` ));
160
+ }
161
+ return endpoints[path].action({ ...params, params: routeParams, query: p?.query } as EndpointActionParams<Type> )
162
+ .catch( e => {
163
+ e.status = e.status || errorStatusCodeMap[e.type];
164
+ return Promise.reject( e );
165
+ });
166
+ };
167
+
168
+ const _fetch = async ( route: string, params: {method: 'get'| 'post', headers: Record<string,any>, body: string}): Promise<EndpointsFetchInterfaceResponse> =>{
169
+ const response = call ( route, params.method.toUpperCase(), { body: JSON.parse( params.body ), context: { headers: params.headers }});
170
+ return {
171
+ ok: true,
172
+ json: async () => response,
173
+ text: async () => ''
174
+ };
175
+ };
176
+
177
+ const get = <Type, R=Type>( route: string, params?: Pick<EndpointActionParams<Type>, 'body'|'context'> ): Promise<R> =>{
178
+ return call( route, 'GET', params );
179
+ };
180
+ const post = <Type, R=Type>( route: string, params?: Pick<EndpointActionParams<Type>, 'body'|'context'> ): Promise<R> =>{
181
+ return call( route, 'POST', params );
182
+ };
183
+
184
+ const getServiceFilePath = () => {
185
+ const slashRegex = new RegExp( '(/|\\\\)','mig' );
186
+ const errorStack = new Error().stack?.split( '\n' ) as string[];
187
+ const stackRow = ( errorStack[5] || '' ).replace( slashRegex, '/' );
188
+ return stackRow.slice( stackRow.indexOf( '/' ), stackRow.lastIndexOf( '/' ));
189
+ };
190
+
191
+ const addOpenApiTag = ( tag: string ) => {
192
+ openApiTags.add( tag );
193
+ openApiDocument = generateOpenApiDocument( paths, schemas, packageJson, Array.from( openApiTags ));
194
+ };
195
+
196
+ const generateOpenApiSpec = async ( servicePath?:string, document?: OpenAPIV3_1.Document ) => {
197
+ document = document || generateOpenApiDocument( paths, schemas, packageJson, Array.from( openApiTags ));
198
+ const path = servicePath || outOpenApiFileFilePath || getServiceFilePath();
199
+ await fs.writeFile( `${path}/.openapi.json`, JSON.stringify( document, null, 2 ));
200
+ return document;
201
+ };
202
+
203
+ const setServiceSupportedModules = ( modules: Record<string, string[]> ) => {
204
+ supportedModules = modules;
205
+ };
206
+
207
+ const start = async (): Promise<void> => {
208
+ // const args = await configuration.getArgs();
209
+ // args.admin && args.outbox && openApiTags.add( 'pv3.outbox' );
210
+ if ( supportedModules ){
211
+ openApiTags.add( 'pv3.service' );
212
+ openApiTags.add( `modules=${JSON.stringify( supportedModules )}` );
213
+ }
214
+
215
+ return new Promise(( resolve, reject ) => {
216
+ const stackServiceFilePath = getServiceFilePath();
217
+ setImmediate(() => {
218
+ openApiDocument = generateOpenApiDocument( paths, schemas, packageJson, Array.from( openApiTags ));
219
+ // TODO: Tener un config para que determinar si se crea el archivo o no.
220
+ if ( process.env.NODE_ENV !== 'production' ){
221
+ generateOpenApiSpec( stackServiceFilePath, openApiDocument )
222
+ .catch( reject );
223
+ }
224
+
225
+ return Promise.all( adapters.map( a => {
226
+ if ( a.onServicesDirectorySet ){
227
+ a.onServicesDirectorySet(( services ) => {
228
+ servicesDirectory = services;
229
+ });
230
+ }
231
+ a.registerOpenApi && a.registerOpenApi( openApiDocument );
232
+ return a.start && a.start();
233
+ }))
234
+ .then(() => {
235
+ endpointsPort.emitter.emit( 'started' );
236
+ endpointsPort.isStarted = true;
237
+ })
238
+ .then( noop )
239
+ .then( resolve );
240
+ });
241
+ });
242
+ };
243
+
244
+ const stop = async () => {
245
+ return Promise.all( adapters.map( a => {
246
+ a.stop && a.stop();
247
+ }))
248
+ .then( noop );
249
+ };
250
+
251
+ const endpointsPort = createPort({
252
+ _adapters: () => adapters,
253
+ getEndpoints,
254
+ addOpenApiTag,
255
+ setServiceSupportedModules,
256
+ generateOpenApiSpec,
257
+ getOpenApiSpec: () => openApiDocument,
258
+ registerSchema,
259
+ registerEndpoint,
260
+ injectHandler,
261
+ callEventConnectionsActive,
262
+ callEventConnectionsInactive,
263
+ call,
264
+ fetch: _fetch,
265
+ get,
266
+ post,
267
+ start,
268
+ stop
269
+ });
270
+
271
+ return endpointsPort;
272
+ };