raffel 0.2.3 → 1.0.0-next.f81d4db

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 (590) hide show
  1. package/dist/adapters/grpc.d.ts.map +1 -1
  2. package/dist/adapters/grpc.js +1 -15
  3. package/dist/adapters/grpc.js.map +1 -1
  4. package/dist/adapters/http.d.ts +6 -0
  5. package/dist/adapters/http.d.ts.map +1 -1
  6. package/dist/adapters/http.js +53 -86
  7. package/dist/adapters/http.js.map +1 -1
  8. package/dist/adapters/index.d.ts +0 -2
  9. package/dist/adapters/index.d.ts.map +1 -1
  10. package/dist/adapters/index.js +0 -2
  11. package/dist/adapters/index.js.map +1 -1
  12. package/dist/adapters/tcp.d.ts +16 -0
  13. package/dist/adapters/tcp.d.ts.map +1 -1
  14. package/dist/adapters/tcp.js +85 -34
  15. package/dist/adapters/tcp.js.map +1 -1
  16. package/dist/adapters/websocket.d.ts.map +1 -1
  17. package/dist/adapters/websocket.js +1 -14
  18. package/dist/adapters/websocket.js.map +1 -1
  19. package/dist/cache/drivers/index.d.ts +0 -1
  20. package/dist/cache/drivers/index.d.ts.map +1 -1
  21. package/dist/cache/drivers/index.js +0 -1
  22. package/dist/cache/drivers/index.js.map +1 -1
  23. package/dist/cache/factory.d.ts +2 -9
  24. package/dist/cache/factory.d.ts.map +1 -1
  25. package/dist/cache/factory.js +1 -19
  26. package/dist/cache/factory.js.map +1 -1
  27. package/dist/cache/index.d.ts +2 -7
  28. package/dist/cache/index.d.ts.map +1 -1
  29. package/dist/cache/index.js +1 -6
  30. package/dist/cache/index.js.map +1 -1
  31. package/dist/cache/types.d.ts +1 -32
  32. package/dist/cache/types.d.ts.map +1 -1
  33. package/dist/core/event-delivery.d.ts.map +1 -1
  34. package/dist/core/event-delivery.js +5 -3
  35. package/dist/core/event-delivery.js.map +1 -1
  36. package/dist/core/index.d.ts +1 -1
  37. package/dist/core/index.d.ts.map +1 -1
  38. package/dist/core/registry.d.ts +3 -3
  39. package/dist/core/registry.d.ts.map +1 -1
  40. package/dist/core/registry.js +30 -8
  41. package/dist/core/registry.js.map +1 -1
  42. package/dist/core/router.d.ts.map +1 -1
  43. package/dist/core/router.js +5 -4
  44. package/dist/core/router.js.map +1 -1
  45. package/dist/docs/generators/code-samples.d.ts +32 -0
  46. package/dist/docs/generators/code-samples.d.ts.map +1 -0
  47. package/dist/docs/generators/code-samples.js +322 -0
  48. package/dist/docs/generators/code-samples.js.map +1 -0
  49. package/dist/docs/generators/errors-types.d.ts +2 -2
  50. package/dist/docs/generators/errors-types.js +2 -2
  51. package/dist/docs/generators/http-generator.d.ts +10 -0
  52. package/dist/docs/generators/http-generator.d.ts.map +1 -1
  53. package/dist/docs/generators/http-generator.js +100 -3
  54. package/dist/docs/generators/http-generator.js.map +1 -1
  55. package/dist/docs/generators/usd-generator.d.ts +31 -1
  56. package/dist/docs/generators/usd-generator.d.ts.map +1 -1
  57. package/dist/docs/generators/usd-generator.js +19 -1
  58. package/dist/docs/generators/usd-generator.js.map +1 -1
  59. package/dist/docs/generators/websocket-generator.d.ts.map +1 -1
  60. package/dist/docs/generators/websocket-generator.js +6 -4
  61. package/dist/docs/generators/websocket-generator.js.map +1 -1
  62. package/dist/docs/ui/html-builder.d.ts.map +1 -1
  63. package/dist/docs/ui/html-builder.js +260 -54
  64. package/dist/docs/ui/html-builder.js.map +1 -1
  65. package/dist/docs/ui/styles.d.ts.map +1 -1
  66. package/dist/docs/ui/styles.js +240 -30
  67. package/dist/docs/ui/styles.js.map +1 -1
  68. package/dist/docs/ui/types.d.ts +15 -1
  69. package/dist/docs/ui/types.d.ts.map +1 -1
  70. package/dist/docs/usd-middleware.d.ts +32 -7
  71. package/dist/docs/usd-middleware.d.ts.map +1 -1
  72. package/dist/docs/usd-middleware.js +5 -1
  73. package/dist/docs/usd-middleware.js.map +1 -1
  74. package/dist/dx/index.d.ts +2 -0
  75. package/dist/dx/index.d.ts.map +1 -1
  76. package/dist/dx/index.js +1 -0
  77. package/dist/dx/index.js.map +1 -1
  78. package/dist/dx/logging/index.d.ts.map +1 -1
  79. package/dist/dx/logging/index.js +5 -3
  80. package/dist/dx/logging/index.js.map +1 -1
  81. package/dist/dx/scenarios.d.ts +26 -0
  82. package/dist/dx/scenarios.d.ts.map +1 -0
  83. package/dist/dx/scenarios.js +109 -0
  84. package/dist/dx/scenarios.js.map +1 -0
  85. package/dist/errors/codes.d.ts +1 -1
  86. package/dist/errors/codes.js +1 -1
  87. package/dist/graphql/adapter.js +1 -1
  88. package/dist/http/index.d.ts +2 -0
  89. package/dist/http/index.d.ts.map +1 -1
  90. package/dist/http/index.js +4 -0
  91. package/dist/http/index.js.map +1 -1
  92. package/dist/http/openapi-ui.d.ts +174 -0
  93. package/dist/http/openapi-ui.d.ts.map +1 -0
  94. package/dist/http/openapi-ui.js +221 -0
  95. package/dist/http/openapi-ui.js.map +1 -0
  96. package/dist/http/serve.d.ts +14 -0
  97. package/dist/http/serve.d.ts.map +1 -1
  98. package/dist/http/serve.js +8 -1
  99. package/dist/http/serve.js.map +1 -1
  100. package/dist/index.d.ts +17 -10
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +12 -6
  103. package/dist/index.js.map +1 -1
  104. package/dist/mcp/cli.d.ts +2 -1
  105. package/dist/mcp/cli.d.ts.map +1 -1
  106. package/dist/mcp/cli.js +30 -7
  107. package/dist/mcp/cli.js.map +1 -1
  108. package/dist/mcp/docs/adapters.d.ts.map +1 -1
  109. package/dist/mcp/docs/adapters.js +1 -117
  110. package/dist/mcp/docs/adapters.js.map +1 -1
  111. package/dist/mcp/docs/index.d.ts +0 -1
  112. package/dist/mcp/docs/index.d.ts.map +1 -1
  113. package/dist/mcp/docs/index.js +0 -1
  114. package/dist/mcp/docs/index.js.map +1 -1
  115. package/dist/mcp/docs/interceptors.d.ts.map +1 -1
  116. package/dist/mcp/docs/interceptors.js +272 -1
  117. package/dist/mcp/docs/interceptors.js.map +1 -1
  118. package/dist/mcp/docs/patterns.js +1 -1
  119. package/dist/mcp/prompts/index.d.ts.map +1 -1
  120. package/dist/mcp/prompts/index.js +147 -22
  121. package/dist/mcp/prompts/index.js.map +1 -1
  122. package/dist/mcp/resources/index.d.ts.map +1 -1
  123. package/dist/mcp/resources/index.js +508 -10
  124. package/dist/mcp/resources/index.js.map +1 -1
  125. package/dist/mcp/server.js +1 -1
  126. package/dist/mcp/server.js.map +1 -1
  127. package/dist/mcp/tools/definitions.d.ts +2 -0
  128. package/dist/mcp/tools/definitions.d.ts.map +1 -1
  129. package/dist/mcp/tools/definitions.js +149 -1
  130. package/dist/mcp/tools/definitions.js.map +1 -1
  131. package/dist/mcp/tools/handlers.d.ts.map +1 -1
  132. package/dist/mcp/tools/handlers.js +828 -44
  133. package/dist/mcp/tools/handlers.js.map +1 -1
  134. package/dist/mcp/types.d.ts +1 -1
  135. package/dist/mcp/types.d.ts.map +1 -1
  136. package/dist/metrics/interceptor.d.ts.map +1 -1
  137. package/dist/metrics/interceptor.js +10 -2
  138. package/dist/metrics/interceptor.js.map +1 -1
  139. package/dist/middleware/interceptors/cache.d.ts +1 -1
  140. package/dist/middleware/interceptors/cache.d.ts.map +1 -1
  141. package/dist/middleware/interceptors/cache.js +4 -2
  142. package/dist/middleware/interceptors/cache.js.map +1 -1
  143. package/dist/middleware/interceptors/envelope.d.ts.map +1 -1
  144. package/dist/middleware/interceptors/envelope.js +12 -14
  145. package/dist/middleware/interceptors/envelope.js.map +1 -1
  146. package/dist/middleware/interceptors/logging.d.ts.map +1 -1
  147. package/dist/middleware/interceptors/logging.js +11 -6
  148. package/dist/middleware/interceptors/logging.js.map +1 -1
  149. package/dist/middleware/session/drivers/memory.d.ts +36 -0
  150. package/dist/middleware/session/drivers/memory.d.ts.map +1 -0
  151. package/dist/middleware/session/drivers/memory.js +82 -0
  152. package/dist/middleware/session/drivers/memory.js.map +1 -0
  153. package/dist/middleware/session/drivers/redis.d.ts +58 -0
  154. package/dist/middleware/session/drivers/redis.d.ts.map +1 -0
  155. package/dist/middleware/session/drivers/redis.js +70 -0
  156. package/dist/middleware/session/drivers/redis.js.map +1 -0
  157. package/dist/middleware/session/drivers/s3db.d.ts +65 -0
  158. package/dist/middleware/session/drivers/s3db.d.ts.map +1 -0
  159. package/dist/middleware/session/drivers/s3db.js +98 -0
  160. package/dist/middleware/session/drivers/s3db.js.map +1 -0
  161. package/dist/middleware/session/index.d.ts +47 -0
  162. package/dist/middleware/session/index.d.ts.map +1 -0
  163. package/dist/middleware/session/index.js +46 -0
  164. package/dist/middleware/session/index.js.map +1 -0
  165. package/dist/middleware/session/interceptor.d.ts +42 -0
  166. package/dist/middleware/session/interceptor.d.ts.map +1 -0
  167. package/dist/middleware/session/interceptor.js +264 -0
  168. package/dist/middleware/session/interceptor.js.map +1 -0
  169. package/dist/middleware/session/types.d.ts +116 -0
  170. package/dist/middleware/session/types.d.ts.map +1 -0
  171. package/dist/middleware/session/types.js +9 -0
  172. package/dist/middleware/session/types.js.map +1 -0
  173. package/dist/proxy/connect-tunnel.d.ts +50 -0
  174. package/dist/proxy/connect-tunnel.d.ts.map +1 -0
  175. package/dist/proxy/connect-tunnel.js +163 -0
  176. package/dist/proxy/connect-tunnel.js.map +1 -0
  177. package/dist/proxy/http-forward.d.ts +48 -0
  178. package/dist/proxy/http-forward.d.ts.map +1 -0
  179. package/dist/proxy/http-forward.js +160 -0
  180. package/dist/proxy/http-forward.js.map +1 -0
  181. package/dist/proxy/index.d.ts +19 -0
  182. package/dist/proxy/index.d.ts.map +1 -0
  183. package/dist/proxy/index.js +14 -0
  184. package/dist/proxy/index.js.map +1 -0
  185. package/dist/proxy/socks5.d.ts +22 -0
  186. package/dist/proxy/socks5.d.ts.map +1 -0
  187. package/dist/proxy/socks5.js +307 -0
  188. package/dist/proxy/socks5.js.map +1 -0
  189. package/dist/proxy/transparent.d.ts +40 -0
  190. package/dist/proxy/transparent.d.ts.map +1 -0
  191. package/dist/proxy/transparent.js +144 -0
  192. package/dist/proxy/transparent.js.map +1 -0
  193. package/dist/proxy/types.d.ts +32 -0
  194. package/dist/proxy/types.d.ts.map +1 -0
  195. package/dist/proxy/types.js +5 -0
  196. package/dist/proxy/types.js.map +1 -0
  197. package/dist/proxy/utils/auth.d.ts +31 -0
  198. package/dist/proxy/utils/auth.d.ts.map +1 -0
  199. package/dist/proxy/utils/auth.js +69 -0
  200. package/dist/proxy/utils/auth.js.map +1 -0
  201. package/dist/proxy/utils/hop-headers.d.ts +13 -0
  202. package/dist/proxy/utils/hop-headers.d.ts.map +1 -0
  203. package/dist/proxy/utils/hop-headers.js +38 -0
  204. package/dist/proxy/utils/hop-headers.js.map +1 -0
  205. package/dist/proxy/utils/pipe.d.ts +22 -0
  206. package/dist/proxy/utils/pipe.d.ts.map +1 -0
  207. package/dist/proxy/utils/pipe.js +60 -0
  208. package/dist/proxy/utils/pipe.js.map +1 -0
  209. package/dist/rate-limit/factory.d.ts.map +1 -1
  210. package/dist/rate-limit/factory.js +30 -6
  211. package/dist/rate-limit/factory.js.map +1 -1
  212. package/dist/server/builder/config-preview.d.ts +34 -0
  213. package/dist/server/builder/config-preview.d.ts.map +1 -0
  214. package/dist/server/builder/config-preview.js +95 -0
  215. package/dist/server/builder/config-preview.js.map +1 -0
  216. package/dist/server/builder/lifecycle-utils.d.ts +11 -0
  217. package/dist/server/builder/lifecycle-utils.d.ts.map +1 -0
  218. package/dist/server/builder/lifecycle-utils.js +32 -0
  219. package/dist/server/builder/lifecycle-utils.js.map +1 -0
  220. package/dist/server/builder/lifecycle.d.ts +86 -0
  221. package/dist/server/builder/lifecycle.d.ts.map +1 -0
  222. package/dist/server/builder/lifecycle.js +738 -0
  223. package/dist/server/builder/lifecycle.js.map +1 -0
  224. package/dist/server/builder/single-port-utils.d.ts +27 -0
  225. package/dist/server/builder/single-port-utils.d.ts.map +1 -0
  226. package/dist/server/builder/single-port-utils.js +170 -0
  227. package/dist/server/builder/single-port-utils.js.map +1 -0
  228. package/dist/server/builder.d.ts.map +1 -1
  229. package/dist/server/builder.js +446 -601
  230. package/dist/server/builder.js.map +1 -1
  231. package/dist/server/discovery-bootstrap.d.ts +21 -0
  232. package/dist/server/discovery-bootstrap.d.ts.map +1 -0
  233. package/dist/server/discovery-bootstrap.js +39 -0
  234. package/dist/server/discovery-bootstrap.js.map +1 -0
  235. package/dist/server/errors.d.ts.map +1 -1
  236. package/dist/server/errors.js +1 -33
  237. package/dist/server/errors.js.map +1 -1
  238. package/dist/server/front-door.d.ts +34 -0
  239. package/dist/server/front-door.d.ts.map +1 -0
  240. package/dist/server/front-door.js +238 -0
  241. package/dist/server/front-door.js.map +1 -0
  242. package/dist/server/fs-routes/types.d.ts +6 -0
  243. package/dist/server/fs-routes/types.d.ts.map +1 -1
  244. package/dist/server/handler-builders.d.ts +22 -4
  245. package/dist/server/handler-builders.d.ts.map +1 -1
  246. package/dist/server/handler-builders.js +37 -14
  247. package/dist/server/handler-builders.js.map +1 -1
  248. package/dist/server/index.d.ts +4 -1
  249. package/dist/server/index.d.ts.map +1 -1
  250. package/dist/server/index.js +2 -0
  251. package/dist/server/index.js.map +1 -1
  252. package/dist/server/interceptor-utils.d.ts +8 -0
  253. package/dist/server/interceptor-utils.d.ts.map +1 -0
  254. package/dist/server/interceptor-utils.js +23 -0
  255. package/dist/server/interceptor-utils.js.map +1 -0
  256. package/dist/server/port-binding.d.ts +44 -0
  257. package/dist/server/port-binding.d.ts.map +1 -0
  258. package/dist/server/port-binding.js +94 -0
  259. package/dist/server/port-binding.js.map +1 -0
  260. package/dist/server/protocol-aliases.d.ts +56 -0
  261. package/dist/server/protocol-aliases.d.ts.map +1 -0
  262. package/dist/server/protocol-aliases.js +47 -0
  263. package/dist/server/protocol-aliases.js.map +1 -0
  264. package/dist/server/protocol-config.d.ts +17 -1
  265. package/dist/server/protocol-config.d.ts.map +1 -1
  266. package/dist/server/protocol-config.js +116 -9
  267. package/dist/server/protocol-config.js.map +1 -1
  268. package/dist/server/resource-builder.js +3 -3
  269. package/dist/server/resource-builder.js.map +1 -1
  270. package/dist/server/rest-middleware.d.ts.map +1 -1
  271. package/dist/server/rest-middleware.js +1 -15
  272. package/dist/server/rest-middleware.js.map +1 -1
  273. package/dist/server/router-module.d.ts.map +1 -1
  274. package/dist/server/router-module.js +22 -99
  275. package/dist/server/router-module.js.map +1 -1
  276. package/dist/server/shared-context.d.ts.map +1 -1
  277. package/dist/server/shared-context.js +3 -1
  278. package/dist/server/shared-context.js.map +1 -1
  279. package/dist/server/single-port/dispatcher.d.ts +10 -0
  280. package/dist/server/single-port/dispatcher.d.ts.map +1 -0
  281. package/dist/server/single-port/dispatcher.js +188 -0
  282. package/dist/server/single-port/dispatcher.js.map +1 -0
  283. package/dist/server/single-port/index.d.ts +4 -0
  284. package/dist/server/single-port/index.d.ts.map +1 -0
  285. package/dist/server/single-port/index.js +3 -0
  286. package/dist/server/single-port/index.js.map +1 -0
  287. package/dist/server/single-port/registry.d.ts +19 -0
  288. package/dist/server/single-port/registry.d.ts.map +1 -0
  289. package/dist/server/single-port/registry.js +24 -0
  290. package/dist/server/single-port/registry.js.map +1 -0
  291. package/dist/server/single-port/types.d.ts +46 -0
  292. package/dist/server/single-port/types.d.ts.map +1 -0
  293. package/dist/server/single-port/types.js +2 -0
  294. package/dist/server/single-port/types.js.map +1 -0
  295. package/dist/server/telemetry-bootstrap.d.ts +38 -0
  296. package/dist/server/telemetry-bootstrap.d.ts.map +1 -0
  297. package/dist/server/telemetry-bootstrap.js +115 -0
  298. package/dist/server/telemetry-bootstrap.js.map +1 -0
  299. package/dist/server/types.d.ts +422 -21
  300. package/dist/server/types.d.ts.map +1 -1
  301. package/dist/testing/echo-protection.d.ts +30 -0
  302. package/dist/testing/echo-protection.d.ts.map +1 -0
  303. package/dist/testing/echo-protection.js +158 -0
  304. package/dist/testing/echo-protection.js.map +1 -0
  305. package/dist/testing/index.d.ts +344 -0
  306. package/dist/testing/index.d.ts.map +1 -0
  307. package/dist/testing/index.js +1072 -0
  308. package/dist/testing/index.js.map +1 -0
  309. package/dist/testing/mock-dns-server.d.ts +31 -0
  310. package/dist/testing/mock-dns-server.d.ts.map +1 -0
  311. package/dist/testing/mock-dns-server.js +247 -0
  312. package/dist/testing/mock-dns-server.js.map +1 -0
  313. package/dist/testing/mock-hls-server.d.ts +85 -0
  314. package/dist/testing/mock-hls-server.d.ts.map +1 -0
  315. package/dist/testing/mock-hls-server.js +252 -0
  316. package/dist/testing/mock-hls-server.js.map +1 -0
  317. package/dist/testing/mock-proxy-server.d.ts +78 -0
  318. package/dist/testing/mock-proxy-server.d.ts.map +1 -0
  319. package/dist/testing/mock-proxy-server.js +277 -0
  320. package/dist/testing/mock-proxy-server.js.map +1 -0
  321. package/dist/testing/mock-sse-server.d.ts +56 -0
  322. package/dist/testing/mock-sse-server.d.ts.map +1 -0
  323. package/dist/testing/mock-sse-server.js +206 -0
  324. package/dist/testing/mock-sse-server.js.map +1 -0
  325. package/dist/testing/proxy-certs.d.ts +9 -0
  326. package/dist/testing/proxy-certs.d.ts.map +1 -0
  327. package/dist/testing/proxy-certs.js +2 -0
  328. package/dist/testing/proxy-certs.js.map +1 -0
  329. package/dist/testing/service-suite.d.ts +47 -0
  330. package/dist/testing/service-suite.d.ts.map +1 -0
  331. package/dist/testing/service-suite.js +82 -0
  332. package/dist/testing/service-suite.js.map +1 -0
  333. package/dist/testing/service-types.d.ts +32 -0
  334. package/dist/testing/service-types.d.ts.map +1 -0
  335. package/dist/testing/service-types.js +2 -0
  336. package/dist/testing/service-types.js.map +1 -0
  337. package/dist/ui/core/event-delivery.d.ts.map +1 -1
  338. package/dist/ui/core/index.d.ts +1 -1
  339. package/dist/ui/core/index.d.ts.map +1 -1
  340. package/dist/ui/core/registry.d.ts +3 -3
  341. package/dist/ui/core/registry.d.ts.map +1 -1
  342. package/dist/ui/core/router.d.ts.map +1 -1
  343. package/dist/ui/docs/generators/code-samples.d.ts +32 -0
  344. package/dist/ui/docs/generators/code-samples.d.ts.map +1 -0
  345. package/dist/ui/docs/generators/errors-types.d.ts +2 -2
  346. package/dist/ui/docs/generators/http-generator.d.ts +10 -0
  347. package/dist/ui/docs/generators/http-generator.d.ts.map +1 -1
  348. package/dist/ui/docs/generators/usd-generator.d.ts +31 -1
  349. package/dist/ui/docs/generators/usd-generator.d.ts.map +1 -1
  350. package/dist/ui/docs/generators/websocket-generator.d.ts.map +1 -1
  351. package/dist/ui/docs/ui/html-builder.d.ts.map +1 -1
  352. package/dist/ui/docs/ui/styles.d.ts.map +1 -1
  353. package/dist/ui/docs/ui/types.d.ts +15 -1
  354. package/dist/ui/docs/ui/types.d.ts.map +1 -1
  355. package/dist/ui/docs/usd-middleware.d.ts +32 -7
  356. package/dist/ui/docs/usd-middleware.d.ts.map +1 -1
  357. package/dist/ui/errors/codes.d.ts +1 -1
  358. package/dist/ui/server/fs-routes/types.d.ts +6 -0
  359. package/dist/ui/server/fs-routes/types.d.ts.map +1 -1
  360. package/dist/ui/usd/index.d.ts +1 -1
  361. package/dist/ui/usd/index.d.ts.map +1 -1
  362. package/dist/ui/usd/spec/types.d.ts +91 -0
  363. package/dist/ui/usd/spec/types.d.ts.map +1 -1
  364. package/dist/usd/index.d.ts +1 -1
  365. package/dist/usd/index.d.ts.map +1 -1
  366. package/dist/usd/index.js.map +1 -1
  367. package/dist/usd/spec/types.d.ts +91 -0
  368. package/dist/usd/spec/types.d.ts.map +1 -1
  369. package/dist/usd/spec/types.js.map +1 -1
  370. package/dist/utils/certs.d.ts +30 -0
  371. package/dist/utils/certs.d.ts.map +1 -0
  372. package/dist/utils/certs.js +230 -0
  373. package/dist/utils/certs.js.map +1 -0
  374. package/dist/utils/context-utils.d.ts +11 -0
  375. package/dist/utils/context-utils.d.ts.map +1 -0
  376. package/dist/utils/context-utils.js +24 -0
  377. package/dist/utils/context-utils.js.map +1 -0
  378. package/package.json +11 -2
  379. package/dist/adapters/grpc.int.test.d.ts +0 -5
  380. package/dist/adapters/grpc.int.test.d.ts.map +0 -1
  381. package/dist/adapters/grpc.int.test.js +0 -168
  382. package/dist/adapters/grpc.int.test.js.map +0 -1
  383. package/dist/adapters/http.int.test.d.ts +0 -5
  384. package/dist/adapters/http.int.test.d.ts.map +0 -1
  385. package/dist/adapters/http.int.test.js +0 -396
  386. package/dist/adapters/http.int.test.js.map +0 -1
  387. package/dist/adapters/jsonrpc.int.test.d.ts +0 -5
  388. package/dist/adapters/jsonrpc.int.test.d.ts.map +0 -1
  389. package/dist/adapters/jsonrpc.int.test.js +0 -640
  390. package/dist/adapters/jsonrpc.int.test.js.map +0 -1
  391. package/dist/adapters/s3db/adapter.d.ts +0 -105
  392. package/dist/adapters/s3db/adapter.d.ts.map +0 -1
  393. package/dist/adapters/s3db/adapter.js +0 -536
  394. package/dist/adapters/s3db/adapter.js.map +0 -1
  395. package/dist/adapters/s3db/index.d.ts +0 -20
  396. package/dist/adapters/s3db/index.d.ts.map +0 -1
  397. package/dist/adapters/s3db/index.js +0 -25
  398. package/dist/adapters/s3db/index.js.map +0 -1
  399. package/dist/adapters/s3db/s3db.int.test.d.ts +0 -5
  400. package/dist/adapters/s3db/s3db.int.test.d.ts.map +0 -1
  401. package/dist/adapters/s3db/s3db.int.test.js +0 -472
  402. package/dist/adapters/s3db/s3db.int.test.js.map +0 -1
  403. package/dist/adapters/s3db/types.d.ts +0 -277
  404. package/dist/adapters/s3db/types.d.ts.map +0 -1
  405. package/dist/adapters/s3db/types.js +0 -7
  406. package/dist/adapters/s3db/types.js.map +0 -1
  407. package/dist/adapters/s3db/utils/etag.d.ts +0 -65
  408. package/dist/adapters/s3db/utils/etag.d.ts.map +0 -1
  409. package/dist/adapters/s3db/utils/etag.js +0 -99
  410. package/dist/adapters/s3db/utils/etag.js.map +0 -1
  411. package/dist/adapters/s3db/utils/guards.d.ts +0 -121
  412. package/dist/adapters/s3db/utils/guards.d.ts.map +0 -1
  413. package/dist/adapters/s3db/utils/guards.js +0 -169
  414. package/dist/adapters/s3db/utils/guards.js.map +0 -1
  415. package/dist/adapters/s3db/utils/index.d.ts +0 -9
  416. package/dist/adapters/s3db/utils/index.d.ts.map +0 -1
  417. package/dist/adapters/s3db/utils/index.js +0 -10
  418. package/dist/adapters/s3db/utils/index.js.map +0 -1
  419. package/dist/adapters/s3db/utils/populate.d.ts +0 -89
  420. package/dist/adapters/s3db/utils/populate.d.ts.map +0 -1
  421. package/dist/adapters/s3db/utils/populate.js +0 -165
  422. package/dist/adapters/s3db/utils/populate.js.map +0 -1
  423. package/dist/adapters/tcp.int.test.d.ts +0 -5
  424. package/dist/adapters/tcp.int.test.d.ts.map +0 -1
  425. package/dist/adapters/tcp.int.test.js +0 -379
  426. package/dist/adapters/tcp.int.test.js.map +0 -1
  427. package/dist/adapters/udp.int.test.d.ts +0 -5
  428. package/dist/adapters/udp.int.test.d.ts.map +0 -1
  429. package/dist/adapters/udp.int.test.js +0 -397
  430. package/dist/adapters/udp.int.test.js.map +0 -1
  431. package/dist/adapters/websocket.int.test.d.ts +0 -5
  432. package/dist/adapters/websocket.int.test.d.ts.map +0 -1
  433. package/dist/adapters/websocket.int.test.js +0 -383
  434. package/dist/adapters/websocket.int.test.js.map +0 -1
  435. package/dist/cache/drivers/memory.int.test.d.ts +0 -5
  436. package/dist/cache/drivers/memory.int.test.d.ts.map +0 -1
  437. package/dist/cache/drivers/memory.int.test.js +0 -241
  438. package/dist/cache/drivers/memory.int.test.js.map +0 -1
  439. package/dist/cache/drivers/s3db.d.ts +0 -78
  440. package/dist/cache/drivers/s3db.d.ts.map +0 -1
  441. package/dist/cache/drivers/s3db.js +0 -216
  442. package/dist/cache/drivers/s3db.js.map +0 -1
  443. package/dist/channels/channel-manager.int.test.d.ts +0 -5
  444. package/dist/channels/channel-manager.int.test.d.ts.map +0 -1
  445. package/dist/channels/channel-manager.int.test.js +0 -378
  446. package/dist/channels/channel-manager.int.test.js.map +0 -1
  447. package/dist/core/ctx-call.int.test.d.ts +0 -7
  448. package/dist/core/ctx-call.int.test.d.ts.map +0 -1
  449. package/dist/core/ctx-call.int.test.js +0 -263
  450. package/dist/core/ctx-call.int.test.js.map +0 -1
  451. package/dist/core/registry.unit.test.d.ts +0 -2
  452. package/dist/core/registry.unit.test.d.ts.map +0 -1
  453. package/dist/core/registry.unit.test.js +0 -133
  454. package/dist/core/registry.unit.test.js.map +0 -1
  455. package/dist/core/router.int.test.d.ts +0 -2
  456. package/dist/core/router.int.test.d.ts.map +0 -1
  457. package/dist/core/router.int.test.js +0 -368
  458. package/dist/core/router.int.test.js.map +0 -1
  459. package/dist/docs/generators/generators.int.test.d.ts +0 -2
  460. package/dist/docs/generators/generators.int.test.d.ts.map +0 -1
  461. package/dist/docs/generators/generators.int.test.js +0 -105
  462. package/dist/docs/generators/generators.int.test.js.map +0 -1
  463. package/dist/docs/openapi/generator.int.test.d.ts +0 -5
  464. package/dist/docs/openapi/generator.int.test.d.ts.map +0 -1
  465. package/dist/docs/openapi/generator.int.test.js +0 -260
  466. package/dist/docs/openapi/generator.int.test.js.map +0 -1
  467. package/dist/dx/health/health.int.test.d.ts +0 -5
  468. package/dist/dx/health/health.int.test.d.ts.map +0 -1
  469. package/dist/dx/health/health.int.test.js +0 -249
  470. package/dist/dx/health/health.int.test.js.map +0 -1
  471. package/dist/dx/logging/http-logging.int.test.d.ts +0 -5
  472. package/dist/dx/logging/http-logging.int.test.d.ts.map +0 -1
  473. package/dist/dx/logging/http-logging.int.test.js +0 -319
  474. package/dist/dx/logging/http-logging.int.test.js.map +0 -1
  475. package/dist/errors/factories.unit.test.d.ts +0 -7
  476. package/dist/errors/factories.unit.test.d.ts.map +0 -1
  477. package/dist/errors/factories.unit.test.js +0 -358
  478. package/dist/errors/factories.unit.test.js.map +0 -1
  479. package/dist/graphql/graphql.int.test.d.ts +0 -10
  480. package/dist/graphql/graphql.int.test.d.ts.map +0 -1
  481. package/dist/graphql/graphql.int.test.js +0 -698
  482. package/dist/graphql/graphql.int.test.js.map +0 -1
  483. package/dist/graphql/schema-generator.int.test.d.ts +0 -5
  484. package/dist/graphql/schema-generator.int.test.d.ts.map +0 -1
  485. package/dist/graphql/schema-generator.int.test.js +0 -51
  486. package/dist/graphql/schema-generator.int.test.js.map +0 -1
  487. package/dist/http/http.int.test.d.ts +0 -7
  488. package/dist/http/http.int.test.d.ts.map +0 -1
  489. package/dist/http/http.int.test.js +0 -605
  490. package/dist/http/http.int.test.js.map +0 -1
  491. package/dist/http/session-redis.int.test.d.ts +0 -8
  492. package/dist/http/session-redis.int.test.d.ts.map +0 -1
  493. package/dist/http/session-redis.int.test.js +0 -492
  494. package/dist/http/session-redis.int.test.js.map +0 -1
  495. package/dist/metrics/metrics.int.test.d.ts +0 -5
  496. package/dist/metrics/metrics.int.test.d.ts.map +0 -1
  497. package/dist/metrics/metrics.int.test.js +0 -288
  498. package/dist/metrics/metrics.int.test.js.map +0 -1
  499. package/dist/middleware/auth/oauth2.int.test.d.ts +0 -2
  500. package/dist/middleware/auth/oauth2.int.test.d.ts.map +0 -1
  501. package/dist/middleware/auth/oauth2.int.test.js +0 -714
  502. package/dist/middleware/auth/oauth2.int.test.js.map +0 -1
  503. package/dist/middleware/auth.int.test.d.ts +0 -5
  504. package/dist/middleware/auth.int.test.d.ts.map +0 -1
  505. package/dist/middleware/auth.int.test.js +0 -366
  506. package/dist/middleware/auth.int.test.js.map +0 -1
  507. package/dist/middleware/compose.int.test.d.ts +0 -7
  508. package/dist/middleware/compose.int.test.d.ts.map +0 -1
  509. package/dist/middleware/compose.int.test.js +0 -238
  510. package/dist/middleware/compose.int.test.js.map +0 -1
  511. package/dist/middleware/interceptors/bulkhead.int.test.d.ts +0 -5
  512. package/dist/middleware/interceptors/bulkhead.int.test.d.ts.map +0 -1
  513. package/dist/middleware/interceptors/bulkhead.int.test.js +0 -263
  514. package/dist/middleware/interceptors/bulkhead.int.test.js.map +0 -1
  515. package/dist/middleware/interceptors/cache.int.test.d.ts +0 -5
  516. package/dist/middleware/interceptors/cache.int.test.d.ts.map +0 -1
  517. package/dist/middleware/interceptors/cache.int.test.js +0 -470
  518. package/dist/middleware/interceptors/cache.int.test.js.map +0 -1
  519. package/dist/middleware/interceptors/circuit-breaker.int.test.d.ts +0 -5
  520. package/dist/middleware/interceptors/circuit-breaker.int.test.d.ts.map +0 -1
  521. package/dist/middleware/interceptors/circuit-breaker.int.test.js +0 -253
  522. package/dist/middleware/interceptors/circuit-breaker.int.test.js.map +0 -1
  523. package/dist/middleware/interceptors/envelope.int.test.d.ts +0 -5
  524. package/dist/middleware/interceptors/envelope.int.test.d.ts.map +0 -1
  525. package/dist/middleware/interceptors/envelope.int.test.js +0 -409
  526. package/dist/middleware/interceptors/envelope.int.test.js.map +0 -1
  527. package/dist/middleware/interceptors/fallback.int.test.d.ts +0 -5
  528. package/dist/middleware/interceptors/fallback.int.test.d.ts.map +0 -1
  529. package/dist/middleware/interceptors/fallback.int.test.js +0 -211
  530. package/dist/middleware/interceptors/fallback.int.test.js.map +0 -1
  531. package/dist/middleware/interceptors/logging.int.test.d.ts +0 -5
  532. package/dist/middleware/interceptors/logging.int.test.d.ts.map +0 -1
  533. package/dist/middleware/interceptors/logging.int.test.js +0 -144
  534. package/dist/middleware/interceptors/logging.int.test.js.map +0 -1
  535. package/dist/middleware/interceptors/rate-limit.int.test.d.ts +0 -5
  536. package/dist/middleware/interceptors/rate-limit.int.test.d.ts.map +0 -1
  537. package/dist/middleware/interceptors/rate-limit.int.test.js +0 -221
  538. package/dist/middleware/interceptors/rate-limit.int.test.js.map +0 -1
  539. package/dist/middleware/interceptors/request-id.int.test.d.ts +0 -5
  540. package/dist/middleware/interceptors/request-id.int.test.d.ts.map +0 -1
  541. package/dist/middleware/interceptors/request-id.int.test.js +0 -136
  542. package/dist/middleware/interceptors/request-id.int.test.js.map +0 -1
  543. package/dist/middleware/interceptors/retry.int.test.d.ts +0 -5
  544. package/dist/middleware/interceptors/retry.int.test.d.ts.map +0 -1
  545. package/dist/middleware/interceptors/retry.int.test.js +0 -534
  546. package/dist/middleware/interceptors/retry.int.test.js.map +0 -1
  547. package/dist/middleware/interceptors/timeout.int.test.d.ts +0 -5
  548. package/dist/middleware/interceptors/timeout.int.test.d.ts.map +0 -1
  549. package/dist/middleware/interceptors/timeout.int.test.js +0 -228
  550. package/dist/middleware/interceptors/timeout.int.test.js.map +0 -1
  551. package/dist/rate-limit/drivers/drivers.int.test.d.ts +0 -7
  552. package/dist/rate-limit/drivers/drivers.int.test.d.ts.map +0 -1
  553. package/dist/rate-limit/drivers/drivers.int.test.js +0 -466
  554. package/dist/rate-limit/drivers/drivers.int.test.js.map +0 -1
  555. package/dist/server/builder.int.test.d.ts +0 -7
  556. package/dist/server/builder.int.test.d.ts.map +0 -1
  557. package/dist/server/builder.int.test.js +0 -455
  558. package/dist/server/builder.int.test.js.map +0 -1
  559. package/dist/server/fs-routes/loader.int.test.d.ts +0 -5
  560. package/dist/server/fs-routes/loader.int.test.d.ts.map +0 -1
  561. package/dist/server/fs-routes/loader.int.test.js +0 -48
  562. package/dist/server/fs-routes/loader.int.test.js.map +0 -1
  563. package/dist/server/hooks.int.test.d.ts +0 -7
  564. package/dist/server/hooks.int.test.d.ts.map +0 -1
  565. package/dist/server/hooks.int.test.js +0 -564
  566. package/dist/server/hooks.int.test.js.map +0 -1
  567. package/dist/server/route-discovery.int.test.d.ts +0 -5
  568. package/dist/server/route-discovery.int.test.d.ts.map +0 -1
  569. package/dist/server/route-discovery.int.test.js +0 -49
  570. package/dist/server/route-discovery.int.test.js.map +0 -1
  571. package/dist/stream/raffel-stream.int.test.d.ts +0 -2
  572. package/dist/stream/raffel-stream.int.test.d.ts.map +0 -1
  573. package/dist/stream/raffel-stream.int.test.js +0 -265
  574. package/dist/stream/raffel-stream.int.test.js.map +0 -1
  575. package/dist/tracing/tracing.int.test.d.ts +0 -5
  576. package/dist/tracing/tracing.int.test.d.ts.map +0 -1
  577. package/dist/tracing/tracing.int.test.js +0 -412
  578. package/dist/tracing/tracing.int.test.js.map +0 -1
  579. package/dist/usd/usd.int.test.d.ts +0 -10
  580. package/dist/usd/usd.int.test.d.ts.map +0 -1
  581. package/dist/usd/usd.int.test.js +0 -719
  582. package/dist/usd/usd.int.test.js.map +0 -1
  583. package/dist/validation/multi-validator.int.test.d.ts +0 -7
  584. package/dist/validation/multi-validator.int.test.d.ts.map +0 -1
  585. package/dist/validation/multi-validator.int.test.js +0 -808
  586. package/dist/validation/multi-validator.int.test.js.map +0 -1
  587. package/dist/validation/schema.int.test.d.ts +0 -5
  588. package/dist/validation/schema.int.test.d.ts.map +0 -1
  589. package/dist/validation/schema.int.test.js +0 -340
  590. package/dist/validation/schema.int.test.js.map +0 -1
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Session Interceptor
3
+ *
4
+ * Injects a live Session handle into `ctx.session` for every request.
5
+ * The session is loaded from the store at the start of the request and
6
+ * persisted (if dirty) after the handler returns.
7
+ *
8
+ * Session IDs are read from / written to cookies by default.
9
+ */
10
+ import { createMemorySessionDriver } from './drivers/memory.js';
11
+ // ============================================================================
12
+ // Session ID generation
13
+ // ============================================================================
14
+ function generateSessionId() {
15
+ // Use crypto.randomUUID() if available (Node 15+), fall back to randomBytes
16
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
17
+ return crypto.randomUUID().replace(/-/g, '');
18
+ }
19
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
20
+ const nodeCrypto = require('crypto');
21
+ return nodeCrypto.randomBytes(16).toString('hex');
22
+ }
23
+ // ============================================================================
24
+ // Cookie helpers
25
+ // ============================================================================
26
+ function parseCookies(cookieHeader) {
27
+ const cookies = {};
28
+ for (const part of cookieHeader.split(';')) {
29
+ const eqIdx = part.indexOf('=');
30
+ if (eqIdx === -1)
31
+ continue;
32
+ const name = part.slice(0, eqIdx).trim();
33
+ const value = part.slice(eqIdx + 1).trim();
34
+ cookies[name] = decodeURIComponent(value);
35
+ }
36
+ return cookies;
37
+ }
38
+ function buildSetCookieHeader(name, value, options = {}) {
39
+ let cookie = `${name}=${encodeURIComponent(value)}`;
40
+ if (options.maxAge != null)
41
+ cookie += `; Max-Age=${options.maxAge}`;
42
+ if (options.httpOnly !== false)
43
+ cookie += '; HttpOnly';
44
+ if (options.secure !== false)
45
+ cookie += '; Secure';
46
+ cookie += `; SameSite=${options.sameSite ?? 'Lax'}`;
47
+ cookie += `; Path=${options.path ?? '/'}`;
48
+ if (options.domain)
49
+ cookie += `; Domain=${options.domain}`;
50
+ return cookie;
51
+ }
52
+ function buildDeleteCookieHeader(name, path = '/') {
53
+ return `${name}=; Max-Age=0; Path=${path}; HttpOnly`;
54
+ }
55
+ // ============================================================================
56
+ // HMAC signing (optional)
57
+ // ============================================================================
58
+ function signId(id, secret) {
59
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
60
+ const crypto = require('crypto');
61
+ const sig = crypto.createHmac('sha256', secret).update(id).digest('base64url');
62
+ return `${id}.${sig}`;
63
+ }
64
+ function unsignId(signed, secret) {
65
+ const lastDot = signed.lastIndexOf('.');
66
+ if (lastDot === -1)
67
+ return null;
68
+ const id = signed.slice(0, lastDot);
69
+ const expected = signId(id, secret);
70
+ // Constant-time comparison
71
+ if (signed.length !== expected.length)
72
+ return null;
73
+ let ok = true;
74
+ for (let i = 0; i < signed.length; i++) {
75
+ if (signed.charCodeAt(i) !== expected.charCodeAt(i))
76
+ ok = false;
77
+ }
78
+ return ok ? id : null;
79
+ }
80
+ // ============================================================================
81
+ // Session handle factory
82
+ // ============================================================================
83
+ function createSession(id, data) {
84
+ let dirty = false;
85
+ let destroyed = false;
86
+ let pendingAction = null;
87
+ let sessionId = id;
88
+ return {
89
+ get id() { return sessionId; },
90
+ data,
91
+ touch() {
92
+ dirty = true;
93
+ if (pendingAction !== 'destroy')
94
+ pendingAction = 'save';
95
+ },
96
+ get isDirty() { return dirty; },
97
+ destroy() {
98
+ destroyed = true;
99
+ pendingAction = 'destroy';
100
+ },
101
+ get isDestroyed() { return destroyed; },
102
+ async regenerate() {
103
+ sessionId = generateSessionId();
104
+ dirty = true;
105
+ pendingAction = 'save';
106
+ },
107
+ get _pending() { return pendingAction; },
108
+ get _id() { return sessionId; },
109
+ setId(newId) { sessionId = newId; },
110
+ };
111
+ }
112
+ // ============================================================================
113
+ // Store factory
114
+ // ============================================================================
115
+ function resolveStore(config) {
116
+ const { driver } = config;
117
+ if (driver === 'memory') {
118
+ return createMemorySessionDriver();
119
+ }
120
+ if (driver === 'custom') {
121
+ throw new Error('Session driver "custom" requires a store instance. Pass it via driver: myStore (a SessionStore object).');
122
+ }
123
+ if (typeof driver === 'object' && driver !== null) {
124
+ return driver;
125
+ }
126
+ throw new Error('Invalid session driver. Use "memory" or pass a custom SessionStore instance to session.driver.');
127
+ }
128
+ // ============================================================================
129
+ // createSessionInterceptor
130
+ // ============================================================================
131
+ /**
132
+ * Create a session interceptor that injects `ctx.session` into every request.
133
+ *
134
+ * The session is loaded lazily from the store when first accessed,
135
+ * and persisted automatically after the handler completes (if dirty).
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * import { createSessionInterceptor } from 'raffel/session'
140
+ *
141
+ * const server = createServer({ port: 3000 })
142
+ *
143
+ * server.use(createSessionInterceptor({
144
+ * driver: 'memory',
145
+ * ttl: 3600,
146
+ * cookie: { name: 'sid', secure: true },
147
+ * }))
148
+ *
149
+ * server.procedure('auth.login').handler(async (input, ctx) => {
150
+ * ctx.session.data.userId = input.userId
151
+ * ctx.session.touch()
152
+ * return { ok: true }
153
+ * })
154
+ *
155
+ * server.procedure('auth.me').handler(async (_input, ctx) => {
156
+ * return { userId: ctx.session.data.userId }
157
+ * })
158
+ * ```
159
+ */
160
+ export function createSessionInterceptor(config) {
161
+ const store = resolveStore(config);
162
+ const ttl = config.ttl ?? 3600;
163
+ const rolling = config.rolling ?? false;
164
+ const cookieName = config.cookie?.name ?? 'sid';
165
+ const cookieOptions = config.cookie ?? {};
166
+ return async (envelope, ctx, next) => {
167
+ // --- Read session ID from cookie ---
168
+ const cookieHeader = envelope.metadata?.['cookie'] ??
169
+ envelope.metadata?.['Cookie'] ??
170
+ '';
171
+ const cookies = parseCookies(cookieHeader);
172
+ const cookieValue = cookies[cookieName] ?? null;
173
+ let sessionId;
174
+ // Unsign if secret configured — may return null if tampered
175
+ const rawSid = (cookieValue && config.secret)
176
+ ? unsignId(cookieValue, config.secret)
177
+ : cookieValue;
178
+ // Load or create session
179
+ let sessionData;
180
+ let isNew = false;
181
+ if (rawSid) {
182
+ const stored = await store.get(rawSid);
183
+ if (stored) {
184
+ sessionId = rawSid;
185
+ sessionData = stored;
186
+ }
187
+ else {
188
+ // Expired or not found → new session
189
+ sessionId = generateSessionId();
190
+ sessionData = {};
191
+ isNew = true;
192
+ }
193
+ }
194
+ else {
195
+ sessionId = generateSessionId();
196
+ sessionData = {};
197
+ isNew = true;
198
+ }
199
+ const session = createSession(sessionId, sessionData);
200
+ ctx['session'] = session;
201
+ // --- Run handler ---
202
+ let result;
203
+ try {
204
+ result = await next();
205
+ }
206
+ finally {
207
+ // --- Persist session after handler ---
208
+ const pending = session._pending;
209
+ const currentId = session._id;
210
+ if (pending === 'destroy') {
211
+ await store.delete(sessionId);
212
+ // Set delete cookie header
213
+ const delCookie = buildDeleteCookieHeader(cookieName, cookieOptions.path);
214
+ appendSetCookieHeader(envelope, delCookie);
215
+ }
216
+ else if (pending === 'save' || (rolling && !isNew && !session.isDestroyed)) {
217
+ if (pending === 'save' || session.isDirty || config.saveUninitialized) {
218
+ await store.set(currentId, session.data, ttl);
219
+ }
220
+ if (rolling && !isNew) {
221
+ await store.touch(currentId, ttl);
222
+ }
223
+ const maxAge = cookieOptions.maxAge ?? ttl;
224
+ const finalId = config.secret ? signId(currentId, config.secret) : currentId;
225
+ const setCookie = buildSetCookieHeader(cookieName, finalId, { ...cookieOptions, maxAge });
226
+ appendSetCookieHeader(envelope, setCookie);
227
+ }
228
+ else if (isNew && (session.isDirty || config.saveUninitialized)) {
229
+ await store.set(currentId, session.data, ttl);
230
+ const maxAge = cookieOptions.maxAge ?? ttl;
231
+ const finalId = config.secret ? signId(currentId, config.secret) : currentId;
232
+ const setCookie = buildSetCookieHeader(cookieName, finalId, { ...cookieOptions, maxAge });
233
+ appendSetCookieHeader(envelope, setCookie);
234
+ }
235
+ }
236
+ return result;
237
+ };
238
+ }
239
+ /**
240
+ * Append a Set-Cookie header to the response.
241
+ * Tries to use the envelope's response metadata (httpResponseHeaders) if available.
242
+ */
243
+ function appendSetCookieHeader(envelope, value) {
244
+ const meta = envelope.metadata;
245
+ if (!meta)
246
+ return;
247
+ const existing = meta['httpResponseHeaders'];
248
+ if (existing) {
249
+ const current = existing['set-cookie'];
250
+ if (Array.isArray(current)) {
251
+ current.push(value);
252
+ }
253
+ else if (typeof current === 'string') {
254
+ existing['set-cookie'] = [current, value];
255
+ }
256
+ else {
257
+ existing['set-cookie'] = value;
258
+ }
259
+ }
260
+ else {
261
+ meta['httpResponseHeaders'] = { 'set-cookie': value };
262
+ }
263
+ }
264
+ //# sourceMappingURL=interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../../../src/middleware/session/interceptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAE/D,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,SAAS,iBAAiB;IACxB,4EAA4E;IAC5E,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC9C,CAAC;IACD,8DAA8D;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAA4B,CAAA;IAC/D,OAAO,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACnD,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,SAAS,YAAY,CAAC,YAAoB;IACxC,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAQ;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,KAAa,EACb,UAAyD,EAAE;IAE3D,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAA;IAEnD,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI;QAAE,MAAM,IAAI,aAAa,OAAO,CAAC,MAAM,EAAE,CAAA;IACnE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK;QAAE,MAAM,IAAI,YAAY,CAAA;IACtD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;QAAE,MAAM,IAAI,UAAU,CAAA;IAClD,MAAM,IAAI,cAAc,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAA;IACnD,MAAM,IAAI,UAAU,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAA;IACzC,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,YAAY,OAAO,CAAC,MAAM,EAAE,CAAA;IAE1D,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY,EAAE,IAAI,GAAG,GAAG;IACvD,OAAO,GAAG,IAAI,sBAAsB,IAAI,YAAY,CAAA;AACtD,CAAC;AAED,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,SAAS,MAAM,CAAC,EAAU,EAAE,MAAc;IACxC,8DAA8D;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAA4B,CAAA;IAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAC9E,OAAO,GAAG,EAAE,IAAI,GAAG,EAAE,CAAA;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAc;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACvC,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAE/B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAEnC,2BAA2B;IAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAClD,IAAI,EAAE,GAAG,IAAI,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,EAAE,GAAG,KAAK,CAAA;IACjE,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AACvB,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,SAAS,aAAa,CAAC,EAAU,EAAE,IAAiB;IAKlD,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,aAAa,GAA8B,IAAI,CAAA;IACnD,IAAI,SAAS,GAAG,EAAE,CAAA;IAElB,OAAO;QACL,IAAI,EAAE,KAAK,OAAO,SAAS,CAAA,CAAC,CAAC;QAE7B,IAAI;QAEJ,KAAK;YACH,KAAK,GAAG,IAAI,CAAA;YACZ,IAAI,aAAa,KAAK,SAAS;gBAAE,aAAa,GAAG,MAAM,CAAA;QACzD,CAAC;QAED,IAAI,OAAO,KAAK,OAAO,KAAK,CAAA,CAAC,CAAC;QAE9B,OAAO;YACL,SAAS,GAAG,IAAI,CAAA;YAChB,aAAa,GAAG,SAAS,CAAA;QAC3B,CAAC;QAED,IAAI,WAAW,KAAK,OAAO,SAAS,CAAA,CAAC,CAAC;QAEtC,KAAK,CAAC,UAAU;YACd,SAAS,GAAG,iBAAiB,EAAE,CAAA;YAC/B,KAAK,GAAG,IAAI,CAAA;YACZ,aAAa,GAAG,MAAM,CAAA;QACxB,CAAC;QAED,IAAI,QAAQ,KAAK,OAAO,aAAa,CAAA,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,OAAO,SAAS,CAAA,CAAC,CAAC;QAC9B,KAAK,CAAC,KAAa,IAAI,SAAS,GAAG,KAAK,CAAA,CAAC,CAAC;KAC3C,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,SAAS,YAAY,CAAC,MAAqB;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAEzB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,yBAAyB,EAAE,CAAA;IACpC,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAA;IACH,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,MAAsB,CAAA;IAC/B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAqB;IAC5D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAA;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAA;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,KAAK,CAAA;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;IAEzC,OAAO,KAAK,EAAE,QAAkB,EAAE,GAAY,EAAE,IAA4B,EAAE,EAAE;QAC9E,sCAAsC;QACtC,MAAM,YAAY,GACf,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAwB;YACpD,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAwB;YACrD,EAAE,CAAA;QAEJ,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;QAC1C,MAAM,WAAW,GAAkB,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAA;QAC9D,IAAI,SAAiB,CAAA;QAErB,4DAA4D;QAC5D,MAAM,MAAM,GAAkB,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC;YAC1D,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YACtC,CAAC,CAAC,WAAW,CAAA;QAEf,yBAAyB;QACzB,IAAI,WAAwB,CAAA;QAC5B,IAAI,KAAK,GAAG,KAAK,CAAA;QAEjB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,SAAS,GAAG,MAAM,CAAA;gBAClB,WAAW,GAAG,MAAM,CAAA;YACtB,CAAC;iBAAM,CAAC;gBACN,qCAAqC;gBACrC,SAAS,GAAG,iBAAiB,EAAE,CAAA;gBAC/B,WAAW,GAAG,EAAE,CAAA;gBAChB,KAAK,GAAG,IAAI,CAAA;YACd,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,iBAAiB,EAAE,CAAA;YAC/B,WAAW,GAAG,EAAE,CAAA;YAChB,KAAK,GAAG,IAAI,CAAA;QACd,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAGpD;QAAC,GAA0C,CAAC,SAAS,CAAC,GAAG,OAAO,CAAA;QAEjE,sBAAsB;QACtB,IAAI,MAAe,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;QACvB,CAAC;gBAAS,CAAC;YACT,wCAAwC;YACxC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAA;YAChC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAA;YAE7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBAE7B,2BAA2B;gBAC3B,MAAM,SAAS,GAAG,uBAAuB,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;gBACzE,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC;iBAAM,IAAI,OAAO,KAAK,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7E,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBACtE,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;gBAC/C,CAAC;gBAED,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;oBACtB,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;gBACnC,CAAC;gBAED,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,IAAI,GAAG,CAAA;gBAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC5E,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;gBACzF,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC;iBAAM,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAClE,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;gBAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,IAAI,GAAG,CAAA;gBAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC5E,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;gBACzF,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,QAAkB,EAAE,KAAa;IAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAA+C,CAAA;IACrE,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAwC,CAAA;IACnF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;aAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,CAAA;QAChC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IACvD,CAAC;AACH,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Session Store Types
3
+ *
4
+ * Interfaces for the dedicated Session Store abstraction.
5
+ * The session store manages user sessions across requests,
6
+ * providing a uniform API regardless of backing storage.
7
+ */
8
+ /**
9
+ * Session data bag — arbitrary key/value pairs persisted per session.
10
+ */
11
+ export type SessionData = Record<string, unknown>;
12
+ /**
13
+ * Session store interface.
14
+ * Implement this to provide a custom backing store.
15
+ */
16
+ export interface SessionStore {
17
+ /** Retrieve session data by session ID. Returns null if not found or expired. */
18
+ get(id: string): Promise<SessionData | null>;
19
+ /** Persist session data. `ttl` is in seconds; store must honour it. */
20
+ set(id: string, data: SessionData, ttl?: number): Promise<void>;
21
+ /** Delete a session. No-op if not found. */
22
+ delete(id: string): Promise<void>;
23
+ /**
24
+ * Touch a session — reset its expiry without changing data.
25
+ * Used for sliding-window TTL.
26
+ */
27
+ touch(id: string, ttl?: number): Promise<void>;
28
+ }
29
+ /**
30
+ * Cookie options for the session cookie.
31
+ */
32
+ export interface SessionCookieOptions {
33
+ /** Cookie name (default: 'sid') */
34
+ name?: string;
35
+ /** Max age in seconds (takes precedence over `ttl` for cookie expiry). Defaults to `ttl`. */
36
+ maxAge?: number;
37
+ /** HttpOnly flag (default: true) */
38
+ httpOnly?: boolean;
39
+ /** Secure flag — set cookies only over HTTPS (default: true in production) */
40
+ secure?: boolean;
41
+ /** SameSite policy (default: 'lax') */
42
+ sameSite?: 'strict' | 'lax' | 'none';
43
+ /** Cookie path (default: '/') */
44
+ path?: string;
45
+ /** Cookie domain */
46
+ domain?: string;
47
+ }
48
+ /**
49
+ * Session store driver type (built-in drivers).
50
+ *
51
+ * - `'memory'` — in-memory Map + TTL (dev, single-instance)
52
+ * - `'custom'` — explicit alias for passing any `SessionStore` instance
53
+ */
54
+ export type SessionDriverType = 'memory' | 'custom';
55
+ /**
56
+ * Session configuration passed to `createServer()`.
57
+ */
58
+ export interface SessionConfig {
59
+ /**
60
+ * Built-in driver type, OR a custom store instance.
61
+ *
62
+ * @example
63
+ * // Built-in memory driver (dev)
64
+ * driver: 'memory'
65
+ *
66
+ * @example
67
+ * // Custom store
68
+ * driver: myCustomStore
69
+ */
70
+ driver: SessionDriverType | SessionStore;
71
+ /**
72
+ * Session TTL in seconds (default: 3600 — 1 hour).
73
+ * Applies to both store expiry and cookie maxAge (unless overridden in `cookie.maxAge`).
74
+ */
75
+ ttl?: number;
76
+ /**
77
+ * Whether to use a sliding-window TTL: each access resets the TTL.
78
+ * (default: false — fixed TTL)
79
+ */
80
+ rolling?: boolean;
81
+ /**
82
+ * Whether to save sessions that have never been modified.
83
+ * (default: false — lazy save)
84
+ */
85
+ saveUninitialized?: boolean;
86
+ /**
87
+ * Secret for signing session IDs (HMAC-SHA256).
88
+ * If not set, session IDs are unsigned.
89
+ */
90
+ secret?: string;
91
+ /** Cookie configuration */
92
+ cookie?: SessionCookieOptions;
93
+ }
94
+ /**
95
+ * Live session handle injected into `ctx.session` by the session interceptor.
96
+ */
97
+ export interface Session {
98
+ /** Session ID */
99
+ readonly id: string;
100
+ /** Session data (mutable) */
101
+ data: SessionData;
102
+ /**
103
+ * Mark session as modified so it will be persisted at response time.
104
+ * Called automatically when `data` is mutated via `set()`.
105
+ */
106
+ touch(): void;
107
+ /** Whether the session has been modified this request */
108
+ readonly isDirty: boolean;
109
+ /** Destroy the session (delete from store, clear cookie on response) */
110
+ destroy(): void;
111
+ /** Whether the session has been destroyed */
112
+ readonly isDestroyed: boolean;
113
+ /** Regenerate session ID (for security after privilege escalation) */
114
+ regenerate(): Promise<void>;
115
+ }
116
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/middleware/session/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEjD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,iFAAiF;IACjF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAE5C,uEAAuE;IACvE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/D,4CAA4C;IAC5C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjC;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/C;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;IACpC,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEnD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;OAUG;IACH,MAAM,EAAE,iBAAiB,GAAG,YAAY,CAAA;IAExC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,2BAA2B;IAC3B,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAE9B;AAMD;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,iBAAiB;IACjB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,6BAA6B;IAC7B,IAAI,EAAE,WAAW,CAAA;IAEjB;;;OAGG;IACH,KAAK,IAAI,IAAI,CAAA;IAEb,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB,wEAAwE;IACxE,OAAO,IAAI,IAAI,CAAA;IAEf,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAE7B,sEAAsE;IACtE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Session Store Types
3
+ *
4
+ * Interfaces for the dedicated Session Store abstraction.
5
+ * The session store manages user sessions across requests,
6
+ * providing a uniform API regardless of backing storage.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/middleware/session/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * HTTPS CONNECT Tunnel
3
+ *
4
+ * Attaches to an existing http.Server via the 'connect' event.
5
+ * Supports two modes:
6
+ * - forward: transparent TCP tunnel (HTTP CONNECT proxy)
7
+ * - mitm: TLS termination for inspection (MITM proxy)
8
+ *
9
+ * Usage:
10
+ * const tunnel = createConnectTunnel({ mode: 'forward' })
11
+ * tunnel.attachTo(httpServer)
12
+ */
13
+ import { type Socket } from 'node:net';
14
+ import type { IncomingMessage, Server as HttpServer } from 'node:http';
15
+ import type { ProxyAuth, ProxyStats } from './types.js';
16
+ export type ConnectMode = 'forward' | 'mitm';
17
+ export interface TunnelInfo {
18
+ host: string;
19
+ port: number;
20
+ clientAddress: string;
21
+ }
22
+ export interface ConnectTunnelOptions {
23
+ /** 'forward' = transparent tunnel, 'mitm' = TLS termination. Default: 'forward' */
24
+ mode?: ConnectMode;
25
+ auth?: ProxyAuth;
26
+ /** Upstream connection timeout in ms. Default: 10_000 */
27
+ connectTimeout?: number;
28
+ /** Custom CA for MITM mode (defaults to built-in CA) */
29
+ ca?: {
30
+ key: string;
31
+ cert: string;
32
+ };
33
+ onConnect?: (info: TunnelInfo) => void;
34
+ onDisconnect?: (info: TunnelInfo & {
35
+ reason: string;
36
+ }) => void;
37
+ }
38
+ export interface ConnectTunnel {
39
+ /** Raw connect handler — attach manually or use attachTo(). */
40
+ connectHandler(req: IncomingMessage, socket: Socket, head: Buffer): void;
41
+ /** Attach this tunnel's connect handler to an http.Server. */
42
+ attachTo(server: HttpServer): void;
43
+ /** Detach this tunnel's connect handler from an http.Server. */
44
+ detachFrom(server: HttpServer): void;
45
+ /** The CA certificate PEM for MITM mode (null in forward mode). */
46
+ readonly caCert: string | null;
47
+ readonly stats: ProxyStats;
48
+ }
49
+ export declare function createConnectTunnel(options?: ConnectTunnelOptions): ConnectTunnel;
50
+ //# sourceMappingURL=connect-tunnel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-tunnel.d.ts","sourceRoot":"","sources":["../../src/proxy/connect-tunnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAKvD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,wDAAwD;IACxD,EAAE,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAClC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CAC/D;AAED,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACxE,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IAClC,gEAAgE;IAChE,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAgMrF"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * HTTPS CONNECT Tunnel
3
+ *
4
+ * Attaches to an existing http.Server via the 'connect' event.
5
+ * Supports two modes:
6
+ * - forward: transparent TCP tunnel (HTTP CONNECT proxy)
7
+ * - mitm: TLS termination for inspection (MITM proxy)
8
+ *
9
+ * Usage:
10
+ * const tunnel = createConnectTunnel({ mode: 'forward' })
11
+ * tunnel.attachTo(httpServer)
12
+ */
13
+ import { connect as netConnect } from 'node:net';
14
+ import { TLSSocket, connect as tlsConnect } from 'node:tls';
15
+ import { parseBasicProxyAuth, verifyProxyAuth, createProxyStats } from './utils/auth.js';
16
+ import { pipeBidirectional } from './utils/pipe.js';
17
+ import { generateCertificate, getDefaultCA } from '../utils/certs.js';
18
+ export function createConnectTunnel(options = {}) {
19
+ const { mode = 'forward', auth, connectTimeout = 10_000, ca: customCa, onConnect, onDisconnect, } = options;
20
+ const { mutable, snapshot } = createProxyStats();
21
+ const certCache = new Map();
22
+ // Pre-compute caCert for MITM mode
23
+ let caCertPem = null;
24
+ if (mode === 'mitm') {
25
+ const ca = customCa ?? getDefaultCA();
26
+ caCertPem = ca.cert;
27
+ }
28
+ async function handleConnect(req, clientSocket, head) {
29
+ const hostPort = req.url ?? ':443';
30
+ const colonIdx = hostPort.lastIndexOf(':');
31
+ const host = hostPort.slice(0, colonIdx);
32
+ const port = parseInt(hostPort.slice(colonIdx + 1) || '443', 10);
33
+ const clientAddress = clientSocket.remoteAddress ?? 'unknown';
34
+ // Auth check
35
+ const creds = parseBasicProxyAuth(req.headers['proxy-authorization']);
36
+ const authed = await verifyProxyAuth(auth, creds);
37
+ if (!authed) {
38
+ mutable.authFailures++;
39
+ clientSocket.write('HTTP/1.1 407 Proxy Authentication Required\r\nProxy-Authenticate: Basic realm="proxy"\r\n\r\n');
40
+ clientSocket.destroy();
41
+ return;
42
+ }
43
+ mutable.connectionsTotal++;
44
+ mutable.connectionsActive++;
45
+ const info = { host, port, clientAddress };
46
+ onConnect?.(info);
47
+ function onEnd(reason) {
48
+ mutable.connectionsActive--;
49
+ onDisconnect?.({ ...info, reason });
50
+ }
51
+ if (mode === 'forward') {
52
+ handleForward(host, port, clientSocket, head, onEnd);
53
+ }
54
+ else {
55
+ await handleMitm(host, port, clientSocket, head, onEnd);
56
+ }
57
+ }
58
+ function handleForward(host, port, clientSocket, head, onEnd) {
59
+ const upstream = netConnect({ host, port });
60
+ upstream.setTimeout(connectTimeout);
61
+ upstream.on('connect', () => {
62
+ upstream.setTimeout(0);
63
+ clientSocket.write('HTTP/1.1 200 Connection Established\r\n\r\n');
64
+ if (head.length > 0)
65
+ upstream.write(head);
66
+ pipeBidirectional(clientSocket, upstream, {
67
+ onStats: (s) => {
68
+ mutable.bytesFromClient += s.bytesFromA;
69
+ mutable.bytesToClient += s.bytesToA;
70
+ },
71
+ onEnd: () => onEnd('closed'),
72
+ onError: (err) => {
73
+ mutable.connectionsErrored++;
74
+ onEnd(err.message);
75
+ },
76
+ });
77
+ });
78
+ upstream.on('timeout', () => {
79
+ upstream.destroy(new Error('connect timeout'));
80
+ });
81
+ upstream.on('error', () => {
82
+ mutable.connectionsErrored++;
83
+ onEnd('upstream error');
84
+ if (!clientSocket.destroyed)
85
+ clientSocket.destroy();
86
+ });
87
+ clientSocket.on('error', () => {
88
+ upstream.destroy();
89
+ });
90
+ }
91
+ async function handleMitm(host, port, clientSocket, _head, onEnd) {
92
+ // Get or generate cert for this host
93
+ let certInfo = certCache.get(host);
94
+ if (!certInfo) {
95
+ const ca = customCa ?? getDefaultCA();
96
+ const generated = await generateCertificate(host, {
97
+ caKey: ca.key,
98
+ caCert: ca.cert,
99
+ });
100
+ certInfo = { key: generated.key, cert: generated.cert };
101
+ certCache.set(host, certInfo);
102
+ }
103
+ // Tell client tunnel is ready
104
+ clientSocket.write('HTTP/1.1 200 Connection Established\r\n\r\n');
105
+ // Wrap client socket in TLS (server side)
106
+ const tlsClient = new TLSSocket(clientSocket, {
107
+ isServer: true,
108
+ key: certInfo.key,
109
+ cert: certInfo.cert,
110
+ });
111
+ tlsClient.on('error', () => {
112
+ mutable.connectionsErrored++;
113
+ onEnd('tls client error');
114
+ });
115
+ // Connect to real upstream via TLS
116
+ const tlsUpstream = tlsConnect({
117
+ host,
118
+ port,
119
+ rejectUnauthorized: false,
120
+ timeout: connectTimeout,
121
+ });
122
+ tlsUpstream.on('secureConnect', () => {
123
+ pipeBidirectional(tlsClient, tlsUpstream, {
124
+ onStats: (s) => {
125
+ mutable.bytesFromClient += s.bytesFromA;
126
+ mutable.bytesToClient += s.bytesToA;
127
+ },
128
+ onEnd: () => onEnd('closed'),
129
+ onError: (err) => {
130
+ mutable.connectionsErrored++;
131
+ onEnd(err.message);
132
+ },
133
+ });
134
+ });
135
+ tlsUpstream.on('error', () => {
136
+ mutable.connectionsErrored++;
137
+ onEnd('upstream tls error');
138
+ tlsClient.destroy();
139
+ });
140
+ clientSocket.on('error', () => {
141
+ tlsUpstream.destroy();
142
+ });
143
+ }
144
+ const handler = (req, socket, head) => {
145
+ void handleConnect(req, socket, head);
146
+ };
147
+ return {
148
+ connectHandler: handler,
149
+ attachTo(server) {
150
+ server.on('connect', handler);
151
+ },
152
+ detachFrom(server) {
153
+ server.off('connect', handler);
154
+ },
155
+ get caCert() {
156
+ return caCertPem;
157
+ },
158
+ get stats() {
159
+ return snapshot();
160
+ },
161
+ };
162
+ }
163
+ //# sourceMappingURL=connect-tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-tunnel.js","sourceRoot":"","sources":["../../src/proxy/connect-tunnel.ts"],"names":[],"mappings":"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"}