threadforge 0.1.0 → 0.2.1

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 (359) hide show
  1. package/README.md +52 -20
  2. package/bin/forge.js +2 -1049
  3. package/bin/host-commands.d.ts +2 -0
  4. package/bin/host-commands.d.ts.map +1 -0
  5. package/bin/host-commands.js +7 -8
  6. package/bin/platform-commands.d.ts +2 -0
  7. package/bin/platform-commands.d.ts.map +1 -0
  8. package/bin/platform-commands.js +160 -49
  9. package/dist/cli/base-command.d.ts +12 -0
  10. package/dist/cli/base-command.d.ts.map +1 -0
  11. package/dist/cli/base-command.js +25 -0
  12. package/dist/cli/base-command.js.map +1 -0
  13. package/dist/cli/commands/build.d.ts +10 -0
  14. package/dist/cli/commands/build.d.ts.map +1 -0
  15. package/dist/cli/commands/build.js +110 -0
  16. package/dist/cli/commands/build.js.map +1 -0
  17. package/dist/cli/commands/deploy.d.ts +12 -0
  18. package/dist/cli/commands/deploy.d.ts.map +1 -0
  19. package/dist/cli/commands/deploy.js +143 -0
  20. package/dist/cli/commands/deploy.js.map +1 -0
  21. package/dist/cli/commands/dev.d.ts +10 -0
  22. package/dist/cli/commands/dev.d.ts.map +1 -0
  23. package/dist/cli/commands/dev.js +138 -0
  24. package/dist/cli/commands/dev.js.map +1 -0
  25. package/dist/cli/commands/generate.d.ts +10 -0
  26. package/dist/cli/commands/generate.d.ts.map +1 -0
  27. package/dist/cli/commands/generate.js +76 -0
  28. package/dist/cli/commands/generate.js.map +1 -0
  29. package/dist/cli/commands/host.d.ts +8 -0
  30. package/dist/cli/commands/host.d.ts.map +1 -0
  31. package/dist/cli/commands/host.js +20 -0
  32. package/dist/cli/commands/host.js.map +1 -0
  33. package/dist/cli/commands/init.d.ts +16 -0
  34. package/dist/cli/commands/init.d.ts.map +1 -0
  35. package/dist/cli/commands/init.js +246 -0
  36. package/dist/cli/commands/init.js.map +1 -0
  37. package/dist/cli/commands/platform.d.ts +8 -0
  38. package/dist/cli/commands/platform.d.ts.map +1 -0
  39. package/dist/cli/commands/platform.js +20 -0
  40. package/dist/cli/commands/platform.js.map +1 -0
  41. package/dist/cli/commands/restart.d.ts +8 -0
  42. package/dist/cli/commands/restart.d.ts.map +1 -0
  43. package/dist/cli/commands/restart.js +13 -0
  44. package/dist/cli/commands/restart.js.map +1 -0
  45. package/dist/cli/commands/scaffold/frontend.d.ts +10 -0
  46. package/dist/cli/commands/scaffold/frontend.d.ts.map +1 -0
  47. package/dist/cli/commands/scaffold/frontend.js +130 -0
  48. package/dist/cli/commands/scaffold/frontend.js.map +1 -0
  49. package/dist/cli/commands/scaffold/react.d.ts +7 -0
  50. package/dist/cli/commands/scaffold/react.d.ts.map +1 -0
  51. package/dist/cli/commands/scaffold/react.js +12 -0
  52. package/dist/cli/commands/scaffold/react.js.map +1 -0
  53. package/dist/cli/commands/scale.d.ts +8 -0
  54. package/dist/cli/commands/scale.d.ts.map +1 -0
  55. package/dist/cli/commands/scale.js +13 -0
  56. package/dist/cli/commands/scale.js.map +1 -0
  57. package/dist/cli/commands/start.d.ts +10 -0
  58. package/dist/cli/commands/start.d.ts.map +1 -0
  59. package/dist/cli/commands/start.js +71 -0
  60. package/dist/cli/commands/start.js.map +1 -0
  61. package/dist/cli/commands/status.d.ts +11 -0
  62. package/dist/cli/commands/status.d.ts.map +1 -0
  63. package/dist/cli/commands/status.js +60 -0
  64. package/dist/cli/commands/status.js.map +1 -0
  65. package/dist/cli/commands/stop.d.ts +10 -0
  66. package/dist/cli/commands/stop.d.ts.map +1 -0
  67. package/dist/cli/commands/stop.js +89 -0
  68. package/dist/cli/commands/stop.js.map +1 -0
  69. package/dist/cli/util/config-discovery.d.ts +8 -0
  70. package/dist/cli/util/config-discovery.d.ts.map +1 -0
  71. package/dist/cli/util/config-discovery.js +70 -0
  72. package/dist/cli/util/config-discovery.js.map +1 -0
  73. package/dist/cli/util/config-patcher.d.ts +17 -0
  74. package/dist/cli/util/config-patcher.d.ts.map +1 -0
  75. package/dist/cli/util/config-patcher.js +439 -0
  76. package/dist/cli/util/config-patcher.js.map +1 -0
  77. package/dist/cli/util/frontend-dev.d.ts +8 -0
  78. package/dist/cli/util/frontend-dev.d.ts.map +1 -0
  79. package/dist/cli/util/frontend-dev.js +117 -0
  80. package/dist/cli/util/frontend-dev.js.map +1 -0
  81. package/dist/cli/util/process.d.ts +5 -0
  82. package/dist/cli/util/process.d.ts.map +1 -0
  83. package/dist/cli/util/process.js +17 -0
  84. package/dist/cli/util/process.js.map +1 -0
  85. package/dist/cli/util/templates.d.ts +10 -0
  86. package/dist/cli/util/templates.d.ts.map +1 -0
  87. package/dist/cli/util/templates.js +157 -0
  88. package/dist/cli/util/templates.js.map +1 -0
  89. package/dist/core/AlertSink.d.ts +83 -0
  90. package/dist/core/AlertSink.d.ts.map +1 -0
  91. package/dist/core/AlertSink.js +126 -0
  92. package/dist/core/AlertSink.js.map +1 -0
  93. package/dist/core/DirectMessageBus.d.ts +88 -0
  94. package/dist/core/DirectMessageBus.d.ts.map +1 -0
  95. package/dist/core/DirectMessageBus.js +352 -0
  96. package/dist/core/DirectMessageBus.js.map +1 -0
  97. package/dist/core/EndpointResolver.d.ts +111 -0
  98. package/dist/core/EndpointResolver.d.ts.map +1 -0
  99. package/dist/core/EndpointResolver.js +336 -0
  100. package/dist/core/EndpointResolver.js.map +1 -0
  101. package/dist/core/ForgeContext.d.ts +221 -0
  102. package/dist/core/ForgeContext.d.ts.map +1 -0
  103. package/dist/core/ForgeContext.js +1169 -0
  104. package/dist/core/ForgeContext.js.map +1 -0
  105. package/dist/core/ForgeEndpoints.d.ts +71 -0
  106. package/dist/core/ForgeEndpoints.d.ts.map +1 -0
  107. package/dist/core/ForgeEndpoints.js +442 -0
  108. package/dist/core/ForgeEndpoints.js.map +1 -0
  109. package/dist/core/ForgeHost.d.ts +82 -0
  110. package/dist/core/ForgeHost.d.ts.map +1 -0
  111. package/dist/core/ForgeHost.js +107 -0
  112. package/dist/core/ForgeHost.js.map +1 -0
  113. package/dist/core/ForgePlatform.d.ts +96 -0
  114. package/dist/core/ForgePlatform.d.ts.map +1 -0
  115. package/dist/core/ForgePlatform.js +136 -0
  116. package/dist/core/ForgePlatform.js.map +1 -0
  117. package/dist/core/ForgeWebSocket.d.ts +56 -0
  118. package/dist/core/ForgeWebSocket.d.ts.map +1 -0
  119. package/dist/core/ForgeWebSocket.js +415 -0
  120. package/dist/core/ForgeWebSocket.js.map +1 -0
  121. package/dist/core/Ingress.d.ts +329 -0
  122. package/dist/core/Ingress.d.ts.map +1 -0
  123. package/dist/core/Ingress.js +694 -0
  124. package/dist/core/Ingress.js.map +1 -0
  125. package/dist/core/Interceptors.d.ts +134 -0
  126. package/dist/core/Interceptors.d.ts.map +1 -0
  127. package/dist/core/Interceptors.js +416 -0
  128. package/dist/core/Interceptors.js.map +1 -0
  129. package/dist/core/Logger.d.ts +20 -0
  130. package/dist/core/Logger.d.ts.map +1 -0
  131. package/dist/core/Logger.js +77 -0
  132. package/dist/core/Logger.js.map +1 -0
  133. package/dist/core/MessageBus.d.ts +15 -0
  134. package/dist/core/MessageBus.d.ts.map +1 -0
  135. package/dist/core/MessageBus.js +18 -0
  136. package/dist/core/MessageBus.js.map +1 -0
  137. package/dist/core/Prometheus.d.ts +80 -0
  138. package/dist/core/Prometheus.d.ts.map +1 -0
  139. package/dist/core/Prometheus.js +332 -0
  140. package/dist/core/Prometheus.js.map +1 -0
  141. package/dist/core/RequestContext.d.ts +214 -0
  142. package/dist/core/RequestContext.d.ts.map +1 -0
  143. package/dist/core/RequestContext.js +556 -0
  144. package/dist/core/RequestContext.js.map +1 -0
  145. package/dist/core/Router.d.ts +45 -0
  146. package/dist/core/Router.d.ts.map +1 -0
  147. package/dist/core/Router.js +285 -0
  148. package/dist/core/Router.js.map +1 -0
  149. package/dist/core/RoutingStrategy.d.ts +116 -0
  150. package/dist/core/RoutingStrategy.d.ts.map +1 -0
  151. package/dist/core/RoutingStrategy.js +306 -0
  152. package/dist/core/RoutingStrategy.js.map +1 -0
  153. package/dist/core/RpcConfig.d.ts +72 -0
  154. package/dist/core/RpcConfig.d.ts.map +1 -0
  155. package/dist/core/RpcConfig.js +127 -0
  156. package/dist/core/RpcConfig.js.map +1 -0
  157. package/dist/core/SignatureCache.d.ts +81 -0
  158. package/dist/core/SignatureCache.d.ts.map +1 -0
  159. package/dist/core/SignatureCache.js +172 -0
  160. package/dist/core/SignatureCache.js.map +1 -0
  161. package/dist/core/StaticFileServer.d.ts +34 -0
  162. package/dist/core/StaticFileServer.d.ts.map +1 -0
  163. package/dist/core/StaticFileServer.js +497 -0
  164. package/dist/core/StaticFileServer.js.map +1 -0
  165. package/dist/core/Supervisor.d.ts +198 -0
  166. package/dist/core/Supervisor.d.ts.map +1 -0
  167. package/dist/core/Supervisor.js +1418 -0
  168. package/dist/core/Supervisor.js.map +1 -0
  169. package/dist/core/ThreadAllocator.d.ts +52 -0
  170. package/dist/core/ThreadAllocator.d.ts.map +1 -0
  171. package/dist/core/ThreadAllocator.js +174 -0
  172. package/dist/core/ThreadAllocator.js.map +1 -0
  173. package/dist/core/WorkerChannelManager.d.ts +130 -0
  174. package/dist/core/WorkerChannelManager.d.ts.map +1 -0
  175. package/dist/core/WorkerChannelManager.js +956 -0
  176. package/dist/core/WorkerChannelManager.js.map +1 -0
  177. package/dist/core/config-enums.d.ts +41 -0
  178. package/dist/core/config-enums.d.ts.map +1 -0
  179. package/dist/core/config-enums.js +59 -0
  180. package/dist/core/config-enums.js.map +1 -0
  181. package/dist/core/config.d.ts +159 -0
  182. package/dist/core/config.d.ts.map +1 -0
  183. package/dist/core/config.js +694 -0
  184. package/dist/core/config.js.map +1 -0
  185. package/dist/core/host-config.d.ts +146 -0
  186. package/dist/core/host-config.d.ts.map +1 -0
  187. package/dist/core/host-config.js +312 -0
  188. package/dist/core/host-config.js.map +1 -0
  189. package/dist/core/ipc-errors.d.ts +27 -0
  190. package/dist/core/ipc-errors.d.ts.map +1 -0
  191. package/dist/core/ipc-errors.js +36 -0
  192. package/dist/core/ipc-errors.js.map +1 -0
  193. package/dist/core/network-utils.d.ts +35 -0
  194. package/dist/core/network-utils.d.ts.map +1 -0
  195. package/dist/core/network-utils.js +145 -0
  196. package/dist/core/network-utils.js.map +1 -0
  197. package/dist/core/platform-config.d.ts +142 -0
  198. package/dist/core/platform-config.d.ts.map +1 -0
  199. package/dist/core/platform-config.js +299 -0
  200. package/dist/core/platform-config.js.map +1 -0
  201. package/dist/decorators/ServiceProxy.d.ts +175 -0
  202. package/dist/decorators/ServiceProxy.d.ts.map +1 -0
  203. package/dist/decorators/ServiceProxy.js +969 -0
  204. package/dist/decorators/ServiceProxy.js.map +1 -0
  205. package/dist/decorators/index.d.ts +146 -0
  206. package/dist/decorators/index.d.ts.map +1 -0
  207. package/dist/decorators/index.js +545 -0
  208. package/dist/decorators/index.js.map +1 -0
  209. package/dist/deploy/NginxGenerator.d.ts +165 -0
  210. package/dist/deploy/NginxGenerator.d.ts.map +1 -0
  211. package/dist/deploy/NginxGenerator.js +781 -0
  212. package/dist/deploy/NginxGenerator.js.map +1 -0
  213. package/dist/deploy/PlatformManifestGenerator.d.ts +43 -0
  214. package/dist/deploy/PlatformManifestGenerator.d.ts.map +1 -0
  215. package/dist/deploy/PlatformManifestGenerator.js +80 -0
  216. package/dist/deploy/PlatformManifestGenerator.js.map +1 -0
  217. package/dist/deploy/RouteManifestGenerator.d.ts +42 -0
  218. package/dist/deploy/RouteManifestGenerator.d.ts.map +1 -0
  219. package/dist/deploy/RouteManifestGenerator.js +105 -0
  220. package/dist/deploy/RouteManifestGenerator.js.map +1 -0
  221. package/dist/deploy/index.d.ts +210 -0
  222. package/dist/deploy/index.d.ts.map +1 -0
  223. package/dist/deploy/index.js +918 -0
  224. package/dist/deploy/index.js.map +1 -0
  225. package/dist/frontend/FrontendDevLifecycle.d.ts +26 -0
  226. package/dist/frontend/FrontendDevLifecycle.d.ts.map +1 -0
  227. package/dist/frontend/FrontendDevLifecycle.js +60 -0
  228. package/dist/frontend/FrontendDevLifecycle.js.map +1 -0
  229. package/dist/frontend/FrontendPluginOrchestrator.d.ts +64 -0
  230. package/dist/frontend/FrontendPluginOrchestrator.d.ts.map +1 -0
  231. package/dist/frontend/FrontendPluginOrchestrator.js +167 -0
  232. package/dist/frontend/FrontendPluginOrchestrator.js.map +1 -0
  233. package/dist/frontend/SiteResolver.d.ts +33 -0
  234. package/dist/frontend/SiteResolver.d.ts.map +1 -0
  235. package/dist/frontend/SiteResolver.js +53 -0
  236. package/dist/frontend/SiteResolver.js.map +1 -0
  237. package/dist/frontend/StaticMountRegistry.d.ts +36 -0
  238. package/dist/frontend/StaticMountRegistry.d.ts.map +1 -0
  239. package/dist/frontend/StaticMountRegistry.js +94 -0
  240. package/dist/frontend/StaticMountRegistry.js.map +1 -0
  241. package/dist/frontend/index.d.ts +7 -0
  242. package/dist/frontend/index.d.ts.map +1 -0
  243. package/{src → dist}/frontend/index.js +4 -2
  244. package/dist/frontend/index.js.map +1 -0
  245. package/dist/frontend/pathUtils.d.ts +8 -0
  246. package/dist/frontend/pathUtils.d.ts.map +1 -0
  247. package/dist/frontend/pathUtils.js +17 -0
  248. package/dist/frontend/pathUtils.js.map +1 -0
  249. package/dist/frontend/plugins/index.d.ts +2 -0
  250. package/dist/frontend/plugins/index.d.ts.map +1 -0
  251. package/{src → dist}/frontend/plugins/index.js +1 -1
  252. package/dist/frontend/plugins/index.js.map +1 -0
  253. package/dist/frontend/plugins/viteFrontend.d.ts +51 -0
  254. package/dist/frontend/plugins/viteFrontend.d.ts.map +1 -0
  255. package/dist/frontend/plugins/viteFrontend.js +134 -0
  256. package/dist/frontend/plugins/viteFrontend.js.map +1 -0
  257. package/dist/frontend/types.d.ts +25 -0
  258. package/dist/frontend/types.d.ts.map +1 -0
  259. package/dist/frontend/types.js +2 -0
  260. package/dist/frontend/types.js.map +1 -0
  261. package/dist/index.d.ts +17 -0
  262. package/dist/index.d.ts.map +1 -0
  263. package/dist/index.js +32 -0
  264. package/dist/index.js.map +1 -0
  265. package/dist/internals.d.ts +21 -0
  266. package/dist/internals.d.ts.map +1 -0
  267. package/{src → dist}/internals.js +12 -14
  268. package/dist/internals.js.map +1 -0
  269. package/dist/plugins/PluginManager.d.ts +209 -0
  270. package/dist/plugins/PluginManager.d.ts.map +1 -0
  271. package/dist/plugins/PluginManager.js +365 -0
  272. package/dist/plugins/PluginManager.js.map +1 -0
  273. package/dist/plugins/ScopedPostgres.d.ts +78 -0
  274. package/dist/plugins/ScopedPostgres.d.ts.map +1 -0
  275. package/dist/plugins/ScopedPostgres.js +190 -0
  276. package/dist/plugins/ScopedPostgres.js.map +1 -0
  277. package/dist/plugins/ScopedRedis.d.ts +88 -0
  278. package/dist/plugins/ScopedRedis.d.ts.map +1 -0
  279. package/dist/plugins/ScopedRedis.js +169 -0
  280. package/dist/plugins/ScopedRedis.js.map +1 -0
  281. package/dist/plugins/index.d.ts +289 -0
  282. package/dist/plugins/index.d.ts.map +1 -0
  283. package/dist/plugins/index.js +1942 -0
  284. package/dist/plugins/index.js.map +1 -0
  285. package/dist/plugins/types.d.ts +59 -0
  286. package/dist/plugins/types.d.ts.map +1 -0
  287. package/dist/plugins/types.js +2 -0
  288. package/dist/plugins/types.js.map +1 -0
  289. package/dist/registry/ServiceRegistry.d.ts +305 -0
  290. package/dist/registry/ServiceRegistry.d.ts.map +1 -0
  291. package/dist/registry/ServiceRegistry.js +735 -0
  292. package/dist/registry/ServiceRegistry.js.map +1 -0
  293. package/dist/scaling/ScaleAdvisor.d.ts +214 -0
  294. package/dist/scaling/ScaleAdvisor.d.ts.map +1 -0
  295. package/dist/scaling/ScaleAdvisor.js +526 -0
  296. package/dist/scaling/ScaleAdvisor.js.map +1 -0
  297. package/dist/services/Service.d.ts +164 -0
  298. package/dist/services/Service.d.ts.map +1 -0
  299. package/dist/services/Service.js +106 -0
  300. package/dist/services/Service.js.map +1 -0
  301. package/dist/services/worker-bootstrap.d.ts +15 -0
  302. package/dist/services/worker-bootstrap.d.ts.map +1 -0
  303. package/dist/services/worker-bootstrap.js +744 -0
  304. package/dist/services/worker-bootstrap.js.map +1 -0
  305. package/dist/templates/auth-service.d.ts +42 -0
  306. package/dist/templates/auth-service.d.ts.map +1 -0
  307. package/dist/templates/auth-service.js +54 -0
  308. package/dist/templates/auth-service.js.map +1 -0
  309. package/dist/templates/identity-service.d.ts +50 -0
  310. package/dist/templates/identity-service.d.ts.map +1 -0
  311. package/dist/templates/identity-service.js +62 -0
  312. package/dist/templates/identity-service.js.map +1 -0
  313. package/dist/types/contract.d.ts +120 -0
  314. package/dist/types/contract.d.ts.map +1 -0
  315. package/dist/types/contract.js +69 -0
  316. package/dist/types/contract.js.map +1 -0
  317. package/package.json +84 -22
  318. package/shared/identity.js +26 -0
  319. package/src/core/DirectMessageBus.js +0 -364
  320. package/src/core/EndpointResolver.js +0 -247
  321. package/src/core/ForgeContext.js +0 -2227
  322. package/src/core/ForgeHost.js +0 -122
  323. package/src/core/ForgePlatform.js +0 -145
  324. package/src/core/Ingress.js +0 -768
  325. package/src/core/Interceptors.js +0 -420
  326. package/src/core/MessageBus.js +0 -310
  327. package/src/core/Prometheus.js +0 -305
  328. package/src/core/RequestContext.js +0 -413
  329. package/src/core/RoutingStrategy.js +0 -316
  330. package/src/core/Supervisor.js +0 -1306
  331. package/src/core/ThreadAllocator.js +0 -196
  332. package/src/core/WorkerChannelManager.js +0 -879
  333. package/src/core/config.js +0 -624
  334. package/src/core/host-config.js +0 -311
  335. package/src/core/network-utils.js +0 -166
  336. package/src/core/platform-config.js +0 -308
  337. package/src/decorators/ServiceProxy.js +0 -899
  338. package/src/decorators/index.js +0 -571
  339. package/src/deploy/NginxGenerator.js +0 -865
  340. package/src/deploy/PlatformManifestGenerator.js +0 -96
  341. package/src/deploy/RouteManifestGenerator.js +0 -112
  342. package/src/deploy/index.js +0 -984
  343. package/src/frontend/FrontendDevLifecycle.js +0 -65
  344. package/src/frontend/FrontendPluginOrchestrator.js +0 -187
  345. package/src/frontend/SiteResolver.js +0 -63
  346. package/src/frontend/StaticMountRegistry.js +0 -90
  347. package/src/frontend/plugins/viteFrontend.js +0 -79
  348. package/src/frontend/types.js +0 -35
  349. package/src/index.js +0 -56
  350. package/src/plugins/PluginManager.js +0 -537
  351. package/src/plugins/ScopedPostgres.js +0 -192
  352. package/src/plugins/ScopedRedis.js +0 -142
  353. package/src/plugins/index.js +0 -1729
  354. package/src/registry/ServiceRegistry.js +0 -796
  355. package/src/scaling/ScaleAdvisor.js +0 -442
  356. package/src/services/Service.js +0 -195
  357. package/src/services/worker-bootstrap.js +0 -676
  358. package/src/templates/auth-service.js +0 -65
  359. package/src/templates/identity-service.js +0 -75
