@effect-app/infra 4.0.0-beta.32 → 4.0.0-beta.321

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 (480) hide show
  1. package/CHANGELOG.md +2469 -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 +36 -15
  6. package/dist/ClusterCosmos.d.ts +70 -0
  7. package/dist/ClusterCosmos.d.ts.map +1 -0
  8. package/dist/ClusterCosmos.js +576 -0
  9. package/dist/ClusterServiceBus.d.ts +67 -0
  10. package/dist/ClusterServiceBus.d.ts.map +1 -0
  11. package/dist/ClusterServiceBus.js +84 -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 +16 -4
  33. package/dist/Store/Cosmos/query.d.ts.map +1 -1
  34. package/dist/Store/Cosmos/query.js +238 -42
  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 +392 -256
  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 +87 -42
  41. package/dist/Store/Memory.d.ts +7 -10
  42. package/dist/Store/Memory.d.ts.map +1 -1
  43. package/dist/Store/Memory.js +346 -76
  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 +257 -0
  47. package/dist/Store/SQL/query.d.ts +53 -0
  48. package/dist/Store/SQL/query.d.ts.map +1 -0
  49. package/dist/Store/SQL/query.js +656 -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 +478 -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 +71 -22
  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/jsonDocument.d.ts +13 -0
  60. package/dist/Store/jsonDocument.d.ts.map +1 -0
  61. package/dist/Store/jsonDocument.js +31 -0
  62. package/dist/Store/utils.d.ts +21 -2
  63. package/dist/Store/utils.d.ts.map +1 -1
  64. package/dist/Store/utils.js +253 -10
  65. package/dist/WorkflowEngineCosmos.d.ts +29 -0
  66. package/dist/WorkflowEngineCosmos.d.ts.map +1 -0
  67. package/dist/WorkflowEngineCosmos.js +542 -0
  68. package/dist/WorkflowEngineSqlite.d.ts +24 -0
  69. package/dist/WorkflowEngineSqlite.d.ts.map +1 -0
  70. package/dist/WorkflowEngineSqlite.js +550 -0
  71. package/dist/arbs.d.ts +6 -3
  72. package/dist/arbs.d.ts.map +1 -1
  73. package/dist/arbs.js +16 -4
  74. package/dist/codec.d.ts.map +1 -0
  75. package/dist/codec.js +5 -0
  76. package/dist/{adapters/cosmos-client.d.ts → cosmos-client.d.ts} +4 -2
  77. package/dist/cosmos-client.d.ts.map +1 -0
  78. package/dist/cosmos-client.js +11 -0
  79. package/dist/errorReporter.d.ts +6 -4
  80. package/dist/errorReporter.d.ts.map +1 -1
  81. package/dist/errorReporter.js +23 -27
  82. package/dist/fileUtil.d.ts +1 -1
  83. package/dist/fileUtil.d.ts.map +1 -1
  84. package/dist/fileUtil.js +2 -2
  85. package/dist/index.d.ts +2 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +3 -2
  88. package/dist/internal/RequestContextMiddleware.d.ts +5 -0
  89. package/dist/internal/RequestContextMiddleware.d.ts.map +1 -0
  90. package/dist/internal/RequestContextMiddleware.js +45 -0
  91. package/dist/internal/auth.d.ts +53 -0
  92. package/dist/internal/auth.d.ts.map +1 -0
  93. package/dist/internal/auth.js +180 -0
  94. package/dist/internal/events.d.ts +11 -0
  95. package/dist/internal/events.d.ts.map +1 -0
  96. package/dist/internal/events.js +49 -0
  97. package/dist/internal/health.d.ts.map +1 -0
  98. package/dist/internal/health.js +5 -0
  99. package/dist/{api/layerUtils.d.ts → layerUtils.d.ts} +14 -6
  100. package/dist/layerUtils.d.ts.map +1 -0
  101. package/dist/layerUtils.js +17 -0
  102. package/dist/logger/jsonLogger.d.ts +1 -1
  103. package/dist/logger/jsonLogger.d.ts.map +1 -1
  104. package/dist/logger/jsonLogger.js +5 -3
  105. package/dist/logger/logFmtLogger.d.ts +1 -1
  106. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  107. package/dist/logger/logFmtLogger.js +3 -3
  108. package/dist/logger/shared.d.ts +2 -2
  109. package/dist/logger/shared.d.ts.map +1 -1
  110. package/dist/logger/shared.js +6 -6
  111. package/dist/logger.d.ts +4 -4
  112. package/dist/logger.d.ts.map +1 -1
  113. package/dist/middlewares.d.ts.map +1 -0
  114. package/dist/{api/middlewares.js → middlewares.js} +1 -1
  115. package/dist/{adapters/mongo-client.d.ts → mongo-client.d.ts} +3 -2
  116. package/dist/mongo-client.d.ts.map +1 -0
  117. package/dist/mongo-client.js +15 -0
  118. package/dist/otel.d.ts +75 -0
  119. package/dist/otel.d.ts.map +1 -0
  120. package/dist/otel.js +84 -0
  121. package/dist/rateLimit.d.ts +11 -3
  122. package/dist/rateLimit.d.ts.map +1 -1
  123. package/dist/rateLimit.js +7 -12
  124. package/dist/{adapters/redis-client.d.ts → redis-client.d.ts} +5 -2
  125. package/dist/redis-client.d.ts.map +1 -0
  126. package/dist/redis-client.js +98 -0
  127. package/dist/{api/reportError.d.ts → reportError.d.ts} +1 -1
  128. package/dist/reportError.d.ts.map +1 -0
  129. package/dist/reportError.js +28 -0
  130. package/dist/{api/routing → routing}/middleware/RouterMiddleware.d.ts +4 -3
  131. package/dist/routing/middleware/RouterMiddleware.d.ts.map +1 -0
  132. package/dist/{api/routing → routing}/middleware/RouterMiddleware.js +1 -1
  133. package/dist/routing/middleware/middleware.d.ts +48 -0
  134. package/dist/routing/middleware/middleware.d.ts.map +1 -0
  135. package/dist/routing/middleware/middleware.js +152 -0
  136. package/dist/{api/routing → routing}/middleware.d.ts +0 -1
  137. package/dist/routing/middleware.d.ts.map +1 -0
  138. package/dist/{api/routing → routing}/middleware.js +1 -2
  139. package/dist/routing/schema/jwt.d.ts.map +1 -0
  140. package/dist/routing/schema/jwt.js +12 -0
  141. package/dist/routing/tsort.d.ts.map +1 -0
  142. package/dist/routing/tsort.js +51 -0
  143. package/dist/{api/routing → routing}/utils.d.ts +3 -3
  144. package/dist/routing/utils.d.ts.map +1 -0
  145. package/dist/routing/utils.js +45 -0
  146. package/dist/routing.d.ts +182 -0
  147. package/dist/routing.d.ts.map +1 -0
  148. package/dist/routing.js +256 -0
  149. package/dist/test.d.ts +2 -2
  150. package/dist/test.d.ts.map +1 -1
  151. package/dist/test.js +5 -5
  152. package/dist/util.d.ts.map +1 -0
  153. package/dist/util.js +14 -0
  154. package/docs/cluster-storage.md +26 -0
  155. package/docs/workflow-engine.md +262 -0
  156. package/examples/query.ts +49 -41
  157. package/package.json +38 -352
  158. package/src/CUPS.ts +54 -15
  159. package/src/ClusterCosmos.ts +1154 -0
  160. package/src/ClusterServiceBus.ts +244 -0
  161. package/src/{api/ContextProvider.ts → ContextProvider.ts} +20 -17
  162. package/src/Emailer/Sendgrid.ts +83 -60
  163. package/src/Emailer/fake.ts +4 -4
  164. package/src/MainFiberSet.ts +32 -13
  165. package/src/QueueMaker/errors.ts +3 -1
  166. package/src/{adapters/SQL → SQL}/Model.ts +42 -41
  167. package/src/SQL.ts +1 -0
  168. package/src/Store/Cosmos/query.ts +275 -55
  169. package/src/Store/Cosmos.ts +537 -367
  170. package/src/Store/Disk.ts +137 -74
  171. package/src/Store/Memory.ts +402 -113
  172. package/src/Store/SQL/Pg.ts +402 -0
  173. package/src/Store/SQL/query.ts +748 -0
  174. package/src/Store/SQL.ts +786 -0
  175. package/src/Store/codeFilter.ts +78 -28
  176. package/src/Store/index.ts +25 -10
  177. package/src/Store/jsonDocument.ts +43 -0
  178. package/src/Store/utils.ts +307 -30
  179. package/src/WorkflowEngineCosmos.ts +749 -0
  180. package/src/WorkflowEngineSqlite.ts +813 -0
  181. package/src/arbs.ts +20 -5
  182. package/src/{adapters/cosmos-client.ts → cosmos-client.ts} +5 -3
  183. package/src/errorReporter.ts +68 -78
  184. package/src/fileUtil.ts +1 -1
  185. package/src/index.ts +2 -1
  186. package/src/{api/internal → internal}/RequestContextMiddleware.ts +23 -6
  187. package/src/internal/auth.ts +272 -0
  188. package/src/{api/internal → internal}/events.ts +22 -13
  189. package/src/{api/layerUtils.ts → layerUtils.ts} +14 -10
  190. package/src/logger/jsonLogger.ts +5 -3
  191. package/src/logger/logFmtLogger.ts +3 -3
  192. package/src/logger/shared.ts +6 -5
  193. package/src/middlewares.ts +10 -0
  194. package/src/{adapters/mongo-client.ts → mongo-client.ts} +4 -2
  195. package/src/otel.ts +177 -0
  196. package/src/rateLimit.ts +35 -24
  197. package/src/{adapters/redis-client.ts → redis-client.ts} +7 -3
  198. package/src/{api/reportError.ts → reportError.ts} +3 -2
  199. package/src/{api/routing → routing}/middleware/RouterMiddleware.ts +5 -4
  200. package/src/routing/middleware/middleware.ts +196 -0
  201. package/src/routing/middleware.ts +4 -0
  202. package/src/{api/routing → routing}/schema/jwt.ts +2 -2
  203. package/src/{api/routing → routing}/utils.ts +2 -1
  204. package/src/routing.ts +823 -0
  205. package/src/test.ts +6 -6
  206. package/src/vitest.ts +1 -1
  207. package/test/auth.test.ts +101 -0
  208. package/test/cluster-cosmos.test.ts +612 -0
  209. package/test/cluster-servicebus.test.ts +180 -0
  210. package/test/cluster-sqlite.test.ts +207 -0
  211. package/test/contextProvider.test.ts +15 -12
  212. package/test/controller.test.ts +28 -32
  213. package/test/cosmos-query.test.ts +323 -0
  214. package/test/dist/auth.test.d.ts.map +1 -0
  215. package/test/dist/cluster-cosmos.test.d.ts.map +1 -0
  216. package/test/dist/cluster-servicebus.test.d.ts.map +1 -0
  217. package/test/dist/cluster-sqlite.test.d.ts.map +1 -0
  218. package/test/dist/contextProvider.test.d.ts.map +1 -1
  219. package/test/dist/controller.test.d.ts.map +1 -1
  220. package/test/dist/cosmos-query.test.d.ts.map +1 -0
  221. package/test/dist/fixtures.d.ts +29 -11
  222. package/test/dist/fixtures.d.ts.map +1 -1
  223. package/test/dist/fixtures.js +17 -10
  224. package/test/dist/json-lower.test.d.ts.map +1 -0
  225. package/test/dist/query.test.d.ts.map +1 -1
  226. package/test/dist/rawQuery.test.d.ts.map +1 -1
  227. package/test/dist/repository-ext.test.d.ts.map +1 -0
  228. package/test/dist/requires.test.d.ts.map +1 -1
  229. package/test/dist/router-generator.test.d.ts.map +1 -0
  230. package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
  231. package/test/dist/rpc-context-map-streaming.test.d.ts.map +1 -0
  232. package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
  233. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  234. package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
  235. package/test/dist/sql-store.test.d.ts.map +1 -0
  236. package/test/dist/workflow-engine-cosmos.test.d.ts.map +1 -0
  237. package/test/dist/workflow-engine-sqlite.test.d.ts.map +1 -0
  238. package/test/fixtures.ts +16 -9
  239. package/test/json-lower.test.ts +115 -0
  240. package/test/layerUtils.test.ts +2 -2
  241. package/test/query.test.ts +1384 -46
  242. package/test/rawQuery.test.ts +340 -22
  243. package/test/repository-ext.test.ts +456 -0
  244. package/test/requires.test.ts +10 -5
  245. package/test/router-generator.test.ts +187 -0
  246. package/test/routing-interruptibility.test.ts +66 -0
  247. package/test/rpc-context-map-streaming.test.ts +265 -0
  248. package/test/rpc-e2e-invalidation.test.ts +421 -0
  249. package/test/rpc-multi-middleware.test.ts +85 -10
  250. package/test/rpc-stream-fullstack.test.ts +307 -0
  251. package/test/sql-store.test.ts +1905 -0
  252. package/test/validateSample.test.ts +26 -14
  253. package/test/workflow-engine-cosmos.test.ts +345 -0
  254. package/test/workflow-engine-sqlite.test.ts +297 -0
  255. package/tsconfig.examples.json +1 -1
  256. package/tsconfig.json +9 -2
  257. package/tsconfig.src.json +35 -35
  258. package/tsconfig.test.json +2 -2
  259. package/dist/Emailer/service.d.ts +0 -55
  260. package/dist/Emailer/service.d.ts.map +0 -1
  261. package/dist/Emailer/service.js +0 -6
  262. package/dist/Emailer.d.ts +0 -2
  263. package/dist/Emailer.d.ts.map +0 -1
  264. package/dist/Emailer.js +0 -2
  265. package/dist/Model/Repository/ext.d.ts +0 -41
  266. package/dist/Model/Repository/ext.d.ts.map +0 -1
  267. package/dist/Model/Repository/ext.js +0 -65
  268. package/dist/Model/Repository/internal/internal.d.ts +0 -59
  269. package/dist/Model/Repository/internal/internal.d.ts.map +0 -1
  270. package/dist/Model/Repository/internal/internal.js +0 -316
  271. package/dist/Model/Repository/legacy.d.ts +0 -19
  272. package/dist/Model/Repository/legacy.d.ts.map +0 -1
  273. package/dist/Model/Repository/legacy.js +0 -2
  274. package/dist/Model/Repository/makeRepo.d.ts +0 -49
  275. package/dist/Model/Repository/makeRepo.d.ts.map +0 -1
  276. package/dist/Model/Repository/makeRepo.js +0 -24
  277. package/dist/Model/Repository/service.d.ts +0 -89
  278. package/dist/Model/Repository/service.d.ts.map +0 -1
  279. package/dist/Model/Repository/service.js +0 -2
  280. package/dist/Model/Repository/validation.d.ts +0 -42
  281. package/dist/Model/Repository/validation.d.ts.map +0 -1
  282. package/dist/Model/Repository/validation.js +0 -32
  283. package/dist/Model/Repository.d.ts +0 -6
  284. package/dist/Model/Repository.d.ts.map +0 -1
  285. package/dist/Model/Repository.js +0 -6
  286. package/dist/Model/dsl.d.ts +0 -32
  287. package/dist/Model/dsl.d.ts.map +0 -1
  288. package/dist/Model/dsl.js +0 -44
  289. package/dist/Model/filter/filterApi.d.ts +0 -30
  290. package/dist/Model/filter/filterApi.d.ts.map +0 -1
  291. package/dist/Model/filter/filterApi.js +0 -2
  292. package/dist/Model/filter/types/errors.d.ts +0 -29
  293. package/dist/Model/filter/types/errors.d.ts.map +0 -1
  294. package/dist/Model/filter/types/errors.js +0 -2
  295. package/dist/Model/filter/types/fields.d.ts +0 -15
  296. package/dist/Model/filter/types/fields.d.ts.map +0 -1
  297. package/dist/Model/filter/types/fields.js +0 -2
  298. package/dist/Model/filter/types/path/common.d.ts +0 -316
  299. package/dist/Model/filter/types/path/common.d.ts.map +0 -1
  300. package/dist/Model/filter/types/path/common.js +0 -2
  301. package/dist/Model/filter/types/path/eager.d.ts +0 -95
  302. package/dist/Model/filter/types/path/eager.d.ts.map +0 -1
  303. package/dist/Model/filter/types/path/eager.js +0 -31
  304. package/dist/Model/filter/types/path/index.d.ts +0 -4
  305. package/dist/Model/filter/types/path/index.d.ts.map +0 -1
  306. package/dist/Model/filter/types/path/index.js +0 -3
  307. package/dist/Model/filter/types/utils.d.ts +0 -79
  308. package/dist/Model/filter/types/utils.d.ts.map +0 -1
  309. package/dist/Model/filter/types/utils.js +0 -2
  310. package/dist/Model/filter/types/validator.d.ts +0 -30
  311. package/dist/Model/filter/types/validator.d.ts.map +0 -1
  312. package/dist/Model/filter/types/validator.js +0 -2
  313. package/dist/Model/filter/types.d.ts +0 -5
  314. package/dist/Model/filter/types.d.ts.map +0 -1
  315. package/dist/Model/filter/types.js +0 -7
  316. package/dist/Model/query/dsl.d.ts +0 -248
  317. package/dist/Model/query/dsl.d.ts.map +0 -1
  318. package/dist/Model/query/dsl.js +0 -104
  319. package/dist/Model/query/new-kid-interpreter.d.ts +0 -28
  320. package/dist/Model/query/new-kid-interpreter.d.ts.map +0 -1
  321. package/dist/Model/query/new-kid-interpreter.js +0 -165
  322. package/dist/Model/query.d.ts +0 -15
  323. package/dist/Model/query.d.ts.map +0 -1
  324. package/dist/Model/query.js +0 -3
  325. package/dist/Model.d.ts +0 -4
  326. package/dist/Model.d.ts.map +0 -1
  327. package/dist/Model.js +0 -4
  328. package/dist/Operations.d.ts +0 -55
  329. package/dist/Operations.d.ts.map +0 -1
  330. package/dist/Operations.js +0 -102
  331. package/dist/OperationsRepo.d.ts +0 -41
  332. package/dist/OperationsRepo.d.ts.map +0 -1
  333. package/dist/OperationsRepo.js +0 -14
  334. package/dist/QueueMaker/SQLQueue.d.ts +0 -16
  335. package/dist/QueueMaker/SQLQueue.d.ts.map +0 -1
  336. package/dist/QueueMaker/SQLQueue.js +0 -130
  337. package/dist/QueueMaker/memQueue.d.ts +0 -11
  338. package/dist/QueueMaker/memQueue.d.ts.map +0 -1
  339. package/dist/QueueMaker/memQueue.js +0 -76
  340. package/dist/QueueMaker/sbqueue.d.ts +0 -12
  341. package/dist/QueueMaker/sbqueue.d.ts.map +0 -1
  342. package/dist/QueueMaker/sbqueue.js +0 -91
  343. package/dist/QueueMaker/service.d.ts +0 -11
  344. package/dist/QueueMaker/service.d.ts.map +0 -1
  345. package/dist/QueueMaker/service.js +0 -4
  346. package/dist/RequestContext.d.ts +0 -63
  347. package/dist/RequestContext.d.ts.map +0 -1
  348. package/dist/RequestContext.js +0 -49
  349. package/dist/RequestFiberSet.d.ts +0 -36
  350. package/dist/RequestFiberSet.d.ts.map +0 -1
  351. package/dist/RequestFiberSet.js +0 -78
  352. package/dist/Store/ContextMapContainer.d.ts +0 -14
  353. package/dist/Store/ContextMapContainer.d.ts.map +0 -1
  354. package/dist/Store/ContextMapContainer.js +0 -16
  355. package/dist/Store/service.d.ts +0 -108
  356. package/dist/Store/service.d.ts.map +0 -1
  357. package/dist/Store/service.js +0 -71
  358. package/dist/Store.d.ts +0 -2
  359. package/dist/Store.d.ts.map +0 -1
  360. package/dist/Store.js +0 -2
  361. package/dist/adapters/SQL/Model.d.ts.map +0 -1
  362. package/dist/adapters/SQL/Model.js +0 -478
  363. package/dist/adapters/SQL.d.ts.map +0 -1
  364. package/dist/adapters/ServiceBus.d.ts +0 -58
  365. package/dist/adapters/ServiceBus.d.ts.map +0 -1
  366. package/dist/adapters/ServiceBus.js +0 -99
  367. package/dist/adapters/cosmos-client.d.ts.map +0 -1
  368. package/dist/adapters/cosmos-client.js +0 -9
  369. package/dist/adapters/index.d.ts +0 -2
  370. package/dist/adapters/index.d.ts.map +0 -1
  371. package/dist/adapters/index.js +0 -2
  372. package/dist/adapters/logger.d.ts +0 -9
  373. package/dist/adapters/logger.d.ts.map +0 -1
  374. package/dist/adapters/logger.js +0 -3
  375. package/dist/adapters/memQueue.d.ts +0 -13
  376. package/dist/adapters/memQueue.d.ts.map +0 -1
  377. package/dist/adapters/memQueue.js +0 -20
  378. package/dist/adapters/mongo-client.d.ts.map +0 -1
  379. package/dist/adapters/mongo-client.js +0 -13
  380. package/dist/adapters/redis-client.d.ts.map +0 -1
  381. package/dist/adapters/redis-client.js +0 -94
  382. package/dist/api/ContextProvider.d.ts +0 -31
  383. package/dist/api/ContextProvider.d.ts.map +0 -1
  384. package/dist/api/ContextProvider.js +0 -38
  385. package/dist/api/codec.d.ts.map +0 -1
  386. package/dist/api/codec.js +0 -5
  387. package/dist/api/internal/RequestContextMiddleware.d.ts +0 -5
  388. package/dist/api/internal/RequestContextMiddleware.d.ts.map +0 -1
  389. package/dist/api/internal/RequestContextMiddleware.js +0 -35
  390. package/dist/api/internal/auth.d.ts +0 -15
  391. package/dist/api/internal/auth.d.ts.map +0 -1
  392. package/dist/api/internal/auth.js +0 -47
  393. package/dist/api/internal/events.d.ts +0 -9
  394. package/dist/api/internal/events.d.ts.map +0 -1
  395. package/dist/api/internal/events.js +0 -42
  396. package/dist/api/internal/health.d.ts.map +0 -1
  397. package/dist/api/internal/health.js +0 -5
  398. package/dist/api/layerUtils.d.ts.map +0 -1
  399. package/dist/api/layerUtils.js +0 -16
  400. package/dist/api/middlewares.d.ts.map +0 -1
  401. package/dist/api/reportError.d.ts.map +0 -1
  402. package/dist/api/reportError.js +0 -27
  403. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +0 -1
  404. package/dist/api/routing/middleware/middleware.d.ts +0 -9
  405. package/dist/api/routing/middleware/middleware.d.ts.map +0 -1
  406. package/dist/api/routing/middleware/middleware.js +0 -92
  407. package/dist/api/routing/middleware.d.ts.map +0 -1
  408. package/dist/api/routing/schema/jwt.d.ts.map +0 -1
  409. package/dist/api/routing/schema/jwt.js +0 -12
  410. package/dist/api/routing/tsort.d.ts.map +0 -1
  411. package/dist/api/routing/tsort.js +0 -51
  412. package/dist/api/routing/utils.d.ts.map +0 -1
  413. package/dist/api/routing/utils.js +0 -44
  414. package/dist/api/routing.d.ts +0 -138
  415. package/dist/api/routing.d.ts.map +0 -1
  416. package/dist/api/routing.js +0 -166
  417. package/dist/api/setupRequest.d.ts +0 -12
  418. package/dist/api/setupRequest.d.ts.map +0 -1
  419. package/dist/api/setupRequest.js +0 -44
  420. package/dist/api/util.d.ts.map +0 -1
  421. package/dist/api/util.js +0 -14
  422. package/eslint.config.mjs +0 -24
  423. package/src/Emailer/service.ts +0 -52
  424. package/src/Emailer.ts +0 -1
  425. package/src/Model/Repository/ext.ts +0 -283
  426. package/src/Model/Repository/internal/internal.ts +0 -577
  427. package/src/Model/Repository/legacy.ts +0 -27
  428. package/src/Model/Repository/makeRepo.ts +0 -139
  429. package/src/Model/Repository/service.ts +0 -627
  430. package/src/Model/Repository/validation.ts +0 -31
  431. package/src/Model/Repository.ts +0 -5
  432. package/src/Model/dsl.ts +0 -128
  433. package/src/Model/filter/filterApi.ts +0 -60
  434. package/src/Model/filter/types/errors.ts +0 -47
  435. package/src/Model/filter/types/fields.ts +0 -50
  436. package/src/Model/filter/types/path/common.ts +0 -404
  437. package/src/Model/filter/types/path/eager.ts +0 -298
  438. package/src/Model/filter/types/path/index.ts +0 -4
  439. package/src/Model/filter/types/utils.ts +0 -128
  440. package/src/Model/filter/types/validator.ts +0 -46
  441. package/src/Model/filter/types.ts +0 -6
  442. package/src/Model/query/dsl.ts +0 -2110
  443. package/src/Model/query/new-kid-interpreter.ts +0 -210
  444. package/src/Model/query.ts +0 -13
  445. package/src/Model.ts +0 -3
  446. package/src/Operations.ts +0 -235
  447. package/src/OperationsRepo.ts +0 -16
  448. package/src/QueueMaker/SQLQueue.ts +0 -189
  449. package/src/QueueMaker/memQueue.ts +0 -130
  450. package/src/QueueMaker/sbqueue.ts +0 -137
  451. package/src/QueueMaker/service.ts +0 -17
  452. package/src/RequestContext.ts +0 -63
  453. package/src/RequestFiberSet.ts +0 -105
  454. package/src/Store/ContextMapContainer.ts +0 -20
  455. package/src/Store/index.test.ts.bak +0 -112
  456. package/src/Store/service.ts +0 -184
  457. package/src/Store.ts +0 -1
  458. package/src/adapters/SQL.ts +0 -1
  459. package/src/adapters/ServiceBus.ts +0 -209
  460. package/src/adapters/index.ts +0 -0
  461. package/src/adapters/logger.ts +0 -3
  462. package/src/adapters/memQueue.ts +0 -21
  463. package/src/api/internal/auth.ts +0 -68
  464. package/src/api/middlewares.ts +0 -10
  465. package/src/api/routing/middleware/middleware.ts +0 -128
  466. package/src/api/routing/middleware.ts +0 -6
  467. package/src/api/routing.ts +0 -598
  468. package/src/api/setupRequest.ts +0 -84
  469. package/tsconfig.json.bak +0 -12
  470. /package/dist/{adapters/SQL.d.ts → SQL.d.ts} +0 -0
  471. /package/dist/{api/codec.d.ts → codec.d.ts} +0 -0
  472. /package/dist/{api/internal → internal}/health.d.ts +0 -0
  473. /package/dist/{api/middlewares.d.ts → middlewares.d.ts} +0 -0
  474. /package/dist/{api/routing → routing}/schema/jwt.d.ts +0 -0
  475. /package/dist/{api/routing → routing}/tsort.d.ts +0 -0
  476. /package/dist/{api/util.d.ts → util.d.ts} +0 -0
  477. /package/src/{api/codec.ts → codec.ts} +0 -0
  478. /package/src/{api/internal → internal}/health.ts +0 -0
  479. /package/src/{api/routing → routing}/tsort.ts +0 -0
  480. /package/src/{api/util.ts → util.ts} +0 -0
