@effect-app/infra 4.0.0-beta.3 → 4.0.0-beta.300

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 (474) hide show
  1. package/CHANGELOG.md +2485 -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 +33 -47
  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 +232 -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 +456 -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 +4 -3
  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 +4 -4
  109. package/dist/logger.d.ts.map +1 -1
  110. package/dist/middlewares.d.ts.map +1 -0
  111. package/dist/{api/middlewares.js → middlewares.js} +1 -1
  112. package/dist/{adapters/mongo-client.d.ts → mongo-client.d.ts} +3 -2
  113. package/dist/mongo-client.d.ts.map +1 -0
  114. package/dist/mongo-client.js +15 -0
  115. package/dist/otel.d.ts +75 -0
  116. package/dist/otel.d.ts.map +1 -0
  117. package/dist/otel.js +65 -0
  118. package/dist/rateLimit.d.ts +11 -3
  119. package/dist/rateLimit.d.ts.map +1 -1
  120. package/dist/rateLimit.js +7 -12
  121. package/dist/{adapters/redis-client.d.ts → redis-client.d.ts} +6 -3
  122. package/dist/redis-client.d.ts.map +1 -0
  123. package/dist/redis-client.js +98 -0
  124. package/dist/{api/reportError.d.ts → reportError.d.ts} +1 -1
  125. package/dist/reportError.d.ts.map +1 -0
  126. package/dist/reportError.js +28 -0
  127. package/dist/{api/routing → routing}/middleware/RouterMiddleware.d.ts +4 -3
  128. package/dist/routing/middleware/RouterMiddleware.d.ts.map +1 -0
  129. package/dist/{api/routing → routing}/middleware/RouterMiddleware.js +1 -1
  130. package/dist/routing/middleware/middleware.d.ts +48 -0
  131. package/dist/routing/middleware/middleware.d.ts.map +1 -0
  132. package/dist/routing/middleware/middleware.js +152 -0
  133. package/dist/{api/routing → routing}/middleware.d.ts +0 -1
  134. package/dist/routing/middleware.d.ts.map +1 -0
  135. package/dist/{api/routing → routing}/middleware.js +1 -2
  136. package/dist/{api/routing → routing}/schema/jwt.d.ts +1 -1
  137. package/dist/routing/schema/jwt.d.ts.map +1 -0
  138. package/dist/routing/schema/jwt.js +13 -0
  139. package/dist/routing/tsort.d.ts.map +1 -0
  140. package/dist/routing/tsort.js +51 -0
  141. package/dist/{api/routing → routing}/utils.d.ts +3 -3
  142. package/dist/routing/utils.d.ts.map +1 -0
  143. package/dist/routing/utils.js +45 -0
  144. package/dist/routing.d.ts +182 -0
  145. package/dist/routing.d.ts.map +1 -0
  146. package/dist/routing.js +256 -0
  147. package/dist/test.d.ts +2 -2
  148. package/dist/test.d.ts.map +1 -1
  149. package/dist/test.js +2 -2
  150. package/dist/util.d.ts.map +1 -0
  151. package/dist/util.js +14 -0
  152. package/docs/cluster-storage.md +26 -0
  153. package/docs/workflow-engine.md +262 -0
  154. package/examples/query.ts +47 -39
  155. package/package.json +38 -352
  156. package/src/CUPS.ts +53 -14
  157. package/src/ClusterCosmos.ts +1118 -0
  158. package/src/ClusterServiceBus.ts +242 -0
  159. package/src/{api/ContextProvider.ts → ContextProvider.ts} +20 -17
  160. package/src/Emailer/Sendgrid.ts +83 -60
  161. package/src/Emailer/fake.ts +4 -4
  162. package/src/MainFiberSet.ts +32 -13
  163. package/src/QueueMaker/errors.ts +3 -1
  164. package/src/{adapters/SQL → SQL}/Model.ts +116 -110
  165. package/src/SQL.ts +1 -0
  166. package/src/Store/Cosmos/query.ts +218 -54
  167. package/src/Store/Cosmos.ts +529 -365
  168. package/src/Store/Disk.ts +112 -70
  169. package/src/Store/Memory.ts +366 -102
  170. package/src/Store/SQL/Pg.ts +363 -0
  171. package/src/Store/SQL/query.ts +603 -0
  172. package/src/Store/SQL.ts +746 -0
  173. package/src/Store/codeFilter.ts +8 -6
  174. package/src/Store/index.ts +25 -10
  175. package/src/Store/utils.ts +32 -25
  176. package/src/WorkflowEngineCosmos.ts +749 -0
  177. package/src/WorkflowEngineSqlite.ts +813 -0
  178. package/src/arbs.ts +5 -3
  179. package/src/{adapters/cosmos-client.ts → cosmos-client.ts} +5 -3
  180. package/src/errorReporter.ts +68 -78
  181. package/src/fileUtil.ts +3 -2
  182. package/src/index.ts +2 -1
  183. package/src/{api/internal → internal}/RequestContextMiddleware.ts +23 -6
  184. package/src/internal/auth.ts +272 -0
  185. package/src/{api/internal → internal}/events.ts +25 -15
  186. package/src/{api/layerUtils.ts → layerUtils.ts} +14 -10
  187. package/src/logger/jsonLogger.ts +5 -3
  188. package/src/logger/logFmtLogger.ts +3 -3
  189. package/src/logger/shared.ts +5 -4
  190. package/src/middlewares.ts +10 -0
  191. package/src/{adapters/mongo-client.ts → mongo-client.ts} +4 -2
  192. package/src/otel.ts +152 -0
  193. package/src/rateLimit.ts +34 -23
  194. package/src/{adapters/redis-client.ts → redis-client.ts} +7 -3
  195. package/src/{api/reportError.ts → reportError.ts} +3 -2
  196. package/src/{api/routing → routing}/middleware/RouterMiddleware.ts +5 -4
  197. package/src/routing/middleware/middleware.ts +196 -0
  198. package/src/routing/middleware.ts +4 -0
  199. package/src/{api/routing → routing}/schema/jwt.ts +4 -4
  200. package/src/{api/routing → routing}/utils.ts +2 -1
  201. package/src/routing.ts +823 -0
  202. package/src/test.ts +4 -4
  203. package/src/vitest.ts +1 -1
  204. package/test/auth.test.ts +101 -0
  205. package/test/cluster-cosmos.test.ts +612 -0
  206. package/test/cluster-servicebus.test.ts +180 -0
  207. package/test/cluster-sqlite.test.ts +205 -0
  208. package/test/contextProvider.test.ts +15 -12
  209. package/test/controller.test.ts +30 -32
  210. package/test/cosmos-query.test.ts +228 -0
  211. package/test/dist/auth.test.d.ts.map +1 -0
  212. package/test/dist/cluster-cosmos.test.d.ts.map +1 -0
  213. package/test/dist/cluster-servicebus.test.d.ts.map +1 -0
  214. package/test/dist/cluster-sqlite.test.d.ts.map +1 -0
  215. package/test/dist/contextProvider.test.d.ts.map +1 -1
  216. package/test/dist/controller.test.d.ts.map +1 -1
  217. package/test/dist/cosmos-query.test.d.ts.map +1 -0
  218. package/test/dist/fixtures.d.ts +29 -11
  219. package/test/dist/fixtures.d.ts.map +1 -1
  220. package/test/dist/fixtures.js +17 -10
  221. package/test/dist/query.test.d.ts.map +1 -1
  222. package/test/dist/rawQuery.test.d.ts.map +1 -1
  223. package/test/dist/repository-ext.test.d.ts.map +1 -0
  224. package/test/dist/requires.test.d.ts.map +1 -1
  225. package/test/dist/router-generator.test.d.ts.map +1 -0
  226. package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
  227. package/test/dist/rpc-context-map-streaming.test.d.ts.map +1 -0
  228. package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
  229. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  230. package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
  231. package/test/dist/sql-store.test.d.ts.map +1 -0
  232. package/test/dist/workflow-engine-cosmos.test.d.ts.map +1 -0
  233. package/test/dist/workflow-engine-sqlite.test.d.ts.map +1 -0
  234. package/test/fixtures.ts +16 -9
  235. package/test/layerUtils.test.ts +2 -2
  236. package/test/query.test.ts +1007 -43
  237. package/test/rawQuery.test.ts +340 -22
  238. package/test/repository-ext.test.ts +178 -0
  239. package/test/requires.test.ts +10 -5
  240. package/test/router-generator.test.ts +187 -0
  241. package/test/routing-interruptibility.test.ts +66 -0
  242. package/test/rpc-context-map-streaming.test.ts +262 -0
  243. package/test/rpc-e2e-invalidation.test.ts +418 -0
  244. package/test/rpc-multi-middleware.test.ts +86 -11
  245. package/test/rpc-stream-fullstack.test.ts +304 -0
  246. package/test/sql-store.test.ts +1711 -0
  247. package/test/validateSample.test.ts +26 -14
  248. package/test/workflow-engine-cosmos.test.ts +345 -0
  249. package/test/workflow-engine-sqlite.test.ts +297 -0
  250. package/tsconfig.examples.json +1 -1
  251. package/tsconfig.json +3 -1
  252. package/tsconfig.src.json +35 -35
  253. package/tsconfig.test.json +2 -2
  254. package/dist/Emailer/service.d.ts +0 -55
  255. package/dist/Emailer/service.d.ts.map +0 -1
  256. package/dist/Emailer/service.js +0 -6
  257. package/dist/Emailer.d.ts +0 -2
  258. package/dist/Emailer.d.ts.map +0 -1
  259. package/dist/Emailer.js +0 -2
  260. package/dist/Model/Repository/ext.d.ts +0 -41
  261. package/dist/Model/Repository/ext.d.ts.map +0 -1
  262. package/dist/Model/Repository/ext.js +0 -65
  263. package/dist/Model/Repository/internal/internal.d.ts +0 -59
  264. package/dist/Model/Repository/internal/internal.d.ts.map +0 -1
  265. package/dist/Model/Repository/internal/internal.js +0 -316
  266. package/dist/Model/Repository/legacy.d.ts +0 -19
  267. package/dist/Model/Repository/legacy.d.ts.map +0 -1
  268. package/dist/Model/Repository/legacy.js +0 -2
  269. package/dist/Model/Repository/makeRepo.d.ts +0 -49
  270. package/dist/Model/Repository/makeRepo.d.ts.map +0 -1
  271. package/dist/Model/Repository/makeRepo.js +0 -24
  272. package/dist/Model/Repository/service.d.ts +0 -89
  273. package/dist/Model/Repository/service.d.ts.map +0 -1
  274. package/dist/Model/Repository/service.js +0 -2
  275. package/dist/Model/Repository/validation.d.ts +0 -42
  276. package/dist/Model/Repository/validation.d.ts.map +0 -1
  277. package/dist/Model/Repository/validation.js +0 -32
  278. package/dist/Model/Repository.d.ts +0 -6
  279. package/dist/Model/Repository.d.ts.map +0 -1
  280. package/dist/Model/Repository.js +0 -6
  281. package/dist/Model/dsl.d.ts +0 -32
  282. package/dist/Model/dsl.d.ts.map +0 -1
  283. package/dist/Model/dsl.js +0 -44
  284. package/dist/Model/filter/filterApi.d.ts +0 -30
  285. package/dist/Model/filter/filterApi.d.ts.map +0 -1
  286. package/dist/Model/filter/filterApi.js +0 -2
  287. package/dist/Model/filter/types/errors.d.ts +0 -29
  288. package/dist/Model/filter/types/errors.d.ts.map +0 -1
  289. package/dist/Model/filter/types/errors.js +0 -2
  290. package/dist/Model/filter/types/fields.d.ts +0 -15
  291. package/dist/Model/filter/types/fields.d.ts.map +0 -1
  292. package/dist/Model/filter/types/fields.js +0 -2
  293. package/dist/Model/filter/types/path/common.d.ts +0 -316
  294. package/dist/Model/filter/types/path/common.d.ts.map +0 -1
  295. package/dist/Model/filter/types/path/common.js +0 -2
  296. package/dist/Model/filter/types/path/eager.d.ts +0 -95
  297. package/dist/Model/filter/types/path/eager.d.ts.map +0 -1
  298. package/dist/Model/filter/types/path/eager.js +0 -31
  299. package/dist/Model/filter/types/path/index.d.ts +0 -4
  300. package/dist/Model/filter/types/path/index.d.ts.map +0 -1
  301. package/dist/Model/filter/types/path/index.js +0 -3
  302. package/dist/Model/filter/types/utils.d.ts +0 -79
  303. package/dist/Model/filter/types/utils.d.ts.map +0 -1
  304. package/dist/Model/filter/types/utils.js +0 -2
  305. package/dist/Model/filter/types/validator.d.ts +0 -30
  306. package/dist/Model/filter/types/validator.d.ts.map +0 -1
  307. package/dist/Model/filter/types/validator.js +0 -2
  308. package/dist/Model/filter/types.d.ts +0 -5
  309. package/dist/Model/filter/types.d.ts.map +0 -1
  310. package/dist/Model/filter/types.js +0 -7
  311. package/dist/Model/query/dsl.d.ts +0 -248
  312. package/dist/Model/query/dsl.d.ts.map +0 -1
  313. package/dist/Model/query/dsl.js +0 -104
  314. package/dist/Model/query/new-kid-interpreter.d.ts +0 -28
  315. package/dist/Model/query/new-kid-interpreter.d.ts.map +0 -1
  316. package/dist/Model/query/new-kid-interpreter.js +0 -165
  317. package/dist/Model/query.d.ts +0 -15
  318. package/dist/Model/query.d.ts.map +0 -1
  319. package/dist/Model/query.js +0 -3
  320. package/dist/Model.d.ts +0 -4
  321. package/dist/Model.d.ts.map +0 -1
  322. package/dist/Model.js +0 -4
  323. package/dist/Operations.d.ts +0 -55
  324. package/dist/Operations.d.ts.map +0 -1
  325. package/dist/Operations.js +0 -102
  326. package/dist/OperationsRepo.d.ts +0 -41
  327. package/dist/OperationsRepo.d.ts.map +0 -1
  328. package/dist/OperationsRepo.js +0 -14
  329. package/dist/QueueMaker/SQLQueue.d.ts +0 -16
  330. package/dist/QueueMaker/SQLQueue.d.ts.map +0 -1
  331. package/dist/QueueMaker/SQLQueue.js +0 -130
  332. package/dist/QueueMaker/memQueue.d.ts +0 -11
  333. package/dist/QueueMaker/memQueue.d.ts.map +0 -1
  334. package/dist/QueueMaker/memQueue.js +0 -75
  335. package/dist/QueueMaker/sbqueue.d.ts +0 -12
  336. package/dist/QueueMaker/sbqueue.d.ts.map +0 -1
  337. package/dist/QueueMaker/sbqueue.js +0 -89
  338. package/dist/QueueMaker/service.d.ts +0 -11
  339. package/dist/QueueMaker/service.d.ts.map +0 -1
  340. package/dist/QueueMaker/service.js +0 -4
  341. package/dist/RequestContext.d.ts +0 -63
  342. package/dist/RequestContext.d.ts.map +0 -1
  343. package/dist/RequestContext.js +0 -49
  344. package/dist/RequestFiberSet.d.ts +0 -36
  345. package/dist/RequestFiberSet.d.ts.map +0 -1
  346. package/dist/RequestFiberSet.js +0 -78
  347. package/dist/Store/ContextMapContainer.d.ts +0 -14
  348. package/dist/Store/ContextMapContainer.d.ts.map +0 -1
  349. package/dist/Store/ContextMapContainer.js +0 -16
  350. package/dist/Store/service.d.ts +0 -108
  351. package/dist/Store/service.d.ts.map +0 -1
  352. package/dist/Store/service.js +0 -71
  353. package/dist/Store.d.ts +0 -2
  354. package/dist/Store.d.ts.map +0 -1
  355. package/dist/Store.js +0 -2
  356. package/dist/adapters/SQL/Model.d.ts.map +0 -1
  357. package/dist/adapters/SQL/Model.js +0 -470
  358. package/dist/adapters/SQL.d.ts.map +0 -1
  359. package/dist/adapters/ServiceBus.d.ts +0 -58
  360. package/dist/adapters/ServiceBus.d.ts.map +0 -1
  361. package/dist/adapters/ServiceBus.js +0 -99
  362. package/dist/adapters/cosmos-client.d.ts.map +0 -1
  363. package/dist/adapters/cosmos-client.js +0 -9
  364. package/dist/adapters/index.d.ts +0 -2
  365. package/dist/adapters/index.d.ts.map +0 -1
  366. package/dist/adapters/index.js +0 -2
  367. package/dist/adapters/logger.d.ts +0 -9
  368. package/dist/adapters/logger.d.ts.map +0 -1
  369. package/dist/adapters/logger.js +0 -3
  370. package/dist/adapters/memQueue.d.ts +0 -13
  371. package/dist/adapters/memQueue.d.ts.map +0 -1
  372. package/dist/adapters/memQueue.js +0 -20
  373. package/dist/adapters/mongo-client.d.ts.map +0 -1
  374. package/dist/adapters/mongo-client.js +0 -13
  375. package/dist/adapters/redis-client.d.ts.map +0 -1
  376. package/dist/adapters/redis-client.js +0 -94
  377. package/dist/api/ContextProvider.d.ts +0 -31
  378. package/dist/api/ContextProvider.d.ts.map +0 -1
  379. package/dist/api/ContextProvider.js +0 -38
  380. package/dist/api/codec.d.ts.map +0 -1
  381. package/dist/api/codec.js +0 -5
  382. package/dist/api/internal/RequestContextMiddleware.d.ts +0 -5
  383. package/dist/api/internal/RequestContextMiddleware.d.ts.map +0 -1
  384. package/dist/api/internal/RequestContextMiddleware.js +0 -35
  385. package/dist/api/internal/auth.d.ts +0 -15
  386. package/dist/api/internal/auth.d.ts.map +0 -1
  387. package/dist/api/internal/auth.js +0 -47
  388. package/dist/api/internal/events.d.ts +0 -9
  389. package/dist/api/internal/events.d.ts.map +0 -1
  390. package/dist/api/internal/events.js +0 -40
  391. package/dist/api/internal/health.d.ts.map +0 -1
  392. package/dist/api/internal/health.js +0 -5
  393. package/dist/api/layerUtils.d.ts.map +0 -1
  394. package/dist/api/layerUtils.js +0 -16
  395. package/dist/api/middlewares.d.ts.map +0 -1
  396. package/dist/api/reportError.d.ts.map +0 -1
  397. package/dist/api/reportError.js +0 -27
  398. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +0 -1
  399. package/dist/api/routing/middleware/middleware.d.ts +0 -9
  400. package/dist/api/routing/middleware/middleware.d.ts.map +0 -1
  401. package/dist/api/routing/middleware/middleware.js +0 -92
  402. package/dist/api/routing/middleware.d.ts.map +0 -1
  403. package/dist/api/routing/schema/jwt.d.ts.map +0 -1
  404. package/dist/api/routing/schema/jwt.js +0 -12
  405. package/dist/api/routing/tsort.d.ts.map +0 -1
  406. package/dist/api/routing/tsort.js +0 -51
  407. package/dist/api/routing/utils.d.ts.map +0 -1
  408. package/dist/api/routing/utils.js +0 -44
  409. package/dist/api/routing.d.ts +0 -138
  410. package/dist/api/routing.d.ts.map +0 -1
  411. package/dist/api/routing.js +0 -166
  412. package/dist/api/setupRequest.d.ts +0 -12
  413. package/dist/api/setupRequest.d.ts.map +0 -1
  414. package/dist/api/setupRequest.js +0 -44
  415. package/dist/api/util.d.ts.map +0 -1
  416. package/dist/api/util.js +0 -14
  417. package/eslint.config.mjs +0 -24
  418. package/src/Emailer/service.ts +0 -52
  419. package/src/Emailer.ts +0 -1
  420. package/src/Model/Repository/ext.ts +0 -283
  421. package/src/Model/Repository/internal/internal.ts +0 -577
  422. package/src/Model/Repository/legacy.ts +0 -27
  423. package/src/Model/Repository/makeRepo.ts +0 -139
  424. package/src/Model/Repository/service.ts +0 -627
  425. package/src/Model/Repository/validation.ts +0 -31
  426. package/src/Model/Repository.ts +0 -5
  427. package/src/Model/dsl.ts +0 -128
  428. package/src/Model/filter/filterApi.ts +0 -60
  429. package/src/Model/filter/types/errors.ts +0 -47
  430. package/src/Model/filter/types/fields.ts +0 -50
  431. package/src/Model/filter/types/path/common.ts +0 -404
  432. package/src/Model/filter/types/path/eager.ts +0 -298
  433. package/src/Model/filter/types/path/index.ts +0 -4
  434. package/src/Model/filter/types/utils.ts +0 -128
  435. package/src/Model/filter/types/validator.ts +0 -46
  436. package/src/Model/filter/types.ts +0 -6
  437. package/src/Model/query/dsl.ts +0 -2110
  438. package/src/Model/query/new-kid-interpreter.ts +0 -210
  439. package/src/Model/query.ts +0 -13
  440. package/src/Model.ts +0 -3
  441. package/src/Operations.ts +0 -235
  442. package/src/OperationsRepo.ts +0 -16
  443. package/src/QueueMaker/SQLQueue.ts +0 -190
  444. package/src/QueueMaker/memQueue.ts +0 -131
  445. package/src/QueueMaker/sbqueue.ts +0 -134
  446. package/src/QueueMaker/service.ts +0 -17
  447. package/src/RequestContext.ts +0 -63
  448. package/src/RequestFiberSet.ts +0 -105
  449. package/src/Store/ContextMapContainer.ts +0 -20
  450. package/src/Store/index.test.ts.bak +0 -112
  451. package/src/Store/service.ts +0 -184
  452. package/src/Store.ts +0 -1
  453. package/src/adapters/SQL.ts +0 -1
  454. package/src/adapters/ServiceBus.ts +0 -209
  455. package/src/adapters/index.ts +0 -0
  456. package/src/adapters/logger.ts +0 -3
  457. package/src/adapters/memQueue.ts +0 -21
  458. package/src/api/internal/auth.ts +0 -68
  459. package/src/api/middlewares.ts +0 -10
  460. package/src/api/routing/middleware/middleware.ts +0 -128
  461. package/src/api/routing/middleware.ts +0 -6
  462. package/src/api/routing.ts +0 -597
  463. package/src/api/setupRequest.ts +0 -84
  464. package/tsconfig.json.bak +0 -12
  465. /package/dist/{adapters/SQL.d.ts → SQL.d.ts} +0 -0
  466. /package/dist/{api/codec.d.ts → codec.d.ts} +0 -0
  467. /package/dist/{api/internal → internal}/health.d.ts +0 -0
  468. /package/dist/{api/middlewares.d.ts → middlewares.d.ts} +0 -0
  469. /package/dist/{api/routing → routing}/tsort.d.ts +0 -0
  470. /package/dist/{api/util.d.ts → util.d.ts} +0 -0
  471. /package/src/{api/codec.ts → codec.ts} +0 -0
  472. /package/src/{api/internal → internal}/health.ts +0 -0
  473. /package/src/{api/routing → routing}/tsort.ts +0 -0
  474. /package/src/{api/util.ts → util.ts} +0 -0
