@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
package/dist/dev.d.ts CHANGED
@@ -1,7 +1,12 @@
1
+ import type { ProviderEngine, ProviderEngineMode } from "./engine.js";
1
2
  import type { ProviderDefinition } from "./types.js";
2
3
  export interface DevServerOptions {
3
4
  port?: number;
4
5
  sessionDbPath?: string;
6
+ /** Override the default in-process engine attachment. */
7
+ engine?: ProviderEngine;
8
+ /** Explicit engine mode; `APIFUSE__ENGINE__MODE` outranks it when both are set. */
9
+ engineMode?: ProviderEngineMode;
5
10
  }
6
11
  export declare function createDevServer(provider: ProviderDefinition, options?: DevServerOptions): {
7
12
  start: () => void;
package/dist/dev.js CHANGED
@@ -3,7 +3,14 @@ export function createDevServer(provider, options) {
3
3
  const port = options?.port ?? 3900;
4
4
  return {
5
5
  start: () => {
6
- void serve(provider, { port });
6
+ // Local development has no Redis by default; handles (ADR-0012) need a
7
+ // state backend, so fall back to memory state when none is configured.
8
+ void serve(provider, {
9
+ port,
10
+ engine: options?.engine,
11
+ engineMode: options?.engineMode,
12
+ allowMemoryStateFallback: true,
13
+ });
7
14
  console.log(`[apifuse dev] ${provider.id}@${provider.version} running at http://localhost:${port}`);
8
15
  console.log(`[apifuse dev] Operations: ${Object.keys(provider.operations).join(", ")}`);
9
16
  console.log(`[apifuse dev] Health: http://localhost:${port}/health`);
@@ -0,0 +1,129 @@
1
+ import type { HandleContext } from "./handle.js";
2
+ import type { AuthContext, BrowserClient, CredentialContext, EnvContext, HttpClient, NativeContext, OcrContext, ProviderCache, ProviderContext, ProviderDefinition, ProviderFilesContext, ProviderRequestContext, ProviderRuntimeState, ResolverContext, StealthClient, SttContext, TraceContext } from "./types.js";
3
+ /** Versioned envelope protocol used by out-of-process engine transports. */
4
+ export declare const PROVIDER_ENGINE_PROTOCOL_VERSION: "provider-engine.v1";
5
+ /**
6
+ * Environment variable that selects how a provider process attaches its capability
7
+ * bindings. Engine-owned by prefix (`APIFUSE__ENGINE__*`): never declarable as a
8
+ * provider secret and never projected into `ctx.env`.
9
+ *
10
+ * Values are trimmed and case-folded; absent or blank means "unset". An
11
+ * unrecognized value is reported on the `provider_engine_mode` boot event and
12
+ * ignored — a deployment-authored typo must never turn into CrashLoopBackOff.
13
+ */
14
+ export declare const PROVIDER_ENGINE_MODE_ENV = "APIFUSE__ENGINE__MODE";
15
+ /**
16
+ * How a provider process attaches its capability bindings: `"in-process"` today,
17
+ * `"remote"` for the authenticated engine (ADR-0011).
18
+ *
19
+ * The union is intentionally open so further lanes (for example a provider hosted
20
+ * inside the engine) can be named without a breaking change. Unknown values are
21
+ * rejected at runtime, not by the type.
22
+ */
23
+ export type ProviderEngineMode = "in-process" | "remote" | (string & {});
24
+ /** Credential names owned by the engine and forbidden in provider declarations. */
25
+ export declare const ENGINE_OWNED_PROXY_CREDENTIAL_ENV_NAMES: readonly ["APIFUSE__PROXY__SMARTPROXY_APP_KEY", "APIFUSE__PROXY__NODEMAVEN_USERNAME", "APIFUSE__PROXY__NODEMAVEN_PASSWORD"];
26
+ export declare function isEngineOwnedProxyCredentialName(name: string): boolean;
27
+ /** Hosted resolver credentials owned by the engine and never projected to providers. */
28
+ export declare const ENGINE_OWNED_RESOLVER_CREDENTIAL_ENV_NAMES: readonly ["APIFUSE__RESOLVER__2CAPTCHA__API_KEY", "APIFUSE__RESOLVER__CAPSOLVER__API_KEY", "APIFUSE__RESOLVER__CAPMONSTER__API_KEY", "APIFUSE__RESOLVER__HYPERSOLUTIONS__API_KEY"];
29
+ /**
30
+ * Engine variable a provider-declared secret name resolves to, or `undefined` when the
31
+ * name is not an engine-owned resolver credential. Provider-scoped Hyper aliases
32
+ * (`APIFUSE__PROVIDER__<ID>__HYPER_API_KEY`, measured on zozotown) map to the shared key.
33
+ */
34
+ export declare function engineOwnedResolverCredentialTarget(name: string): string | undefined;
35
+ export declare function isEngineOwnedResolverCredentialName(name: string): boolean;
36
+ /**
37
+ * Trace-export configuration owned by the engine and forbidden in provider
38
+ * declarations. The header variables carry collector credentials; the rest are
39
+ * engine deployment settings a provider has no reason to read.
40
+ */
41
+ export declare const ENGINE_OWNED_TELEMETRY_ENV_NAMES: readonly ["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "OTEL_EXPORTER_OTLP_ENDPOINT", "OTEL_EXPORTER_OTLP_TRACES_HEADERS", "OTEL_EXPORTER_OTLP_HEADERS", "OTEL_SERVICE_NAME", "OTEL_RESOURCE_ATTRIBUTES"];
42
+ export declare function isEngineOwnedTelemetryEnvName(name: string): boolean;
43
+ /**
44
+ * Hosted runtime settings the engine reads for OCR, STT, cache keying, and
45
+ * the CDP pool. Providers never own them: declarations are rejected
46
+ * and projections drop them, like the vendor credentials above.
47
+ */
48
+ export declare const ENGINE_OWNED_RUNTIME_ENV_NAMES: readonly ["APIFUSE__STT__CLOUDFLARE_API_TOKEN", "APIFUSE__OCR__CLOUDFLARE_API_TOKEN", "APIFUSE__OCR__API_KEY", "APIFUSE__CLOUDFLARE__ACCOUNT_ID", "APIFUSE__CACHE__KEY_PEPPER"];
49
+ export declare function isEngineOwnedRuntimeEnvName(name: string): boolean;
50
+ /** Every environment name the engine owns: rejected in declarations and filtered from provider projections. */
51
+ export declare function isEngineOwnedEnvName(name: string): boolean;
52
+ /** Capture credentials in the engine host before constructing provider bindings. */
53
+ export declare function readEngineProxyCredentials(environment?: Readonly<Record<string, string | undefined>>): Readonly<Record<string, string>>;
54
+ /** Build the exact environment projection permitted to enter a provider runtime. */
55
+ export declare function createProviderEnvironment(environment: Readonly<Record<string, string | undefined>>, declaredNames: readonly string[]): Readonly<Record<string, string>>;
56
+ /**
57
+ * Request/response is the first remote transport lane. Stream and session
58
+ * handles are separate lanes so lifecycle-bearing capabilities are never
59
+ * disguised as ordinary JSON calls.
60
+ */
61
+ export interface ProviderEngineTransport {
62
+ request<TResponse = unknown>(request: ProviderEngineRequest): Promise<TResponse>;
63
+ openStream?(request: ProviderEngineRequest): Promise<ReadableStream<Uint8Array>>;
64
+ openSession?(request: ProviderEngineRequest): Promise<ProviderEngineSession>;
65
+ }
66
+ export interface ProviderEngineRequest {
67
+ readonly version: typeof PROVIDER_ENGINE_PROTOCOL_VERSION;
68
+ readonly providerId: string;
69
+ readonly requestId: string;
70
+ readonly capability: ProviderCapabilityKey;
71
+ readonly method: string;
72
+ readonly payload: unknown;
73
+ }
74
+ export interface ProviderEngineSession {
75
+ request<TResponse = unknown>(method: string, payload: unknown): Promise<TResponse>;
76
+ close(): Promise<void>;
77
+ }
78
+ /** Capability implementations owned by the engine rather than provider code. */
79
+ export interface ProviderEngineCapabilitySurface {
80
+ readonly http: HttpClient;
81
+ readonly browser: BrowserClient;
82
+ readonly stealth: StealthClient;
83
+ readonly stt: SttContext;
84
+ readonly ocr: OcrContext;
85
+ readonly resolver: ResolverContext;
86
+ readonly cache: ProviderCache;
87
+ readonly state: ProviderRuntimeState;
88
+ }
89
+ /** Engine-resident-only capabilities, kept separate from the portable surface. */
90
+ export interface ProviderEngineResidentSurface {
91
+ readonly native: NativeContext;
92
+ }
93
+ export declare const PROVIDER_CAPABILITY_KEYS: readonly ["env", "credential", "http", "files", "native", "cache", "state", "stealth", "browser", "auth", "ocr", "stt", "resolver", "handle"];
94
+ export type ProviderCapabilityKey = (typeof PROVIDER_CAPABILITY_KEYS)[number];
95
+ export type ProviderEngineBindingCandidates = Partial<ProviderEngineCapabilitySurface & ProviderEngineResidentSurface & {
96
+ readonly env: EnvContext;
97
+ readonly credential: CredentialContext;
98
+ readonly files: ProviderFilesContext;
99
+ readonly auth: AuthContext;
100
+ readonly handle: HandleContext;
101
+ }> & {
102
+ readonly request?: ProviderRequestContext;
103
+ readonly trace: TraceContext;
104
+ };
105
+ export interface ProviderEngineAttachmentInput {
106
+ readonly provider: ProviderDefinition;
107
+ readonly bindings: ProviderEngineBindingCandidates;
108
+ }
109
+ /** Attachment boundary shared by in-process development and remote RPC bridges. */
110
+ export interface ProviderEngine {
111
+ /**
112
+ * Which attachment this engine performs. Lets the server report a truthful
113
+ * mode at boot and compare an explicit engine object against a requested
114
+ * `engineMode`; omit for opaque host engines (reported as `custom`).
115
+ */
116
+ readonly kind?: ProviderEngineMode;
117
+ attach<TDeclaration extends object = Record<string, unknown>>(input: ProviderEngineAttachmentInput): ProviderContext<TDeclaration>;
118
+ }
119
+ /**
120
+ * Local engine attachment; deployed bridges implement the same interface with RPC clients.
121
+ *
122
+ * ADR-0011 makes the authenticated remote engine the only attachment, so this one
123
+ * is scheduled for removal — but not deprecated yet: the remote client ships in a
124
+ * later release, and deprecating the only working constructor before its
125
+ * replacement exists would flag every current caller with no fix available. Until
126
+ * then it stays the default, and the server reports each in-process boot as
127
+ * `provider_engine_mode` with `deprecated: true`.
128
+ */
129
+ export declare function createInProcessProviderEngine(): ProviderEngine;
package/dist/engine.js ADDED
@@ -0,0 +1,209 @@
1
+ import { readDiagnosticEnv } from "./runtime/diagnostic-env.js";
2
+ import { ProviderError } from "./errors.js";
3
+ import { APIFUSE__RESOLVER__2CAPTCHA__API_KEY, APIFUSE__RESOLVER__CAPMONSTER__API_KEY, APIFUSE__RESOLVER__CAPSOLVER__API_KEY, APIFUSE__RESOLVER__HYPERSOLUTIONS__API_KEY, } from "./runtime/resolver-config.js";
4
+ import { OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, OTEL_EXPORTER_OTLP_TRACES_HEADERS, OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME, } from "./runtime/otlp.js";
5
+ /** Versioned envelope protocol used by out-of-process engine transports. */
6
+ export const PROVIDER_ENGINE_PROTOCOL_VERSION = "provider-engine.v1";
7
+ /**
8
+ * Environment variable that selects how a provider process attaches its capability
9
+ * bindings. Engine-owned by prefix (`APIFUSE__ENGINE__*`): never declarable as a
10
+ * provider secret and never projected into `ctx.env`.
11
+ *
12
+ * Values are trimmed and case-folded; absent or blank means "unset". An
13
+ * unrecognized value is reported on the `provider_engine_mode` boot event and
14
+ * ignored — a deployment-authored typo must never turn into CrashLoopBackOff.
15
+ */
16
+ export const PROVIDER_ENGINE_MODE_ENV = "APIFUSE__ENGINE__MODE";
17
+ /** Credential names owned by the engine and forbidden in provider declarations. */
18
+ export const ENGINE_OWNED_PROXY_CREDENTIAL_ENV_NAMES = [
19
+ "APIFUSE__PROXY__SMARTPROXY_APP_KEY",
20
+ "APIFUSE__PROXY__NODEMAVEN_USERNAME",
21
+ "APIFUSE__PROXY__NODEMAVEN_PASSWORD",
22
+ ];
23
+ const ENGINE_OWNED_PROXY_CREDENTIAL_ENV_NAME_SET = new Set(ENGINE_OWNED_PROXY_CREDENTIAL_ENV_NAMES);
24
+ /**
25
+ * Environment names are compared case-insensitively: Windows resolves `otel_exporter_otlp_headers`
26
+ * to the same variable as `OTEL_EXPORTER_OTLP_HEADERS`, so a mixed-case alias must be treated as
27
+ * the engine-owned name it resolves to.
28
+ */
29
+ function canonicalEnvName(name) {
30
+ return name.toUpperCase();
31
+ }
32
+ export function isEngineOwnedProxyCredentialName(name) {
33
+ return ENGINE_OWNED_PROXY_CREDENTIAL_ENV_NAME_SET.has(canonicalEnvName(name));
34
+ }
35
+ /** Hosted resolver credentials owned by the engine and never projected to providers. */
36
+ export const ENGINE_OWNED_RESOLVER_CREDENTIAL_ENV_NAMES = [
37
+ APIFUSE__RESOLVER__2CAPTCHA__API_KEY,
38
+ APIFUSE__RESOLVER__CAPSOLVER__API_KEY,
39
+ APIFUSE__RESOLVER__CAPMONSTER__API_KEY,
40
+ APIFUSE__RESOLVER__HYPERSOLUTIONS__API_KEY,
41
+ ];
42
+ const ENGINE_OWNED_RESOLVER_CREDENTIAL_ENV_NAME_SET = new Set(ENGINE_OWNED_RESOLVER_CREDENTIAL_ENV_NAMES);
43
+ /**
44
+ * Engine variable a provider-declared secret name resolves to, or `undefined` when the
45
+ * name is not an engine-owned resolver credential. Provider-scoped Hyper aliases
46
+ * (`APIFUSE__PROVIDER__<ID>__HYPER_API_KEY`, measured on zozotown) map to the shared key.
47
+ */
48
+ export function engineOwnedResolverCredentialTarget(name) {
49
+ const canonical = canonicalEnvName(name);
50
+ if (ENGINE_OWNED_RESOLVER_CREDENTIAL_ENV_NAME_SET.has(canonical))
51
+ return canonical;
52
+ if (/^APIFUSE__PROVIDER__.+__HYPER_API_KEY$/u.test(canonical)) {
53
+ return APIFUSE__RESOLVER__HYPERSOLUTIONS__API_KEY;
54
+ }
55
+ return undefined;
56
+ }
57
+ export function isEngineOwnedResolverCredentialName(name) {
58
+ return engineOwnedResolverCredentialTarget(name) !== undefined;
59
+ }
60
+ /**
61
+ * Trace-export configuration owned by the engine and forbidden in provider
62
+ * declarations. The header variables carry collector credentials; the rest are
63
+ * engine deployment settings a provider has no reason to read.
64
+ */
65
+ export const ENGINE_OWNED_TELEMETRY_ENV_NAMES = [
66
+ OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
67
+ OTEL_EXPORTER_OTLP_ENDPOINT,
68
+ OTEL_EXPORTER_OTLP_TRACES_HEADERS,
69
+ OTEL_EXPORTER_OTLP_HEADERS,
70
+ OTEL_SERVICE_NAME,
71
+ OTEL_RESOURCE_ATTRIBUTES,
72
+ ];
73
+ const ENGINE_OWNED_TELEMETRY_ENV_NAME_SET = new Set(ENGINE_OWNED_TELEMETRY_ENV_NAMES);
74
+ export function isEngineOwnedTelemetryEnvName(name) {
75
+ return ENGINE_OWNED_TELEMETRY_ENV_NAME_SET.has(canonicalEnvName(name));
76
+ }
77
+ /** Engine control-plane configuration is never declarable or visible to provider code. */
78
+ function isEngineOwnedEngineEnvName(name) {
79
+ return canonicalEnvName(name).startsWith("APIFUSE__ENGINE__");
80
+ }
81
+ /**
82
+ * Hosted runtime settings the engine reads for OCR, STT, cache keying, and
83
+ * the CDP pool. Providers never own them: declarations are rejected
84
+ * and projections drop them, like the vendor credentials above.
85
+ */
86
+ export const ENGINE_OWNED_RUNTIME_ENV_NAMES = [
87
+ "APIFUSE__STT__CLOUDFLARE_API_TOKEN",
88
+ "APIFUSE__OCR__CLOUDFLARE_API_TOKEN",
89
+ "APIFUSE__OCR__API_KEY",
90
+ "APIFUSE__CLOUDFLARE__ACCOUNT_ID",
91
+ "APIFUSE__CACHE__KEY_PEPPER",
92
+ ];
93
+ const ENGINE_OWNED_RUNTIME_ENV_NAME_SET = new Set(ENGINE_OWNED_RUNTIME_ENV_NAMES);
94
+ /** CDP pool settings form a prefix family (`APIFUSE__CDP_POOL__URL` today); the whole prefix is engine-owned. */
95
+ const ENGINE_OWNED_CDP_POOL_ENV_PREFIX = "APIFUSE__CDP_POOL__";
96
+ export function isEngineOwnedRuntimeEnvName(name) {
97
+ const canonical = canonicalEnvName(name);
98
+ return (ENGINE_OWNED_RUNTIME_ENV_NAME_SET.has(canonical) ||
99
+ canonical.startsWith(ENGINE_OWNED_CDP_POOL_ENV_PREFIX));
100
+ }
101
+ /** Every environment name the engine owns: rejected in declarations and filtered from provider projections. */
102
+ export function isEngineOwnedEnvName(name) {
103
+ return (isEngineOwnedEngineEnvName(name) ||
104
+ isEngineOwnedProxyCredentialName(name) ||
105
+ isEngineOwnedResolverCredentialName(name) ||
106
+ isEngineOwnedRuntimeEnvName(name) ||
107
+ isEngineOwnedTelemetryEnvName(name));
108
+ }
109
+ /** Capture credentials in the engine host before constructing provider bindings. */
110
+ export function readEngineProxyCredentials(environment = process.env) {
111
+ return Object.fromEntries(ENGINE_OWNED_PROXY_CREDENTIAL_ENV_NAMES.flatMap((name) => {
112
+ const value = readDiagnosticEnv(name, environment)?.trim();
113
+ return value ? [[name, value]] : [];
114
+ }));
115
+ }
116
+ /** Build the exact environment projection permitted to enter a provider runtime. */
117
+ export function createProviderEnvironment(environment, declaredNames) {
118
+ return Object.fromEntries(declaredNames.flatMap((name) => {
119
+ if (isEngineOwnedEnvName(name))
120
+ return [];
121
+ const value = readDiagnosticEnv(name, environment);
122
+ return value === undefined ? [] : [[name, value]];
123
+ }));
124
+ }
125
+ export const PROVIDER_CAPABILITY_KEYS = [
126
+ "env",
127
+ "credential",
128
+ "http",
129
+ "files",
130
+ "native",
131
+ "cache",
132
+ "state",
133
+ "stealth",
134
+ "browser",
135
+ "auth",
136
+ "ocr",
137
+ "stt",
138
+ "resolver",
139
+ "handle",
140
+ ];
141
+ const CAPABILITY_KEY_SET = new Set(PROVIDER_CAPABILITY_KEYS);
142
+ function declaresCapability(provider, capability) {
143
+ if (capability === "credential" && provider.auth?.mode === "platform-managed")
144
+ return true;
145
+ return Object.hasOwn(provider, capability) && provider[capability] !== undefined;
146
+ }
147
+ function attachmentError(provider, capability) {
148
+ return new ProviderError(`Provider engine could not attach declared capability "${capability}" for provider "${provider.id}"`, {
149
+ code: "PROVIDER_ENGINE_ATTACHMENT_FAILED",
150
+ details: { providerId: provider.id, capability },
151
+ fix: `Configure the engine binding for "${capability}" before starting the provider.`,
152
+ });
153
+ }
154
+ function undeclaredCapabilityError(provider, capability) {
155
+ return new ProviderError(`Provider "${provider.id}" accessed undeclared capability "${capability}"; add the "${capability}" declaration`, {
156
+ code: "PROVIDER_CAPABILITY_UNDECLARED",
157
+ details: { providerId: provider.id, capability },
158
+ fix: `Add ${capability}: {} to the provider declaration, or remove the access.`,
159
+ });
160
+ }
161
+ function attachInProcess(input) {
162
+ const { provider, bindings } = input;
163
+ if (provider.runtimeTarget === "vanilla" && declaresCapability(provider, "native")) {
164
+ throw new ProviderError(`Provider "${provider.id}" cannot attach capability "native" to runtime target "vanilla"; native requires an engine-resident runtime`, {
165
+ code: "PROVIDER_RUNTIME_CAPABILITY_CONFLICT",
166
+ details: { providerId: provider.id, capability: "native", runtimeTarget: "vanilla" },
167
+ });
168
+ }
169
+ const context = { trace: bindings.trace };
170
+ if (bindings.request !== undefined)
171
+ context.request = bindings.request;
172
+ for (const capability of PROVIDER_CAPABILITY_KEYS) {
173
+ if (!declaresCapability(provider, capability))
174
+ continue;
175
+ const binding = bindings[capability];
176
+ if (binding === undefined || binding === null)
177
+ throw attachmentError(provider, capability);
178
+ context[capability] = binding;
179
+ }
180
+ return new Proxy(context, {
181
+ get(target, property, receiver) {
182
+ if (typeof property === "string" &&
183
+ CAPABILITY_KEY_SET.has(property) &&
184
+ !declaresCapability(provider, property)) {
185
+ throw undeclaredCapabilityError(provider, property);
186
+ }
187
+ return Reflect.get(target, property, receiver);
188
+ },
189
+ has(target, property) {
190
+ if (typeof property === "string" && CAPABILITY_KEY_SET.has(property)) {
191
+ return declaresCapability(provider, property);
192
+ }
193
+ return Reflect.has(target, property);
194
+ },
195
+ });
196
+ }
197
+ /**
198
+ * Local engine attachment; deployed bridges implement the same interface with RPC clients.
199
+ *
200
+ * ADR-0011 makes the authenticated remote engine the only attachment, so this one
201
+ * is scheduled for removal — but not deprecated yet: the remote client ships in a
202
+ * later release, and deprecating the only working constructor before its
203
+ * replacement exists would flag every current caller with no fix available. Until
204
+ * then it stays the default, and the server reports each in-process boot as
205
+ * `provider_engine_mode` with `deprecated: true`.
206
+ */
207
+ export function createInProcessProviderEngine() {
208
+ return { kind: "in-process", attach: attachInProcess };
209
+ }
@@ -0,0 +1,7 @@
1
+ import { type ProviderErrorObservability } from "./errors.js";
2
+ /**
3
+ * Extracts only own data properties from branded provider errors. In
4
+ * particular, descriptor reads reject options/observability accessors without
5
+ * invoking provider-controlled getters.
6
+ */
7
+ export declare function safeProviderErrorObservability(error: unknown): ProviderErrorObservability | undefined;
@@ -0,0 +1,61 @@
1
+ import { isProviderError } from "./errors.js";
2
+ const PROVIDER_OBSERVABILITY_TOKEN_PATTERN = /^[A-Za-z0-9_.-]{1,64}$/;
3
+ const PROVIDER_OBSERVABILITY_FINGERPRINT_PATTERN = /^[A-Fa-f0-9]{12}$/;
4
+ const MAX_PROVIDER_OBSERVABILITY_MESSAGE_LENGTH = 10_000_000;
5
+ /**
6
+ * Extracts only own data properties from branded provider errors. In
7
+ * particular, descriptor reads reject options/observability accessors without
8
+ * invoking provider-controlled getters.
9
+ */
10
+ export function safeProviderErrorObservability(error) {
11
+ if (!isProviderError(error))
12
+ return undefined;
13
+ let candidate;
14
+ let reason;
15
+ let fingerprint;
16
+ let messageLength;
17
+ try {
18
+ const optionsDescriptor = Object.getOwnPropertyDescriptor(error, "options");
19
+ if (optionsDescriptor === undefined || !Object.hasOwn(optionsDescriptor, "value")) {
20
+ return undefined;
21
+ }
22
+ const options = optionsDescriptor.value;
23
+ if (options === null || typeof options !== "object" || Array.isArray(options)) {
24
+ return undefined;
25
+ }
26
+ const observabilityDescriptor = Object.getOwnPropertyDescriptor(options, "observability");
27
+ if (observabilityDescriptor === undefined || !Object.hasOwn(observabilityDescriptor, "value")) {
28
+ return undefined;
29
+ }
30
+ candidate = observabilityDescriptor.value;
31
+ if (candidate === null || typeof candidate !== "object" || Array.isArray(candidate)) {
32
+ return undefined;
33
+ }
34
+ const ownValue = (key) => {
35
+ const descriptor = Object.getOwnPropertyDescriptor(candidate, key);
36
+ return descriptor && Object.hasOwn(descriptor, "value") ? descriptor.value : undefined;
37
+ };
38
+ reason = ownValue("reason");
39
+ fingerprint = ownValue("fingerprint");
40
+ messageLength = ownValue("messageLength");
41
+ }
42
+ catch {
43
+ return undefined;
44
+ }
45
+ const safe = {
46
+ ...(typeof reason === "string" && PROVIDER_OBSERVABILITY_TOKEN_PATTERN.test(reason)
47
+ ? { reason }
48
+ : {}),
49
+ ...(typeof fingerprint === "string" &&
50
+ PROVIDER_OBSERVABILITY_FINGERPRINT_PATTERN.test(fingerprint)
51
+ ? { fingerprint }
52
+ : {}),
53
+ ...(typeof messageLength === "number" &&
54
+ Number.isInteger(messageLength) &&
55
+ messageLength >= 0 &&
56
+ messageLength <= MAX_PROVIDER_OBSERVABILITY_MESSAGE_LENGTH
57
+ ? { messageLength }
58
+ : {}),
59
+ };
60
+ return Object.keys(safe).length > 0 ? safe : undefined;
61
+ }
@@ -0,0 +1,18 @@
1
+ import type { ProviderErrorCategory } from "./observability.js";
2
+ import type { ProviderErrorStatus } from "./types.js";
3
+ export declare const SDK_OWNED_PROVIDER_ERROR_CODES: Set<string>;
4
+ export declare const SDK_RUNTIME_OWNED_ERROR_CODES: Set<string>;
5
+ /** One registered upstream code: the status the SDK serves and who failed. */
6
+ export type SdkUpstreamErrorCodeRegistration = {
7
+ readonly status: ProviderErrorStatus;
8
+ readonly category: ProviderErrorCategory;
9
+ };
10
+ export declare const SDK_UPSTREAM_ERROR_CODE_REGISTRY: ReadonlyMap<string, SdkUpstreamErrorCodeRegistration>;
11
+ /**
12
+ * The category a registered upstream code carries when its `ProviderError`
13
+ * sets none. `undefined` for every other code, which keeps its existing
14
+ * default.
15
+ */
16
+ export declare function registeredUpstreamErrorCategory(code: string | undefined): ProviderErrorCategory | undefined;
17
+ export declare const SDK_STATUS_MAPPED_PROVIDER_ERROR_CODES: ReadonlyMap<string, ProviderErrorStatus>;
18
+ export declare const SDK_CANONICAL_ERROR_CODE_RETRYABILITY: ReadonlyMap<string, boolean>;