@apifuse/provider-sdk 2.2.0-beta.7 → 2.2.0-beta.70

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 (478) hide show
  1. package/AUTHORING.md +943 -51
  2. package/CHANGELOG.md +273 -1
  3. package/LICENSE +21 -0
  4. package/README.md +117 -29
  5. package/SUBMISSION.md +3 -2
  6. package/bin/apifuse-check.ts +293 -13
  7. package/bin/apifuse-dev.ts +42 -19
  8. package/bin/apifuse-migrate-deployment.ts +200 -0
  9. package/bin/apifuse-migrate-operation-declaration.ts +55 -0
  10. package/bin/apifuse-migrate-shape.ts +202 -0
  11. package/bin/apifuse-pack-check.ts +19 -6
  12. package/bin/apifuse-pack-smoke.ts +57 -2
  13. package/bin/apifuse-pack-types.ts +736 -38
  14. package/bin/apifuse-perf.ts +59 -23
  15. package/bin/apifuse-record.ts +923 -94
  16. package/bin/apifuse-submit-check.ts +2313 -281
  17. package/bin/apifuse-test.ts +3 -1
  18. package/bin/submit-check-delimited-text.ts +50 -0
  19. package/dist/auth-turn/index.d.ts +3 -3
  20. package/dist/auth-turn/index.js +1 -1
  21. package/dist/auth.d.ts +14 -0
  22. package/dist/auth.js +67 -0
  23. package/dist/ceremonies/index.d.ts +16 -0
  24. package/dist/ceremonies/index.js +141 -36
  25. package/dist/cli/commands.d.ts +1 -1
  26. package/dist/cli/commands.js +30 -0
  27. package/dist/cli/create.d.ts +1 -1
  28. package/dist/cli/create.js +8 -2
  29. package/dist/cli/deployment-intent.d.ts +178 -0
  30. package/dist/cli/deployment-intent.js +277 -0
  31. package/dist/cli/local-connection.d.ts +111 -0
  32. package/dist/cli/local-connection.js +151 -0
  33. package/dist/cli/migrate-deployment-intent.d.ts +132 -0
  34. package/dist/cli/migrate-deployment-intent.js +1552 -0
  35. package/dist/cli/migrate-operation-declaration.d.ts +70 -0
  36. package/dist/cli/migrate-operation-declaration.js +2206 -0
  37. package/dist/cli/migrate-operation-shape.d.ts +44 -0
  38. package/dist/cli/migrate-operation-shape.js +113 -0
  39. package/dist/cli/migrate-provider-shape.d.ts +56 -0
  40. package/dist/cli/migrate-provider-shape.js +580 -0
  41. package/dist/cli/resolver-runtime.d.ts +21 -0
  42. package/dist/cli/resolver-runtime.js +31 -0
  43. package/dist/cli/templates/provider/.agents/skills/health-checks-and-fail-closed/SKILL.md.tpl +141 -23
  44. package/dist/cli/templates/provider/Dockerfile.tpl +1 -1
  45. package/dist/cli/templates/provider/README.md.tpl +41 -19
  46. package/dist/cli/templates/provider/index.ts.tpl +6 -3
  47. package/dist/cli/templates/provider/operations/ping.ts.tpl +4 -1
  48. package/dist/cli/templates/provider/provider.json.tpl +6 -0
  49. package/dist/config/loader.d.ts +202 -16
  50. package/dist/config/loader.js +491 -141
  51. package/dist/contract-serialization.js +4 -8
  52. package/dist/contract-types.d.ts +12 -5
  53. package/dist/contract.js +24 -10
  54. package/dist/declaration-validation.d.ts +34 -0
  55. package/dist/declaration-validation.js +305 -0
  56. package/dist/define.d.ts +71 -29
  57. package/dist/define.js +807 -69
  58. package/dist/dev.d.ts +5 -0
  59. package/dist/dev.js +8 -1
  60. package/dist/engine.d.ts +129 -0
  61. package/dist/engine.js +209 -0
  62. package/dist/error-observability.d.ts +7 -0
  63. package/dist/error-observability.js +61 -0
  64. package/dist/error-resolution.d.ts +18 -0
  65. package/dist/error-resolution.js +243 -0
  66. package/dist/errors.d.ts +74 -0
  67. package/dist/errors.js +99 -0
  68. package/dist/fixture-sanitization.d.ts +28 -0
  69. package/dist/fixture-sanitization.js +371 -0
  70. package/dist/handle-meta.d.ts +90 -0
  71. package/dist/handle-meta.js +73 -0
  72. package/dist/handle.d.ts +226 -0
  73. package/dist/handle.js +345 -0
  74. package/dist/health-scenario.d.ts +1901 -0
  75. package/dist/health-scenario.js +653 -0
  76. package/dist/i18n/catalog.js +21 -1
  77. package/dist/i18n/error-messages.d.ts +86 -0
  78. package/dist/i18n/error-messages.js +192 -0
  79. package/dist/i18n/index.d.ts +1 -0
  80. package/dist/i18n/index.js +1 -0
  81. package/dist/i18n/keys.d.ts +12 -0
  82. package/dist/i18n/keys.js +76 -5
  83. package/dist/i18n/operation-locale-namespace.d.ts +2 -0
  84. package/dist/i18n/operation-locale-namespace.js +7 -0
  85. package/dist/index.d.ts +40 -15
  86. package/dist/index.js +29 -11
  87. package/dist/lint.d.ts +43 -11
  88. package/dist/lint.js +2512 -177
  89. package/dist/native-address.d.ts +43 -0
  90. package/dist/native-address.js +281 -0
  91. package/dist/native-egress-policy.d.ts +31 -0
  92. package/dist/native-egress-policy.js +288 -0
  93. package/dist/observability.d.ts +5 -2
  94. package/dist/observability.js +48 -1
  95. package/dist/provider.d.ts +18 -8
  96. package/dist/provider.js +11 -6
  97. package/dist/runtime/auth-flow.d.ts +6 -1
  98. package/dist/runtime/auth-flow.js +8 -0
  99. package/dist/runtime/bounded-expiring-map.d.ts +21 -0
  100. package/dist/runtime/bounded-expiring-map.js +64 -0
  101. package/dist/runtime/browser-telemetry-binding.d.ts +5 -0
  102. package/dist/runtime/browser-telemetry-binding.js +83 -0
  103. package/dist/runtime/browser-telemetry.d.ts +76 -0
  104. package/dist/runtime/browser-telemetry.js +165 -0
  105. package/dist/runtime/browser.d.ts +4 -0
  106. package/dist/runtime/browser.js +688 -83
  107. package/dist/runtime/cache-telemetry.d.ts +71 -0
  108. package/dist/runtime/cache-telemetry.js +177 -0
  109. package/dist/runtime/cache.d.ts +3 -0
  110. package/dist/runtime/cache.js +245 -23
  111. package/dist/runtime/capability-response.d.ts +3 -0
  112. package/dist/runtime/capability-response.js +56 -0
  113. package/dist/runtime/capability-telemetry.d.ts +46 -0
  114. package/dist/runtime/capability-telemetry.js +68 -0
  115. package/dist/runtime/chrome149-header-order.d.ts +58 -0
  116. package/dist/runtime/chrome149-header-order.js +289 -0
  117. package/dist/runtime/diagnostic-env-values.d.ts +5 -0
  118. package/dist/runtime/diagnostic-env-values.js +57 -0
  119. package/dist/runtime/diagnostic-env.d.ts +14 -0
  120. package/dist/runtime/diagnostic-env.js +44 -0
  121. package/dist/runtime/diagnostic-redactor.d.ts +54 -0
  122. package/dist/runtime/diagnostic-redactor.js +571 -0
  123. package/dist/runtime/egress-lease.d.ts +65 -0
  124. package/dist/runtime/egress-lease.js +236 -0
  125. package/dist/runtime/engine-mode.d.ts +74 -0
  126. package/dist/runtime/engine-mode.js +152 -0
  127. package/dist/runtime/env.js +14 -1
  128. package/dist/runtime/executor.d.ts +3 -2
  129. package/dist/runtime/executor.js +23 -26
  130. package/dist/runtime/handle-wordlist.d.ts +43 -0
  131. package/dist/runtime/handle-wordlist.js +256 -0
  132. package/dist/runtime/handle.d.ts +71 -0
  133. package/dist/runtime/handle.js +908 -0
  134. package/dist/runtime/http-telemetry-binding.d.ts +10 -0
  135. package/dist/runtime/http-telemetry-binding.js +152 -0
  136. package/dist/runtime/http-telemetry-guard.d.ts +16 -0
  137. package/dist/runtime/http-telemetry-guard.js +202 -0
  138. package/dist/runtime/http-telemetry.d.ts +104 -0
  139. package/dist/runtime/http-telemetry.js +190 -0
  140. package/dist/runtime/http.d.ts +34 -0
  141. package/dist/runtime/http.js +680 -121
  142. package/dist/runtime/insights.js +2 -2
  143. package/dist/runtime/instrumentation.d.ts +2 -2
  144. package/dist/runtime/instrumentation.js +462 -19
  145. package/dist/runtime/native-network-errors.d.ts +33 -0
  146. package/dist/runtime/native-network-errors.js +69 -0
  147. package/dist/runtime/native-network.d.ts +105 -0
  148. package/dist/runtime/native-network.js +1433 -0
  149. package/dist/runtime/native-telemetry.d.ts +142 -0
  150. package/dist/runtime/native-telemetry.js +231 -0
  151. package/dist/runtime/ocr-telemetry.d.ts +82 -0
  152. package/dist/runtime/ocr-telemetry.js +192 -0
  153. package/dist/runtime/ocr.d.ts +29 -0
  154. package/dist/runtime/ocr.js +468 -0
  155. package/dist/runtime/otlp.d.ts +71 -2
  156. package/dist/runtime/otlp.js +398 -16
  157. package/dist/runtime/provider.d.ts +7 -0
  158. package/dist/runtime/provider.js +14 -0
  159. package/dist/runtime/proxy-errors.js +6 -2
  160. package/dist/runtime/proxy-nodemaven.d.ts +56 -0
  161. package/dist/runtime/proxy-nodemaven.js +147 -0
  162. package/dist/runtime/proxy-retry-policy.d.ts +4 -1
  163. package/dist/runtime/proxy-retry-policy.js +11 -2
  164. package/dist/runtime/proxy-telemetry.d.ts +133 -3
  165. package/dist/runtime/proxy-telemetry.js +218 -70
  166. package/dist/runtime/redirect-hop-headers.d.ts +19 -0
  167. package/dist/runtime/redirect-hop-headers.js +58 -0
  168. package/dist/runtime/redirects.d.ts +61 -0
  169. package/dist/runtime/redirects.js +149 -0
  170. package/dist/runtime/redis.d.ts +1 -1
  171. package/dist/runtime/redis.js +4 -2
  172. package/dist/runtime/request-options.d.ts +75 -1
  173. package/dist/runtime/request-options.js +588 -0
  174. package/dist/runtime/request-telemetry.d.ts +70 -0
  175. package/dist/runtime/request-telemetry.js +229 -0
  176. package/dist/runtime/resolver-config.d.ts +13 -0
  177. package/dist/runtime/resolver-config.js +14 -0
  178. package/dist/runtime/resolver-public.d.ts +3 -0
  179. package/dist/runtime/resolver-public.js +1 -0
  180. package/dist/runtime/resolver-runtime-options.d.ts +14 -0
  181. package/dist/runtime/resolver-runtime-options.js +33 -0
  182. package/dist/runtime/resolver-shared.d.ts +24 -0
  183. package/dist/runtime/resolver-shared.js +69 -0
  184. package/dist/runtime/resolver-span-attributes.d.ts +34 -0
  185. package/dist/runtime/resolver-span-attributes.js +93 -0
  186. package/dist/runtime/resolver-telemetry.d.ts +135 -0
  187. package/dist/runtime/resolver-telemetry.js +204 -0
  188. package/dist/runtime/resolver-usage.d.ts +32 -0
  189. package/dist/runtime/resolver-usage.js +54 -0
  190. package/dist/runtime/resolver-vendors/bindings.d.ts +53 -0
  191. package/dist/runtime/resolver-vendors/bindings.js +45 -0
  192. package/dist/runtime/resolver-vendors/browser.d.ts +24 -0
  193. package/dist/runtime/resolver-vendors/browser.js +423 -0
  194. package/dist/runtime/resolver-vendors/capsolver.d.ts +22 -0
  195. package/dist/runtime/resolver-vendors/capsolver.js +544 -0
  196. package/dist/runtime/resolver-vendors/hosts.d.ts +23 -0
  197. package/dist/runtime/resolver-vendors/hosts.js +68 -0
  198. package/dist/runtime/resolver-vendors/hypersolutions.d.ts +27 -0
  199. package/dist/runtime/resolver-vendors/hypersolutions.js +369 -0
  200. package/dist/runtime/resolver-vendors/twocaptcha.d.ts +24 -0
  201. package/dist/runtime/resolver-vendors/twocaptcha.js +425 -0
  202. package/dist/runtime/resolver-vendors/types.d.ts +125 -0
  203. package/dist/runtime/resolver-vendors/types.js +106 -0
  204. package/dist/runtime/resolver.d.ts +79 -0
  205. package/dist/runtime/resolver.js +1094 -0
  206. package/dist/runtime/state-telemetry.d.ts +79 -0
  207. package/dist/runtime/state-telemetry.js +194 -0
  208. package/dist/runtime/state.d.ts +10 -1
  209. package/dist/runtime/state.js +322 -82
  210. package/dist/runtime/stealth-akamai-sbsd.d.ts +54 -0
  211. package/dist/runtime/stealth-akamai-sbsd.js +142 -0
  212. package/dist/runtime/stealth-cookies.d.ts +24 -0
  213. package/dist/runtime/stealth-cookies.js +131 -0
  214. package/dist/runtime/stealth-owned-headers.d.ts +39 -0
  215. package/dist/runtime/stealth-owned-headers.js +57 -0
  216. package/dist/runtime/stealth-telemetry.d.ts +92 -0
  217. package/dist/runtime/stealth-telemetry.js +179 -0
  218. package/dist/runtime/stealth.d.ts +45 -6
  219. package/dist/runtime/stealth.js +1775 -320
  220. package/dist/runtime/stt-telemetry.d.ts +77 -0
  221. package/dist/runtime/stt-telemetry.js +176 -0
  222. package/dist/runtime/stt.js +18 -19
  223. package/dist/runtime/timeout.d.ts +5 -0
  224. package/dist/runtime/timeout.js +12 -0
  225. package/dist/runtime/trace-config.d.ts +12 -0
  226. package/dist/runtime/trace-config.js +62 -0
  227. package/dist/runtime/trace.d.ts +17 -0
  228. package/dist/runtime/trace.js +176 -25
  229. package/dist/runtime-boundary-lint.d.ts +137 -0
  230. package/dist/runtime-boundary-lint.js +590 -0
  231. package/dist/schema.d.ts +20 -0
  232. package/dist/schema.js +72 -2
  233. package/dist/serve.d.ts +1 -1
  234. package/dist/serve.js +1 -1
  235. package/dist/server/error-observability.d.ts +1 -0
  236. package/dist/server/error-observability.js +1 -0
  237. package/dist/server/error-stack-frames.d.ts +35 -0
  238. package/dist/server/error-stack-frames.js +219 -0
  239. package/dist/server/index.d.ts +21 -2
  240. package/dist/server/index.js +11 -2
  241. package/dist/server/runtime-diagnostics.d.ts +165 -0
  242. package/dist/server/runtime-diagnostics.js +360 -0
  243. package/dist/server/sdk-version.d.ts +3 -0
  244. package/dist/server/sdk-version.js +19 -0
  245. package/dist/server/self-test-input-tokens.d.ts +2 -1
  246. package/dist/server/self-test-input-tokens.js +18 -14
  247. package/dist/server/self-test-redaction.js +8 -33
  248. package/dist/server/self-test.d.ts +18 -3
  249. package/dist/server/self-test.js +139 -76
  250. package/dist/server/sensitive-values.d.ts +26 -0
  251. package/dist/server/sensitive-values.js +137 -0
  252. package/dist/server/serve-implementation.d.ts +285 -0
  253. package/dist/server/serve-implementation.js +3172 -0
  254. package/dist/server/serve.d.ts +1 -75
  255. package/dist/server/serve.js +1 -1170
  256. package/dist/server/state-backend-report.d.ts +70 -0
  257. package/dist/server/state-backend-report.js +113 -0
  258. package/dist/server/trace-output.d.ts +7 -0
  259. package/dist/server/trace-output.js +111 -0
  260. package/dist/server/types.d.ts +37 -5
  261. package/dist/server/types.js +34 -1
  262. package/dist/stateful/errors.d.ts +19 -0
  263. package/dist/stateful/errors.js +24 -0
  264. package/dist/stateful/http-provider-event-emitter.d.ts +40 -0
  265. package/dist/stateful/http-provider-event-emitter.js +237 -0
  266. package/dist/stateful/http-session-owner-registry.d.ts +44 -0
  267. package/dist/stateful/http-session-owner-registry.js +210 -0
  268. package/dist/stateful/index.d.ts +18 -0
  269. package/dist/stateful/index.js +18 -0
  270. package/dist/stateful/provider-event-delivery-failures.d.ts +32 -0
  271. package/dist/stateful/provider-event-delivery-failures.js +43 -0
  272. package/dist/stateful/provider-event-pipeline-metrics.d.ts +46 -0
  273. package/dist/stateful/provider-event-pipeline-metrics.js +48 -0
  274. package/dist/stateful/provider-event-pipeline.d.ts +50 -0
  275. package/dist/stateful/provider-event-pipeline.js +1 -0
  276. package/dist/stateful/provider-events.d.ts +101 -0
  277. package/dist/stateful/provider-events.js +289 -0
  278. package/dist/stateful/session-key.d.ts +15 -0
  279. package/dist/stateful/session-key.js +86 -0
  280. package/dist/stateful/stateful-provider-adapter-context.d.ts +5 -0
  281. package/dist/stateful/stateful-provider-adapter-context.js +42 -0
  282. package/dist/stateful/stateful-provider-adapter-metrics.d.ts +15 -0
  283. package/dist/stateful/stateful-provider-adapter-metrics.js +21 -0
  284. package/dist/stateful/stateful-provider-adapter.d.ts +98 -0
  285. package/dist/stateful/stateful-provider-adapter.js +287 -0
  286. package/dist/stateful/stateful-provider-observability.d.ts +62 -0
  287. package/dist/stateful/stateful-provider-observability.js +161 -0
  288. package/dist/stateful/stateful-provider-owner-forwarder.d.ts +41 -0
  289. package/dist/stateful/stateful-provider-owner-forwarder.js +237 -0
  290. package/dist/stateful/stateful-provider-runtime-context.d.ts +35 -0
  291. package/dist/stateful/stateful-provider-runtime-context.js +61 -0
  292. package/dist/stateful/stateful-provider-runtime-executor.d.ts +34 -0
  293. package/dist/stateful/stateful-provider-runtime-executor.js +52 -0
  294. package/dist/stateful/stateful-provider-session-routing.d.ts +67 -0
  295. package/dist/stateful/stateful-provider-session-routing.js +345 -0
  296. package/dist/stateful/stateful-provider-session-runtime.d.ts +98 -0
  297. package/dist/stateful/stateful-provider-session-runtime.js +245 -0
  298. package/dist/stateful-signing.d.ts +18 -0
  299. package/dist/stateful-signing.js +27 -0
  300. package/dist/stealth/profiles.d.ts +15 -4
  301. package/dist/stealth/profiles.js +169 -211
  302. package/dist/stream-evidence.d.ts +74 -0
  303. package/dist/stream-evidence.js +785 -0
  304. package/dist/stream.js +7 -1
  305. package/dist/testing/index.d.ts +2 -1
  306. package/dist/testing/index.js +2 -1
  307. package/dist/testing/run.d.ts +32 -2
  308. package/dist/testing/run.js +509 -25
  309. package/dist/trace-sanitization.d.ts +6 -0
  310. package/dist/trace-sanitization.js +68 -0
  311. package/dist/types.d.ts +899 -210
  312. package/dist/types.js +1 -0
  313. package/dist/typescript-module.d.ts +39 -0
  314. package/dist/typescript-module.js +72 -0
  315. package/package.json +52 -6
  316. package/src/auth-turn/index.ts +1 -1
  317. package/src/auth.ts +118 -0
  318. package/src/ceremonies/index.ts +189 -46
  319. package/src/cli/commands.ts +37 -0
  320. package/src/cli/create.ts +8 -2
  321. package/src/cli/deployment-intent.ts +364 -0
  322. package/src/cli/local-connection.ts +221 -0
  323. package/src/cli/migrate-deployment-intent.ts +1908 -0
  324. package/src/cli/migrate-operation-declaration.ts +3026 -0
  325. package/src/cli/migrate-operation-shape.ts +184 -0
  326. package/src/cli/migrate-provider-shape.ts +778 -0
  327. package/src/cli/resolver-runtime.ts +72 -0
  328. package/src/cli/templates/provider/.agents/skills/health-checks-and-fail-closed/SKILL.md.tpl +141 -23
  329. package/src/cli/templates/provider/Dockerfile.tpl +1 -1
  330. package/src/cli/templates/provider/README.md.tpl +41 -19
  331. package/src/cli/templates/provider/index.ts.tpl +6 -3
  332. package/src/cli/templates/provider/operations/ping.ts.tpl +4 -1
  333. package/src/cli/templates/provider/provider.json.tpl +6 -0
  334. package/src/config/loader.ts +774 -181
  335. package/src/contract-serialization.ts +5 -7
  336. package/src/contract-types.ts +12 -5
  337. package/src/contract.ts +24 -10
  338. package/src/declaration-validation.ts +376 -0
  339. package/src/define.ts +1105 -131
  340. package/src/dev.ts +13 -1
  341. package/src/engine.ts +390 -0
  342. package/src/error-observability.ts +64 -0
  343. package/src/error-resolution.ts +269 -0
  344. package/src/errors.ts +157 -0
  345. package/src/fixture-sanitization.ts +422 -0
  346. package/src/handle-meta.ts +143 -0
  347. package/src/handle.ts +694 -0
  348. package/src/health-scenario.ts +960 -0
  349. package/src/i18n/catalog.ts +23 -1
  350. package/src/i18n/error-messages.ts +255 -0
  351. package/src/i18n/index.ts +1 -0
  352. package/src/i18n/keys.ts +80 -6
  353. package/src/i18n/operation-locale-namespace.ts +10 -0
  354. package/src/index.ts +390 -23
  355. package/src/lint.ts +2975 -234
  356. package/src/native-address.ts +340 -0
  357. package/src/native-egress-policy.ts +358 -0
  358. package/src/observability.ts +51 -1
  359. package/src/provider.ts +207 -27
  360. package/src/runtime/auth-flow.ts +15 -0
  361. package/src/runtime/bounded-expiring-map.ts +67 -0
  362. package/src/runtime/browser-telemetry-binding.ts +92 -0
  363. package/src/runtime/browser-telemetry.ts +289 -0
  364. package/src/runtime/browser.ts +882 -99
  365. package/src/runtime/cache-telemetry.ts +247 -0
  366. package/src/runtime/cache.ts +258 -22
  367. package/src/runtime/capability-response.ts +53 -0
  368. package/src/runtime/capability-telemetry.ts +101 -0
  369. package/src/runtime/chrome149-header-order.ts +330 -0
  370. package/src/runtime/diagnostic-env-values.ts +56 -0
  371. package/src/runtime/diagnostic-env.ts +65 -0
  372. package/src/runtime/diagnostic-redactor.ts +668 -0
  373. package/src/runtime/egress-lease.ts +341 -0
  374. package/src/runtime/engine-mode.ts +233 -0
  375. package/src/runtime/env.ts +15 -1
  376. package/src/runtime/executor.ts +39 -32
  377. package/src/runtime/handle-wordlist.ts +266 -0
  378. package/src/runtime/handle.ts +1180 -0
  379. package/src/runtime/http-telemetry-binding.ts +162 -0
  380. package/src/runtime/http-telemetry-guard.ts +208 -0
  381. package/src/runtime/http-telemetry.ts +292 -0
  382. package/src/runtime/http.ts +896 -150
  383. package/src/runtime/insights.ts +2 -2
  384. package/src/runtime/instrumentation.ts +628 -28
  385. package/src/runtime/native-network-errors.ts +99 -0
  386. package/src/runtime/native-network.ts +1853 -0
  387. package/src/runtime/native-telemetry.ts +366 -0
  388. package/src/runtime/ocr-telemetry.ts +308 -0
  389. package/src/runtime/ocr.ts +564 -0
  390. package/src/runtime/otlp.ts +468 -21
  391. package/src/runtime/provider.ts +15 -0
  392. package/src/runtime/proxy-errors.ts +12 -4
  393. package/src/runtime/proxy-nodemaven.ts +222 -0
  394. package/src/runtime/proxy-retry-policy.ts +12 -1
  395. package/src/runtime/proxy-telemetry.ts +358 -103
  396. package/src/runtime/redirect-hop-headers.ts +71 -0
  397. package/src/runtime/redirects.ts +215 -0
  398. package/src/runtime/redis.ts +7 -2
  399. package/src/runtime/request-options.ts +728 -1
  400. package/src/runtime/request-telemetry.ts +375 -0
  401. package/src/runtime/resolver-config.ts +18 -0
  402. package/src/runtime/resolver-public.ts +44 -0
  403. package/src/runtime/resolver-runtime-options.ts +50 -0
  404. package/src/runtime/resolver-shared.ts +113 -0
  405. package/src/runtime/resolver-span-attributes.ts +139 -0
  406. package/src/runtime/resolver-telemetry.ts +362 -0
  407. package/src/runtime/resolver-usage.ts +99 -0
  408. package/src/runtime/resolver-vendors/bindings.ts +61 -0
  409. package/src/runtime/resolver-vendors/browser.ts +591 -0
  410. package/src/runtime/resolver-vendors/capsolver.ts +727 -0
  411. package/src/runtime/resolver-vendors/hosts.ts +81 -0
  412. package/src/runtime/resolver-vendors/hypersolutions.ts +480 -0
  413. package/src/runtime/resolver-vendors/twocaptcha.ts +555 -0
  414. package/src/runtime/resolver-vendors/types.ts +261 -0
  415. package/src/runtime/resolver.ts +1543 -0
  416. package/src/runtime/state-telemetry.ts +298 -0
  417. package/src/runtime/state.ts +435 -89
  418. package/src/runtime/stealth-akamai-sbsd.ts +207 -0
  419. package/src/runtime/stealth-cookies.ts +155 -0
  420. package/src/runtime/stealth-owned-headers.ts +67 -0
  421. package/src/runtime/stealth-telemetry.ts +309 -0
  422. package/src/runtime/stealth.ts +2275 -372
  423. package/src/runtime/stt-telemetry.ts +282 -0
  424. package/src/runtime/stt.ts +96 -91
  425. package/src/runtime/timeout.ts +18 -0
  426. package/src/runtime/trace-config.ts +78 -0
  427. package/src/runtime/trace.ts +257 -35
  428. package/src/runtime-boundary-lint.ts +707 -0
  429. package/src/schema.ts +80 -2
  430. package/src/serve.ts +6 -1
  431. package/src/server/error-observability.ts +1 -0
  432. package/src/server/error-stack-frames.ts +214 -0
  433. package/src/server/index.ts +184 -2
  434. package/src/server/runtime-diagnostics.ts +522 -0
  435. package/src/server/sdk-version.ts +22 -0
  436. package/src/server/self-test-input-tokens.ts +29 -14
  437. package/src/server/self-test-redaction.ts +10 -40
  438. package/src/server/self-test.ts +205 -89
  439. package/src/server/sensitive-values.ts +211 -0
  440. package/src/server/serve-implementation.ts +4596 -0
  441. package/src/server/serve.ts +1 -1685
  442. package/src/server/state-backend-report.ts +185 -0
  443. package/src/server/trace-output.ts +189 -0
  444. package/src/server/types.ts +34 -1
  445. package/src/stateful/README.md +146 -0
  446. package/src/stateful/errors.ts +35 -0
  447. package/src/stateful/http-provider-event-emitter.ts +314 -0
  448. package/src/stateful/http-session-owner-registry.ts +306 -0
  449. package/src/stateful/index.ts +18 -0
  450. package/src/stateful/provider-event-delivery-failures.ts +80 -0
  451. package/src/stateful/provider-event-pipeline-metrics.ts +95 -0
  452. package/src/stateful/provider-event-pipeline.ts +61 -0
  453. package/src/stateful/provider-events.ts +462 -0
  454. package/src/stateful/session-key.ts +111 -0
  455. package/src/stateful/stateful-provider-adapter-context.ts +59 -0
  456. package/src/stateful/stateful-provider-adapter-metrics.ts +48 -0
  457. package/src/stateful/stateful-provider-adapter.ts +562 -0
  458. package/src/stateful/stateful-provider-observability.ts +261 -0
  459. package/src/stateful/stateful-provider-owner-forwarder.ts +310 -0
  460. package/src/stateful/stateful-provider-runtime-context.ts +96 -0
  461. package/src/stateful/stateful-provider-runtime-executor.ts +96 -0
  462. package/src/stateful/stateful-provider-session-routing.ts +546 -0
  463. package/src/stateful/stateful-provider-session-runtime.ts +403 -0
  464. package/src/stateful-signing.ts +46 -0
  465. package/src/stealth/profiles.ts +212 -231
  466. package/src/stream-evidence.ts +988 -0
  467. package/src/stream.ts +8 -1
  468. package/src/testing/index.ts +10 -1
  469. package/src/testing/run.ts +685 -19
  470. package/src/trace-sanitization.ts +110 -0
  471. package/src/types.ts +1014 -273
  472. package/src/typescript-module.ts +100 -0
  473. package/dist/choice-token.d.ts +0 -24
  474. package/dist/choice-token.js +0 -74
  475. package/dist/runtime/choice.d.ts +0 -15
  476. package/dist/runtime/choice.js +0 -413
  477. package/src/choice-token.ts +0 -165
  478. package/src/runtime/choice.ts +0 -686