@@ -0,0 +1,180 @@
1
+ import type { ServiceBusMessage, ServiceBusReceiverOptions } from "@azure/service-bus"
2
+ import { assert, describe, it } from "@effect/vitest"
3
+ import { Context, Effect, Layer, Option, Schema, Stream } from "effect"
4
+ import { ClusterSchema, EntityAddress, EntityId, EntityType, Envelope, Message, MessageStorage, Runners, ShardId, Sharding, ShardingConfig, Snowflake } from "effect/unstable/cluster"
5
+ import { Headers } from "effect/unstable/http"
6
+ import { Rpc } from "effect/unstable/rpc"
7
+ import { type ClusterServiceBusClient, layerClientFrom, layerRunners, makeStoragePoller } from "../src/ClusterServiceBus.js"
8
+
9
+ describe("ClusterServiceBus", () => {
10
+ it.effect("wakes storage polling from topic notifications", () =>
11
+ Effect.gen(function*() {
12
+ let processMessage: (() => Promise<void>) | undefined
13
+ let polls = 0
14
+ let receiverClosed = false
15
+ let subscriptionClosed = false
16
+
17
+ const client: ClusterServiceBusClient = {
18
+ createSender() {
19
+ throw new Error("unused")
20
+ },
21
+ createReceiver(topicName: string, subscriptionName: string, options?: ServiceBusReceiverOptions) {
22
+ assert.strictEqual(topicName, "cluster-notifications")
23
+ assert.strictEqual(subscriptionName, "runner-a")
24
+ assert.strictEqual(options?.receiveMode, "receiveAndDelete")
25
+ return {
26
+ subscribe(handlers) {
27
+ processMessage = handlers.processMessage
28
+ return {
29
+ close() {
30
+ subscriptionClosed = true
31
+ return Promise.resolve()
32
+ }
33
+ }
34
+ },
35
+ close() {
36
+ receiverClosed = true
37
+ return Promise.resolve()
38
+ }
39
+ }
40
+ },
41
+ close() {
42
+ return Promise.resolve()
43
+ }
44
+ }
45
+
46
+ const sharding = Sharding.Sharding.of({
47
+ activeEntityCount: Effect.succeed(0),
48
+ getRegistrationEvents: Stream.empty,
49
+ getShardId: () => ShardId.make("cluster-servicebus", 0),
50
+ getSnowflake: Effect.succeed(Snowflake.Snowflake(1n)),
51
+ hasShardId: () => false,
52
+ isShutdown: Effect.succeed(false),
53
+ makeClient: () => Effect.die("unused"),
54
+ notify: () => Effect.void,
55
+ pollStorage: Effect.sync(() => {
56
+ polls++
57
+ }),
58
+ registerEntity: () => Effect.void,
59
+ registerSingleton: () => Effect.void,
60
+ reset: () => Effect.succeed(false),
61
+ send: () => Effect.void,
62
+ sendOutgoing: () => Effect.void
63
+ })
64
+
65
+ yield* Effect
66
+ .scoped(
67
+ makeStoragePoller({
68
+ topicName: "cluster-notifications",
69
+ subscriptionName: "runner-a"
70
+ })
71
+ .pipe(
72
+ Effect.andThen(
73
+ Effect.gen(function*() {
74
+ if (processMessage === undefined) {
75
+ return yield* Effect.die("missing Service Bus subscription")
76
+ }
77
+ const runProcessMessage = processMessage
78
+ yield* Effect.promise(() => runProcessMessage())
79
+ assert.strictEqual(polls, 1)
80
+ })
81
+ )
82
+ )
83
+ )
84
+ .pipe(
85
+ Effect.provide(layerClientFrom(client)),
86
+ Effect.provide(Layer.succeed(Sharding.Sharding)(sharding))
87
+ )
88
+
89
+ assert.strictEqual(subscriptionClosed, true)
90
+ assert.strictEqual(receiverClosed, true)
91
+ }))
92
+
93
+ it.effect("publishes persisted storage notifications", () =>
94
+ Effect.gen(function*() {
95
+ const sent: Array<ServiceBusMessage> = []
96
+ let senderClosed = false
97
+
98
+ const client: ClusterServiceBusClient = {
99
+ createSender(topicName) {
100
+ assert.strictEqual(topicName, "cluster-notifications")
101
+ return {
102
+ sendMessages(message) {
103
+ sent.push(message)
104
+ return Promise.resolve()
105
+ },
106
+ close() {
107
+ senderClosed = true
108
+ return Promise.resolve()
109
+ }
110
+ }
111
+ },
112
+ createReceiver() {
113
+ throw new Error("unused")
114
+ },
115
+ close() {
116
+ return Promise.resolve()
117
+ }
118
+ }
119
+
120
+ yield* Effect.scoped(
121
+ Effect
122
+ .gen(function*() {
123
+ const runners = yield* Runners.Runners
124
+ yield* runners.notify({
125
+ address: Option.none(),
126
+ discard: true,
127
+ message: yield* makeOutgoingRequest
128
+ })
129
+ })
130
+ .pipe(
131
+ Effect.provide(layerRunners({ topicName: "cluster-notifications" })),
132
+ Effect.provide(layerClientFrom(client)),
133
+ Effect.provide(MessageStorage.layerNoop),
134
+ Effect.provide(ShardingConfig.layerDefaults)
135
+ )
136
+ )
137
+
138
+ assert.strictEqual(senderClosed, true)
139
+ assert.strictEqual(sent.length, 1)
140
+ assert.deepStrictEqual(sent[0]?.body, {
141
+ _tag: "EffectClusterStorageNotification",
142
+ envelopeId: "1",
143
+ requestId: "1",
144
+ shardId: "cluster-servicebus:1",
145
+ entityType: "TestEntity",
146
+ entityId: "entity-1"
147
+ })
148
+ assert.strictEqual(sent[0]?.contentType, "application/json")
149
+ assert.strictEqual(sent[0]?.correlationId, "1")
150
+ assert.strictEqual(sent[0]?.messageId, "1")
151
+ assert.strictEqual(sent[0]?.subject, "EffectClusterStorageNotification")
152
+ }))
153
+ })
154
+
155
+ const TestRpc = Rpc
156
+ .make("TestRpc", {
157
+ payload: { id: Schema.Number }
158
+ })
159
+ .annotate(ClusterSchema.Persisted, true)
160
+
161
+ const makeOutgoingRequest = Effect.sync(() =>
162
+ new Message.OutgoingRequest({
163
+ annotations: TestRpc.annotations,
164
+ context: Context.empty(),
165
+ envelope: Envelope.makeRequest<typeof TestRpc>({
166
+ address: EntityAddress.make({
167
+ entityId: EntityId.make("entity-1"),
168
+ entityType: EntityType.make("TestEntity"),
169
+ shardId: ShardId.make("cluster-servicebus", 1)
170
+ }),
171
+ headers: Headers.empty,
172
+ payload: { id: 1 },
173
+ requestId: Snowflake.Snowflake(1n),
174
+ tag: TestRpc._tag
175
+ }),
176
+ lastReceivedReply: Option.none(),
177
+ respond: () => Effect.void,
178
+ rpc: TestRpc
179
+ })
180
+ )
@@ -0,0 +1,205 @@
1
+ import { SqliteClient } from "@effect/sql-sqlite-node"
2
+ import { assert, describe, it } from "@effect/vitest"
3
+ import { Context, Duration, Effect, Exit, Fiber, Layer, Option, Schema } from "effect"
4
+ import { ClusterSchema, ClusterWorkflowEngine, RunnerAddress, RunnerHealth, Runners, Sharding, ShardingConfig, SqlMessageStorage, SqlRunnerStorage } from "effect/unstable/cluster"
5
+ import { DurableDeferred, Workflow } from "effect/unstable/workflow"
6
+
7
+ const testRunId = `${Date.now()}-${process.pid}-${Math.random().toString(16).slice(2)}`
8
+ const runnerPortBase = 10000 + Date.now() % 40000
9
+
10
+ describe("ClusterSqlite Workflow", () => {
11
+ it.live("resumes a running workflow suspended on a durable deferred", () =>
12
+ Effect
13
+ .gen(function*() {
14
+ const sharding = yield* Sharding.Sharding
15
+ const payload = { id: `deferred-${testRunId}` }
16
+ const executionId = yield* SqliteDeferredWorkflow.executionId(payload)
17
+
18
+ const fiber = yield* SqliteDeferredWorkflow.execute(payload).pipe(Effect.forkScoped)
19
+ yield* waitForDeferredWorkflowSuspended(executionId)
20
+
21
+ const token = yield* DurableDeferred.tokenFromPayload(SqliteDeferred, {
22
+ workflow: SqliteDeferredWorkflow,
23
+ payload
24
+ })
25
+ yield* DurableDeferred.done(SqliteDeferred, { token, exit: Exit.succeed("resolved") })
26
+ yield* sharding.pollStorage
27
+
28
+ const value = yield* Fiber.join(fiber).pipe(Effect.timeout(Duration.seconds(15)))
29
+ assert.strictEqual(value, `${payload.id}:resolved`)
30
+ assert.strictEqual(yield* waitForDeferredWorkflowComplete(executionId), `${payload.id}:resolved`)
31
+ })
32
+ .pipe(Effect.provide(clusterWorkflowLayer())), 30000)
33
+
34
+ it.live("progresses through sequential durable deferred steps", () =>
35
+ Effect
36
+ .gen(function*() {
37
+ const log = yield* StepLog
38
+ const sharding = yield* Sharding.Sharding
39
+ const payload = { id: `steps-${testRunId}` }
40
+ const executionId = yield* SequentialDeferredWorkflow.executionId(payload)
41
+
42
+ const fiber = yield* SequentialDeferredWorkflow.execute(payload).pipe(Effect.forkScoped)
43
+ yield* waitForSequentialWorkflowSuspended(executionId)
44
+
45
+ yield* completeStep(SequentialStep1, payload, "one")
46
+ yield* sharding.pollStorage
47
+ yield* waitForStep(log, "step-1")
48
+
49
+ yield* completeStep(SequentialStep2, payload, "two")
50
+ yield* sharding.pollStorage
51
+ yield* waitForStep(log, "step-2")
52
+
53
+ yield* completeStep(SequentialStep3, payload, "three")
54
+ yield* sharding.pollStorage
55
+
56
+ const value = yield* Fiber.join(fiber).pipe(Effect.timeout(Duration.seconds(15)))
57
+ assert.strictEqual(value, "one:two:three")
58
+ assert(log.steps.includes("step-3"))
59
+ })
60
+ .pipe(Effect.provide(clusterWorkflowLayer())), 30000)
61
+ })
62
+
63
+ class StepLog extends Context.Service<StepLog, { readonly steps: Array<string> }>()("StepLog") {
64
+ static readonly layer = Layer.effect(StepLog, Effect.sync(() => ({ steps: [] })))
65
+ }
66
+
67
+ const SqliteDeferred = DurableDeferred.make("ClusterSqlite/Deferred", { success: Schema.String })
68
+
69
+ const SqliteDeferredWorkflow = Workflow
70
+ .make("ClusterSqlite/DeferredWorkflow", {
71
+ payload: { id: Schema.String },
72
+ success: Schema.String,
73
+ idempotencyKey: ({ id }) => id
74
+ })
75
+ .annotate(ClusterSchema.ShardGroup, () => testShardGroup("workflow"))
76
+
77
+ const SqliteDeferredWorkflowLayer = SqliteDeferredWorkflow.toLayer(Effect.fnUntraced(function*({ id }) {
78
+ const value = yield* DurableDeferred.await(SqliteDeferred)
79
+ return `${id}:${value}`
80
+ }))
81
+
82
+ const SequentialStep1 = DurableDeferred.make("ClusterSqlite/SequentialStep1", { success: Schema.String })
83
+ const SequentialStep2 = DurableDeferred.make("ClusterSqlite/SequentialStep2", { success: Schema.String })
84
+ const SequentialStep3 = DurableDeferred.make("ClusterSqlite/SequentialStep3", { success: Schema.String })
85
+
86
+ const SequentialDeferredWorkflow = Workflow
87
+ .make("ClusterSqlite/SequentialDeferredWorkflow", {
88
+ payload: { id: Schema.String },
89
+ success: Schema.String,
90
+ idempotencyKey: ({ id }) => id
91
+ })
92
+ .annotate(ClusterSchema.ShardGroup, () => testShardGroup("workflow"))
93
+
94
+ const SequentialDeferredWorkflowLayer = SequentialDeferredWorkflow.toLayer(Effect.fnUntraced(function*() {
95
+ const log = yield* StepLog
96
+ const step1 = yield* DurableDeferred.await(SequentialStep1)
97
+ log.steps.push("step-1")
98
+ const step2 = yield* DurableDeferred.await(SequentialStep2)
99
+ log.steps.push("step-2")
100
+ const step3 = yield* DurableDeferred.await(SequentialStep3)
101
+ log.steps.push("step-3")
102
+ return `${step1}:${step2}:${step3}`
103
+ }))
104
+
105
+ const clusterWorkflowLayer = () => {
106
+ const prefix = "test_cluster_sqlite"
107
+ const config = ShardingConfig.layer({
108
+ runnerAddress: Option.some(testRunnerAddress(20)),
109
+ shardsPerGroup: 1,
110
+ availableShardGroups: [testShardGroup("workflow")],
111
+ assignedShardGroups: [testShardGroup("workflow")],
112
+ entityTerminationTimeout: 0,
113
+ entityMessagePollInterval: 50,
114
+ entityReplyPollInterval: 50,
115
+ refreshAssignmentsInterval: 0,
116
+ sendRetryInterval: 50
117
+ })
118
+ const storage = Layer
119
+ .merge(
120
+ SqlMessageStorage.layerWith({ prefix }),
121
+ Layer.orDie(SqlRunnerStorage.layerWith({ prefix }))
122
+ )
123
+ .pipe(Layer.provide(SqliteClient.layer({ filename: ":memory:" })))
124
+
125
+ return Layer
126
+ .merge(SqliteDeferredWorkflowLayer, SequentialDeferredWorkflowLayer)
127
+ .pipe(
128
+ Layer.provideMerge(StepLog.layer),
129
+ Layer.provideMerge(
130
+ ClusterWorkflowEngine.layer.pipe(
131
+ Layer.provideMerge(Sharding.layer),
132
+ Layer.provide(Runners.layerNoop),
133
+ Layer.provide(RunnerHealth.layerNoop),
134
+ Layer.provide(storage),
135
+ Layer.provide(config)
136
+ )
137
+ )
138
+ )
139
+ }
140
+
141
+ const completeStep = <Success extends Schema.Top>(
142
+ deferred: DurableDeferred.DurableDeferred<Success, Schema.Never>,
143
+ payload: { readonly id: string },
144
+ value: Success["Type"]
145
+ ) =>
146
+ Effect.gen(function*() {
147
+ const token = yield* DurableDeferred.tokenFromPayload(deferred, {
148
+ workflow: SequentialDeferredWorkflow,
149
+ payload
150
+ })
151
+ yield* DurableDeferred.done(deferred, { token, exit: Exit.succeed(value) })
152
+ })
153
+
154
+ const waitForDeferredWorkflowSuspended = (executionId: string) => waitForSuspended(SqliteDeferredWorkflow, executionId)
155
+
156
+ const waitForSequentialWorkflowSuspended = (executionId: string) =>
157
+ waitForSuspended(SequentialDeferredWorkflow, executionId)
158
+
159
+ const waitForSuspended = <A, E, R>(
160
+ workflow: {
161
+ readonly poll: (
162
+ executionId: string
163
+ ) => Effect.Effect<Option.Option<Workflow.Result<A, E>>, never, R>
164
+ },
165
+ executionId: string
166
+ ) =>
167
+ Effect.gen(function*() {
168
+ const sharding = yield* Sharding.Sharding
169
+ for (let i = 0; i < 100; i++) {
170
+ yield* sharding.pollStorage
171
+ const polled = yield* workflow.poll(executionId)
172
+ if (Option.isSome(polled) && polled.value._tag === "Suspended") return
173
+ yield* Effect.sleep(Duration.millis(100))
174
+ }
175
+ return yield* Effect.fail(new Error(`Workflow ${executionId} did not suspend`))
176
+ })
177
+
178
+ const waitForDeferredWorkflowComplete = (executionId: string) =>
179
+ Effect.gen(function*() {
180
+ const sharding = yield* Sharding.Sharding
181
+ for (let i = 0; i < 100; i++) {
182
+ yield* sharding.pollStorage
183
+ const polled = yield* SqliteDeferredWorkflow.poll(executionId)
184
+ if (Option.isSome(polled) && polled.value._tag === "Complete") {
185
+ const exit = polled.value.exit
186
+ assert(Exit.isSuccess(exit))
187
+ return exit.value
188
+ }
189
+ yield* Effect.sleep(Duration.millis(100))
190
+ }
191
+ return yield* Effect.fail(new Error(`Workflow ${executionId} did not complete`))
192
+ })
193
+
194
+ const waitForStep = (log: StepLog["Service"], step: string) =>
195
+ Effect.gen(function*() {
196
+ for (let i = 0; i < 100; i++) {
197
+ if (log.steps.includes(step)) return
198
+ yield* Effect.sleep(Duration.millis(100))
199
+ }
200
+ return yield* Effect.fail(new Error(`Workflow did not reach ${step}`))
201
+ })
202
+
203
+ const testShardGroup = (label: string) => `cluster-sqlite-${testRunId}-${label}`
204
+
205
+ const testRunnerAddress = (offset: number) => RunnerAddress.make("localhost", runnerPortBase + offset)
@@ -1,12 +1,15 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
3
3
  import { expectTypeOf, it } from "@effect/vitest"
