@effect-app/infra 4.0.0-beta.31 → 4.0.0-beta.310

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 (473) hide show
  1. package/CHANGELOG.md +2361 -0
  2. package/_check.sh +1 -1
  3. package/dist/CUPS.d.ts +29 -10
  4. package/dist/CUPS.d.ts.map +1 -1
  5. package/dist/CUPS.js +35 -14
  6. package/dist/ClusterCosmos.d.ts +64 -0
  7. package/dist/ClusterCosmos.d.ts.map +1 -0
  8. package/dist/ClusterCosmos.js +547 -0
  9. package/dist/ClusterServiceBus.d.ts +67 -0
  10. package/dist/ClusterServiceBus.d.ts.map +1 -0
  11. package/dist/ClusterServiceBus.js +82 -0
  12. package/dist/ContextProvider.d.ts +34 -0
  13. package/dist/ContextProvider.d.ts.map +1 -0
  14. package/dist/ContextProvider.js +40 -0
  15. package/dist/Emailer/Sendgrid.d.ts +110 -146
  16. package/dist/Emailer/Sendgrid.d.ts.map +1 -1
  17. package/dist/Emailer/Sendgrid.js +24 -19
  18. package/dist/Emailer/fake.d.ts +1 -1
  19. package/dist/Emailer/fake.d.ts.map +1 -1
  20. package/dist/Emailer/fake.js +4 -4
  21. package/dist/MainFiberSet.d.ts +12 -8
  22. package/dist/MainFiberSet.d.ts.map +1 -1
  23. package/dist/MainFiberSet.js +23 -7
  24. package/dist/QueueMaker/errors.d.ts +4 -2
  25. package/dist/QueueMaker/errors.d.ts.map +1 -1
  26. package/dist/QueueMaker/errors.js +4 -2
  27. package/dist/{adapters/SQL → SQL}/Model.d.ts +31 -42
  28. package/dist/SQL/Model.d.ts.map +1 -0
  29. package/dist/SQL/Model.js +469 -0
  30. package/dist/SQL.d.ts.map +1 -0
  31. package/dist/{adapters/SQL.js → SQL.js} +1 -1
  32. package/dist/Store/Cosmos/query.d.ts +14 -3
  33. package/dist/Store/Cosmos/query.d.ts.map +1 -1
  34. package/dist/Store/Cosmos/query.js +179 -41
  35. package/dist/Store/Cosmos.d.ts +2 -2
  36. package/dist/Store/Cosmos.d.ts.map +1 -1
  37. package/dist/Store/Cosmos.js +385 -254
  38. package/dist/Store/Disk.d.ts +4 -4
  39. package/dist/Store/Disk.d.ts.map +1 -1
  40. package/dist/Store/Disk.js +79 -39
  41. package/dist/Store/Memory.d.ts +5 -9
  42. package/dist/Store/Memory.d.ts.map +1 -1
  43. package/dist/Store/Memory.js +324 -67
  44. package/dist/Store/SQL/Pg.d.ts +4 -0
  45. package/dist/Store/SQL/Pg.d.ts.map +1 -0
  46. package/dist/Store/SQL/Pg.js +253 -0
  47. package/dist/Store/SQL/query.d.ts +49 -0
  48. package/dist/Store/SQL/query.d.ts.map +1 -0
  49. package/dist/Store/SQL/query.js +527 -0
  50. package/dist/Store/SQL.d.ts +21 -0
  51. package/dist/Store/SQL.d.ts.map +1 -0
  52. package/dist/Store/SQL.js +472 -0
  53. package/dist/Store/codeFilter.d.ts +4 -4
  54. package/dist/Store/codeFilter.d.ts.map +1 -1
  55. package/dist/Store/codeFilter.js +6 -4
  56. package/dist/Store/index.d.ts +6 -4
  57. package/dist/Store/index.d.ts.map +1 -1
  58. package/dist/Store/index.js +18 -5
  59. package/dist/Store/utils.d.ts +5 -2
  60. package/dist/Store/utils.d.ts.map +1 -1
  61. package/dist/Store/utils.js +9 -5
  62. package/dist/WorkflowEngineCosmos.d.ts +29 -0
  63. package/dist/WorkflowEngineCosmos.d.ts.map +1 -0
  64. package/dist/WorkflowEngineCosmos.js +542 -0
  65. package/dist/WorkflowEngineSqlite.d.ts +24 -0
  66. package/dist/WorkflowEngineSqlite.d.ts.map +1 -0
  67. package/dist/WorkflowEngineSqlite.js +550 -0
  68. package/dist/arbs.d.ts +1 -1
  69. package/dist/arbs.d.ts.map +1 -1
  70. package/dist/arbs.js +5 -3
  71. package/dist/codec.d.ts.map +1 -0
  72. package/dist/codec.js +5 -0
  73. package/dist/{adapters/cosmos-client.d.ts → cosmos-client.d.ts} +4 -2
  74. package/dist/cosmos-client.d.ts.map +1 -0
  75. package/dist/cosmos-client.js +11 -0
  76. package/dist/errorReporter.d.ts +6 -4
  77. package/dist/errorReporter.d.ts.map +1 -1
  78. package/dist/errorReporter.js +23 -27
  79. package/dist/fileUtil.d.ts +1 -1
  80. package/dist/fileUtil.d.ts.map +1 -1
  81. package/dist/fileUtil.js +2 -2
  82. package/dist/index.d.ts +2 -1
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +3 -2
  85. package/dist/internal/RequestContextMiddleware.d.ts +5 -0
  86. package/dist/internal/RequestContextMiddleware.d.ts.map +1 -0
  87. package/dist/internal/RequestContextMiddleware.js +45 -0
  88. package/dist/internal/auth.d.ts +53 -0
  89. package/dist/internal/auth.d.ts.map +1 -0
  90. package/dist/internal/auth.js +180 -0
  91. package/dist/internal/events.d.ts +11 -0
  92. package/dist/internal/events.d.ts.map +1 -0
  93. package/dist/internal/events.js +49 -0
  94. package/dist/internal/health.d.ts.map +1 -0
  95. package/dist/internal/health.js +5 -0
  96. package/dist/{api/layerUtils.d.ts → layerUtils.d.ts} +14 -6
  97. package/dist/layerUtils.d.ts.map +1 -0
  98. package/dist/layerUtils.js +17 -0
  99. package/dist/logger/jsonLogger.d.ts +1 -1
  100. package/dist/logger/jsonLogger.d.ts.map +1 -1
  101. package/dist/logger/jsonLogger.js +5 -3
  102. package/dist/logger/logFmtLogger.d.ts +1 -1
  103. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  104. package/dist/logger/logFmtLogger.js +3 -3
  105. package/dist/logger/shared.d.ts +2 -2
  106. package/dist/logger/shared.d.ts.map +1 -1
  107. package/dist/logger/shared.js +5 -5
  108. package/dist/logger.d.ts.map +1 -1
  109. package/dist/middlewares.d.ts.map +1 -0
  110. package/dist/{api/middlewares.js → middlewares.js} +1 -1
  111. package/dist/{adapters/mongo-client.d.ts → mongo-client.d.ts} +3 -2
  112. package/dist/mongo-client.d.ts.map +1 -0
  113. package/dist/mongo-client.js +15 -0
  114. package/dist/otel.d.ts +75 -0
  115. package/dist/otel.d.ts.map +1 -0
  116. package/dist/otel.js +84 -0
  117. package/dist/rateLimit.d.ts +11 -3
  118. package/dist/rateLimit.d.ts.map +1 -1
  119. package/dist/rateLimit.js +7 -12
  120. package/dist/{adapters/redis-client.d.ts → redis-client.d.ts} +5 -2
  121. package/dist/redis-client.d.ts.map +1 -0
  122. package/dist/redis-client.js +98 -0
  123. package/dist/{api/reportError.d.ts → reportError.d.ts} +1 -1
  124. package/dist/reportError.d.ts.map +1 -0
  125. package/dist/reportError.js +28 -0
  126. package/dist/{api/routing → routing}/middleware/RouterMiddleware.d.ts +4 -3
  127. package/dist/routing/middleware/RouterMiddleware.d.ts.map +1 -0
  128. package/dist/{api/routing → routing}/middleware/RouterMiddleware.js +1 -1
  129. package/dist/routing/middleware/middleware.d.ts +48 -0
  130. package/dist/routing/middleware/middleware.d.ts.map +1 -0
  131. package/dist/routing/middleware/middleware.js +152 -0
  132. package/dist/{api/routing → routing}/middleware.d.ts +0 -1
  133. package/dist/routing/middleware.d.ts.map +1 -0
  134. package/dist/{api/routing → routing}/middleware.js +1 -2
  135. package/dist/routing/schema/jwt.d.ts.map +1 -0
  136. package/dist/routing/schema/jwt.js +13 -0
  137. package/dist/routing/tsort.d.ts.map +1 -0
  138. package/dist/routing/tsort.js +51 -0
  139. package/dist/{api/routing → routing}/utils.d.ts +3 -3
  140. package/dist/routing/utils.d.ts.map +1 -0
  141. package/dist/routing/utils.js +45 -0
  142. package/dist/routing.d.ts +182 -0
  143. package/dist/routing.d.ts.map +1 -0
  144. package/dist/routing.js +256 -0
  145. package/dist/test.d.ts +2 -2
  146. package/dist/test.d.ts.map +1 -1
  147. package/dist/test.js +2 -2
  148. package/dist/util.d.ts.map +1 -0
  149. package/dist/util.js +14 -0
  150. package/docs/cluster-storage.md +26 -0
  151. package/docs/workflow-engine.md +262 -0
  152. package/examples/query.ts +47 -39
  153. package/package.json +38 -352
  154. package/src/CUPS.ts +53 -14
  155. package/src/ClusterCosmos.ts +1118 -0
  156. package/src/ClusterServiceBus.ts +242 -0
  157. package/src/{api/ContextProvider.ts → ContextProvider.ts} +20 -17
  158. package/src/Emailer/Sendgrid.ts +83 -60
  159. package/src/Emailer/fake.ts +4 -4
  160. package/src/MainFiberSet.ts +32 -13
  161. package/src/QueueMaker/errors.ts +3 -1
  162. package/src/{adapters/SQL → SQL}/Model.ts +42 -41
  163. package/src/SQL.ts +1 -0
  164. package/src/Store/Cosmos/query.ts +218 -54
  165. package/src/Store/Cosmos.ts +529 -365
  166. package/src/Store/Disk.ts +112 -70
  167. package/src/Store/Memory.ts +365 -99
  168. package/src/Store/SQL/Pg.ts +389 -0
  169. package/src/Store/SQL/query.ts +603 -0
  170. package/src/Store/SQL.ts +766 -0
  171. package/src/Store/codeFilter.ts +8 -6
  172. package/src/Store/index.ts +25 -10
  173. package/src/Store/utils.ts +32 -25
  174. package/src/WorkflowEngineCosmos.ts +749 -0
  175. package/src/WorkflowEngineSqlite.ts +813 -0
  176. package/src/arbs.ts +5 -3
  177. package/src/{adapters/cosmos-client.ts → cosmos-client.ts} +5 -3
  178. package/src/errorReporter.ts +68 -78
  179. package/src/fileUtil.ts +1 -1
  180. package/src/index.ts +2 -1
  181. package/src/{api/internal → internal}/RequestContextMiddleware.ts +23 -6
  182. package/src/internal/auth.ts +272 -0
  183. package/src/{api/internal → internal}/events.ts +22 -13
  184. package/src/{api/layerUtils.ts → layerUtils.ts} +14 -10
  185. package/src/logger/jsonLogger.ts +5 -3
  186. package/src/logger/logFmtLogger.ts +3 -3
  187. package/src/logger/shared.ts +5 -4
  188. package/src/middlewares.ts +10 -0
  189. package/src/{adapters/mongo-client.ts → mongo-client.ts} +4 -2
  190. package/src/otel.ts +177 -0
  191. package/src/rateLimit.ts +34 -23
  192. package/src/{adapters/redis-client.ts → redis-client.ts} +7 -3
  193. package/src/{api/reportError.ts → reportError.ts} +3 -2
  194. package/src/{api/routing → routing}/middleware/RouterMiddleware.ts +5 -4
  195. package/src/routing/middleware/middleware.ts +196 -0
  196. package/src/routing/middleware.ts +4 -0
  197. package/src/{api/routing → routing}/schema/jwt.ts +2 -1
  198. package/src/{api/routing → routing}/utils.ts +2 -1
  199. package/src/routing.ts +823 -0
  200. package/src/test.ts +4 -4
  201. package/src/vitest.ts +1 -1
  202. package/test/auth.test.ts +101 -0
  203. package/test/cluster-cosmos.test.ts +612 -0
  204. package/test/cluster-servicebus.test.ts +180 -0
  205. package/test/cluster-sqlite.test.ts +205 -0
  206. package/test/contextProvider.test.ts +15 -12
  207. package/test/controller.test.ts +28 -32
  208. package/test/cosmos-query.test.ts +228 -0
  209. package/test/dist/auth.test.d.ts.map +1 -0
  210. package/test/dist/cluster-cosmos.test.d.ts.map +1 -0
  211. package/test/dist/cluster-servicebus.test.d.ts.map +1 -0
  212. package/test/dist/cluster-sqlite.test.d.ts.map +1 -0
  213. package/test/dist/contextProvider.test.d.ts.map +1 -1
  214. package/test/dist/controller.test.d.ts.map +1 -1
  215. package/test/dist/cosmos-query.test.d.ts.map +1 -0
  216. package/test/dist/fixtures.d.ts +29 -11
  217. package/test/dist/fixtures.d.ts.map +1 -1
  218. package/test/dist/fixtures.js +17 -10
  219. package/test/dist/query.test.d.ts.map +1 -1
  220. package/test/dist/rawQuery.test.d.ts.map +1 -1
  221. package/test/dist/repository-ext.test.d.ts.map +1 -0
  222. package/test/dist/requires.test.d.ts.map +1 -1
  223. package/test/dist/router-generator.test.d.ts.map +1 -0
  224. package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
  225. package/test/dist/rpc-context-map-streaming.test.d.ts.map +1 -0
  226. package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
  227. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  228. package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
  229. package/test/dist/sql-store.test.d.ts.map +1 -0
  230. package/test/dist/workflow-engine-cosmos.test.d.ts.map +1 -0
  231. package/test/dist/workflow-engine-sqlite.test.d.ts.map +1 -0
  232. package/test/fixtures.ts +16 -9
  233. package/test/layerUtils.test.ts +2 -2
  234. package/test/query.test.ts +1130 -41
  235. package/test/rawQuery.test.ts +340 -22
  236. package/test/repository-ext.test.ts +426 -0
  237. package/test/requires.test.ts +10 -5
  238. package/test/router-generator.test.ts +187 -0
  239. package/test/routing-interruptibility.test.ts +66 -0
  240. package/test/rpc-context-map-streaming.test.ts +262 -0
  241. package/test/rpc-e2e-invalidation.test.ts +418 -0
  242. package/test/rpc-multi-middleware.test.ts +85 -10
  243. package/test/rpc-stream-fullstack.test.ts +304 -0
  244. package/test/sql-store.test.ts +1711 -0
  245. package/test/validateSample.test.ts +26 -14
  246. package/test/workflow-engine-cosmos.test.ts +345 -0
  247. package/test/workflow-engine-sqlite.test.ts +297 -0
  248. package/tsconfig.examples.json +1 -1
  249. package/tsconfig.json +9 -2
  250. package/tsconfig.src.json +35 -35
  251. package/tsconfig.test.json +2 -2
  252. package/dist/Emailer/service.d.ts +0 -55
  253. package/dist/Emailer/service.d.ts.map +0 -1
  254. package/dist/Emailer/service.js +0 -6
  255. package/dist/Emailer.d.ts +0 -2
  256. package/dist/Emailer.d.ts.map +0 -1
  257. package/dist/Emailer.js +0 -2
  258. package/dist/Model/Repository/ext.d.ts +0 -41
  259. package/dist/Model/Repository/ext.d.ts.map +0 -1
  260. package/dist/Model/Repository/ext.js +0 -65
  261. package/dist/Model/Repository/internal/internal.d.ts +0 -59
  262. package/dist/Model/Repository/internal/internal.d.ts.map +0 -1
  263. package/dist/Model/Repository/internal/internal.js +0 -316
  264. package/dist/Model/Repository/legacy.d.ts +0 -19
  265. package/dist/Model/Repository/legacy.d.ts.map +0 -1
  266. package/dist/Model/Repository/legacy.js +0 -2
  267. package/dist/Model/Repository/makeRepo.d.ts +0 -49
  268. package/dist/Model/Repository/makeRepo.d.ts.map +0 -1
  269. package/dist/Model/Repository/makeRepo.js +0 -24
  270. package/dist/Model/Repository/service.d.ts +0 -89
  271. package/dist/Model/Repository/service.d.ts.map +0 -1
  272. package/dist/Model/Repository/service.js +0 -2
  273. package/dist/Model/Repository/validation.d.ts +0 -42
  274. package/dist/Model/Repository/validation.d.ts.map +0 -1
  275. package/dist/Model/Repository/validation.js +0 -32
  276. package/dist/Model/Repository.d.ts +0 -6
  277. package/dist/Model/Repository.d.ts.map +0 -1
  278. package/dist/Model/Repository.js +0 -6
  279. package/dist/Model/dsl.d.ts +0 -32
  280. package/dist/Model/dsl.d.ts.map +0 -1
  281. package/dist/Model/dsl.js +0 -44
  282. package/dist/Model/filter/filterApi.d.ts +0 -30
  283. package/dist/Model/filter/filterApi.d.ts.map +0 -1
  284. package/dist/Model/filter/filterApi.js +0 -2
  285. package/dist/Model/filter/types/errors.d.ts +0 -29
  286. package/dist/Model/filter/types/errors.d.ts.map +0 -1
  287. package/dist/Model/filter/types/errors.js +0 -2
  288. package/dist/Model/filter/types/fields.d.ts +0 -15
  289. package/dist/Model/filter/types/fields.d.ts.map +0 -1
  290. package/dist/Model/filter/types/fields.js +0 -2
  291. package/dist/Model/filter/types/path/common.d.ts +0 -316
  292. package/dist/Model/filter/types/path/common.d.ts.map +0 -1
  293. package/dist/Model/filter/types/path/common.js +0 -2
  294. package/dist/Model/filter/types/path/eager.d.ts +0 -95
  295. package/dist/Model/filter/types/path/eager.d.ts.map +0 -1
  296. package/dist/Model/filter/types/path/eager.js +0 -31
  297. package/dist/Model/filter/types/path/index.d.ts +0 -4
  298. package/dist/Model/filter/types/path/index.d.ts.map +0 -1
  299. package/dist/Model/filter/types/path/index.js +0 -3
  300. package/dist/Model/filter/types/utils.d.ts +0 -79
  301. package/dist/Model/filter/types/utils.d.ts.map +0 -1
  302. package/dist/Model/filter/types/utils.js +0 -2
  303. package/dist/Model/filter/types/validator.d.ts +0 -30
  304. package/dist/Model/filter/types/validator.d.ts.map +0 -1
  305. package/dist/Model/filter/types/validator.js +0 -2
  306. package/dist/Model/filter/types.d.ts +0 -5
  307. package/dist/Model/filter/types.d.ts.map +0 -1
  308. package/dist/Model/filter/types.js +0 -7
  309. package/dist/Model/query/dsl.d.ts +0 -248
  310. package/dist/Model/query/dsl.d.ts.map +0 -1
  311. package/dist/Model/query/dsl.js +0 -104
  312. package/dist/Model/query/new-kid-interpreter.d.ts +0 -28
  313. package/dist/Model/query/new-kid-interpreter.d.ts.map +0 -1
  314. package/dist/Model/query/new-kid-interpreter.js +0 -165
  315. package/dist/Model/query.d.ts +0 -15
  316. package/dist/Model/query.d.ts.map +0 -1
  317. package/dist/Model/query.js +0 -3
  318. package/dist/Model.d.ts +0 -4
  319. package/dist/Model.d.ts.map +0 -1
  320. package/dist/Model.js +0 -4
  321. package/dist/Operations.d.ts +0 -55
  322. package/dist/Operations.d.ts.map +0 -1
  323. package/dist/Operations.js +0 -102
  324. package/dist/OperationsRepo.d.ts +0 -41
  325. package/dist/OperationsRepo.d.ts.map +0 -1
  326. package/dist/OperationsRepo.js +0 -14
  327. package/dist/QueueMaker/SQLQueue.d.ts +0 -16
  328. package/dist/QueueMaker/SQLQueue.d.ts.map +0 -1
  329. package/dist/QueueMaker/SQLQueue.js +0 -130
  330. package/dist/QueueMaker/memQueue.d.ts +0 -11
  331. package/dist/QueueMaker/memQueue.d.ts.map +0 -1
  332. package/dist/QueueMaker/memQueue.js +0 -76
  333. package/dist/QueueMaker/sbqueue.d.ts +0 -12
  334. package/dist/QueueMaker/sbqueue.d.ts.map +0 -1
  335. package/dist/QueueMaker/sbqueue.js +0 -91
  336. package/dist/QueueMaker/service.d.ts +0 -11
  337. package/dist/QueueMaker/service.d.ts.map +0 -1
  338. package/dist/QueueMaker/service.js +0 -4
  339. package/dist/RequestContext.d.ts +0 -63
  340. package/dist/RequestContext.d.ts.map +0 -1
  341. package/dist/RequestContext.js +0 -49
  342. package/dist/RequestFiberSet.d.ts +0 -36
  343. package/dist/RequestFiberSet.d.ts.map +0 -1
  344. package/dist/RequestFiberSet.js +0 -78
  345. package/dist/Store/ContextMapContainer.d.ts +0 -14
  346. package/dist/Store/ContextMapContainer.d.ts.map +0 -1
  347. package/dist/Store/ContextMapContainer.js +0 -16
  348. package/dist/Store/service.d.ts +0 -108
  349. package/dist/Store/service.d.ts.map +0 -1
  350. package/dist/Store/service.js +0 -71
  351. package/dist/Store.d.ts +0 -2
  352. package/dist/Store.d.ts.map +0 -1
  353. package/dist/Store.js +0 -2
  354. package/dist/adapters/SQL/Model.d.ts.map +0 -1
  355. package/dist/adapters/SQL/Model.js +0 -478
  356. package/dist/adapters/SQL.d.ts.map +0 -1
  357. package/dist/adapters/ServiceBus.d.ts +0 -58
  358. package/dist/adapters/ServiceBus.d.ts.map +0 -1
  359. package/dist/adapters/ServiceBus.js +0 -99
  360. package/dist/adapters/cosmos-client.d.ts.map +0 -1
  361. package/dist/adapters/cosmos-client.js +0 -9
  362. package/dist/adapters/index.d.ts +0 -2
  363. package/dist/adapters/index.d.ts.map +0 -1
  364. package/dist/adapters/index.js +0 -2
  365. package/dist/adapters/logger.d.ts +0 -9
  366. package/dist/adapters/logger.d.ts.map +0 -1
  367. package/dist/adapters/logger.js +0 -3
  368. package/dist/adapters/memQueue.d.ts +0 -13
  369. package/dist/adapters/memQueue.d.ts.map +0 -1
  370. package/dist/adapters/memQueue.js +0 -20
  371. package/dist/adapters/mongo-client.d.ts.map +0 -1
  372. package/dist/adapters/mongo-client.js +0 -13
  373. package/dist/adapters/redis-client.d.ts.map +0 -1
  374. package/dist/adapters/redis-client.js +0 -94
  375. package/dist/api/ContextProvider.d.ts +0 -31
  376. package/dist/api/ContextProvider.d.ts.map +0 -1
  377. package/dist/api/ContextProvider.js +0 -38
  378. package/dist/api/codec.d.ts.map +0 -1
  379. package/dist/api/codec.js +0 -5
  380. package/dist/api/internal/RequestContextMiddleware.d.ts +0 -5
  381. package/dist/api/internal/RequestContextMiddleware.d.ts.map +0 -1
  382. package/dist/api/internal/RequestContextMiddleware.js +0 -35
  383. package/dist/api/internal/auth.d.ts +0 -15
  384. package/dist/api/internal/auth.d.ts.map +0 -1
  385. package/dist/api/internal/auth.js +0 -47
  386. package/dist/api/internal/events.d.ts +0 -9
  387. package/dist/api/internal/events.d.ts.map +0 -1
  388. package/dist/api/internal/events.js +0 -42
  389. package/dist/api/internal/health.d.ts.map +0 -1
  390. package/dist/api/internal/health.js +0 -5
  391. package/dist/api/layerUtils.d.ts.map +0 -1
  392. package/dist/api/layerUtils.js +0 -16
  393. package/dist/api/middlewares.d.ts.map +0 -1
  394. package/dist/api/reportError.d.ts.map +0 -1
  395. package/dist/api/reportError.js +0 -27
  396. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +0 -1
  397. package/dist/api/routing/middleware/middleware.d.ts +0 -9
  398. package/dist/api/routing/middleware/middleware.d.ts.map +0 -1
  399. package/dist/api/routing/middleware/middleware.js +0 -92
  400. package/dist/api/routing/middleware.d.ts.map +0 -1
  401. package/dist/api/routing/schema/jwt.d.ts.map +0 -1
  402. package/dist/api/routing/schema/jwt.js +0 -12
  403. package/dist/api/routing/tsort.d.ts.map +0 -1
  404. package/dist/api/routing/tsort.js +0 -51
  405. package/dist/api/routing/utils.d.ts.map +0 -1
  406. package/dist/api/routing/utils.js +0 -44
  407. package/dist/api/routing.d.ts +0 -138
  408. package/dist/api/routing.d.ts.map +0 -1
  409. package/dist/api/routing.js +0 -166
  410. package/dist/api/setupRequest.d.ts +0 -12
  411. package/dist/api/setupRequest.d.ts.map +0 -1
  412. package/dist/api/setupRequest.js +0 -44
  413. package/dist/api/util.d.ts.map +0 -1
  414. package/dist/api/util.js +0 -14
  415. package/eslint.config.mjs +0 -24
  416. package/src/Emailer/service.ts +0 -52
  417. package/src/Emailer.ts +0 -1
  418. package/src/Model/Repository/ext.ts +0 -283
  419. package/src/Model/Repository/internal/internal.ts +0 -577
  420. package/src/Model/Repository/legacy.ts +0 -27
  421. package/src/Model/Repository/makeRepo.ts +0 -139
  422. package/src/Model/Repository/service.ts +0 -627
  423. package/src/Model/Repository/validation.ts +0 -31
  424. package/src/Model/Repository.ts +0 -5
  425. package/src/Model/dsl.ts +0 -128
  426. package/src/Model/filter/filterApi.ts +0 -60
  427. package/src/Model/filter/types/errors.ts +0 -47
  428. package/src/Model/filter/types/fields.ts +0 -50
  429. package/src/Model/filter/types/path/common.ts +0 -404
  430. package/src/Model/filter/types/path/eager.ts +0 -298
  431. package/src/Model/filter/types/path/index.ts +0 -4
  432. package/src/Model/filter/types/utils.ts +0 -128
  433. package/src/Model/filter/types/validator.ts +0 -46
  434. package/src/Model/filter/types.ts +0 -6
  435. package/src/Model/query/dsl.ts +0 -2110
  436. package/src/Model/query/new-kid-interpreter.ts +0 -210
  437. package/src/Model/query.ts +0 -13
  438. package/src/Model.ts +0 -3
  439. package/src/Operations.ts +0 -235
  440. package/src/OperationsRepo.ts +0 -16
  441. package/src/QueueMaker/SQLQueue.ts +0 -189
  442. package/src/QueueMaker/memQueue.ts +0 -130
  443. package/src/QueueMaker/sbqueue.ts +0 -137
  444. package/src/QueueMaker/service.ts +0 -17
  445. package/src/RequestContext.ts +0 -63
  446. package/src/RequestFiberSet.ts +0 -105
  447. package/src/Store/ContextMapContainer.ts +0 -20
  448. package/src/Store/index.test.ts.bak +0 -112
  449. package/src/Store/service.ts +0 -184
  450. package/src/Store.ts +0 -1
  451. package/src/adapters/SQL.ts +0 -1
  452. package/src/adapters/ServiceBus.ts +0 -209
  453. package/src/adapters/index.ts +0 -0
  454. package/src/adapters/logger.ts +0 -3
  455. package/src/adapters/memQueue.ts +0 -21
  456. package/src/api/internal/auth.ts +0 -68
  457. package/src/api/middlewares.ts +0 -10
  458. package/src/api/routing/middleware/middleware.ts +0 -128
  459. package/src/api/routing/middleware.ts +0 -6
  460. package/src/api/routing.ts +0 -598
  461. package/src/api/setupRequest.ts +0 -84
  462. package/tsconfig.json.bak +0 -12
  463. /package/dist/{adapters/SQL.d.ts → SQL.d.ts} +0 -0
  464. /package/dist/{api/codec.d.ts → codec.d.ts} +0 -0
  465. /package/dist/{api/internal → internal}/health.d.ts +0 -0
  466. /package/dist/{api/middlewares.d.ts → middlewares.d.ts} +0 -0
  467. /package/dist/{api/routing → routing}/schema/jwt.d.ts +0 -0
  468. /package/dist/{api/routing → routing}/tsort.d.ts +0 -0
  469. /package/dist/{api/util.d.ts → util.d.ts} +0 -0
  470. /package/src/{api/codec.ts → codec.ts} +0 -0
  471. /package/src/{api/internal → internal}/health.ts +0 -0
  472. /package/src/{api/routing → routing}/tsort.ts +0 -0
  473. /package/src/{api/util.ts → util.ts} +0 -0
