@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
@@ -1,12 +1,25 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
-
2
+ import { sanitizeSpanNameForOutput } from "../trace-sanitization.js";
3
3
  import type {
4
4
  TraceContext as BaseTraceContext,
5
5
  TraceAttributeValue,
6
6
  TraceConfig,
7
7
  TraceSpan,
8
8
  } from "../types.js";
9
+ import {
10
+ type DiagnosticRedactor,
11
+ diagnosticStructuredRedactor,
12
+ redactDiagnosticAttributeKey,
13
+ copyDiagnosticAttributeTypes,
14
+ redactedKeyAllocator,
15
+ isRedactedKey,
16
+ redactCriticalDiagnosticText,
17
+ diagnosticAttributeRedactor,
18
+ REDACTION_FAILED,
19
+ redactDiagnosticText,
20
+ } from "./diagnostic-redactor.js";
9
21
  import { exportSpansOTLP, type OTLPExportOptions } from "./otlp.js";
22
+ import { REDACTED_QUERY_VALUE } from "./request-options.js";
10
23
 
11
24
  export type SpanAttributeValue = TraceAttributeValue;
12
25
 
@@ -19,8 +32,17 @@ export interface TraceContext extends BaseTraceContext {
19
32
  export interface CreateTraceContextOptions {
20
33
  maxSpans?: number;
21
34
  onSpan?: (span: Span) => void;
35
+ /** Redacts diagnostic attribute values and errors before recording or calling onSpan. */
36
+ redact?: DiagnosticRedactor;
22
37
  exportOptions?: OTLPExportOptions;
23
38
  resourceAttributes?: Record<string, string>;
39
+ /** W3C-compatible 32-character lowercase hexadecimal trace id used for export. */
40
+ traceId?: string;
41
+ /**
42
+ * Applied to a detached copy of each span immediately before OTLP export; never touches
43
+ * getSpans() or onSpan. Returning nothing (or throwing) drops that export batch.
44
+ */
45
+ sanitizeSpanForExport?: (span: Span) => Span | undefined;
24
46
  }
25
47
 
26
48
  type SpanHookOptions<T> = {
@@ -35,12 +57,24 @@ type PendingSpan = {
35
57
  startedAt: number;
36
58
  parentId?: string;
37
59
  sequence: number;
38
- attributes: Record<string, SpanAttributeValue>;
60
+ attributes: Record<string, SpanAttributeValue | bigint>;
39
61
  };
40
62
 
41
63
  type CompletedSpanEntry = {
42
64
  sequence: number;
43
65
  span: Span;
66
+ /** Set once the span has been handed to the exporter so no batch re-sends it. */
67
+ exported: boolean;
68
+ };
69
+
70
+ const TRACE_RESOURCE_ATTRIBUTE_SANITIZER = Symbol.for(
71
+ "@apifuse/provider-sdk/runtime/trace-resource-attribute-sanitizer",
72
+ );
73
+
74
+ type ResourceAttributesWithSanitizer = Record<string, string> & {
75
+ [TRACE_RESOURCE_ATTRIBUTE_SANITIZER]?: (
76
+ attributes: Record<string, string>,
77
+ ) => Record<string, string>;
44
78
  };
45
79
 
46
80
  export interface TraceRecorder {
@@ -48,13 +82,31 @@ export interface TraceRecorder {
48
82
  }
49
83
 
50
84
  export const TRACE_RECORDER = Symbol.for("@apifuse/provider-sdk/runtime/trace-recorder");
85
+ const TRACE_EXPORT_METADATA = Symbol.for("@apifuse/provider-sdk/runtime/trace-export-metadata");
86
+
87
+ type TraceExportMetadata = {
88
+ update(input: { traceId?: string; resourceAttributes?: Record<string, string> }): void;
89
+ };
51
90
 
52
91
  type InternalTraceContext = TraceContext & {
53
92
  [TRACE_RECORDER]: TraceRecorder;
54
- _exportOptions?: OTLPExportOptions;
55
- _resourceAttributes?: Record<string, string>;
93
+ [TRACE_EXPORT_METADATA]: TraceExportMetadata;
56
94
  };
57
95
 
96
+ function assertValidTraceId(traceId: string): void {
97
+ if (!/^[0-9a-f]{32}$/.test(traceId) || /^0{32}$/.test(traceId)) {
98
+ throw new TypeError("traceId must be 32 lowercase hexadecimal characters and non-zero");
99
+ }
100
+ }
101
+
102
+ /** Updates request metadata before its pending root span completes and exports. */
103
+ export function updateTraceContextExportMetadata(
104
+ trace: BaseTraceContext,
105
+ input: { traceId?: string; resourceAttributes?: Record<string, string> },
106
+ ): void {
107
+ (trace as Partial<InternalTraceContext>)[TRACE_EXPORT_METADATA]?.update(input);
108
+ }
109
+
58
110
  function buildOTLPExportOptions(config?: TraceConfig): OTLPExportOptions | undefined {
59
111
  if (config?.exporter !== "otlp") {
60
112
  return undefined;
@@ -80,30 +132,108 @@ export function resolveTraceContextOptions(config?: TraceConfig): CreateTraceCon
80
132
  };
81
133
  }
82
134
 
83
- function normalizeAttributeValue(value: unknown): SpanAttributeValue | undefined {
84
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
85
- return value;
135
+ function normalizeAttributeValue(
136
+ value: unknown,
137
+ redact?: DiagnosticRedactor,
138
+ retainBigints = false,
139
+ ): SpanAttributeValue | bigint | undefined {
140
+ if (typeof value === "number" || typeof value === "boolean") {
141
+ // Typed columns are contracts: unlike string tokens, number/boolean/bigint
142
+ // values only consult the registry at >=8 characters in string form.
143
+ const text = String(value);
144
+ if (text.length < 8) return value;
145
+ const redacted = redactDiagnosticText(text, diagnosticStructuredRedactor(redact));
146
+ return redacted === text ? value : redacted;
147
+ }
148
+ if (typeof value === "bigint") {
149
+ // Bigints are not valid OTLP attribute primitives, so retain their prior
150
+ // string normalization while still checking their diagnostic form.
151
+ const text = String(value);
152
+ if (text.length < 8) return retainBigints ? value : text;
153
+ const redacted = redactDiagnosticText(text, diagnosticStructuredRedactor(redact));
154
+ return retainBigints && redacted === text ? value : redacted;
86
155
  }
87
156
 
88
157
  if (value === null || value === undefined) {
89
158
  return undefined;
90
159
  }
91
160
 
92
- return String(value);
161
+ return redactDiagnosticText(String(value), redact);
93
162
  }
94
163
 
164
+ function normalizeAttributes(
165
+ attributes: Record<string, unknown> | undefined,
166
+ redact: DiagnosticRedactor | undefined,
167
+ retainBigints: true,
168
+ ): Record<string, SpanAttributeValue | bigint>;
95
169
  function normalizeAttributes(
96
170
  attributes?: Record<string, unknown>,
97
- ): Record<string, SpanAttributeValue> {
171
+ redact?: DiagnosticRedactor,
172
+ ): Record<string, SpanAttributeValue>;
173
+ function normalizeAttributes(
174
+ attributes?: Record<string, unknown>,
175
+ redact?: DiagnosticRedactor,
176
+ retainBigints = false,
177
+ ): Record<string, SpanAttributeValue | bigint> {
98
178
  if (!attributes) {
99
179
  return {};
100
180
  }
101
181
 
182
+ const nextKey = redactedKeyAllocator(Object.keys(attributes));
102
183
  const normalizedEntries = Object.entries(attributes)
103
- .map(([key, value]) => [key, normalizeAttributeValue(value)] as const)
104
- .filter((entry): entry is readonly [string, SpanAttributeValue] => entry[1] !== undefined);
184
+ .map(([key, value]) => {
185
+ const redactedKey = isRedactedKey(key) ? key : redactDiagnosticAttributeKey(key, redact);
186
+ const keyChanged = redactedKey !== key;
187
+ const normalizedKey = keyChanged ? nextKey() : key;
188
+ // Once a key changes, its original sensitivity classification is no
189
+ // longer available to later output sanitizers. Suppress the value here.
190
+ const normalizedValue = keyChanged
191
+ ? redactedKey === REDACTION_FAILED
192
+ ? REDACTION_FAILED
193
+ : REDACTED_QUERY_VALUE
194
+ : normalizeAttributeValue(
195
+ value,
196
+ diagnosticAttributeRedactor(key, redact, value),
197
+ retainBigints,
198
+ );
199
+ return [normalizedKey, normalizedValue] as const;
200
+ })
201
+ .filter(
202
+ (entry): entry is readonly [string, SpanAttributeValue | bigint] => entry[1] !== undefined,
203
+ );
204
+
205
+ return copyDiagnosticAttributeTypes(attributes, Object.fromEntries(normalizedEntries));
206
+ }
105
207
 
106
- return Object.fromEntries(normalizedEntries);
208
+ function prepareResourceAttributesForExport(
209
+ attributes: Record<string, string> | undefined,
210
+ redact?: DiagnosticRedactor,
211
+ sanitize?: (attributes: Record<string, string>) => Record<string, string>,
212
+ ): Record<string, string> | undefined {
213
+ if (!attributes) return undefined;
214
+ if (sanitize) {
215
+ const sanitized = sanitize({ ...attributes });
216
+ if (!sanitized || typeof sanitized !== "object") {
217
+ throw new Error("resource attribute sanitizer returned no attributes");
218
+ }
219
+ return sanitized;
220
+ }
221
+ const nextKey = redactedKeyAllocator(Object.keys(attributes));
222
+ return Object.fromEntries(
223
+ Object.entries(attributes).map(([key, value]) => {
224
+ const redactedKey = isRedactedKey(key) ? key : redactDiagnosticAttributeKey(key, redact);
225
+ const keyChanged = redactedKey !== key;
226
+ const sanitizedKey = keyChanged ? nextKey() : sanitizeSpanNameForOutput(key);
227
+ return [
228
+ sanitizedKey,
229
+ keyChanged
230
+ ? redactedKey === REDACTION_FAILED
231
+ ? REDACTION_FAILED
232
+ : REDACTED_QUERY_VALUE
233
+ : sanitizeSpanNameForOutput(value, diagnosticAttributeRedactor(key, redact, value)),
234
+ ];
235
+ }),
236
+ );
107
237
  }
108
238
 
109
239
  function insertCompletedSpan(
@@ -124,29 +254,107 @@ function insertCompletedSpan(
124
254
  }
125
255
  }
126
256
 
257
+ /** Hands the hook a copy whose attributes are detached from the recorded span; a hook that returns nothing fails closed. */
258
+ function prepareSpanForExport(
259
+ span: Span,
260
+ sanitize: CreateTraceContextOptions["sanitizeSpanForExport"],
261
+ ): Span {
262
+ const copy: Span = {
263
+ ...span,
264
+ attributes: copyDiagnosticAttributeTypes(span.attributes, { ...span.attributes }),
265
+ };
266
+ if (!sanitize) return copy;
267
+ const sanitized = sanitize(copy);
268
+ if (!sanitized || typeof sanitized !== "object") {
269
+ throw new Error("sanitizeSpanForExport returned no span");
270
+ }
271
+ return sanitized;
272
+ }
273
+
127
274
  export function getTraceRecorder(trace: BaseTraceContext): TraceRecorder | null {
128
275
  return (trace as Partial<InternalTraceContext>)[TRACE_RECORDER] ?? null;
129
276
  }
130
277
 
278
+ const droppedOTLPSpans = new Map<string, number>();
279
+
280
+ /** Internal, read-only process counters; no reset can re-arm a warning. */
281
+ export function getDroppedOTLPSpanCount(reason: string): number {
282
+ return droppedOTLPSpans.get(reason) ?? 0;
283
+ }
284
+
285
+ function warnDroppedOTLPSpans(reason: string, count: number): void {
286
+ const previous = getDroppedOTLPSpanCount(reason);
287
+ const total = previous + count;
288
+ droppedOTLPSpans.set(reason, total);
289
+ if (previous !== 0) return;
290
+ try {
291
+ console.warn(`[apifuse] OTLP export skipped; reason=${reason}; dropped_spans=${total}`);
292
+ } catch {
293
+ // Warning sinks are best-effort. The counter/latch survives a failed sink.
294
+ }
295
+ }
296
+
131
297
  export function createTraceContext(options: CreateTraceContextOptions = {}): TraceContext {
298
+ if (options.traceId !== undefined) assertValidTraceId(options.traceId);
132
299
  const maxSpans = options.maxSpans ?? 1000;
133
300
  const completed: CompletedSpanEntry[] = [];
134
301
  const activeSpanStorage = new AsyncLocalStorage<PendingSpan | undefined>();
135
302
  let sequence = 0;
136
- let traceContext!: InternalTraceContext;
137
-
303
+ // Export configuration (which can carry collector credentials) stays in this closure;
304
+ // the context object handed to provider code never exposes it.
305
+ const exportOptions = options.exportOptions;
306
+ const resourceAttributeOptions = options.resourceAttributes as
307
+ | ResourceAttributesWithSanitizer
308
+ | undefined;
309
+ const exportResourceAttributes = resourceAttributeOptions
310
+ ? { ...resourceAttributeOptions }
311
+ : undefined;
312
+ const exportResourceAttributeSanitizer =
313
+ resourceAttributeOptions?.[TRACE_RESOURCE_ATTRIBUTE_SANITIZER];
314
+ // One trace id per context so every export batch of this request shares it and
315
+ // two processes can never mint the same id.
316
+ let exportTraceId = options.traceId ?? crypto.randomUUID().replace(/-/g, "");
317
+ let exportScheduled = false;
318
+
319
+ // One pending batch per context: roots completing before the flush share it, and a span is
320
+ // handed to the exporter exactly once, so later roots never re-send earlier spans.
138
321
  const scheduleExport = () => {
139
- if (!traceContext._exportOptions) {
322
+ if (!exportOptions || exportScheduled) {
140
323
  return;
141
324
  }
325
+ exportScheduled = true;
142
326
 
143
- const spans = completed.map((entry) => ({ ...entry.span }));
144
327
  setImmediate(() => {
145
- void exportSpansOTLP(
146
- spans,
147
- traceContext._exportOptions as OTLPExportOptions,
148
- traceContext._resourceAttributes,
149
- );
328
+ exportScheduled = false;
329
+ const pending = completed.filter((entry) => !entry.exported);
330
+ for (const entry of pending) entry.exported = true;
331
+ if (pending.length === 0) return;
332
+ // Sanitization runs off the request path; a faulty sanitizer drops the batch, never the request.
333
+ let spans: Span[];
334
+ let resourceAttributes: Record<string, string> | undefined;
335
+ try {
336
+ spans = pending.map((entry) =>
337
+ prepareSpanForExport(entry.span, options.sanitizeSpanForExport),
338
+ );
339
+ resourceAttributes = prepareResourceAttributesForExport(
340
+ exportResourceAttributes,
341
+ options.redact,
342
+ exportResourceAttributeSanitizer,
343
+ );
344
+ } catch {
345
+ try {
346
+ console.warn("[apifuse] OTLP export skipped; span sanitization failed.");
347
+ } catch {
348
+ // A broken diagnostic sink must not escape this detached callback.
349
+ }
350
+ return;
351
+ }
352
+ // A matching trace ID cannot be replaced with non-hex text on the wire. Emit less.
353
+ if (redactCriticalDiagnosticText(exportTraceId, options.redact) !== exportTraceId) {
354
+ warnDroppedOTLPSpans("unverifiable_trace_id", pending.length);
355
+ return;
356
+ }
357
+ void exportSpansOTLP(spans, exportOptions, resourceAttributes, exportTraceId);
150
358
  });
151
359
  };
152
360
 
@@ -154,11 +362,11 @@ export function createTraceContext(options: CreateTraceContextOptions = {}): Tra
154
362
  async runSpan(name, fn, spanOptions = {}) {
155
363
  const pendingSpan: PendingSpan = {
156
364
  id: crypto.randomUUID(),
157
- name,
365
+ name: redactCriticalDiagnosticText(name, options.redact),
158
366
  startedAt: Date.now(),
159
367
  parentId: activeSpanStorage.getStore()?.id,
160
368
  sequence: sequence++,
161
- attributes: normalizeAttributes(spanOptions.attributes),
369
+ attributes: normalizeAttributes(spanOptions.attributes, options.redact, true),
162
370
  };
163
371
 
164
372
  const finalize = (
@@ -170,7 +378,7 @@ export function createTraceContext(options: CreateTraceContextOptions = {}): Tra
170
378
  const duration = endedAt - pendingSpan.startedAt;
171
379
  const attributes = {
172
380
  ...pendingSpan.attributes,
173
- ...normalizeAttributes(extraAttributes),
381
+ ...extraAttributes,
174
382
  };
175
383
 
176
384
  if (attributes.duration_ms === undefined) {
@@ -178,18 +386,25 @@ export function createTraceContext(options: CreateTraceContextOptions = {}): Tra
178
386
  }
179
387
 
180
388
  const span: Span = {
181
- id: pendingSpan.id,
182
- name: pendingSpan.name,
389
+ id: redactCriticalDiagnosticText(pendingSpan.id, options.redact),
390
+ // Recheck at recording: harvest and live env reads may follow span start.
391
+ name: redactCriticalDiagnosticText(pendingSpan.name, options.redact),
183
392
  startedAt: pendingSpan.startedAt,
184
393
  endedAt,
185
394
  duration_ms: duration,
186
395
  status,
187
- attributes,
188
- ...(error ? { error } : {}),
189
- ...(pendingSpan.parentId ? { parentId: pendingSpan.parentId } : {}),
396
+ attributes: normalizeAttributes(attributes, options.redact),
397
+ ...(error ? { error: redactDiagnosticText(error, options.redact) } : {}),
398
+ ...(pendingSpan.parentId
399
+ ? { parentId: redactCriticalDiagnosticText(pendingSpan.parentId, options.redact) }
400
+ : {}),
190
401
  };
191
402
 
192
- insertCompletedSpan(completed, { sequence: pendingSpan.sequence, span }, maxSpans);
403
+ insertCompletedSpan(
404
+ completed,
405
+ { sequence: pendingSpan.sequence, span, exported: false },
406
+ maxSpans,
407
+ );
193
408
  options.onSpan?.(span);
194
409
 
195
410
  if (!pendingSpan.parentId) {
@@ -213,18 +428,25 @@ export function createTraceContext(options: CreateTraceContextOptions = {}): Tra
213
428
  },
214
429
  };
215
430
 
216
- traceContext = {
431
+ const traceContext: InternalTraceContext = {
217
432
  span(name, fn) {
218
433
  return recorder.runSpan(name, fn);
219
434
  },
220
435
  getSpans() {
221
436
  return completed.map((entry) => ({ ...entry.span }));
222
437
  },
223
- ...(options.exportOptions ? { _exportOptions: options.exportOptions } : {}),
224
- ...(options.resourceAttributes
225
- ? { _resourceAttributes: { ...options.resourceAttributes } }
226
- : {}),
227
438
  [TRACE_RECORDER]: recorder,
439
+ [TRACE_EXPORT_METADATA]: {
440
+ update(input) {
441
+ if (input.traceId !== undefined) {
442
+ assertValidTraceId(input.traceId);
443
+ exportTraceId = input.traceId;
444
+ }
445
+ if (input.resourceAttributes !== undefined && exportResourceAttributes) {
446
+ Object.assign(exportResourceAttributes, input.resourceAttributes);
447
+ }
448
+ },
449
+ },
228
450
  };
229
451
 
230
452
  return traceContext;