4
- import { Effect, Layer, Scope, ServiceMap } from "effect-app"
5
- import { ContextProvider, mergeContextProviders, MergedContextProvider } from "../src/api/ContextProvider.js"
4
+ import * as Context from "effect-app/Context"
5
+ import * as Effect from "effect-app/Effect"
6
+ import * as Layer from "effect-app/Layer"
7
+ import * as Scope from "effect/Scope"
8
+ import { ContextProvider, mergeContextProviders, MergedContextProvider } from "../src/ContextProvider.js"
6
9
  import { CustomError1, Some, SomeElse, SomeService } from "./fixtures.js"
7
10
 
8
11
  // @effect-diagnostics-next-line missingEffectServiceDependency:off
9
- class MyContextProvider extends ServiceMap.Service<MyContextProvider>()(
12
+ class MyContextProvider extends Context.Service<MyContextProvider>()(
10
13
  "MyContextProvider",
11
14
  {
12
15
  make: Effect.gen(function*() {
@@ -20,7 +23,7 @@ class MyContextProvider extends ServiceMap.Service<MyContextProvider>()(
20
23
  yield* Effect.logInfo("MyContextProviderGen", "this is a generator")
21
24
  yield* Effect.succeed("this is a generator")
22
25
 
23
- return Some.serviceMap({ a: 1 })
26
+ return Some.context({ a: 1 })
24
27
  })
25
28
  })
26
29
  }
@@ -28,7 +31,7 @@ class MyContextProvider extends ServiceMap.Service<MyContextProvider>()(
28
31
  static readonly Default = Layer.effect(this, this.make)
29
32
  }
30
33
 
31
- class MyContextProvider2 extends ServiceMap.Service<MyContextProvider2>()(
34
+ class MyContextProvider2 extends Context.Service<MyContextProvider2>()(
32
35
  "MyContextProvider2",
33
36
  {
34
37
  make: Effect.gen(function*() {
@@ -37,7 +40,7 @@ class MyContextProvider2 extends ServiceMap.Service<MyContextProvider2>()(
37
40
  return Effect.gen(function*() {
38
41
  // we test without dependencies, so that we end up with an R of never.
39
42
 
40
- return SomeElse.serviceMap({ b: 2 })
43
+ return SomeElse.context({ b: 2 })
41
44
  })
42
45
  })
43
46
  }
@@ -45,7 +48,7 @@ class MyContextProvider2 extends ServiceMap.Service<MyContextProvider2>()(
45
48
  static readonly Default = Layer.effect(this, this.make)
46
49
  }
47
50
 
48
- class MyContextProvider2Gen extends ServiceMap.Service<MyContextProvider2Gen>()(
51
+ class MyContextProvider2Gen extends Context.Service<MyContextProvider2Gen>()(
49
52
  "MyContextProvider2Gen",
50
53
  {
51
54
  make: Effect.gen(function*() {
@@ -54,7 +57,7 @@ class MyContextProvider2Gen extends ServiceMap.Service<MyContextProvider2Gen>()(
54
57
  return function*() {
55
58
  // we test without dependencies, so that we end up with an R of never
56
59
 
57
- return SomeElse.serviceMap({ b: 2 })
60
+ return SomeElse.context({ b: 2 })
58
61
  }
59
62
  })
60
63
  }
@@ -63,7 +66,7 @@ class MyContextProvider2Gen extends ServiceMap.Service<MyContextProvider2Gen>()(
63
66
  }
64
67
 
65
68
  // @effect-diagnostics-next-line missingEffectServiceDependency:off
66
- class MyContextProviderGen extends ServiceMap.Service<MyContextProviderGen>()(
69
+ class MyContextProviderGen extends Context.Service<MyContextProviderGen>()(
67
70
  "MyContextProviderGen",
68
71
  {
69
72
  make: Effect.gen(function*() {
@@ -77,7 +80,7 @@ class MyContextProviderGen extends ServiceMap.Service<MyContextProviderGen>()(
77
80
  yield* Effect.logInfo("MyContextProviderGen", "this is a generator")
78
81
  yield* Effect.succeed("this is a generator")
79
82
 
80
- return Some.serviceMap({ a: 1 })
83
+ return Some.context({ a: 1 })
81
84
  }
82
85
  })
83
86
  }
@@ -100,7 +103,7 @@ export const someContextProvider = ContextProvider({
100
103
  // currently the effectful context provider cannot trigger an error when building the per request context
101
104
  // if (Math.random() > 0.5) return yield* new CustomError2()
102
105
 
103
- return Some.serviceMap({ a: 1 })
106
+ return Some.context({ a: 1 })
104
107
  })
105
108
  })
106
109
  })
@@ -119,7 +122,7 @@ export const someContextProviderGen = ContextProvider({
119
122
  // currently the effectful context provider cannot trigger an error when building the per request context
120
123
  // if (Math.random() > 0.5) return yield* new CustomError2()
121
124
 
122
- return Some.serviceMap({ a: 1 })
125
+ return Some.context({ a: 1 })
123
126
  }
124
127
  })
125
128
  })
@@ -1,16 +1,20 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
3
- import { type MakeContext, type MakeErrors, makeRouter } from "@effect-app/infra/api/routing"
3
+ import { type MakeContext, type MakeErrors, makeRouter } from "@effect-app/infra/routing"
4
4
  import { expect, expectTypeOf, it } from "@effect/vitest"
5
- import { Effect, Layer, S, Scope, ServiceMap } from "effect-app"
6
5
  import { InvalidStateError, makeRpcClient, UnauthorizedError } from "effect-app/client"
6
+ import * as Context from "effect-app/Context"
7
+ import * as Effect from "effect-app/Effect"
8
+ import * as Layer from "effect-app/Layer"
7
9
  import { DefaultGenericMiddlewares } from "effect-app/middleware"
8
10
  import * as RpcX from "effect-app/rpc"
9
11
  import { MiddlewareMaker } from "effect-app/rpc"
12
+ import * as S from "effect-app/Schema"
10
13
  import { TypeTestId } from "effect-app/TypeTest"
14
+ import * as Scope from "effect/Scope"
11
15
  import { type RpcSerialization } from "effect/unstable/rpc"
12
- import { DefaultGenericMiddlewaresLive, DevModeMiddlewareLive } from "../src/api/routing/middleware.js"
13
- import { sort } from "../src/api/routing/tsort.js"
16
+ import { DefaultGenericMiddlewaresLive, DevModeMiddlewareLive } from "../src/routing/middleware.js"
17
+ import { sort } from "../src/routing/tsort.js"
14
18
  import { AllowAnonymous, AllowAnonymousLive, CustomError1, RequestContextMap, RequireRoles, RequireRolesLive, Some, SomeElse, SomeService, Test, TestLive } from "./fixtures.js"
15
19
 
16
20
  class MyContextProvider extends RpcX.RpcMiddleware.Tag<MyContextProvider, {
@@ -99,7 +103,7 @@ class MyContextProvider2
99
103
 
100
104
  //
101
105
 
102
- class Str extends ServiceMap.Service<Str, "str">()("str") {}
106
+ class Str extends Context.Service<Str, "str">()("str") {}
103
107
 
104
108
  export class BogusMiddleware extends RpcX.RpcMiddleware.Tag<BogusMiddleware>()("BogusMiddleware") {
105
109
  static Default = Layer.make(this, {
@@ -188,13 +192,6 @@ const middlewareQuater = MiddlewareMaker
188
192
 
189
193
  expectTypeOf(middleware["Service"]).toEqualTypeOf<typeof middlewareQuater["Service"]>()
190
194
 
191
- const middleware2 = MiddlewareMaker
192
- .Tag()("middleware", RequestContextMap)
193
- .middleware(MyContextProvider)
194
- .middleware(RequireRoles, Test)
195
- .middleware(AllowAnonymous)
196
- .middleware(...DefaultGenericMiddlewares, BogusMiddleware, MyContextProvider2)
197
-
198
195
  export const middleware3 = MiddlewareMaker
199
196
  .Tag()("middleware", RequestContextMap)
200
197
  .middleware(...genericMiddlewares)
@@ -202,12 +199,17 @@ export const middleware3 = MiddlewareMaker
202
199
  .middleware(Test)
203
200
  .middleware(BogusMiddleware)
204
201
 
205
- export const { TaggedRequest: Req } = makeRpcClient(RequestContextMap)
202
+ export const { TaggedRequestFor } = makeRpcClient(middleware)
203
+ const Req = TaggedRequestFor("Something")
204
+ const Command = Req.Command
205
+ const Query = Req.Query
206
+
207
+ export class Eff extends Command<Eff>()("Eff", {}, { success: S.Void }) {}
208
+ export class Gen extends Command<Gen>()("Gen", {}) {}
206
209
 
207
- export class Eff extends Req<Eff>()("Eff", {}, { success: S.Void }) {}
208
- export class Gen extends Req<Gen>()("Gen", {}, { success: S.Void }) {}
210
+ expectTypeOf(Eff.error).toEqualTypeOf<typeof Gen.error>()
209
211
 
210
- export class DoSomething extends Req<DoSomething>()("DoSomething", {
212
+ export class DoSomething extends Command<DoSomething>()("DoSomething", {
211
213
  id: S.String
212
214
  }, { success: S.Void }) {}
213
215
 
@@ -225,20 +227,20 @@ export class DoSomething extends Req<DoSomething>()("DoSomething", {
225
227
  // )
226
228
  // )
227
229
 
228
- export class GetSomething extends Req<GetSomething>()("GetSomething", {
230
+ export class GetSomething extends Query<GetSomething>()("GetSomething", {
229
231
  id: S.String
230
- }, { success: S.String }) {}
232
+ }, { success: S.String, error: UnauthorizedError }) {}
231
233
 
232
- export class GetSomething2 extends Req<GetSomething2>()("GetSomething2", {
234
+ export class GetSomething2 extends Query<GetSomething2>()("GetSomething2", {
233
235
  id: S.String
234
- }, { success: S.NumberFromString }) {}
236
+ }, { success: S.FiniteFromString }) {}
235
237
 
236
- const Something = { Eff, Gen, DoSomething, GetSomething, GetSomething2, meta: { moduleName: "Something" as const } }
238
+ const Something = { Eff, Gen, DoSomething, GetSomething, GetSomething2 }
237
239
 
238
240
  // const client = ApiClientFactory.makeFor(Layer.empty)(Something)
239
241
  // client.pipe(Effect.map(c => c.DoSomething.name))
240
242
 
241
- export class SomethingService extends ServiceMap.Service<SomethingService>()(
243
+ export class SomethingService extends Context.Service<SomethingService>()(
242
244
  "SomethingService",
243
245
  {
244
246
  make: Effect.gen(function*() {
@@ -258,7 +260,7 @@ declare const a: {
258
260
  (opt: { b: 3 }): void
259
261
  }
260
262
 
261
- export class SomethingRepo extends ServiceMap.Service<SomethingRepo>()(
263
+ export class SomethingRepo extends Context.Service<SomethingRepo>()(
262
264
  "SomethingRepo",
263
265
  {
264
266
  make: Effect.gen(function*() {
@@ -271,7 +273,7 @@ export class SomethingRepo extends ServiceMap.Service<SomethingRepo>()(
271
273
  static Default = Layer.effect(this, this.make).pipe(Layer.provide(SomethingService.Default))
272
274
  }
273
275
 
274
- export class SomethingService2 extends ServiceMap.Service<SomethingService2>()(
276
+ export class SomethingService2 extends Context.Service<SomethingService2>()(
275
277
  "SomethingService2",
276
278
  {
277
279
  make: Effect.gen(function*() {
@@ -282,13 +284,9 @@ export class SomethingService2 extends ServiceMap.Service<SomethingService2>()(
282
284
  static Default = Layer.effect(this, this.make)
283
285
  }
284
286
 
285
- export const { Router, matchAll } = makeRouter(
286
- middleware
287
- )
287
+ export const { Router, matchAll } = makeRouter(middleware.Default)
288
288
 
289
- export const r2 = makeRouter(
290
- Object.assign(middleware2, { Default: middleware2.layer.pipe(Layer.provide([...MiddlewaresLive])) })
291
- )
289
+ export const r2 = makeRouter(middleware.Default)
292
290
 
293
291
  const router = Router(Something)({
294
292
  dependencies: [
@@ -346,7 +344,7 @@ const router = Router(Something)({
346
344
  }
347
345
  },
348
346
  GetSomething2: {
349
- raw: Some.use(() => Effect.succeed("12"))
347
+ raw: () => Some.use(() => Effect.succeed("12"))
350
348
  }
351
349
  })
352
350
  }
@@ -411,7 +409,7 @@ const router2 = r2.Router(Something)({
411
409
  }
412
410
  },
413
411
  GetSomething2: {
414
- raw: Some.use(() => Effect.succeed("12"))
412
+ raw: () => Some.use(() => Effect.succeed("12"))
415
413
  }
416
414
  })
417
415
  }