@@ -0,0 +1,19 @@
1
+ /** One redirect hop: the URL the headers were sent to, and the next request. */
2
+ export interface RedirectHop {
3
+ readonly from: string;
4
+ readonly to: string;
5
+ readonly methodChanged: boolean;
6
+ }
7
+ /**
8
+ * The caller headers the next redirect hop carries, derived from the headers
9
+ * the previous hop sent. Both stealth redirect walkers compute every hop's
10
+ * headers here, so the rules hold on every path:
11
+ *
12
+ * - a method change drops the request-body headers;
13
+ * - a cross-origin hop drops `Authorization` and `Proxy-Authorization`;
14
+ * - a cross-site hop drops an explicit `Cookie`, after which the session
15
+ * cookie jar supplies cookies by its own domain rules, as a browser does.
16
+ *
17
+ * A header dropped on one hop stays dropped for the rest of the chain.
18
+ */
19
+ export declare function redirectHopHeaders<T>(hop: RedirectHop, headers: Readonly<Record<string, T>>): Record<string, T>;
@@ -0,0 +1,58 @@
1
+ import { getPublicSuffix } from "tough-cookie";
2
+ /**
3
+ * Request-body header names a redirect drops when it changes the method
4
+ * (Fetch "request-body-header name").
5
+ */
6
+ const REDIRECT_BODY_HEADERS = new Set([
7
+ "content-encoding",
8
+ "content-language",
9
+ "content-location",
10
+ "content-type",
11
+ ]);
12
+ /**
13
+ * Credentials a redirect never carries to another origin. Fetch removes
14
+ * `Authorization` on a cross-origin redirect; `Proxy-Authorization` is a
15
+ * credential of the same kind.
16
+ */
17
+ const CROSS_ORIGIN_CREDENTIAL_HEADERS = new Set([
18
+ "authorization",
19
+ "proxy-authorization",
20
+ ]);
21
+ /**
22
+ * Schemeful site (HTML "same site"): scheme plus registrable domain from the
23
+ * public suffix list, or the bare host when there is none (an IP address or
24
+ * a single-label host).
25
+ */
26
+ function schemefulSite(url) {
27
+ const host = url.hostname;
28
+ const registrable = getPublicSuffix(host, { allowSpecialUseDomain: true, ignoreError: true });
29
+ return `${url.protocol}//${registrable ?? host}`;
30
+ }
31
+ /**
32
+ * The caller headers the next redirect hop carries, derived from the headers
33
+ * the previous hop sent. Both stealth redirect walkers compute every hop's
34
+ * headers here, so the rules hold on every path:
35
+ *
36
+ * - a method change drops the request-body headers;
37
+ * - a cross-origin hop drops `Authorization` and `Proxy-Authorization`;
38
+ * - a cross-site hop drops an explicit `Cookie`, after which the session
39
+ * cookie jar supplies cookies by its own domain rules, as a browser does.
40
+ *
41
+ * A header dropped on one hop stays dropped for the rest of the chain.
42
+ */
43
+ export function redirectHopHeaders(hop, headers) {
44
+ const from = new URL(hop.from);
45
+ const to = new URL(hop.to);
46
+ const crossOrigin = from.origin !== to.origin;
47
+ const crossSite = schemefulSite(from) !== schemefulSite(to);
48
+ return Object.fromEntries(Object.entries(headers).filter(([name]) => {
49
+ const lower = name.toLowerCase();
50
+ if (hop.methodChanged && REDIRECT_BODY_HEADERS.has(lower))
51
+ return false;
52
+ if (crossOrigin && CROSS_ORIGIN_CREDENTIAL_HEADERS.has(lower))
53
+ return false;
54
+ if (crossSite && lower === "cookie")
55
+ return false;
56
+ return true;
57
+ }));
58
+ }
@@ -0,0 +1,61 @@
1
+ import { TransportError } from "../errors.js";
2
+ import type { HttpRedirectFailureReason, HttpRedirectPolicy } from "../types.js";
3
+ export type RedirectHopDecision<TMethod extends string> = {
4
+ kind: "follow";
5
+ nextMethod: TMethod | "GET";
6
+ nextUrl: string;
7
+ } | {
8
+ kind: "stop";
9
+ reason: HttpRedirectFailureReason;
10
+ nextUrl?: string;
11
+ };
12
+ export declare function isRedirectStatus(status: number): boolean;
13
+ /** Shared fetch-compatible redirect method rewriting for stealth and ctx.http. */
14
+ export declare function nextRedirectMethod<TMethod extends string>(status: number, method: TMethod): TMethod | "GET";
15
+ /** Resolves a Location value against the response URL without issuing a request. */
16
+ export declare function resolveRedirectUrl(location: string | undefined, responseUrl: string): string | undefined;
17
+ /**
18
+ * Shared post-response decision ordering for both redirect walkers. The
19
+ * caller-owned stop hook is checked first, matching stealth's pre-follow
20
+ * contract, then structural termination and loop checks run before follow.
21
+ */
22
+ export declare function evaluateRedirectHop<TMethod extends string>(input: {
23
+ status: number;
24
+ method: TMethod;
25
+ nextUrl: string | undefined;
26
+ shouldStop: boolean;
27
+ redirectCount: number;
28
+ maxHops: number;
29
+ visitedRequests: ReadonlySet<string>;
30
+ }): RedirectHopDecision<TMethod>;
31
+ export declare const MALFORMED_REDIRECT_TARGET = "[malformed redirect target]";
32
+ /** The transport a redirectPolicy belongs to: its name in diagnostics and its own hop limit. */
33
+ export interface RedirectPolicyTransport {
34
+ readonly label: string;
35
+ readonly maxHops: number;
36
+ }
37
+ export declare function invalidRedirectPolicy(transport: RedirectPolicyTransport, message: string, cause?: Error): TransportError;
38
+ /** Snapshot untrusted caller input synchronously, before proxy resolution or fetch. */
39
+ export declare function normalizeRedirectPolicy(value: unknown, transport: RedirectPolicyTransport): HttpRedirectPolicy | undefined;
40
+ export declare function redirectDiagnosticTarget(value: string): string;
41
+ /**
42
+ * One hop of a same-origin `redirectPolicy` walk, shared by ctx.http and
43
+ * ctx.stealth so both follow and refuse identically: returns the next request
44
+ * inside the initial origin, or throws the `HttpRedirectError` naming why the
45
+ * walk stopped (cross-origin target, maxHops, loop, missing or malformed
46
+ * Location) before any request leaves for that target.
47
+ */
48
+ export declare function nextSameOriginRedirectHop<TMethod extends string>(input: {
49
+ policy: HttpRedirectPolicy;
50
+ initialOrigin: string;
51
+ currentUrl: string;
52
+ responseUrl: string;
53
+ status: number;
54
+ method: TMethod;
55
+ location: string | undefined;
56
+ followedHops: number;
57
+ visitedRequests: ReadonlySet<string>;
58
+ }): {
59
+ nextMethod: TMethod | "GET";
60
+ nextUrl: string;
61
+ };
@@ -0,0 +1,149 @@
1
+ import { HttpRedirectError, TransportError } from "../errors.js";
2
+ const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
3
+ export function isRedirectStatus(status) {
4
+ return REDIRECT_STATUSES.has(status);
5
+ }
6
+ /** Shared fetch-compatible redirect method rewriting for stealth and ctx.http. */
7
+ export function nextRedirectMethod(status, method) {
8
+ if (status === 303 && method !== "HEAD")
9
+ return "GET";
10
+ if ((status === 301 || status === 302) && method === "POST")
11
+ return "GET";
12
+ return method;
13
+ }
14
+ /** Resolves a Location value against the response URL without issuing a request. */
15
+ export function resolveRedirectUrl(location, responseUrl) {
16
+ return location ? new URL(location, responseUrl).toString() : undefined;
17
+ }
18
+ /**
19
+ * Shared post-response decision ordering for both redirect walkers. The
20
+ * caller-owned stop hook is checked first, matching stealth's pre-follow
21
+ * contract, then structural termination and loop checks run before follow.
22
+ */
23
+ export function evaluateRedirectHop(input) {
24
+ if (input.shouldStop) {
25
+ return { kind: "stop", reason: "stopped", ...(input.nextUrl ? { nextUrl: input.nextUrl } : {}) };
26
+ }
27
+ if (!input.nextUrl)
28
+ return { kind: "stop", reason: "missing_location" };
29
+ if (input.redirectCount > input.maxHops) {
30
+ return { kind: "stop", reason: "max_hops", nextUrl: input.nextUrl };
31
+ }
32
+ const nextMethod = nextRedirectMethod(input.status, input.method);
33
+ if (input.visitedRequests.has(`${nextMethod} ${input.nextUrl}`)) {
34
+ return { kind: "stop", reason: "loop", nextUrl: input.nextUrl };
35
+ }
36
+ return { kind: "follow", nextMethod, nextUrl: input.nextUrl };
37
+ }
38
+ const REDIRECT_POLICY_FIELDS = new Set(["mode", "maxHops"]);
39
+ export const MALFORMED_REDIRECT_TARGET = "[malformed redirect target]";
40
+ export function invalidRedirectPolicy(transport, message, cause) {
41
+ return new TransportError(`Invalid ${transport.label} redirectPolicy: ${message}`, {
42
+ code: "http_redirect_policy_invalid",
43
+ ...(cause ? { cause } : {}),
44
+ });
45
+ }
46
+ /** Snapshot untrusted caller input synchronously, before proxy resolution or fetch. */
47
+ export function normalizeRedirectPolicy(value, transport) {
48
+ if (value === undefined)
49
+ return undefined;
50
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
51
+ throw invalidRedirectPolicy(transport, "expected an object");
52
+ }
53
+ try {
54
+ const keys = Reflect.ownKeys(value);
55
+ for (const key of keys) {
56
+ if (typeof key !== "string" || !REDIRECT_POLICY_FIELDS.has(key)) {
57
+ throw invalidRedirectPolicy(transport, `unknown field ${String(key)}`);
58
+ }
59
+ }
60
+ for (const field of REDIRECT_POLICY_FIELDS) {
61
+ const descriptor = Object.getOwnPropertyDescriptor(value, field);
62
+ if (!descriptor || !("value" in descriptor)) {
63
+ throw invalidRedirectPolicy(transport, `${field} must be an own data property`);
64
+ }
65
+ }
66
+ const record = value;
67
+ if (record.mode !== "same-origin") {
68
+ throw invalidRedirectPolicy(transport, 'mode must be "same-origin"');
69
+ }
70
+ if (typeof record.maxHops !== "number" ||
71
+ !Number.isInteger(record.maxHops) ||
72
+ record.maxHops < 0 ||
73
+ record.maxHops > transport.maxHops) {
74
+ throw invalidRedirectPolicy(transport, `maxHops must be an integer from 0 to ${transport.maxHops}`);
75
+ }
76
+ return { mode: "same-origin", maxHops: record.maxHops };
77
+ }
78
+ catch (error) {
79
+ if (error instanceof TransportError)
80
+ throw error;
81
+ throw invalidRedirectPolicy(transport, "could not be inspected safely", error instanceof Error ? error : undefined);
82
+ }
83
+ }
84
+ export function redirectDiagnosticTarget(value) {
85
+ try {
86
+ const parsed = new URL(value);
87
+ // Origin omits URL userinfo. Keeping only origin + path makes diagnostics
88
+ // useful while structurally excluding every query value and fragment,
89
+ // including attacker-chosen keys the provider did not declare sensitive.
90
+ const redactedQuery = parsed.search ? "?[REDACTED]" : "";
91
+ return parsed.origin === "null"
92
+ ? `${parsed.protocol}<opaque-target>`
93
+ : `${parsed.origin}${parsed.pathname}${redactedQuery}`;
94
+ }
95
+ catch {
96
+ return MALFORMED_REDIRECT_TARGET;
97
+ }
98
+ }
99
+ /**
100
+ * One hop of a same-origin `redirectPolicy` walk, shared by ctx.http and
101
+ * ctx.stealth so both follow and refuse identically: returns the next request
102
+ * inside the initial origin, or throws the `HttpRedirectError` naming why the
103
+ * walk stopped (cross-origin target, maxHops, loop, missing or malformed
104
+ * Location) before any request leaves for that target.
105
+ */
106
+ export function nextSameOriginRedirectHop(input) {
107
+ let nextUrl;
108
+ try {
109
+ nextUrl = resolveRedirectUrl(input.location || undefined, input.responseUrl);
110
+ }
111
+ catch {
112
+ const target = MALFORMED_REDIRECT_TARGET;
113
+ throw new HttpRedirectError(`Redirect response has malformed Location target ${target}`, {
114
+ reason: "missing_location",
115
+ target,
116
+ status: input.status,
117
+ });
118
+ }
119
+ const decision = evaluateRedirectHop({
120
+ status: input.status,
121
+ method: input.method,
122
+ nextUrl,
123
+ shouldStop: nextUrl ? new URL(nextUrl).origin !== input.initialOrigin : false,
124
+ redirectCount: input.followedHops + 1,
125
+ maxHops: input.policy.maxHops,
126
+ visitedRequests: input.visitedRequests,
127
+ });
128
+ if (decision.kind === "follow") {
129
+ return { nextMethod: decision.nextMethod, nextUrl: decision.nextUrl };
130
+ }
131
+ const target = decision.nextUrl ? redirectDiagnosticTarget(decision.nextUrl) : undefined;
132
+ const message = (() => {
133
+ switch (decision.reason) {
134
+ case "stopped":
135
+ return `Redirect policy refused cross-origin target ${target}`;
136
+ case "max_hops":
137
+ return `Redirect policy reached maxHops before target ${target}`;
138
+ case "loop":
139
+ return `Redirect loop refused target ${target}`;
140
+ case "missing_location":
141
+ return `Redirect response from ${redirectDiagnosticTarget(input.currentUrl)} is missing Location`;
142
+ }
143
+ })();
144
+ throw new HttpRedirectError(message, {
145
+ reason: decision.reason,
146
+ ...(target ? { target } : {}),
147
+ status: input.status,
148
+ });
149
+ }
@@ -1,4 +1,4 @@
1
- import { Redis } from "ioredis";
1
+ import type { Redis } from "ioredis";
2
2
  export type ProviderRedisClient = Redis;
