@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,77 @@
1
+ import type { SttContext } from "../types.js";
2
+ import { type ClosedEnum, type SpanIndex, type TelemetryContributor } from "./request-telemetry.js";
3
+ export type SttTelemetryBackend = "cloudflare-workers-ai" | "custom" | "unavailable";
4
+ export type SttTelemetryEngine = "workers-ai" | "custom";
5
+ export type SttTelemetryErrorCode = "STT_UNAVAILABLE" | "UNSUPPORTED_STT_BACKEND" | "STT_UPSTREAM_FAILED" | "STT_AUDIO_TOO_LARGE" | "UNSUPPORTED_STT_OPTION" | "INVALID_STT_AUDIO" | "INVALID_STT_VERIFICATION_CODE_OPTIONS" | "NO_CODE_FOUND" | "AMBIGUOUS_CODE" | "transport_network_error" | "transport_timeout" | "other";
6
+ export type SttTelemetryModel = "whisper-large-v3-turbo";
7
+ export type SttTelemetryEvent = {
8
+ backend: SttTelemetryBackend;
9
+ engine: SttTelemetryEngine;
10
+ model?: string;
11
+ ms: number;
12
+ status?: number;
13
+ audioBytes?: number;
14
+ durationMs?: number;
15
+ usage?: number;
16
+ warnings?: number;
17
+ errorCode?: SttTelemetryErrorCode;
18
+ diagnostics?: string;
19
+ };
20
+ export interface SttTelemetrySink {
21
+ record(event: SttTelemetryEvent): void;
22
+ markTelemetryFailed?(): void;
23
+ }
24
+ export type SttTelemetryLogPayload = {
25
+ telemetryFailed?: true;
26
+ diagnostics?: string[];
27
+ backend: SttTelemetryBackend;
28
+ engine: SttTelemetryEngine;
29
+ model?: string;
30
+ ms: number;
31
+ status?: number;
32
+ audioBytes: number;
33
+ durationMs: number;
34
+ usage: number;
35
+ warnings: number;
36
+ lastErrorCode?: SttTelemetryErrorCode;
37
+ samples?: Array<Omit<SttTelemetryEvent, "backend" | "engine" | "model" | "diagnostics">>;
38
+ samplesDropped?: number;
39
+ };
40
+ export type SttTelemetryHeaderPayload = {
41
+ backend: ClosedEnum<SttTelemetryBackend>;
42
+ engine: ClosedEnum<SttTelemetryEngine>;
43
+ model?: ClosedEnum<SttTelemetryModel>;
44
+ ms: number;
45
+ status?: number;
46
+ audioBytes: number;
47
+ durationMs: number;
48
+ usage: number;
49
+ warnings: number;
50
+ lastErrorCode?: ClosedEnum<SttTelemetryErrorCode>;
51
+ samples?: Array<{
52
+ ms: number;
53
+ status?: number;
54
+ audioBytes?: number;
55
+ durationMs?: number;
56
+ usage?: number;
57
+ warnings?: number;
58
+ errorCode?: ClosedEnum<SttTelemetryErrorCode>;
59
+ }>;
60
+ samplesDropped?: number;
61
+ };
62
+ export declare class SttTelemetryCollector implements SttTelemetrySink, TelemetryContributor<SttTelemetryLogPayload, SttTelemetryHeaderPayload> {
63
+ #private;
64
+ readonly key: "stt";
65
+ constructor(options?: {
66
+ redact?: (text: string) => string;
67
+ });
68
+ markTelemetryFailed(): void;
69
+ record(event: SttTelemetryEvent): void;
70
+ toLogPayload(_spans: SpanIndex): SttTelemetryLogPayload | undefined;
71
+ toHeaderPayload(log: SttTelemetryLogPayload): SttTelemetryHeaderPayload;
72
+ }
73
+ export declare function bindSttTelemetry(context: SttContext, sink: SttTelemetrySink, options?: {
74
+ backend?: SttTelemetryBackend;
75
+ engine?: SttTelemetryEngine;
76
+ model?: string;
77
+ }): SttContext;
@@ -0,0 +1,176 @@
1
+ import { add, capabilityErrorText, capabilityFacts, capabilityMetadata, capabilityText, inputBytes, integer, observeCapability, registerCapabilityInput, } from "./capability-telemetry.js";
2
+ import { closedEnum, } from "./request-telemetry.js";
3
+ const ERROR_CODES = new Set([
4
+ "STT_UNAVAILABLE",
5
+ "UNSUPPORTED_STT_BACKEND",
6
+ "STT_UPSTREAM_FAILED",
7
+ "STT_AUDIO_TOO_LARGE",
8
+ "UNSUPPORTED_STT_OPTION",
9
+ "INVALID_STT_AUDIO",
10
+ "INVALID_STT_VERIFICATION_CODE_OPTIONS",
11
+ "NO_CODE_FOUND",
12
+ "AMBIGUOUS_CODE",
13
+ "transport_network_error",
14
+ "transport_timeout",
15
+ "other",
16
+ ]);
17
+ const MODELS = new Map([
18
+ ["@cf/openai/whisper-large-v3-turbo", "whisper-large-v3-turbo"],
19
+ ]);
20
+ function errorCode(error) {
21
+ const code = error && typeof error === "object" && "code" in error ? error.code : undefined;
22
+ return typeof code === "string" && ERROR_CODES.has(code)
23
+ ? code
24
+ : "other";
25
+ }
26
+ export class SttTelemetryCollector {
27
+ key = "stt";
28
+ #redact;
29
+ #samples = [];
30
+ #summary;
31
+ #diagnostics = [];
32
+ #dropped = 0;
33
+ #failed = false;
34
+ constructor(options = {}) {
35
+ this.#redact = options.redact;
36
+ }
37
+ markTelemetryFailed() {
38
+ this.#failed = true;
39
+ this.#summary ??= {
40
+ backend: "custom",
41
+ engine: "custom",
42
+ ms: 0,
43
+ audioBytes: 0,
44
+ durationMs: 0,
45
+ usage: 0,
46
+ warnings: 0,
47
+ };
48
+ }
49
+ record(event) {
50
+ const sample = {
51
+ ms: integer(event.ms),
52
+ ...(event.status === undefined ? {} : { status: integer(event.status) }),
53
+ ...(event.audioBytes === undefined ? {} : { audioBytes: integer(event.audioBytes) }),
54
+ ...(event.durationMs === undefined ? {} : { durationMs: integer(event.durationMs) }),
55
+ ...(event.usage === undefined ? {} : { usage: integer(event.usage) }),
56
+ ...(event.warnings === undefined ? {} : { warnings: integer(event.warnings) }),
57
+ ...(event.errorCode ? { errorCode: event.errorCode } : {}),
58
+ ...(event.diagnostics === undefined
59
+ ? {}
60
+ : { diagnostics: capabilityText(event.diagnostics, this.#redact, true) }),
61
+ };
62
+ const prior = this.#summary;
63
+ this.#summary = {
64
+ backend: event.backend,
65
+ engine: event.engine,
66
+ ...(event.model === undefined ? {} : { model: capabilityText(event.model, this.#redact) }),
67
+ ms: add(prior?.ms ?? 0, sample.ms),
68
+ ...(sample.status === undefined ? {} : { status: sample.status }),
69
+ audioBytes: add(prior?.audioBytes ?? 0, sample.audioBytes ?? 0),
70
+ durationMs: add(prior?.durationMs ?? 0, sample.durationMs ?? 0),
71
+ usage: add(prior?.usage ?? 0, sample.usage ?? 0),
72
+ warnings: add(prior?.warnings ?? 0, sample.warnings ?? 0),
73
+ ...(event.errorCode ? { lastErrorCode: event.errorCode } : {}),
74
+ };
75
+ if (this.#samples.length < 24) {
76
+ const { diagnostics, ...closedSample } = sample;
77
+ this.#samples.push(closedSample);
78
+ if (diagnostics !== undefined)
79
+ this.#diagnostics.push(diagnostics);
80
+ }
81
+ else
82
+ this.#dropped = add(this.#dropped, 1);
83
+ }
84
+ toLogPayload(_spans) {
85
+ if (!this.#summary)
86
+ return undefined;
87
+ return {
88
+ ...this.#summary,
89
+ ...(this.#diagnostics.length ? { diagnostics: [...this.#diagnostics] } : {}),
90
+ ...(this.#failed ? { telemetryFailed: true } : {}),
91
+ samples: this.#samples.map((s) => ({ ...s })),
92
+ ...(this.#dropped ? { samplesDropped: this.#dropped } : {}),
93
+ };
94
+ }
95
+ toHeaderPayload(log) {
96
+ return {
97
+ backend: closedEnum(log.backend),
98
+ engine: closedEnum(log.engine),
99
+ ...(log.model && MODELS.has(log.model) ? { model: closedEnum(MODELS.get(log.model)) } : {}),
100
+ ms: log.ms,
101
+ ...(log.status === undefined ? {} : { status: log.status }),
102
+ audioBytes: log.audioBytes,
103
+ durationMs: log.durationMs,
104
+ usage: log.usage,
105
+ warnings: log.warnings,
106
+ ...(log.lastErrorCode ? { lastErrorCode: closedEnum(log.lastErrorCode) } : {}),
107
+ ...(log.samples
108
+ ? {
109
+ samples: log.samples.map((s) => ({
110
+ ms: s.ms,
111
+ ...(s.status === undefined ? {} : { status: s.status }),
112
+ ...(s.audioBytes === undefined ? {} : { audioBytes: s.audioBytes }),
113
+ ...(s.durationMs === undefined ? {} : { durationMs: s.durationMs }),
114
+ ...(s.usage === undefined ? {} : { usage: s.usage }),
115
+ ...(s.warnings === undefined ? {} : { warnings: s.warnings }),
116
+ ...(s.errorCode ? { errorCode: closedEnum(s.errorCode) } : {}),
117
+ })),
118
+ }
119
+ : {}),
120
+ ...(log.samplesDropped ? { samplesDropped: log.samplesDropped } : {}),
121
+ };
122
+ }
123
+ }
124
+ export function bindSttTelemetry(context, sink, options = {}) {
125
+ const metadata = capabilityMetadata(context);
126
+ const backend = options.backend ?? metadata?.backend ?? "custom";
127
+ const engine = options.engine ?? metadata?.engine ?? "custom";
128
+ const model = options.model ?? metadata?.model;
129
+ async function run(input, operation) {
130
+ const started = performance.now();
131
+ const facts = {};
132
+ observeCapability(sink, () => registerCapabilityInput(input));
133
+ let result;
134
+ try {
135
+ result = await capabilityFacts.run(facts, operation);
136
+ }
137
+ catch (error) {
138
+ observeCapability(sink, () => {
139
+ const status = error &&
140
+ typeof error === "object" &&
141
+ "status" in error &&
142
+ typeof error.status === "number"
143
+ ? error.status
144
+ : undefined;
145
+ return sink.record({
146
+ backend,
147
+ engine,
148
+ model,
149
+ ms: performance.now() - started,
150
+ status: facts.status ?? status,
151
+ audioBytes: inputBytes(input),
152
+ errorCode: errorCode(error),
153
+ diagnostics: `${capabilityErrorText(error)} ${facts.diagnostics ?? ""}`,
154
+ });
155
+ });
156
+ throw error;
157
+ }
158
+ observeCapability(sink, () => sink.record({
159
+ backend,
160
+ engine,
161
+ model: model,
162
+ ms: performance.now() - started,
163
+ status: facts.status,
164
+ audioBytes: result.usage?.audioBytes ?? inputBytes(input),
165
+ durationMs: result.durationMs,
166
+ usage: result.usage?.audioDurationMs,
167
+ warnings: result.warnings?.length ?? 0,
168
+ }));
169
+ return result;
170
+ }
171
+ return {
172
+ ...context,
173
+ transcribe: (request) => run(request.audio, () => context.transcribe(request)),
174
+ extractVerificationCode: (text, opts) => context.extractVerificationCode(text, opts),
175
+ };
176
+ }
@@ -1,4 +1,8 @@
1
1
  import { ProviderError, TransportError, ValidationError } from "../errors.js";
2
+ import { readCapabilityErrorBody } from "./capability-response.js";
3
+ import { captureCapability, registerCapabilityInput, tagCapability, } from "./capability-telemetry.js";
4
+ import { readDiagnosticEnv, registerDiagnosticValue } from "./diagnostic-env.js";
5
+ import { createTimeoutController, isTimeoutLikeError } from "./timeout.js";
2
6
  export const APIFUSE__STT__BACKEND_ENV = "APIFUSE__STT__BACKEND";
3
7
  export const APIFUSE__STT__MODEL_ENV = "APIFUSE__STT__MODEL";
4
8
  export const CLOUDFLARE_ACCOUNT_ID_ENV = "APIFUSE__CLOUDFLARE__ACCOUNT_ID";
@@ -13,7 +17,7 @@ function providerError(message, options) {
13
17
  return new ProviderError(message, options);
14
18
  }
15
19
  function createErrorSttClient(options) {
16
- return {
20
+ return tagCapability({
17
21
  async transcribe() {
18
22
  throw providerError(options.message, {
19
23
  code: options.code,
@@ -21,7 +25,7 @@ function createErrorSttClient(options) {
21
25
  });
22
26
  },
23
27
  extractVerificationCode,
24
- };
28
+ }, { backend: "unavailable", engine: "custom" });
25
29
  }
26
30
  export function createUnsupportedSttClient(reason) {
27
31
  return createErrorSttClient({
@@ -31,7 +35,7 @@ export function createUnsupportedSttClient(reason) {
31
35
  });
32
36
  }
33
37
  function normalizedEnvValue(env, key) {
34
- const value = env[key]?.trim();
38
+ const value = readDiagnosticEnv(key, env)?.trim();
35
39
  return value ? value : undefined;
36
40
  }
37
41
  export function createSttClientFromEnv(config, env = process.env) {
@@ -52,7 +56,7 @@ export function createSttClientFromEnv(config, env = process.env) {
52
56
  });
53
57
  }
54
58
  const accountId = env.APIFUSE__CLOUDFLARE__ACCOUNT_ID?.trim();
55
- const apiToken = env.APIFUSE__STT__CLOUDFLARE_API_TOKEN?.trim();
59
+ const apiToken = readDiagnosticEnv(APIFUSE__STT__CLOUDFLARE_API_TOKEN_ENV, env)?.trim();
56
60
  if (!accountId || !apiToken) {
57
61
  return createUnsupportedSttClient(`STT backend ${backend} requires ${CLOUDFLARE_ACCOUNT_ID_ENV} and ${APIFUSE__STT__CLOUDFLARE_API_TOKEN_ENV}`);
58
62
  }
@@ -112,12 +116,6 @@ function warnOrThrowUnsupportedOption(request, message) {
112
116
  function normalizeCloudflareLanguage(language) {
113
117
  return language?.split("-")[0]?.toLowerCase();
114
118
  }
115
- function isTimeoutLikeError(error) {
116
- return (error instanceof Error &&
117
- (error.name === "AbortError" ||
118
- error.name === "TimeoutError" ||
119
- /\b(timed out|timeout|deadline exceeded)\b/i.test(error.message)));
120
- }
121
119
  function toSttTransportError(error) {
122
120
  if (error instanceof TransportError)
123
121
  return error;
@@ -134,12 +132,6 @@ function toSttTransportError(error) {
134
132
  cause: error instanceof Error ? error : undefined,
135
133
  });
136
134
  }
137
- function createTimeoutController(signalTimeoutMs) {
138
- const controller = new AbortController();
139
- const timeout = setTimeout(() => controller.abort(), signalTimeoutMs);
140
- timeout.unref?.();
141
- return { controller, clear: () => clearTimeout(timeout) };
142
- }
143
135
  function toCloudflareInput(request) {
144
136
  const prompt = resolveSttPrompt(request);
145
137
  const input = {
@@ -219,8 +211,11 @@ function toSttTranscript(payload, audioBytes) {
219
211
  export function createCloudflareWorkersAiSttClient(options) {
220
212
  const model = options.model ?? DEFAULT_CLOUDFLARE_WORKERS_AI_STT_MODEL;
221
213
  const runFetch = options.fetch ?? fetch;
222
- return {
214
+ return tagCapability({
223
215
  async transcribe(request) {
216
+ registerCapabilityInput(request.audio);
217
+ registerDiagnosticValue(options.apiToken);
218
+ registerDiagnosticValue(`Bearer ${options.apiToken}`);
224
219
  const warnings = [];
225
220
  if (request.initialPrompt && effectivePromptPolicy(request) !== "custom-hint") {
226
221
  const warning = warnOrThrowUnsupportedOption(request, "initialPrompt is honored only when promptPolicy is custom-hint");
@@ -245,16 +240,20 @@ export function createCloudflareWorkersAiSttClient(options) {
245
240
  catch (error) {
246
241
  throw toSttTransportError(error);
247
242
  }
248
- const payload = await response.json().catch(() => undefined);
243
+ captureCapability({ status: response.status });
249
244
  if (!response.ok) {
245
+ const echoed = await readCapabilityErrorBody(response, timeout.controller.signal);
246
+ captureCapability({ diagnostics: echoed });
250
247
  throw new TransportError("STT upstream request failed", {
251
248
  code: "STT_UPSTREAM_FAILED",
252
249
  status: response.status,
253
250
  upstreamStatus: response.status,
254
251
  });
255
252
  }
253
+ const payload = await response.json().catch(() => undefined);
256
254
  const envelope = unknownRecord(payload);
257
255
  if (envelope?.success === false) {
256
+ captureCapability({ diagnostics: JSON.stringify(payload) });
258
257
  throw new TransportError("STT upstream returned an error", {
259
258
  code: "STT_UPSTREAM_FAILED",
260
259
  status: 502,
@@ -280,7 +279,7 @@ export function createCloudflareWorkersAiSttClient(options) {
280
279
  }
281
280
  },
282
281
  extractVerificationCode,
283
- };
282
+ }, { backend: "cloudflare-workers-ai", engine: "workers-ai", model });
284
283
  }
285
284
  const EN_DIGITS = {
286
285
  zero: "0",
@@ -0,0 +1,5 @@
1
+ export declare function isTimeoutLikeError(error: unknown): error is Error;
2
+ export declare function createTimeoutController(signalTimeoutMs: number): {
3
+ controller: AbortController;
4
+ clear: () => void;
5
+ };
@@ -0,0 +1,12 @@
1
+ export function isTimeoutLikeError(error) {
2
+ return (error instanceof Error &&
3
+ (error.name === "AbortError" ||
4
+ error.name === "TimeoutError" ||
5
+ /\b(timed out|timeout|deadline exceeded)\b/i.test(error.message)));
6
+ }
7
+ export function createTimeoutController(signalTimeoutMs) {
8
+ const controller = new AbortController();
9
+ const timeout = setTimeout(() => controller.abort(), signalTimeoutMs);
10
+ timeout.unref?.();
11
+ return { controller, clear: () => clearTimeout(timeout) };
12
+ }
@@ -0,0 +1,12 @@
1
+ import type { TraceConfig } from "../types.js";
2
+ /** SDK-owned environment variable names for server trace output. */
3
+ export declare const APIFUSE__TRACE__ENABLED = "APIFUSE__TRACE__ENABLED";
4
+ export declare const APIFUSE__TRACE__EXPORTER = "APIFUSE__TRACE__EXPORTER";
5
+ type EnvLike = Record<string, string | undefined>;
6
+ /**
7
+ * Resolve server trace output configuration from SDK-owned environment
8
+ * variables. Invalid exporter values fail closed so a provider cannot crash at
9
+ * startup because of an observability setting.
10
+ */
11
+ export declare function resolveTraceConfigFromEnv(env?: EnvLike): TraceConfig | undefined;
12
+ export {};
@@ -0,0 +1,62 @@
1
+ /** SDK-owned environment variable names for server trace output. */
2
+ export const APIFUSE__TRACE__ENABLED = "APIFUSE__TRACE__ENABLED";
3
+ export const APIFUSE__TRACE__EXPORTER = "APIFUSE__TRACE__EXPORTER";
4
+ const TRACE_EXPORTER_LOOKUP = {
5
+ console: true,
6
+ json: true,
7
+ otlp: true,
8
+ none: true,
9
+ };
10
+ const TRACE_EXPORTERS = new Set(Object.keys(TRACE_EXPORTER_LOOKUP));
11
+ const emittedWarnings = new Set();
12
+ function warnOnce(key, message) {
13
+ if (emittedWarnings.has(key))
14
+ return;
15
+ emittedWarnings.add(key);
16
+ console.warn(message);
17
+ }
18
+ function parseEnabled(raw) {
19
+ if (raw === undefined)
20
+ return undefined;
21
+ switch (raw.trim().toLowerCase()) {
22
+ case "1":
23
+ case "true":
24
+ case "yes":
25
+ case "on":
26
+ return true;
27
+ case "0":
28
+ case "false":
29
+ case "no":
30
+ case "off":
31
+ return false;
32
+ default:
33
+ warnOnce(APIFUSE__TRACE__ENABLED, "[apifuse] Invalid APIFUSE__TRACE__ENABLED; falling back to disabled tracing.");
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Resolve server trace output configuration from SDK-owned environment
39
+ * variables. Invalid exporter values fail closed so a provider cannot crash at
40
+ * startup because of an observability setting.
41
+ */
42
+ export function resolveTraceConfigFromEnv(env = process.env) {
43
+ const enabledRaw = env[APIFUSE__TRACE__ENABLED];
44
+ const exporterRaw = env[APIFUSE__TRACE__EXPORTER];
45
+ if (enabledRaw === undefined && exporterRaw === undefined) {
46
+ return undefined;
47
+ }
48
+ const enabled = parseEnabled(enabledRaw);
49
+ const normalizedExporter = exporterRaw?.trim().toLowerCase();
50
+ const exporter = TRACE_EXPORTERS.has(normalizedExporter)
51
+ ? normalizedExporter
52
+ : exporterRaw === undefined
53
+ ? undefined
54
+ : "none";
55
+ if (exporterRaw !== undefined && exporter === "none" && normalizedExporter !== "none") {
56
+ warnOnce(APIFUSE__TRACE__EXPORTER, `[apifuse] Invalid APIFUSE__TRACE__EXPORTER value "${normalizedExporter ?? exporterRaw}"; supported exporters are "console", "json", "otlp", and "none"; falling back to exporter "none".`);
57
+ }
58
+ return {
59
+ ...(enabled !== undefined ? { enabled } : {}),
60
+ ...(exporter !== undefined ? { exporter } : {}),
61
+ };
62
+ }
@@ -1,4 +1,5 @@
1
1
  import type { TraceContext as BaseTraceContext, TraceAttributeValue, TraceConfig, TraceSpan } from "../types.js";
2
+ import { type DiagnosticRedactor } from "./diagnostic-redactor.js";
2
3
  import { type OTLPExportOptions } from "./otlp.js";
3
4
  export type SpanAttributeValue = TraceAttributeValue;
4
5
  export type Span = TraceSpan;
@@ -8,8 +9,17 @@ export interface TraceContext extends BaseTraceContext {
8
9
  export interface CreateTraceContextOptions {
9
10
  maxSpans?: number;
10
11
  onSpan?: (span: Span) => void;
12
+ /** Redacts diagnostic attribute values and errors before recording or calling onSpan. */
13
+ redact?: DiagnosticRedactor;
11
14
  exportOptions?: OTLPExportOptions;
12
15
  resourceAttributes?: Record<string, string>;
16
+ /** W3C-compatible 32-character lowercase hexadecimal trace id used for export. */
17
+ traceId?: string;
18
+ /**
19
+ * Applied to a detached copy of each span immediately before OTLP export; never touches
20
+ * getSpans() or onSpan. Returning nothing (or throwing) drops that export batch.
21
+ */
22
+ sanitizeSpanForExport?: (span: Span) => Span | undefined;
13
23
  }
14
24
  type SpanHookOptions<T> = {
15
25
  attributes?: Record<string, unknown>;
@@ -20,7 +30,14 @@ export interface TraceRecorder {
20
30
  runSpan<T>(name: string, fn: () => Promise<T> | T, options?: SpanHookOptions<T>): Promise<T>;
21
31
  }
22
32
  export declare const TRACE_RECORDER: unique symbol;
33
+ /** Updates request metadata before its pending root span completes and exports. */
34
+ export declare function updateTraceContextExportMetadata(trace: BaseTraceContext, input: {
35
+ traceId?: string;
36
+ resourceAttributes?: Record<string, string>;
37
+ }): void;
23
38
  export declare function resolveTraceContextOptions(config?: TraceConfig): CreateTraceContextOptions;
24
39
  export declare function getTraceRecorder(trace: BaseTraceContext): TraceRecorder | null;
40
+ /** Internal, read-only process counters; no reset can re-arm a warning. */
41
+ export declare function getDroppedOTLPSpanCount(reason: string): number;
25
42
  export declare function createTraceContext(options?: CreateTraceContextOptions): TraceContext;
26
43
  export {};