@@ -0,0 +1,402 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ import type { NonEmptyReadonlyArray } from "effect-app/Array"
4
+ import { toNonEmptyArray } from "effect-app/Array"
5
+ import * as Effect from "effect-app/Effect"
6
+ import type { FieldValues } from "effect-app/Model/filter/types"
7
+ import type { ComputedProjectionIrExpression } from "effect-app/Model/query"
8
+ import * as Option from "effect-app/Option"
9
+ import { type FilterArgs, type PersistenceModelType, type StorageConfig, type Store, type StoreConfig, storeId, StoreMaker } from "effect-app/Store"
10
+ import * as Struct from "effect/Struct"
11
+ import { SqlClient } from "effect/unstable/sql"
12
+ import { DatabaseError, OptimisticConcurrencyException } from "../../errors.ts"
13
+ import { InfraLogger } from "../../logger.ts"
14
+ import { annotateDb } from "../../otel.ts"
15
+ import { makeJsonDocumentCodec } from "../jsonDocument.ts"
16
+ import { makeETag, makeJsonLower, toJsonQueryValue } from "../utils.ts"
17
+ import { buildWhereSQLQuery, logQuery, pgDialect } from "./query.ts"
18
+
19
+ const sqlErrorMessage = (e: unknown) => (e as any)?.message ? String((e as any).message) : String(e)
20
+ const sqlIsTransient = (e: unknown) =>
21
+ /timeout|ETIMEDOUT|ECONNRESET|ECONNREFUSED|connection|deadlock|too many connections/i.test(sqlErrorMessage(e))
22
+ // Map a SqlError into a typed, serializable DatabaseError (instead of `.orDie`,
23
+ // which would turn it into an opaque, non-serializable defect).
24
+ const toDatabaseError = (e: unknown) =>
25
+ new DatabaseError({ message: `SQL request failed: ${sqlErrorMessage(e)}`, transient: sqlIsTransient(e), cause: e })
26
+ // withTransaction may re-raise setInternal's typed errors or add SqlError on begin/commit.
27
+ // Preserve DatabaseError / OCC by `_tag` (not instanceof — dual package instances break it);
28
+ // map residual SQL failures to DatabaseError.
29
+ const preserveStoreError = (e: unknown): DatabaseError | OptimisticConcurrencyException => {
30
+ if (e !== null && typeof e === "object" && "_tag" in e) {
31
+ if (e._tag === "DatabaseError") return e as DatabaseError
32
+ if (e._tag === "OptimisticConcurrencyException") return e as OptimisticConcurrencyException
33
+ }
34
+ return toDatabaseError(e)
35
+ }
36
+
37
+ const parseRow = <Encoded extends FieldValues>(
38
+ row: { id: string; _etag: string | null; data: unknown },
39
+ idKey: PropertyKey,
40
+ defaultValues: Partial<Encoded>,
41
+ decode: (doc: PersistenceModelType<Encoded>) => PersistenceModelType<Encoded> = (doc) => doc
42
+ ): PersistenceModelType<Encoded> => {
43
+ const data = (typeof row.data === "string" ? JSON.parse(row.data) : row.data) as object
44
+ const jsonDefaults = toJsonQueryValue(defaultValues) as Partial<Encoded>
45
+ return decode(
46
+ { ...jsonDefaults, ...data, [idKey]: row.id, _etag: row._etag ?? undefined } as PersistenceModelType<Encoded>
47
+ )
48
+ }
49
+
50
+ const parseSelectRow = (
51
+ row: Record<string, unknown>,
52
+ idKey: PropertyKey,
53
+ defaultValues: Record<string, unknown>
54
+ ): any => {
55
+ const result: Record<string, unknown> = { ...defaultValues }
56
+ for (const [key, value] of Object.entries(row)) {
57
+ if (key === "id") {
58
+ result[idKey as string] = value
59
+ result["id"] = value
60
+ } else {
61
+ result[key] = value
62
+ }
63
+ }
64
+ return result
65
+ }
66
+
67
+ const makePgStore = Effect.fnUntraced(function*({ prefix }: StorageConfig) {
68
+ const sql = yield* SqlClient.SqlClient
69
+ return {
70
+ make: Effect.fnUntraced(function*<IdKey extends keyof Encoded, Encoded extends FieldValues, R = never, E = never>(
71
+ name: string,
72
+ idKey: IdKey,
73
+ seed?: Effect.Effect<Iterable<Encoded>, E, R>,
74
+ config?: StoreConfig<Encoded>
75
+ ) {
76
+ type PM = PersistenceModelType<Encoded>
77
+ const tableName = `${prefix}${name}`
78
+ const json = makeJsonLower(config)
79
+ const defaultValues = json.toJson(config?.defaultValues ?? {}) as Partial<Encoded>
80
+ const codec = makeJsonDocumentCodec<Encoded>(config?.schema)
81
+
82
+ const resolveNamespace = !config?.allowNamespace
83
+ ? Effect.succeed("primary")
84
+ : storeId.pipe(Effect.map((namespace) => {
85
+ if (namespace !== "primary" && !config.allowNamespace!(namespace)) {
86
+ throw new Error(`Namespace ${namespace} not allowed!`)
87
+ }
88
+ return namespace
89
+ }))
90
+
91
+ const ensureTable = sql
92
+ .unsafe(
93
+ `CREATE TABLE IF NOT EXISTS "${tableName}" (id TEXT NOT NULL, _namespace TEXT NOT NULL DEFAULT 'primary', _etag TEXT, data JSONB NOT NULL, PRIMARY KEY (id, _namespace))`
94
+ )
95
+ .pipe(
96
+ Effect.andThen(
97
+ sql.unsafe(
98
+ `CREATE TABLE IF NOT EXISTS "_migrations" (id TEXT NOT NULL, version TEXT NOT NULL, PRIMARY KEY (id, version))`
99
+ )
100
+ ),
101
+ Effect.orDie,
102
+ Effect.asVoid
103
+ )
104
+
105
+ const toRow = (e: PM) => {
106
+ const newE = makeETag(codec.encode(e))
107
+ const id = newE[idKey] as string
108
+ const { _etag, [idKey]: _id, ...rest } = newE as any
109
+ const data = JSON.stringify(rest)
110
+ return { id, _etag: newE._etag!, data, item: codec.decode(newE) }
111
+ }
112
+
113
+ const exec = (query: string, params?: readonly unknown[]) =>
114
+ sql.unsafe(query, params as any).pipe(Effect.mapError(toDatabaseError))
115
+
116
+ const setInternal = Effect.fnUntraced(function*(e: PM, ns: string) {
117
+ const row = toRow(e)
118
+ if (e._etag) {
119
+ yield* exec(
120
+ `UPDATE "${tableName}" SET _etag = $1, data = $2 WHERE id = $3 AND _etag = $4 AND _namespace = $5`,
121
+ [row._etag, row.data, row.id, e._etag, ns]
122
+ )
123
+ const existing = yield* exec(
124
+ `SELECT _etag FROM "${tableName}" WHERE id = $1 AND _namespace = $2`,
125
+ [row.id, ns]
126
+ )
127
+ const current = (existing as any[])[0]
128
+ if (!current || current._etag !== row._etag) {
129
+ if (current) {
130
+ return yield* new OptimisticConcurrencyException({
131
+ type: name,
132
+ id: row.id,
133
+ current: current._etag,
134
+ found: e._etag,
135
+ code: 412
136
+ })
137
+ }
138
+ return yield* new OptimisticConcurrencyException({
139
+ type: name,
140
+ id: row.id,
141
+ current: "",
142
+ found: e._etag,
143
+ code: 404
144
+ })
145
+ }
146
+ } else {
147
+ yield* exec(
148
+ `INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES ($1, $2, $3, $4)`,
149
+ [row.id, ns, row._etag, row.data]
150
+ )
151
+ }
152
+ return row.item
153
+ })
154
+
155
+ const bulkSetInternal = (items: NonEmptyReadonlyArray<PM>, ns: string) =>
156
+ sql
157
+ .withTransaction(Effect.forEach(items, (e) => setInternal(e, ns)))
158
+ .pipe(
159
+ Effect.mapError(preserveStoreError),
160
+ Effect.map((_) => _ as unknown as NonEmptyReadonlyArray<PM>)
161
+ )
162
+
163
+ const ctx = yield* Effect.context<R>()
164
+ const seedCache = new Map<string, Effect.Effect<void, DatabaseError>>()
165
+ const makeSeedEffect = Effect.fnUntraced(function*(ns: string) {
166
+ yield* ensureTable
167
+ if (!seed) return
168
+ const existing = yield* exec(
169
+ `SELECT id FROM "_migrations" WHERE id = $1 AND version = $2`,
170
+ [`${tableName}::${ns}`, tableName]
171
+ )
172
+ if ((existing as any[]).length > 0) return
173
+ yield* InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`)
174
+ const items = yield* seed.pipe(Effect.provide(ctx), Effect.orDie)
175
+ const ne = toNonEmptyArray([...items])
176
+ // Seed inserts are not concurrent; OCC here is a programming defect.
177
+ if (Option.isSome(ne)) {
178
+ yield* bulkSetInternal(ne.value, ns).pipe(
179
+ Effect.catchTag("OptimisticConcurrencyException", Effect.die)
180
+ )
181
+ }
182
+ yield* exec(
183
+ `INSERT INTO "_migrations" (id, version) VALUES ($1, $2)`,
184
+ [`${tableName}::${ns}`, tableName]
185
+ )
186
+ })
187
+ const seedNamespace = (ns: string) => {
188
+ let cached = seedCache.get(ns)
189
+ if (!cached) {
190
+ cached = Effect.cached(Effect.uninterruptible(makeSeedEffect(ns))).pipe(Effect.runSync)
191
+ seedCache.set(ns, cached)
192
+ }
193
+ return cached
194
+ }
195
+ const s: Store<IdKey, Encoded> = {
196
+ seedNamespace: (ns) => seedNamespace(ns),
197
+
198
+ all: resolveNamespace.pipe(
199
+ Effect.flatMap((ns) => {
200
+ const sqlText = `SELECT id, _etag, data FROM "${tableName}" WHERE _namespace = $1`
201
+ return exec(sqlText, [ns])
202
+ .pipe(
203
+ Effect.map((rows) =>
204
+ (rows as any[]).map((r) => parseRow<Encoded>(r, idKey, defaultValues, codec.decode))
205
+ ),
206
+ annotateDb({
207
+ operation: "all",
208
+ system: "postgresql",
209
+ collection: tableName,
210
+ namespace: ns,
211
+ entity: name,
212
+ query: sqlText
213
+ })
214
+ )
215
+ })
216
+ ),
217
+
218
+ find: (id) =>
219
+ resolveNamespace.pipe(Effect
220
+ .flatMap((ns) => {
221
+ const sqlText = `SELECT id, _etag, data FROM "${tableName}" WHERE id = $1 AND _namespace = $2`
222
+ return exec(sqlText, [id, ns])
223
+ .pipe(
224
+ Effect.map((rows) => {
225
+ const row = (rows as any[])[0]
226
+ return row
227
+ ? Option.some(parseRow<Encoded>(row, idKey, defaultValues, codec.decode))
228
+ : Option.none()
229
+ }),
230
+ annotateDb({
231
+ operation: "find",
232
+ system: "postgresql",
233
+ collection: tableName,
234
+ namespace: ns,
235
+ entity: name,
236
+ query: sqlText,
237
+ extra: { "app.entity.id": id }
238
+ })
239
+ )
240
+ })),
241
+
242
+ filter: <U extends keyof Encoded = never>(f: FilterArgs<Encoded, U>) => {
243
+ const filter = f
244
+ .filter
245
+ type M = U extends undefined ? Encoded : Pick<Encoded, U>
246
+ return resolveNamespace.pipe(Effect.flatMap((ns) =>
247
+ Effect
248
+ .sync(() => {
249
+ const q = buildWhereSQLQuery(
250
+ pgDialect,
251
+ idKey,
252
+ filter ? [{ t: "where-scope", result: filter, relation: "some" }] : [],
253
+ tableName,
254
+ defaultValues,
255
+ f.select as
256
+ | NonEmptyReadonlyArray<
257
+ string | {
258
+ key: string
259
+ subKeys: readonly string[]
260
+ } | {
261
+ key: string
262
+ computed: ComputedProjectionIrExpression
263
+ }
264
+ >
265
+ | undefined,
266
+ f.order,
267
+ f.skip,
268
+ f.limit,
269
+ ns,
270
+ json
271
+ )
272
+ const nsPlaceholder = pgDialect.placeholder(q.params.length + 1)
273
+ const hasWhere = q.sql.includes("WHERE")
274
+ const nsSql = hasWhere
275
+ ? q.sql.replace("WHERE", `WHERE _namespace = ${nsPlaceholder} AND`)
276
+ : q.sql.replace(
277
+ `FROM "${tableName}"`,
278
+ `FROM "${tableName}" WHERE _namespace = ${nsPlaceholder}`
279
+ )
280
+ return { sql: nsSql, params: [...q.params, ns] }
281
+ })
282
+ .pipe(
283
+ Effect.tap((q) => logQuery(q)),
284
+ Effect.tap((q) => Effect.annotateCurrentSpan({ "db.query.text": q.sql })),
285
+ Effect.flatMap((q) =>
286
+ exec(q.sql, q.params).pipe(
287
+ Effect.map((rows) => {
288
+ if (f.select) {
289
+ return (rows as any[]).map((r) => {
290
+ const selected = parseSelectRow(r, idKey, {})
291
+ return {
292
+ ...Struct.pick(
293
+ defaultValues as any,
294
+ f.select!.filter((_) => typeof _ === "string") as never[]
295
+ ),
296
+ ...selected
297
+ } as M
298
+ })
299
+ }
300
+ return (rows as any[]).map((r) =>
301
+ parseRow<Encoded>(r, idKey, defaultValues, codec.decode) as any as M
302
+ )
303
+ })
304
+ )
305
+ ),
306
+ annotateDb({
307
+ operation: "filter",
308
+ system: "postgresql",
309
+ collection: tableName,
310
+ namespace: ns,
311
+ entity: name
312
+ })
313
+ )
314
+ ))
315
+ },
316
+
317
+ set: (e) =>
318
+ resolveNamespace.pipe(Effect.flatMap((ns) =>
319
+ setInternal(e, ns).pipe(
320
+ annotateDb({
321
+ operation: "set",
322
+ system: "postgresql",
323
+ collection: tableName,
324
+ namespace: ns,
325
+ entity: name,
326
+ extra: { "app.entity.id": e[idKey] }
327
+ })
328
+ )
329
+ )),
330
+
331
+ batchSet: (items) =>
332
+ resolveNamespace.pipe(Effect.flatMap((ns) =>
333
+ bulkSetInternal(items, ns).pipe(
334
+ annotateDb({
335
+ operation: "batchSet",
336
+ system: "postgresql",
337
+ collection: tableName,
338
+ namespace: ns,
339
+ entity: name
340
+ })
341
+ )
342
+ )),
343
+
344
+ bulkSet: (items) =>
345
+ resolveNamespace.pipe(Effect.flatMap((ns) =>
346
+ bulkSetInternal(items, ns).pipe(
347
+ annotateDb({
348
+ operation: "bulkSet",
349
+ system: "postgresql",
350
+ collection: tableName,
351
+ namespace: ns,
352
+ entity: name
353
+ })
354
+ )
355
+ )),
356
+
357
+ batchRemove: (ids) => {
358
+ const placeholders = ids.map((_, i) => `$${i + 1}`).join(", ")
359
+ const nsPlaceholder = `$${ids.length + 1}`
360
+ return resolveNamespace.pipe(Effect.flatMap((ns) => {
361
+ const sqlText = `DELETE FROM "${tableName}" WHERE id IN (${placeholders}) AND _namespace = ${nsPlaceholder}`
362
+ return exec(sqlText, [...ids, ns])
363
+ .pipe(
364
+ Effect.asVoid,
365
+ annotateDb({
366
+ operation: "batchRemove",
367
+ system: "postgresql",
368
+ collection: tableName,
369
+ namespace: ns,
370
+ entity: name,
371
+ query: sqlText
372
+ })
373
+ )
374
+ }))
375
+ },
376
+
377
+ queryRaw: (query) =>
378
+ s.all.pipe(
379
+ Effect.map(query.memory),
380
+ annotateDb({
381
+ operation: "queryRaw",
382
+ system: "postgresql",
383
+ collection: tableName,
384
+ entity: name
385
+ })
386
+ )
387
+ }
388
+
389
+ // Eagerly seed primary namespace on initialization. A seed failure at
390
+ // construction is fatal (orDie); the per-call `seedNamespace` still
391
+ // surfaces DatabaseError to callers.
392
+ yield* seedNamespace("primary").pipe(Effect.orDie)
393
+
394
+ return s
395
+ })
396
+ }
397
+ })
398
+
399
+ export function PgStoreLayer(cfg: StorageConfig) {
400
+ return StoreMaker
401
+ .toLayer(makePgStore(cfg))
402
+ }