3
3
  export type ProviderRedisClientOptions = {
4
4
  readonly redisUrl: string;
@@ -1,6 +1,8 @@
1
- import { Redis } from "ioredis";
1
+ import { createRequire } from "node:module";
2
+ const require = createRequire(import.meta.url);
2
3
  export function createProviderRedisClient(options) {
3
- const redis = new Redis(options.redisUrl, {
4
+ const { Redis: RedisClient } = require("ioredis");
5
+ const redis = new RedisClient(options.redisUrl, {
4
6
  connectTimeout: options.timeoutMs,
5
7
  enableOfflineQueue: false,
6
8
  lazyConnect: true,
@@ -1,3 +1,77 @@
1
- import type { RequestParams } from "../types.js";
1
+ import type { HttpClient, RequestOptions, RequestParams } from "../types.js";
2
+ export declare const REDACTED_QUERY_VALUE = "[REDACTED]";
3
+ /** Internal heuristic shared by diagnostic and fixture structural redaction. */
4
+ export declare function isSensitiveKey(key: string): boolean;
5
+ declare const HTTP_REQUEST_METHOD_CONFIG: {
6
+ readonly request: {
7
+ readonly optionsIndex: 1;
8
+ };
9
+ readonly get: {
10
+ readonly optionsIndex: 1;
11
+ };
12
+ readonly post: {
13
+ readonly optionsIndex: 2;
14
+ };
15
+ readonly put: {
16
+ readonly optionsIndex: 2;
17
+ };
18
+ readonly delete: {
19
+ readonly optionsIndex: 1;
20
+ };
21
+ readonly stream: {
22
+ readonly optionsIndex: 1;
23
+ };
24
+ readonly sse: {
25
+ readonly optionsIndex: 1;
26
+ };
27
+ };
28
+ export type HttpRequestMethod = keyof typeof HTTP_REQUEST_METHOD_CONFIG;
29
+ export type HttpRequestInvocation = {
30
+ [M in HttpRequestMethod]: {
31
+ method: M;
32
+ args: Parameters<HttpClient[M]>;
33
+ };
34
+ }[HttpRequestMethod];
35
+ export declare const HTTP_REQUEST_METHOD_NAMES: HttpRequestMethod[];
36
+ export declare function isHttpRequestMethod(method: PropertyKey): method is HttpRequestMethod;
37
+ export type SerializedRequestUrl = {
38
+ requestUrl: string;
39
+ redactedUrl: string;
40
+ sensitiveValues: readonly string[];
41
+ };
42
+ export declare function normalizeSensitiveParams(sensitiveParams?: Record<string, string>): Record<string, string> | undefined;
2
43
  export declare function appendQueryParams(url: string, params?: RequestParams): string;
44
+ /** Redacts matching query keys without reserializing any other URL bytes. */
45
+ export declare function redactUrlQueryParams(url: string, sensitiveParamNames: readonly string[]): {
46
+ redactedUrl: string;
47
+ sensitiveValues: readonly string[];
48
+ };
49
+ /**
50
+ * Serializes public and secret query parameters together while constructing a
51
+ * separate, structurally redacted URL for diagnostics and observability.
52
+ */
53
+ export declare function serializeRequestUrl(url: string, params?: RequestParams, sensitiveParams?: Record<string, string>): SerializedRequestUrl;
54
+ export declare function normalizePercentEscapes(value: string): string;
55
+ export type SensitiveValueVariant = {
56
+ value: string;
57
+ requiresTokenBoundary: boolean;
58
+ caseInsensitive: boolean;
59
+ };
60
+ export declare function allSensitiveValueVariants(sensitiveValues: readonly string[]): SensitiveValueVariant[];
61
+ /** Scrubs raw and URL-encoded secret values from diagnostic text. */
62
+ export declare function redactSensitiveText(text: string, sensitiveValues: readonly string[], requestUrl?: string, redactedUrl?: string): string;
63
+ /**
64
+ * Redacts error text and recursively serializable diagnostic metadata.
65
+ * Mutable errors retain identity; readonly/frozen errors may be replaced, so
66
+ * callers must use the returned value.
67
+ */
68
+ export declare function redactSensitiveError<T>(error: T, sensitiveValues: readonly string[], requestUrl?: string, redactedUrl?: string): T;
69
+ /** Redacts failures that occur before a request URL can be fully serialized. */
70
+ export declare function redactSensitiveRequestError<T>(error: T, url: string, sensitiveParams?: Record<string, string>): T;
71
+ /** Validates an untyped proxy invocation before narrowing it to the HttpClient contract. */
72
+ export declare function parseHttpRequestInvocation(method: PropertyKey, args: unknown[]): HttpRequestInvocation | undefined;
73
+ /** Internal typed registry for the request-options position of HttpClient calls. */
74
+ export declare function requestOptionsFromHttpInvocation(invocation: HttpRequestInvocation): RequestOptions | undefined;
75
+ export declare function replaceRequestOptionsInHttpInvocation(invocation: HttpRequestInvocation, options: RequestOptions): void;
3
76
  export declare function normalizeHttpRequestBody(body: unknown): string | Buffer | undefined;
77
+ export {};