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
@@ -1,714 +0,0 @@
1
- /**
2
- * OAuth2/OIDC Strategy Integration Tests
3
- */
4
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
5
- import { createOAuth2Strategy, createOIDCStrategy, createGoogleOAuth2Strategy, createGitHubOAuth2Strategy, createMicrosoftOAuth2Strategy, createAppleOAuth2Strategy, createFacebookOAuth2Strategy, generateState, generateNonce, clearDiscoveryCache, OAuth2Providers, } from './oauth2.js';
6
- // Mock fetch globally
7
- const mockFetch = vi.fn();
8
- global.fetch = mockFetch;
9
- // Helper to create test envelope
10
- function createTestEnvelope(metadata = {}) {
11
- return {
12
- id: 'test-1',
13
- procedure: 'test.procedure',
14
- type: 'request',
15
- payload: {},
16
- metadata,
17
- context: createTestContext(),
18
- };
19
- }
20
- // Helper to create test context
21
- function createTestContext() {
22
- return {
23
- requestId: 'req-123',
24
- tracing: {
25
- traceId: 'trace-123',
26
- spanId: 'span-123',
27
- },
28
- signal: new AbortController().signal,
29
- extensions: new Map(),
30
- };
31
- }
32
- describe('OAuth2 Strategy', () => {
33
- beforeEach(() => {
34
- vi.clearAllMocks();
35
- clearDiscoveryCache();
36
- });
37
- afterEach(() => {
38
- vi.restoreAllMocks();
39
- });
40
- describe('createOAuth2Strategy', () => {
41
- it('should create strategy with Google provider preset', () => {
42
- const strategy = createOAuth2Strategy({
43
- provider: 'google',
44
- clientId: 'client-id',
45
- clientSecret: 'client-secret',
46
- redirectUri: 'https://example.com/callback',
47
- });
48
- expect(strategy.name).toBe('oauth2:google');
49
- expect(strategy.authenticate).toBeDefined();
50
- expect(strategy.getAuthorizationUrl).toBeDefined();
51
- expect(strategy.exchangeCode).toBeDefined();
52
- expect(strategy.refreshToken).toBeDefined();
53
- expect(strategy.getUserInfo).toBeDefined();
54
- });
55
- it('should create strategy with custom provider', () => {
56
- const strategy = createOAuth2Strategy({
57
- provider: 'custom',
58
- clientId: 'client-id',
59
- clientSecret: 'client-secret',
60
- redirectUri: 'https://example.com/callback',
61
- authorizationUrl: 'https://custom.auth/authorize',
62
- tokenUrl: 'https://custom.auth/token',
63
- });
64
- expect(strategy.name).toBe('oauth2:custom');
65
- });
66
- it('should return null when no Authorization header present', async () => {
67
- const strategy = createOAuth2Strategy({
68
- provider: 'google',
69
- clientId: 'client-id',
70
- clientSecret: 'client-secret',
71
- redirectUri: 'https://example.com/callback',
72
- });
73
- const envelope = createTestEnvelope();
74
- const ctx = createTestContext();
75
- const result = await strategy.authenticate(envelope, ctx);
76
- expect(result).toBeNull();
77
- });
78
- it('should return null for non-Bearer tokens', async () => {
79
- const strategy = createOAuth2Strategy({
80
- provider: 'google',
81
- clientId: 'client-id',
82
- clientSecret: 'client-secret',
83
- redirectUri: 'https://example.com/callback',
84
- });
85
- const envelope = createTestEnvelope({
86
- authorization: 'Basic dXNlcjpwYXNz',
87
- });
88
- const ctx = createTestContext();
89
- const result = await strategy.authenticate(envelope, ctx);
90
- expect(result).toBeNull();
91
- });
92
- it('should validate token via introspection endpoint', async () => {
93
- mockFetch.mockResolvedValueOnce({
94
- ok: true,
95
- json: async () => ({
96
- active: true,
97
- sub: 'user-123',
98
- username: 'testuser',
99
- scope: 'openid email profile',
100
- }),
101
- });
102
- const strategy = createOAuth2Strategy({
103
- provider: 'custom',
104
- clientId: 'client-id',
105
- clientSecret: 'client-secret',
106
- redirectUri: 'https://example.com/callback',
107
- authorizationUrl: 'https://auth.example.com/authorize',
108
- tokenUrl: 'https://auth.example.com/token',
109
- introspectionUrl: 'https://auth.example.com/introspect',
110
- tokenValidation: 'introspection', // Must specify introspection
111
- });
112
- const envelope = createTestEnvelope({
113
- authorization: 'Bearer valid-token',
114
- });
115
- const ctx = createTestContext();
116
- const result = await strategy.authenticate(envelope, ctx);
117
- expect(result).toEqual({
118
- authenticated: true,
119
- principal: 'user-123',
120
- claims: {
121
- active: true,
122
- sub: 'user-123',
123
- username: 'testuser',
124
- scope: 'openid email profile',
125
- accessToken: 'valid-token',
126
- },
127
- });
128
- });
129
- it('should return unauthenticated for inactive token', async () => {
130
- mockFetch.mockResolvedValueOnce({
131
- ok: true,
132
- json: async () => ({
133
- active: false,
134
- }),
135
- });
136
- const strategy = createOAuth2Strategy({
137
- provider: 'custom',
138
- clientId: 'client-id',
139
- clientSecret: 'client-secret',
140
- redirectUri: 'https://example.com/callback',
141
- authorizationUrl: 'https://auth.example.com/authorize',
142
- tokenUrl: 'https://auth.example.com/token',
143
- introspectionUrl: 'https://auth.example.com/introspect',
144
- tokenValidation: 'introspection', // Must specify introspection
145
- });
146
- const envelope = createTestEnvelope({
147
- authorization: 'Bearer invalid-token',
148
- });
149
- const ctx = createTestContext();
150
- const result = await strategy.authenticate(envelope, ctx);
151
- expect(result).toEqual({ authenticated: false });
152
- });
153
- });
154
- describe('getAuthorizationUrl', () => {
155
- it('should generate authorization URL with all parameters', () => {
156
- const strategy = createOAuth2Strategy({
157
- provider: 'google',
158
- clientId: 'client-id',
159
- clientSecret: 'client-secret',
160
- redirectUri: 'https://example.com/callback',
161
- scopes: ['openid', 'email', 'profile'],
162
- });
163
- const url = strategy.getAuthorizationUrl({
164
- state: 'random-state',
165
- nonce: 'random-nonce',
166
- additionalParams: {
167
- prompt: 'consent',
168
- },
169
- });
170
- expect(url).toContain('https://accounts.google.com/o/oauth2/v2/auth');
171
- expect(url).toContain('client_id=client-id');
172
- expect(url).toContain('redirect_uri=https%3A%2F%2Fexample.com%2Fcallback');
173
- expect(url).toContain('response_type=code');
174
- expect(url).toContain('scope=openid+email+profile');
175
- expect(url).toContain('state=random-state');
176
- expect(url).toContain('nonce=random-nonce');
177
- expect(url).toContain('prompt=consent');
178
- });
179
- it('should include PKCE parameters via additionalParams', () => {
180
- const strategy = createOAuth2Strategy({
181
- provider: 'google',
182
- clientId: 'client-id',
183
- clientSecret: 'client-secret',
184
- redirectUri: 'https://example.com/callback',
185
- });
186
- const url = strategy.getAuthorizationUrl({
187
- additionalParams: {
188
- code_challenge: 'challenge-value',
189
- code_challenge_method: 'S256',
190
- },
191
- });
192
- expect(url).toContain('code_challenge=challenge-value');
193
- expect(url).toContain('code_challenge_method=S256');
194
- });
195
- });
196
- describe('exchangeCode', () => {
197
- it('should exchange authorization code for tokens', async () => {
198
- mockFetch.mockResolvedValueOnce({
199
- ok: true,
200
- json: async () => ({
201
- access_token: 'access-token-123',
202
- token_type: 'Bearer',
203
- expires_in: 3600,
204
- refresh_token: 'refresh-token-123',
205
- scope: 'openid email profile',
206
- id_token: 'id-token-123',
207
- }),
208
- });
209
- const strategy = createOAuth2Strategy({
210
- provider: 'google',
211
- clientId: 'client-id',
212
- clientSecret: 'client-secret',
213
- redirectUri: 'https://example.com/callback',
214
- });
215
- const tokens = await strategy.exchangeCode('auth-code-123');
216
- expect(tokens).toEqual({
217
- accessToken: 'access-token-123',
218
- tokenType: 'Bearer',
219
- expiresIn: 3600,
220
- refreshToken: 'refresh-token-123',
221
- scope: 'openid email profile',
222
- idToken: 'id-token-123',
223
- });
224
- });
225
- it('should include required parameters in token request', async () => {
226
- mockFetch.mockResolvedValueOnce({
227
- ok: true,
228
- json: async () => ({
229
- access_token: 'access-token',
230
- token_type: 'Bearer',
231
- }),
232
- });
233
- const strategy = createOAuth2Strategy({
234
- provider: 'google',
235
- clientId: 'client-id',
236
- clientSecret: 'client-secret',
237
- redirectUri: 'https://example.com/callback',
238
- });
239
- await strategy.exchangeCode('auth-code');
240
- expect(mockFetch).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
241
- method: 'POST',
242
- body: expect.stringContaining('grant_type=authorization_code'),
243
- }));
244
- });
245
- it('should throw on token exchange failure', async () => {
246
- mockFetch.mockResolvedValueOnce({
247
- ok: false,
248
- status: 400,
249
- text: async () => '{"error": "invalid_grant"}',
250
- });
251
- const strategy = createOAuth2Strategy({
252
- provider: 'google',
253
- clientId: 'client-id',
254
- clientSecret: 'client-secret',
255
- redirectUri: 'https://example.com/callback',
256
- });
257
- await expect(strategy.exchangeCode('invalid-code')).rejects.toThrow('Token exchange failed');
258
- });
259
- });
260
- describe('refreshToken', () => {
261
- it('should refresh access token', async () => {
262
- mockFetch.mockResolvedValueOnce({
263
- ok: true,
264
- json: async () => ({
265
- access_token: 'new-access-token',
266
- token_type: 'Bearer',
267
- expires_in: 3600,
268
- }),
269
- });
270
- const strategy = createOAuth2Strategy({
271
- provider: 'google',
272
- clientId: 'client-id',
273
- clientSecret: 'client-secret',
274
- redirectUri: 'https://example.com/callback',
275
- });
276
- const tokens = await strategy.refreshToken('refresh-token-123');
277
- expect(tokens.accessToken).toBe('new-access-token');
278
- expect(tokens.refreshToken).toBe('refresh-token-123'); // Original preserved
279
- });
280
- it('should use new refresh token if provided', async () => {
281
- mockFetch.mockResolvedValueOnce({
282
- ok: true,
283
- json: async () => ({
284
- access_token: 'new-access-token',
285
- token_type: 'Bearer',
286
- refresh_token: 'new-refresh-token',
287
- }),
288
- });
289
- const strategy = createOAuth2Strategy({
290
- provider: 'google',
291
- clientId: 'client-id',
292
- clientSecret: 'client-secret',
293
- redirectUri: 'https://example.com/callback',
294
- });
295
- const tokens = await strategy.refreshToken('old-refresh-token');
296
- expect(tokens.refreshToken).toBe('new-refresh-token');
297
- });
298
- });
299
- describe('getUserInfo', () => {
300
- it('should fetch user info', async () => {
301
- mockFetch.mockResolvedValueOnce({
302
- ok: true,
303
- json: async () => ({
304
- sub: 'user-123',
305
- email: 'user@example.com',
306
- name: 'Test User',
307
- picture: 'https://example.com/avatar.jpg',
308
- }),
309
- });
310
- const strategy = createOAuth2Strategy({
311
- provider: 'google',
312
- clientId: 'client-id',
313
- clientSecret: 'client-secret',
314
- redirectUri: 'https://example.com/callback',
315
- });
316
- const userInfo = await strategy.getUserInfo('access-token');
317
- expect(userInfo).toEqual({
318
- sub: 'user-123',
319
- email: 'user@example.com',
320
- name: 'Test User',
321
- picture: 'https://example.com/avatar.jpg',
322
- });
323
- });
324
- it('should normalize GitHub response', async () => {
325
- mockFetch.mockResolvedValueOnce({
326
- ok: true,
327
- json: async () => ({
328
- id: 12345,
329
- login: 'testuser',
330
- name: 'Test User',
331
- email: 'test@github.com',
332
- avatar_url: 'https://github.com/avatar.jpg',
333
- }),
334
- });
335
- const strategy = createOAuth2Strategy({
336
- provider: 'github',
337
- clientId: 'client-id',
338
- clientSecret: 'client-secret',
339
- redirectUri: 'https://example.com/callback',
340
- });
341
- const userInfo = await strategy.getUserInfo('access-token');
342
- expect(userInfo.sub).toBe('12345'); // Normalized from id
343
- expect(userInfo.name).toBe('Test User');
344
- expect(userInfo.email).toBe('test@github.com');
345
- expect(userInfo.picture).toBe('https://github.com/avatar.jpg');
346
- });
347
- it('should throw when userInfoUrl not configured', async () => {
348
- const strategy = createOAuth2Strategy({
349
- provider: 'custom',
350
- clientId: 'client-id',
351
- clientSecret: 'client-secret',
352
- redirectUri: 'https://example.com/callback',
353
- authorizationUrl: 'https://auth.example.com/authorize',
354
- tokenUrl: 'https://auth.example.com/token',
355
- // No userInfoUrl
356
- });
357
- await expect(strategy.getUserInfo('access-token')).rejects.toThrow('UserInfo endpoint not configured');
358
- });
359
- });
360
- describe('revokeToken', () => {
361
- it('should revoke token when revocationUrl configured', async () => {
362
- mockFetch.mockResolvedValueOnce({ ok: true });
363
- const strategy = createOAuth2Strategy({
364
- provider: 'custom',
365
- clientId: 'client-id',
366
- clientSecret: 'client-secret',
367
- redirectUri: 'https://example.com/callback',
368
- authorizationUrl: 'https://auth.example.com/authorize',
369
- tokenUrl: 'https://auth.example.com/token',
370
- revocationUrl: 'https://auth.example.com/revoke',
371
- });
372
- await expect(strategy.revokeToken('access-token')).resolves.toBeUndefined();
373
- expect(mockFetch).toHaveBeenCalledWith('https://auth.example.com/revoke', expect.objectContaining({
374
- method: 'POST',
375
- }));
376
- });
377
- it('should not have revokeToken when revocationUrl not configured', () => {
378
- const strategy = createOAuth2Strategy({
379
- provider: 'custom',
380
- clientId: 'client-id',
381
- clientSecret: 'client-secret',
382
- redirectUri: 'https://example.com/callback',
383
- authorizationUrl: 'https://auth.example.com/authorize',
384
- tokenUrl: 'https://auth.example.com/token',
385
- });
386
- expect(strategy.revokeToken).toBeUndefined();
387
- });
388
- });
389
- });
390
- describe('OIDC Strategy', () => {
391
- beforeEach(() => {
392
- vi.clearAllMocks();
393
- clearDiscoveryCache();
394
- });
395
- afterEach(() => {
396
- vi.restoreAllMocks();
397
- });
398
- describe('createOIDCStrategy', () => {
399
- it('should create strategy with lazy initialization', () => {
400
- // No fetch needed during creation - discovery is lazy
401
- const strategy = createOIDCStrategy({
402
- issuer: 'https://auth.example.com',
403
- clientId: 'client-id',
404
- clientSecret: 'client-secret',
405
- redirectUri: 'https://example.com/callback',
406
- });
407
- expect(strategy.name).toBe('oidc');
408
- expect(strategy.authenticate).toBeDefined();
409
- expect(strategy.getAuthorizationUrl).toBeDefined();
410
- expect(strategy.exchangeCode).toBeDefined();
411
- expect(strategy.validateIdToken).toBeDefined();
412
- });
413
- it('should expose discovery document after initialization', async () => {
414
- // Discovery is fetched lazily when methods are called
415
- // We can verify the strategy has the right interface
416
- const strategy = createOIDCStrategy({
417
- issuer: 'https://auth.example.com',
418
- clientId: 'client-id',
419
- clientSecret: 'client-secret',
420
- redirectUri: 'https://example.com/callback',
421
- });
422
- // Before initialization, discovery is null
423
- expect(strategy.discovery).toBeNull();
424
- });
425
- it('should cache discovery document', async () => {
426
- mockFetch.mockResolvedValue({
427
- ok: true,
428
- json: async () => ({
429
- issuer: 'https://auth.example.com',
430
- authorization_endpoint: 'https://auth.example.com/authorize',
431
- token_endpoint: 'https://auth.example.com/token',
432
- userinfo_endpoint: 'https://auth.example.com/userinfo',
433
- jwks_uri: 'https://auth.example.com/.well-known/jwks.json',
434
- }),
435
- });
436
- const strategy1 = createOIDCStrategy({
437
- issuer: 'https://auth.example.com',
438
- clientId: 'client-id',
439
- clientSecret: 'client-secret',
440
- redirectUri: 'https://example.com/callback',
441
- });
442
- const strategy2 = createOIDCStrategy({
443
- issuer: 'https://auth.example.com',
444
- clientId: 'client-id-2',
445
- clientSecret: 'client-secret-2',
446
- redirectUri: 'https://example.com/callback2',
447
- });
448
- const envelope = createTestEnvelope();
449
- const ctx = createTestContext();
450
- // Trigger discovery for both
451
- await strategy1.authenticate(envelope, ctx);
452
- await strategy2.authenticate(envelope, ctx);
453
- // Discovery should only be fetched once (cached)
454
- expect(mockFetch).toHaveBeenCalledTimes(1);
455
- });
456
- it('should clear discovery cache', async () => {
457
- mockFetch.mockResolvedValue({
458
- ok: true,
459
- json: async () => ({
460
- issuer: 'https://auth.example.com',
461
- authorization_endpoint: 'https://auth.example.com/authorize',
462
- token_endpoint: 'https://auth.example.com/token',
463
- userinfo_endpoint: 'https://auth.example.com/userinfo',
464
- jwks_uri: 'https://auth.example.com/.well-known/jwks.json',
465
- }),
466
- });
467
- const strategy1 = createOIDCStrategy({
468
- issuer: 'https://auth.example.com',
469
- clientId: 'client-id',
470
- clientSecret: 'client-secret',
471
- redirectUri: 'https://example.com/callback',
472
- });
473
- const envelope = createTestEnvelope();
474
- const ctx = createTestContext();
475
- // First discovery
476
- await strategy1.authenticate(envelope, ctx);
477
- expect(mockFetch).toHaveBeenCalledTimes(1);
478
- // Clear cache
479
- clearDiscoveryCache();
480
- // Create new strategy and trigger discovery
481
- const strategy2 = createOIDCStrategy({
482
- issuer: 'https://auth.example.com',
483
- clientId: 'client-id',
484
- clientSecret: 'client-secret',
485
- redirectUri: 'https://example.com/callback',
486
- });
487
- await strategy2.authenticate(envelope, ctx);
488
- // Should fetch twice (cache was cleared)
489
- expect(mockFetch).toHaveBeenCalledTimes(2);
490
- });
491
- it('should throw on discovery failure', async () => {
492
- mockFetch.mockResolvedValueOnce({
493
- ok: false,
494
- status: 404,
495
- });
496
- const strategy = createOIDCStrategy({
497
- issuer: 'https://invalid.example.com',
498
- clientId: 'client-id',
499
- clientSecret: 'client-secret',
500
- redirectUri: 'https://example.com/callback',
501
- });
502
- const envelope = createTestEnvelope();
503
- const ctx = createTestContext();
504
- // Discovery failure happens on first authenticate
505
- await expect(strategy.authenticate(envelope, ctx)).rejects.toThrow('OIDC discovery failed');
506
- });
507
- });
508
- describe('validateIdToken', () => {
509
- it('should decode and validate ID token claims', async () => {
510
- mockFetch.mockResolvedValueOnce({
511
- ok: true,
512
- json: async () => ({
513
- issuer: 'https://auth.example.com',
514
- authorization_endpoint: 'https://auth.example.com/authorize',
515
- token_endpoint: 'https://auth.example.com/token',
516
- userinfo_endpoint: 'https://auth.example.com/userinfo',
517
- jwks_uri: 'https://auth.example.com/.well-known/jwks.json',
518
- }),
519
- });
520
- const strategy = createOIDCStrategy({
521
- issuer: 'https://auth.example.com',
522
- clientId: 'client-id',
523
- clientSecret: 'client-secret',
524
- redirectUri: 'https://example.com/callback',
525
- });
526
- // Create a mock JWT (header.payload.signature)
527
- const header = Buffer.from(JSON.stringify({ alg: 'RS256', typ: 'JWT' })).toString('base64url');
528
- const payload = Buffer.from(JSON.stringify({
529
- iss: 'https://auth.example.com',
530
- sub: 'user-123',
531
- aud: 'client-id',
532
- exp: Math.floor(Date.now() / 1000) + 3600,
533
- iat: Math.floor(Date.now() / 1000),
534
- email: 'user@example.com',
535
- name: 'Test User',
536
- })).toString('base64url');
537
- const signature = 'fake-signature';
538
- const idToken = `${header}.${payload}.${signature}`;
539
- // validateIdToken is the method, not getIdTokenClaims
540
- const claims = await strategy.validateIdToken(idToken);
541
- expect(claims.sub).toBe('user-123');
542
- expect(claims.email).toBe('user@example.com');
543
- expect(claims.name).toBe('Test User');
544
- });
545
- });
546
- });
547
- describe('Provider Presets', () => {
548
- it('should have all expected providers', () => {
549
- expect(OAuth2Providers.google).toBeDefined();
550
- expect(OAuth2Providers.github).toBeDefined();
551
- expect(OAuth2Providers.microsoft).toBeDefined();
552
- expect(OAuth2Providers.apple).toBeDefined();
553
- expect(OAuth2Providers.facebook).toBeDefined();
554
- });
555
- it('should have correct Google URLs', () => {
556
- expect(OAuth2Providers.google.authorizationUrl).toBe('https://accounts.google.com/o/oauth2/v2/auth');
557
- expect(OAuth2Providers.google.tokenUrl).toBe('https://oauth2.googleapis.com/token');
558
- expect(OAuth2Providers.google.userInfoUrl).toBe('https://openidconnect.googleapis.com/v1/userinfo');
559
- });
560
- it('should have correct GitHub URLs', () => {
561
- expect(OAuth2Providers.github.authorizationUrl).toBe('https://github.com/login/oauth/authorize');
562
- expect(OAuth2Providers.github.tokenUrl).toBe('https://github.com/login/oauth/access_token');
563
- expect(OAuth2Providers.github.userInfoUrl).toBe('https://api.github.com/user');
564
- });
565
- });
566
- describe('Provider Shortcut Functions', () => {
567
- it('should create Google strategy', () => {
568
- const strategy = createGoogleOAuth2Strategy({
569
- clientId: 'client-id',
570
- clientSecret: 'client-secret',
571
- redirectUri: 'https://example.com/callback',
572
- });
573
- expect(strategy.name).toBe('oauth2:google');
574
- });
575
- it('should create GitHub strategy', () => {
576
- const strategy = createGitHubOAuth2Strategy({
577
- clientId: 'client-id',
578
- clientSecret: 'client-secret',
579
- redirectUri: 'https://example.com/callback',
580
- });
581
- expect(strategy.name).toBe('oauth2:github');
582
- });
583
- it('should create Microsoft strategy with tenant', () => {
584
- const strategy = createMicrosoftOAuth2Strategy({
585
- clientId: 'client-id',
586
- clientSecret: 'client-secret',
587
- redirectUri: 'https://example.com/callback',
588
- tenant: 'my-tenant',
589
- });
590
- expect(strategy.name).toBe('oauth2:custom'); // Uses custom provider internally
591
- });
592
- it('should create Apple strategy', () => {
593
- const strategy = createAppleOAuth2Strategy({
594
- clientId: 'client-id',
595
- clientSecret: 'client-secret',
596
- redirectUri: 'https://example.com/callback',
597
- });
598
- expect(strategy.name).toBe('oauth2:apple');
599
- });
600
- it('should create Facebook strategy', () => {
601
- const strategy = createFacebookOAuth2Strategy({
602
- clientId: 'client-id',
603
- clientSecret: 'client-secret',
604
- redirectUri: 'https://example.com/callback',
605
- });
606
- expect(strategy.name).toBe('oauth2:facebook');
607
- });
608
- });
609
- describe('Utility Functions', () => {
610
- describe('generateState', () => {
611
- it('should generate URL-safe random string', () => {
612
- const state = generateState();
613
- expect(state).toBeDefined();
614
- expect(typeof state).toBe('string');
615
- expect(state.length).toBeGreaterThan(0);
616
- // Base64url should not contain +, /, or =
617
- expect(state).not.toMatch(/[+/=]/);
618
- });
619
- it('should generate different values each time', () => {
620
- const state1 = generateState();
621
- const state2 = generateState();
622
- expect(state1).not.toBe(state2);
623
- });
624
- it('should respect length parameter', () => {
625
- const state16 = generateState(16);
626
- const state64 = generateState(64);
627
- // Base64url encoding produces ~4/3 chars per byte
628
- expect(state16.length).toBeLessThan(state64.length);
629
- });
630
- });
631
- describe('generateNonce', () => {
632
- it('should generate URL-safe random string', () => {
633
- const nonce = generateNonce();
634
- expect(nonce).toBeDefined();
635
- expect(typeof nonce).toBe('string');
636
- expect(nonce.length).toBeGreaterThan(0);
637
- // Base64url should not contain +, /, or =
638
- expect(nonce).not.toMatch(/[+/=]/);
639
- });
640
- it('should generate different values each time', () => {
641
- const nonce1 = generateNonce();
642
- const nonce2 = generateNonce();
643
- expect(nonce1).not.toBe(nonce2);
644
- });
645
- });
646
- });
647
- describe('Client Credentials in Body', () => {
648
- beforeEach(() => {
649
- vi.clearAllMocks();
650
- });
651
- it('should send credentials in body when clientCredentialsInBody is true', async () => {
652
- mockFetch.mockResolvedValueOnce({
653
- ok: true,
654
- json: async () => ({
655
- access_token: 'access-token',
656
- token_type: 'Bearer',
657
- }),
658
- });
659
- const strategy = createOAuth2Strategy({
660
- provider: 'custom',
661
- clientId: 'client-id',
662
- clientSecret: 'client-secret',
663
- redirectUri: 'https://example.com/callback',
664
- authorizationUrl: 'https://auth.example.com/authorize',
665
- tokenUrl: 'https://auth.example.com/token',
666
- clientCredentialsInBody: true,
667
- });
668
- await strategy.exchangeCode('auth-code');
669
- const [, requestInit] = mockFetch.mock.calls[0];
670
- const body = requestInit.body;
671
- expect(body).toContain('client_id=client-id');
672
- expect(body).toContain('client_secret=client-secret');
673
- expect(requestInit.headers).not.toHaveProperty('Authorization');
674
- });
675
- it('should send credentials in Authorization header by default', async () => {
676
- mockFetch.mockResolvedValueOnce({
677
- ok: true,
678
- json: async () => ({
679
- access_token: 'access-token',
680
- token_type: 'Bearer',
681
- }),
682
- });
683
- const strategy = createOAuth2Strategy({
684
- provider: 'custom',
685
- clientId: 'client-id',
686
- clientSecret: 'client-secret',
687
- redirectUri: 'https://example.com/callback',
688
- authorizationUrl: 'https://auth.example.com/authorize',
689
- tokenUrl: 'https://auth.example.com/token',
690
- });
691
- await strategy.exchangeCode('auth-code');
692
- const [, requestInit] = mockFetch.mock.calls[0];
693
- const headers = requestInit.headers;
694
- expect(headers['Authorization']).toMatch(/^Basic /);
695
- });
696
- });
697
- describe('Strategy Configuration', () => {
698
- beforeEach(() => {
699
- vi.clearAllMocks();
700
- });
701
- it('should respect timeout configuration', () => {
702
- // The strategy accepts a timeout option
703
- const strategy = createOAuth2Strategy({
704
- provider: 'google',
705
- clientId: 'client-id',
706
- clientSecret: 'client-secret',
707
- redirectUri: 'https://example.com/callback',
708
- timeout: 1000,
709
- });
710
- // Strategy is created successfully with timeout
711
- expect(strategy.name).toBe('oauth2:google');
712
- });
713
- });
714
- //# sourceMappingURL=oauth2.int.test.js.map