@@ -0,0 +1,214 @@
1
+ /**
2
+ * RequestContext
3
+ *
4
+ * Carries per-request state through the entire call chain using
5
+ * Node's AsyncLocalStorage. No manual threading needed — any
6
+ * async function called during request processing can access
7
+ * the current context.
8
+ *
9
+ * ┌─────────────────────────────────────────────────────────────┐
10
+ * │ HTTP request arrives at users service │
11
+ * │ │
12
+ * │ RequestContext created: │
13
+ * │ correlationId: "req_abc123" │
14
+ * │ traceId: "trace_xyz789" (from ForgeProxy) │
15
+ * │ spanId: "span_001" │
16
+ * │ auth: { userId, tenantId, role } │
17
+ * │ service: "users" │
18
+ * │ method: "createUser" │
19
+ * │ startTime: 1707500000000 │
20
+ * │ deadline: 1707500005000 │
21
+ * │ baggage: Map { custom key-value pairs } │
22
+ * │ │
23
+ * │ this.notifications.userCreated(user) │
24
+ * │ → Proxy reads current RequestContext │
25
+ * │ → Propagates correlationId + traceId + auth via IPC │
26
+ * │ → Notifications service creates child span │
27
+ * │ → Same correlationId, new spanId │
28
+ * │ │
29
+ * │ All log lines include correlationId automatically │
30
+ * │ All metrics include tenantId automatically │
31
+ * │ Prometheus histograms track per-tenant latency │
32
+ * └─────────────────────────────────────────────────────────────┘
33
+ *
34
+ * Usage in service code (automatic — engineers don't touch this):
35
+ *
36
+ * // The framework does this:
37
+ * RequestContext.run(ctx, async () => {
38
+ * await service.createUser(data);
39
+ * });
40
+ *
41
+ * // Any code inside that async tree can do:
42
+ * const ctx = RequestContext.current();
43
+ * ctx.correlationId // always available
44
+ * ctx.auth // if authenticated
45
+ * ctx.tenantId // shortcut
46
+ * ctx.addBaggage('paymentId', 'pay_123');
47
+ */
48
+ interface AuthInfo {
49
+ userId?: string;
50
+ tenantId?: string;
51
+ projectId?: string;
52
+ project_id?: string;
53
+ role?: string;
54
+ [key: string]: unknown;
55
+ }
56
+ interface RequestContextOptions {
57
+ correlationId?: string | null;
58
+ traceId?: string;
59
+ parentSpanId?: string;
60
+ auth?: AuthInfo | null;
61
+ service?: string | null;
62
+ method?: string | null;
63
+ deadline?: number | null;
64
+ baggage?: Iterable<[string, string]> | null;
65
+ }
66
+ interface PropagationHeaders {
67
+ "x-correlation-id"?: string;
68
+ "x-request-id"?: string;
69
+ "x-trace-id"?: string;
70
+ "x-parent-span-id"?: string;
71
+ "x-forge-auth"?: string;
72
+ "x-forge-deadline"?: string;
73
+ "x-forge-baggage"?: string;
74
+ "x-forge-project"?: string;
75
+ traceparent?: string;
76
+ [key: string]: string | undefined;
77
+ }
78
+ interface IPCPropagationData {
79
+ __forge_correlation_id?: string;
80
+ __forge_trace_id?: string;
81
+ __forge_parent_span_id?: string;
82
+ __forge_auth?: unknown;
83
+ __forge_deadline?: unknown;
84
+ __forge_baggage?: unknown;
85
+ __forge_project?: unknown;
86
+ [key: string]: unknown;
87
+ }
88
+ type PropagationData = PropagationHeaders | IPCPropagationData;
89
+ interface MetricLabels {
90
+ tenant_id?: string;
91
+ project_id?: string;
92
+ service?: string;
93
+ method?: string;
94
+ }
95
+ interface LogFields {
96
+ correlationId: string;
97
+ tenantId?: string;
98
+ userId?: string;
99
+ traceId?: string;
100
+ }
101
+ interface IPCPayload {
102
+ __forge_correlation_id: string;
103
+ __forge_trace_id: string;
104
+ __forge_parent_span_id: string;
105
+ __forge_auth: AuthInfo | null;
106
+ __forge_deadline: number | null;
107
+ __forge_baggage: [string, string][] | null;
108
+ __forge_project: string | null;
109
+ }
110
+ export interface Span {
111
+ traceId: string;
112
+ spanId: string;
113
+ parentSpanId: string | null;
114
+ operationName: string;
115
+ service: string | null;
116
+ startTimeUnixNano: number;
117
+ endTimeUnixNano: number;
118
+ durationMs: number;
119
+ status: "ok" | "error";
120
+ attributes: Record<string, string | number | boolean>;
121
+ }
122
+ export type TraceExporterFn = (spans: Span[]) => void | Promise<void>;
123
+ /** Format spans as OTLP-compatible JSON (ResourceSpans structure) */
124
+ export declare function formatOTLP(spans: Span[]): object;
125
+ export declare class RequestContext {
126
+ correlationId: string;
127
+ traceId: string;
128
+ spanId: string;
129
+ parentSpanId: string | null;
130
+ auth: AuthInfo | null;
131
+ service: string | null;
132
+ method: string | null;
133
+ startTime: number;
134
+ startEpoch: number;
135
+ deadline: number | null;
136
+ baggage: Map<string, string>;
137
+ spans: Span[];
138
+ _projectId?: string;
139
+ /** Configurable trace exporter — set via RequestContext.setTraceExporter() */
140
+ private static _traceExporter;
141
+ constructor(opts?: RequestContextOptions);
142
+ /** Shortcut for auth fields */
143
+ get userId(): string | null;
144
+ get tenantId(): string | null;
145
+ get projectId(): string | null;
146
+ get role(): string | null;
147
+ /** Elapsed time since this context was created */
148
+ get elapsed(): number;
149
+ /** Remaining time before deadline */
150
+ get remaining(): number;
151
+ get isExpired(): boolean;
152
+ /** Add custom baggage (propagated to downstream services) */
153
+ addBaggage(key: string, value: unknown): void;
154
+ /** Serialize for propagation over IPC/HTTP */
155
+ toHeaders(): Record<string, string>;
156
+ /** Serialize for IPC (colocated + cross-process) */
157
+ toIPC(): IPCPayload;
158
+ /** Sanitize an auth object — must be a plain object, strip dangerous keys */
159
+ static _sanitizeAuth(auth: unknown): AuthInfo | null;
160
+ /** Validate an absolute deadline value — must be a finite positive epoch ms, capped at 5 min */
161
+ static _sanitizeDeadline(value: unknown): number | null;
162
+ /** Validate baggage — max 32 entries and max 4KB serialized size */
163
+ static _sanitizeBaggage(baggage: unknown): [string, string][] | null;
164
+ /** Validate a relative deadline (remaining ms) — must be finite, non-negative, max 5 min */
165
+ static _sanitizeRelativeDeadline(value: unknown): number | null;
166
+ /** Reconstruct from IPC message or HTTP headers */
167
+ static fromPropagation(data: PropagationData): RequestContext;
168
+ /** Create a child context for a downstream call */
169
+ child(service: string, method: string): RequestContext;
170
+ /** Run a function within a request context */
171
+ static run<T>(ctx: RequestContext, fn: () => T): T;
172
+ /** Get the current request context (or null if none) */
173
+ static current(): RequestContext | null;
174
+ /** Labels for metrics (always includes tenant if available) */
175
+ toMetricLabels(): MetricLabels;
176
+ /** Labels for structured logging */
177
+ toLogFields(): LogFields;
178
+ /**
179
+ * Record a completed span on this request context.
180
+ * Spans are accumulated and flushed when end() is called or flushSpans() is invoked.
181
+ */
182
+ recordSpan(operationName: string, startTimeMs: number, endTimeMs: number, opts?: {
183
+ status?: "ok" | "error";
184
+ attributes?: Record<string, string | number | boolean>;
185
+ spanId?: string;
186
+ parentSpanId?: string | null;
187
+ }): Span;
188
+ /**
189
+ * Start a span and return a finish function.
190
+ * Usage: const finish = ctx.startSpan('doWork'); ... finish();
191
+ */
192
+ startSpan(operationName: string, attributes?: Record<string, string | number | boolean>): (status?: "ok" | "error", extraAttrs?: Record<string, string | number | boolean>) => Span;
193
+ /**
194
+ * Flush all accumulated spans to the configured trace exporter.
195
+ * Clears the spans array after flushing. Returns the flushed spans.
196
+ */
197
+ flushSpans(): Promise<Span[]>;
198
+ /**
199
+ * End this request context: record the root span and flush all spans.
200
+ * Call this when the request is complete.
201
+ */
202
+ end(status?: "ok" | "error"): Promise<Span[]>;
203
+ /** Set the global trace exporter function */
204
+ static setTraceExporter(fn: TraceExporterFn | null): void;
205
+ /** Get the current trace exporter */
206
+ static getTraceExporter(): TraceExporterFn | null;
207
+ /** Built-in console exporter for development */
208
+ static consoleExporter: TraceExporterFn;
209
+ static generateId(): string;
210
+ static generateTraceId(): string;
211
+ static generateSpanId(): string;
212
+ }
213
+ export {};
214
+ //# sourceMappingURL=RequestContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../../src/core/RequestContext.ts"],"names":[],"mappings":"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"}