@@ -1,184 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import type { UniqueKey } from "@azure/cosmos"
3
- import { Effect, type NonEmptyReadonlyArray, type Option, type Redacted, ServiceMap } from "effect-app"
4
- import type { OptimisticConcurrencyException } from "../errors.js"
5
- import type { FilterResult } from "../Model/filter/filterApi.js"
6
- import type { FieldValues } from "../Model/filter/types.js"
7
- import type { FieldPath } from "../Model/filter/types/path/index.js"
8
- import { type RawQuery } from "../Model/query.js"
9
-
10
- export interface StoreConfig<E> {
11
- partitionValue: (e?: E) => string
12
- /**
13
- * Primarily used for testing, creating namespaces in the database to separate data e.g to run multiple tests in isolation within the same database
14
- * currently only supported in disk/memory. CosmosDB is TODO.
15
- */
16
- allowNamespace?: (namespace: string) => boolean
17
- /**
18
- * just in time migrations, supported by the database driver, supporting queries, for simple default values
19
- */
20
- defaultValues?: Partial<E>
21
-
22
- /**
23
- * How many items can be processed in one batch at a time.
24
- * Defaults to 100 for CosmosDB.
25
- */
26
- maxBulkSize?: number
27
-
28
- /**
29
- * Unique indexes, mainly for CosmosDB
30
- */
31
- uniqueKeys?: UniqueKey[]
32
- }
33
-
34
- export type SupportedValues = string | boolean | number | null
35
- export type SupportedValues2 = string | boolean | number
36
-
37
- // default is eq
38
- export type Where =
39
- | { key: string; t?: "eq" | "not-eq"; value: SupportedValues }
40
- | { key: string; t: "gt" | "lt" | "gte" | "lte"; value: SupportedValues2 }
41
- | {
42
- key: string
43
- t: "contains" | "starts-with" | "ends-with" | "not-contains" | "not-starts-with" | "not-ends-with"
44
- value: string
45
- }
46
- | { key: string; t: "includes" | "not-includes"; value: string }
47
- | {
48
- key: string
49
- t: "in" | "not-in"
50
- value: readonly (SupportedValues)[]
51
- }
52
-
53
- export type Filter = readonly FilterResult[]
54
-
55
- export interface O<TFieldValues extends FieldValues> {
56
- key: FieldPath<TFieldValues>
57
- direction: "ASC" | "DESC"
58
- }
59
-
60
- export interface FilterArgs<Encoded extends FieldValues, U extends keyof Encoded = never> {
61
- t: Encoded
62
- filter?: Filter | undefined
63
- select?: NonEmptyReadonlyArray<U | { key: string; subKeys: readonly string[] }> | undefined
64
- order?: NonEmptyReadonlyArray<O<NoInfer<Encoded>>>
65
- limit?: number | undefined
66
- skip?: number | undefined
67
- }
68
-
69
- export type FilterFunc<Encoded extends FieldValues> = <U extends keyof Encoded = never>(
70
- args: FilterArgs<Encoded, U>
71
- ) => Effect.Effect<(U extends undefined ? Encoded : Pick<Encoded, U>)[]>
72
-
73
- export interface Store<
74
- IdKey extends keyof Encoded,
75
- Encoded extends FieldValues,
76
- PM extends PersistenceModelType<Encoded> = PersistenceModelType<Encoded>
77
- > {
78
- all: Effect.Effect<PM[]>
79
- filter: FilterFunc<Encoded>
80
- find: (id: Encoded[IdKey]) => Effect.Effect<Option.Option<PM>>
81
- set: (e: PM) => Effect.Effect<PM, OptimisticConcurrencyException>
82
- batchSet: (
83
- items: NonEmptyReadonlyArray<PM>
84
- ) => Effect.Effect<NonEmptyReadonlyArray<PM>, OptimisticConcurrencyException>
85
- bulkSet: (
86
- items: NonEmptyReadonlyArray<PM>
87
- ) => Effect.Effect<NonEmptyReadonlyArray<PM>, OptimisticConcurrencyException>
88
- batchRemove: (ids: NonEmptyReadonlyArray<Encoded[IdKey]>, partitionKey?: string) => Effect.Effect<void>
89
- queryRaw: <Out>(query: RawQuery<Encoded, Out>) => Effect.Effect<readonly Out[]>
90
- }
91
-
92
- export class StoreMaker extends ServiceMap.Opaque<StoreMaker, {
93
- make: <IdKey extends keyof Encoded, Encoded extends FieldValues, R = never, E = never>(
94
- name: string,
95
- idKey: IdKey,
96
- seed?: Effect.Effect<Iterable<Encoded>, E, R>,
97
- config?: StoreConfig<Encoded>
98
- ) => Effect.Effect<Store<IdKey, Encoded>, E, R>
99
- }>()("effect-app/StoreMaker") {
100
- }
101
-
102
- export const makeContextMap = () => {
103
- const etags = new Map<string, string>()
104
- const getEtag = (id: string) => etags.get(id)
105
- const setEtag = (id: string, eTag: string | undefined) => {
106
- if (eTag === undefined) {
107
- etags.delete(id)
108
- } else {
109
- etags.set(id, eTag)
110
- }
111
- }
112
-
113
- // const parsedCache = new Map<
114
- // Parser<any, any, any>,
115
- // Map<unknown, These.These<unknown, unknown>>
116
- // >()
117
-
118
- // const parserCache = new Map<
119
- // Parser<any, any, any>,
120
- // (i: any) => These.These<any, any>
121
- // >()
122
-
123
- // const setAndReturn = <I, E, A>(
124
- // p: Parser<I, E, A>,
125
- // np: (i: I) => These.These<E, A>
126
- // ) => {
127
- // parserCache.set(p, np)
128
- // return np
129
- // }
130
-
131
- // const parserEnv: ParserEnv = {
132
- // // TODO: lax: true would turn off refinement checks, may help on large payloads
133
- // // but of course removes confirming of validation rules (which may be okay for a database owned by the app, as we write safely)
134
- // lax: false,
135
- // cache: {
136
- // getOrSetParser: (p) => parserCache.get(p) ?? setAndReturn(p, (i) => parserEnv.cache!.getOrSet(i, p)),
137
- // getOrSetParsers: (parsers) => {
138
- // return Object.entries(parsers).reduce((prev, [k, v]) => {
139
- // prev[k] = parserEnv.cache!.getOrSetParser(v)
140
- // return prev
141
- // }, {} as any)
142
- // },
143
- // getOrSet: (i, parse): any => {
144
- // const c = parsedCache.get(parse)
145
- // if (c) {
146
- // const f = c.get(i)
147
- // if (f) {
148
- // // console.log("$$$ cache hit", i)
149
- // return f
150
- // } else {
151
- // const nf = parse(i, parserEnv)
152
- // c.set(i, nf)
153
- // return nf
154
- // }
155
- // } else {
156
- // const nf = parse(i, parserEnv)
157
- // parsedCache.set(parse, new Map([[i, nf]]))
158
- // return nf
159
- // }
160
- // }
161
- // }
162
- // }
163
-
164
- return {
165
- get: getEtag,
166
- set: setEtag
167
- // parserEnv
168
- }
169
- }
170
-
171
- const makeMap = Effect.sync(() => makeContextMap())
172
-
173
- export class ContextMap extends ServiceMap.Opaque<ContextMap>()("effect-app/ContextMap", { make: makeMap }) {
174
- }
175
-
176
- export type PersistenceModelType<Encoded extends object> = Encoded & {
177
- _etag?: string | undefined
178
- }
179
-
180
- export interface StorageConfig {
181
- url: Redacted.Redacted<string>
182
- prefix: string
183
- dbName: string
184
- }
package/src/Store.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./Store/service.js"
@@ -1 +0,0 @@
1
- export * as SQLModel from "./SQL/Model.js"
@@ -1,209 +0,0 @@
1
- /* eslint-disable @typescript-eslint/prefer-promise-reject-errors */
2
- import { type OperationOptionsBase, type ProcessErrorArgs, ServiceBusClient, type ServiceBusMessage, type ServiceBusMessageBatch, type ServiceBusReceivedMessage, type ServiceBusReceiver } from "@azure/service-bus"
3
- import { Cause, Effect, Exit, FiberSet, Layer, type Scope, ServiceMap } from "effect-app"
4
- import { InfraLogger } from "../logger.js"
5
-
6
- const withSpanAndLog = (name: string) => <A, E, R>(self: Effect.Effect<A, E, R>) =>
7
- Effect.logInfo(name).pipe(
8
- Effect.andThen(self),
9
- Effect.tap(Effect.logInfo(name + " done")),
10
- Effect.withLogSpan(name),
11
- Effect.withSpan(name)
12
- )
13
-
14
- function makeClient(url: string) {
15
- return Effect.acquireRelease(
16
- Effect.sync(() => new ServiceBusClient(url)).pipe(withSpanAndLog("ServiceBus.client.create")),
17
- (client) => Effect.promise(() => client.close()).pipe(withSpanAndLog("ServiceBus.client.close"))
18
- )
19
- }
20
-
21
- export class ServiceBusClientTag
22
- extends ServiceMap.Opaque<ServiceBusClientTag, ServiceBusClient>()("@services/Client", { make: makeClient })
23
- {
24
- static readonly layer = (url: string) => this.toLayer(this.make(url))
25
- }
26
-
27
- function makeSender_(queueName: string) {
28
- return Effect.gen(function*() {
29
- const serviceBusClient = yield* ServiceBusClientTag
30
-
31
- return yield* Effect.acquireRelease(
32
- Effect.sync(() => serviceBusClient.createSender(queueName)).pipe(
33
- withSpanAndLog(`ServiceBus.sender.create ${queueName}`)
34
- ),
35
- (sender) => Effect.promise(() => sender.close()).pipe(withSpanAndLog(`ServiceBus.sender.close ${queueName}`))
36
- )
37
- })
38
- }
39
-
40
- const makeSender = (name: string) =>
41
- Effect.gen(function*() {
42
- const sender = yield* makeSender_(name)
43
- const sendMessages = Effect.fnUntraced(function*(
44
- messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch,
45
- options?: Omit<OperationOptionsBase, "abortSignal">
46
- ) {
47
- return yield* Effect.promise((abortSignal) => sender.sendMessages(messages, { ...options, abortSignal }))
48
- })
49
-
50
- return { name, sendMessages }
51
- })
52
-
53
- export class Sender extends ServiceMap.Opaque<Sender, {
54
- name: string
55
- sendMessages: (
56
- messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch,
57
- options?: Omit<OperationOptionsBase, "abortSignal">
58
- ) => Effect.Effect<void, never, never>
59
- }>()("Sender", { make: makeSender }) {
60
- static readonly layer = (name: string) => this.toLayer(this.make(name))
61
- }
62
-
63
- export const SenderTag = <Id>() => <Key extends string>(queueName: Key) => {
64
- const tag = ServiceMap.Service<Id, Sender>(`ServiceBus.Sender.${queueName}`)
65
-
66
- return Object.assign(tag, {
67
- layer: Layer.effect(
68
- tag,
69
- Sender.make(queueName).pipe(Effect.map(Sender.of))
70
- )
71
- })
72
- }
73
-
74
- const makeReceiver = (name: string) =>
75
- Effect.gen(function*() {
76
- const serviceBusClient = yield* ServiceBusClientTag
77
-
78
- const makeReceiver = Effect.fnUntraced(
79
- function*(queueName: string, waitTillEmpty: Effect.Effect<void>, sessionId?: string) {
80
- return yield* Effect.acquireRelease(
81
- (sessionId
82
- ? Effect.promise(() => serviceBusClient.acceptSession(queueName, sessionId))
83
- : Effect.sync(() => serviceBusClient.createReceiver(queueName)))
84
- .pipe(withSpanAndLog(`ServiceBus.receiver.create ${queueName}.${sessionId}`)),
85
- (r) =>
86
- waitTillEmpty.pipe(
87
- withSpanAndLog(`ServiceBus.receiver.waitTillEmpty ${queueName}.${sessionId}`),
88
- Effect.andThen(
89
- Effect.promise(() => r.close()).pipe(
90
- withSpanAndLog(`ServiceBus.receiver.close ${queueName}.${sessionId}`)
91
- )
92
- ),
93
- withSpanAndLog(`ServiceBus.receiver.release ${queueName}.${sessionId}`)
94
- )
95
- )
96
- }
97
- )
98
-
99
- const make = (waitTillEmpty: Effect.Effect<void>) => makeReceiver(name, waitTillEmpty)
100
-
101
- const makeSession = (sessionId: string, waitTillEmpty: Effect.Effect<void>) =>
102
- makeReceiver(name, waitTillEmpty, sessionId)
103
-
104
- return {
105
- name,
106
- make,
107
- makeSession,
108
- subscribe: Effect.fnUntraced(function*<RMsg, RErr>(hndlr: MessageHandlers<RMsg, RErr>, sessionId?: string) {
109
- const fs = yield* FiberSet.make()
110
- const fr = yield* FiberSet.runtime(fs)<RMsg | RErr>()
111
- const wait = Effect
112
- .gen(function*() {
113
- if ((yield* FiberSet.size(fs)) > 0) {
114
- yield* InfraLogger.logDebug("Waiting ServiceBusFiberSet to be empty: " + (yield* FiberSet.size(fs)))
115
- }
116
- while ((yield* FiberSet.size(fs)) > 0) yield* Effect.sleep("250 millis")
117
- })
118
- const r = yield* sessionId
119
- ? makeSession(
120
- sessionId,
121
- wait
122
- )
123
- : make(wait)
124
-
125
- const runEffect = <E>(effect: Effect.Effect<void, E, RMsg | RErr>) =>
126
- new Promise<void>((resolve, reject) =>
127
- fr(effect)
128
- .addObserver((exit) => {
129
- if (Exit.isSuccess(exit)) {
130
- resolve(exit.value)
131
- } else {
132
- // disable @typescript-eslint/prefer-promise-reject-errors
133
- reject(Cause.pretty(exit.cause))
134
- }
135
- })
136
- )
137
-
138
- yield* Effect.acquireRelease(
139
- Effect
140
- .sync(() => {
141
- const s = r
142
- .subscribe({
143
- processError: (err) =>
144
- runEffect(
145
- hndlr
146
- .processError(err)
147
- .pipe(
148
- Effect.catchCause((cause) => Effect.logError(`ServiceBus Error ${sessionId}`, cause))
149
- )
150
- ),
151
- processMessage: (msg) => runEffect(hndlr.processMessage(msg))
152
- // DO NOT CATCH ERRORS here as they should return to the queue!
153
- })
154
- return { close: Effect.promise(() => s.close()) }
155
- })
156
- .pipe(withSpanAndLog(`ServiceBus.subscription.create ${sessionId}`)),
157
- (subscription) =>
158
- subscription.close.pipe(
159
- withSpanAndLog(`ServiceBus.subscription.close ${sessionId}`)
160
- )
161
- ) as Effect.Effect<void, never, Scope.Scope> // wth is going on here
162
- })
163
- }
164
- })
165
-
166
- export class Receiver extends ServiceMap.Opaque<Receiver, {
167
- name: string
168
- make: (waitTillEmpty: Effect.Effect<void>) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>
169
- makeSession: (
170
- sessionId: string,
171
- waitTillEmpty: Effect.Effect<void>
172
- ) => Effect.Effect<ServiceBusReceiver, never, Scope.Scope>
173
- subscribe<RMsg, RErr>(
174
- hndlr: MessageHandlers<RMsg, RErr>,
175
- sessionId?: string
176
- ): Effect.Effect<void, never, Scope.Scope | RMsg | RErr>
177
- }>()("Receiver") {
178
- static readonly make = makeReceiver
179
- static readonly layer = (name: string) => this.toLayer(makeReceiver(name))
180
- }
181
-
182
- export const ReceiverTag = <Id>() => <Key extends string>(queueName: Key) => {
183
- const tag = ServiceMap.Service<Id, Receiver>(`ServiceBus.Receiver.${queueName}`)
184
-
185
- return Object.assign(tag, {
186
- layer: Layer.effect(
187
- tag,
188
- makeReceiver(queueName).pipe(Effect.map(Receiver.of))
189
- )
190
- })
191
- }
192
-
193
- export const SenderReceiver = (queue: string, queueDrain?: string) =>
194
- Layer.mergeAll(Sender.layer(queue), Receiver.layer(queueDrain ?? queue))
195
-
196
- export interface MessageHandlers<RMsg, RErr> {
197
- /**
198
- * Handler that processes messages from service bus.
199
- *
200
- * @param message - A message received from Service Bus.
201
- */
202
- processMessage(message: ServiceBusReceivedMessage): Effect.Effect<void, never, RMsg>
203
- /**
204
- * Handler that processes errors that occur during receiving.
205
- * @param args - The error and additional context to indicate where
206
- * the error originated.
207
- */
208
- processError(args: ProcessErrorArgs): Effect.Effect<void, never, RErr>
209
- }
File without changes
@@ -1,3 +0,0 @@
1
- import { makeLog } from "effect-app/utils/logger"
2
-
3
- export const InfraLogger = makeLog("@effect-app/infra", "info")
@@ -1,21 +0,0 @@
1
- import { Effect, type Queue, ServiceMap } from "effect-app"
2
- import * as Q from "effect/Queue"
3
-
4
- const make = Effect
5
- .gen(function*() {
6
- const store = yield* Effect.sync(() => new Map<string, Queue.Queue<string>>())
7
-
8
- return {
9
- getOrCreateQueue: Effect.fnUntraced(function*(k: string) {
10
- const q = store.get(k)
11
- if (q) return q
12
- const newQ = yield* Q.unbounded<string>()
13
- store.set(k, newQ)
14
- return newQ
15
- })
16
- }
17
- })
18
-
19
- export class MemQueue extends ServiceMap.Opaque<MemQueue>()("effect-app/MemQueue", { make }) {
20
- static readonly Live = this.toLayer(this.make)
21
- }
@@ -1,68 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable unused-imports/no-unused-vars */
3
- import { Data, Effect } from "effect-app"
4
- import { HttpHeaders, HttpMiddleware, HttpServerRequest, HttpServerResponse } from "effect-app/http"
5
- import { auth, InsufficientScopeError, InvalidRequestError, InvalidTokenError, UnauthorizedError } from "express-oauth2-jwt-bearer"
6
-
7
- // // Authorization middleware. When used, the Access Token must
8
- // // exist and be verified against the Auth0 JSON Web Key Set.
9
-
10
- // type Errors = InsufficientScopeError | InvalidRequestError | InvalidTokenError | UnauthorizedError
11
- type Config = Parameters<typeof auth>[0]
12
- export const checkJWTI = (config: Config) => {
13
- const mw = auth(config)
14
- return Effect.fnUntraced(function*(headers: HttpHeaders.Headers) {
15
- return yield* Effect.callback<
16
- void,
17
- InsufficientScopeError | InvalidRequestError | InvalidTokenError | UnauthorizedError
18
- >(
19
- (resume) => {
20
- const next = (err?: unknown) => {
21
- if (!err) return resume(Effect.void)
22
- if (
23
- err instanceof InsufficientScopeError
24
- || err instanceof InvalidRequestError
25
- || err instanceof InvalidTokenError
26
- || err instanceof UnauthorizedError
27
- ) {
28
- return resume(Effect.fail(err))
29
- }
30
- return resume(Effect.die(err))
31
- }
32
- const r = { headers, query: {}, body: {}, is: () => false, method: "POST" } // is("urlencoded")
33
- try {
34
- mw(r as any, {} as any, next)
35
- } catch (e) {
36
- return resume(Effect.die(e))
37
- }
38
- }
39
- )
40
- })
41
- }
42
-
43
- export const checkJwt = (config: Config) => {
44
- const check = checkJWTI(config)
45
- return HttpMiddleware.make((app) =>
46
- Effect.gen(function*() {
47
- const req = yield* HttpServerRequest.HttpServerRequest
48
- const response = yield* check(req.headers).pipe(Effect.catch((e) =>
49
- HttpServerResponse.json({ message: e.message }, {
50
- status: e.status,
51
- headers: HttpHeaders.fromInput(e.headers)
52
- })
53
- ))
54
- if (response) {
55
- return response
56
- }
57
- return yield* app
58
- })
59
- )
60
- }
61
-
62
- export class JWTError extends Data.TaggedClass("JWTError")<{
63
- error:
64
- | InsufficientScopeError
65
- | InvalidRequestError
66
- | InvalidTokenError
67
- | UnauthorizedError
68
- }> {}
@@ -1,10 +0,0 @@
1
- /**
2
- * Mechanism for extendning behaviour of all handlers on the server.
3
- *
4
- * @since 1.0.0
5
- */
6
-
7
- export * from "./internal/auth.js"
8
- export * from "./internal/events.js"
9
- export * from "./internal/health.js"
10
- export * from "./internal/RequestContextMiddleware.js"
@@ -1,128 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { Cause, Config, Effect, Layer, Schema } from "effect"
3
- import { ConfigureInterruptibilityMiddleware, DevMode, DevModeMiddleware, LoggerMiddleware, RequestCacheMiddleware } from "effect-app/middleware"
4
- import { pretty } from "effect-app/utils"
5
- import { logError, reportError } from "../../../errorReporter.js"
6
- import { InfraLogger } from "../../../logger.js"
7
- import { determineMethod, isCommand } from "../utils.js"
8
-
9
- const logRequestError = logError("Request")
10
- const reportRequestError = reportError("Request")
11
-
12
- // TODO: do we need this as middleware or just as layer?
13
- export const DevModeLive = Layer.effect(
14
- DevMode,
15
- Effect.gen(function*() {
16
- const env = yield* Config.string("env").pipe(Config.withDefault("local-dev"))
17
- return env !== "prod"
18
- })
19
- )
20
-
21
- export const RequestCacheMiddlewareLive = Layer.succeed(
22
- RequestCacheMiddleware,
23
- (effect) => effect
24
- )
25
-
26
- const isOptimisticConcurrencyException = (input: unknown) =>
27
- typeof input === "object" && input !== null && "_tag" in input && input._tag === "OptimisticConcurrencyException"
28
-
29
- export const ConfigureInterruptibilityMiddlewareLive = Layer.effect(
30
- ConfigureInterruptibilityMiddleware,
31
- Effect.gen(function*() {
32
- const cache = new Map()
33
- const getCached = (key: string, schema: Schema.Top) => {
34
- const existing = cache.get(key)
35
- if (existing) return existing
36
- const n = determineMethod(key, schema)
37
- cache.set(key, n)
38
- return n
39
- }
40
- return (effect, { rpc }) => {
41
- const method = getCached(rpc._tag, rpc.payloadSchema)
42
-
43
- effect = isCommand(method)
44
- ? Effect.retry(Effect.uninterruptible(effect), { times: 1, while: isOptimisticConcurrencyException })
45
- : Effect.interruptible(effect)
46
-
47
- return effect
48
- }
49
- })
50
- )
51
-
52
- export const LoggerMiddlewareLive = Layer
53
- .effect(
54
- LoggerMiddleware,
55
- Effect.gen(function*() {
56
- const devMode = yield* DevMode
57
- return (effect, { headers, payload, rpc }) =>
58
- Effect
59
- .annotateCurrentSpan({
60
- "request.name": rpc._tag,
61
- "requestInput": typeof payload === "object" && payload !== null
62
- ? Object.entries(payload).reduce((prev, [key, value]: [string, unknown]) => {
63
- prev[key] = key === "password"
64
- ? "<redacted>"
65
- : typeof value === "string" || typeof value === "number" || typeof value === "boolean"
66
- ? typeof value === "string" && value.length > 256
67
- ? (value.substring(0, 253) + "...")
68
- : value
69
- : Array.isArray(value)
70
- ? `Array[${value.length}]`
71
- : value === null || value === undefined
72
- ? `${value}`
73
- : typeof value === "object" && value
74
- ? `Object[${Object.keys(value).length}]`
75
- : typeof value
76
- return prev
77
- }, {} as Record<string, string | number | boolean>)
78
- : payload
79
- })
80
- .pipe(
81
- Effect.andThen(effect),
82
- // TODO: support SchemaError if the error channel of the request allows it.. but who would want that?
83
- Effect.catch((_) => Schema.isSchemaError(_) ? Effect.die(_) : Effect.fail(_)),
84
- Effect.tapCause((cause) => Cause.hasFails(cause) ? logRequestError(cause) : Effect.void),
85
- Effect.tapCauseIf(Cause.hasDies, (cause) =>
86
- Effect
87
- .all([
88
- reportRequestError(cause, {
89
- action: rpc._tag
90
- }),
91
- InfraLogger
92
- .logError("Finished request", cause)
93
- .pipe(Effect.annotateLogs({
94
- action: rpc._tag,
95
- req: pretty(payload),
96
- headers: pretty(headers)
97
- // resHeaders: pretty(
98
- // Object
99
- // .entries(headers)
100
- // .reduce((prev, [key, value]) => {
101
- // prev[key] = value && typeof value === "string" ? snipString(value) : value
102
- // return prev
103
- // }, {} as Record<string, any>)
104
- // )
105
- }))
106
- ])),
107
- devMode ? (_) => _ : Effect.catchDefect(() => Effect.die("Internal Server Error"))
108
- )
109
- })
110
- )
111
- .pipe(Layer.provide(DevModeLive))
112
-
113
- export const DevModeMiddlewareLive = Layer
114
- .effect(
115
- DevModeMiddleware,
116
- Effect.gen(function*() {
117
- const devMode = yield* DevMode
118
- return (effect) => Effect.provideService(effect, DevMode, devMode)
119
- })
120
- )
121
- .pipe(Layer.provide(DevModeLive))
122
-
123
- export const DefaultGenericMiddlewaresLive = Layer.mergeAll(
124
- RequestCacheMiddlewareLive,
125
- ConfigureInterruptibilityMiddlewareLive,
126
- LoggerMiddlewareLive,
127
- DevModeMiddlewareLive
128
- )
@@ -1,6 +0,0 @@
1
- // codegen:start {preset: barrel, include: ./middleware/*.ts, nodir: false }
2
- export * from "./middleware/middleware.js"
3
- export * from "./middleware/RouterMiddleware.js"
4
- // codegen:end
5
-
6
- export * as Middleware from "./middleware.js"