@apifuse/provider-sdk 2.2.0-beta.5 → 2.2.0-beta.51

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 (368) hide show
  1. package/AUTHORING.md +537 -33
  2. package/CHANGELOG.md +205 -1
  3. package/README.md +83 -22
  4. package/SUBMISSION.md +2 -2
  5. package/bin/apifuse-check.ts +165 -11
  6. package/bin/apifuse-dev.ts +57 -13
  7. package/bin/apifuse-migrate-operation-declaration.ts +55 -0
  8. package/bin/apifuse-migrate-shape.ts +202 -0
  9. package/bin/apifuse-pack-check.ts +22 -2
  10. package/bin/apifuse-pack-smoke.ts +57 -2
  11. package/bin/apifuse-pack-types.ts +357 -38
  12. package/bin/apifuse-perf.ts +14 -13
  13. package/bin/apifuse-record.ts +709 -72
  14. package/bin/apifuse-submit-check.ts +2344 -324
  15. package/bin/apifuse-sync-assets.ts +117 -0
  16. package/bin/submit-check-delimited-text.ts +50 -0
  17. package/dist/auth-turn/index.d.ts +3 -3
  18. package/dist/auth-turn/index.js +1 -1
  19. package/dist/auth.d.ts +14 -0
  20. package/dist/auth.js +67 -0
  21. package/dist/ceremonies/index.d.ts +16 -0
  22. package/dist/ceremonies/index.js +141 -36
  23. package/dist/cli/commands.d.ts +1 -1
  24. package/dist/cli/commands.js +27 -0
  25. package/dist/cli/create.d.ts +4 -1
  26. package/dist/cli/create.js +42 -37
  27. package/dist/cli/migrate-operation-declaration.d.ts +59 -0
  28. package/dist/cli/migrate-operation-declaration.js +1249 -0
  29. package/dist/cli/migrate-operation-shape.d.ts +44 -0
  30. package/dist/cli/migrate-operation-shape.js +113 -0
  31. package/dist/cli/migrate-provider-shape.d.ts +52 -0
  32. package/dist/cli/migrate-provider-shape.js +578 -0
  33. package/dist/cli/prompt-assets.d.ts +80 -0
  34. package/dist/cli/prompt-assets.js +743 -0
  35. package/dist/cli/templates/provider/AGENTS.md.tpl +17 -8
  36. package/dist/cli/templates/provider/Dockerfile.tpl +1 -1
  37. package/dist/cli/templates/provider/README.md.tpl +5 -5
  38. package/dist/cli/templates/provider/index.ts.tpl +6 -3
  39. package/dist/cli/templates/provider/operations/ping.ts.tpl +4 -1
  40. package/dist/cli/templates/provider/provider.json.tpl +6 -0
  41. package/dist/config/loader.d.ts +179 -16
  42. package/dist/config/loader.js +435 -127
  43. package/dist/contract-serialization.js +4 -8
  44. package/dist/contract-types.d.ts +12 -5
  45. package/dist/contract.js +24 -10
  46. package/dist/declaration-validation.d.ts +33 -0
  47. package/dist/declaration-validation.js +266 -0
  48. package/dist/define.d.ts +66 -29
  49. package/dist/define.js +778 -69
  50. package/dist/dev.d.ts +3 -0
  51. package/dist/dev.js +1 -1
  52. package/dist/engine.d.ts +78 -0
  53. package/dist/engine.js +133 -0
  54. package/dist/error-observability.d.ts +7 -0
  55. package/dist/error-observability.js +61 -0
  56. package/dist/error-resolution.d.ts +4 -0
  57. package/dist/error-resolution.js +122 -0
  58. package/dist/errors.d.ts +33 -0
  59. package/dist/errors.js +40 -0
  60. package/dist/fixture-sanitization.d.ts +28 -0
  61. package/dist/fixture-sanitization.js +227 -0
  62. package/dist/health-scenario.d.ts +1842 -0
  63. package/dist/health-scenario.js +624 -0
  64. package/dist/index.d.ts +21 -10
  65. package/dist/index.js +12 -7
  66. package/dist/lint.d.ts +23 -11
  67. package/dist/lint.js +572 -69
  68. package/dist/native-address.d.ts +43 -0
  69. package/dist/native-address.js +281 -0
  70. package/dist/native-egress-policy.d.ts +31 -0
  71. package/dist/native-egress-policy.js +288 -0
  72. package/dist/observability.d.ts +5 -2
  73. package/dist/observability.js +48 -1
  74. package/dist/provider.d.ts +10 -2
  75. package/dist/provider.js +4 -1
  76. package/dist/runtime/auth-flow.d.ts +5 -1
  77. package/dist/runtime/auth-flow.js +6 -0
  78. package/dist/runtime/browser.d.ts +1 -0
  79. package/dist/runtime/browser.js +492 -49
  80. package/dist/runtime/cache.d.ts +1 -0
  81. package/dist/runtime/cache.js +169 -15
  82. package/dist/runtime/choice-wordlist.d.ts +9 -0
  83. package/dist/runtime/choice-wordlist.js +138 -0
  84. package/dist/runtime/choice.d.ts +13 -1
  85. package/dist/runtime/choice.js +490 -102
  86. package/dist/runtime/chrome149-header-order.d.ts +58 -0
  87. package/dist/runtime/chrome149-header-order.js +289 -0
  88. package/dist/runtime/env.js +12 -0
  89. package/dist/runtime/executor.d.ts +3 -2
  90. package/dist/runtime/executor.js +26 -25
  91. package/dist/runtime/http.d.ts +1 -0
  92. package/dist/runtime/http.js +515 -53
  93. package/dist/runtime/insights.js +2 -2
  94. package/dist/runtime/instrumentation.d.ts +2 -2
  95. package/dist/runtime/instrumentation.js +366 -8
  96. package/dist/runtime/native-network-errors.d.ts +33 -0
  97. package/dist/runtime/native-network-errors.js +69 -0
  98. package/dist/runtime/native-network.d.ts +96 -0
  99. package/dist/runtime/native-network.js +1232 -0
  100. package/dist/runtime/ocr.d.ts +29 -0
  101. package/dist/runtime/ocr.js +440 -0
  102. package/dist/runtime/otlp.d.ts +71 -2
  103. package/dist/runtime/otlp.js +397 -16
  104. package/dist/runtime/proxy-errors.js +6 -2
  105. package/dist/runtime/proxy-nodemaven.d.ts +56 -0
  106. package/dist/runtime/proxy-nodemaven.js +146 -0
  107. package/dist/runtime/proxy-telemetry.d.ts +80 -1
  108. package/dist/runtime/proxy-telemetry.js +154 -47
  109. package/dist/runtime/redirects.d.ts +29 -0
  110. package/dist/runtime/redirects.js +36 -0
  111. package/dist/runtime/redis.d.ts +1 -1
  112. package/dist/runtime/redis.js +4 -2
  113. package/dist/runtime/request-options.d.ts +68 -1
  114. package/dist/runtime/request-options.js +548 -0
  115. package/dist/runtime/resolver-config.d.ts +6 -0
  116. package/dist/runtime/resolver-config.js +6 -0
  117. package/dist/runtime/resolver-public.d.ts +1 -0
  118. package/dist/runtime/resolver-public.js +1 -0
  119. package/dist/runtime/resolver-shared.d.ts +14 -0
  120. package/dist/runtime/resolver-shared.js +12 -0
  121. package/dist/runtime/resolver-vendors/bindings.d.ts +48 -0
  122. package/dist/runtime/resolver-vendors/bindings.js +40 -0
  123. package/dist/runtime/resolver-vendors/browser.d.ts +22 -0
  124. package/dist/runtime/resolver-vendors/browser.js +377 -0
  125. package/dist/runtime/resolver-vendors/capsolver.d.ts +22 -0
  126. package/dist/runtime/resolver-vendors/capsolver.js +531 -0
  127. package/dist/runtime/resolver-vendors/hosts.d.ts +2 -0
  128. package/dist/runtime/resolver-vendors/hosts.js +33 -0
  129. package/dist/runtime/resolver-vendors/twocaptcha.d.ts +24 -0
  130. package/dist/runtime/resolver-vendors/twocaptcha.js +408 -0
  131. package/dist/runtime/resolver-vendors/types.d.ts +94 -0
  132. package/dist/runtime/resolver-vendors/types.js +96 -0
  133. package/dist/runtime/resolver.d.ts +72 -0
  134. package/dist/runtime/resolver.js +771 -0
  135. package/dist/runtime/secrets.d.ts +27 -0
  136. package/dist/runtime/secrets.js +51 -0
  137. package/dist/runtime/state.d.ts +3 -0
  138. package/dist/runtime/state.js +277 -71
  139. package/dist/runtime/stealth-cookies.d.ts +20 -0
  140. package/dist/runtime/stealth-cookies.js +111 -0
  141. package/dist/runtime/stealth.d.ts +41 -5
  142. package/dist/runtime/stealth.js +997 -291
  143. package/dist/runtime/stt.js +1 -12
  144. package/dist/runtime/timeout.d.ts +5 -0
  145. package/dist/runtime/timeout.js +12 -0
  146. package/dist/runtime/trace-config.d.ts +12 -0
  147. package/dist/runtime/trace-config.js +62 -0
  148. package/dist/runtime/trace.d.ts +5 -0
  149. package/dist/runtime/trace.js +43 -10
  150. package/dist/serve.d.ts +1 -1
  151. package/dist/serve.js +1 -1
  152. package/dist/server/error-observability.d.ts +1 -0
  153. package/dist/server/error-observability.js +1 -0
  154. package/dist/server/index.d.ts +5 -2
  155. package/dist/server/index.js +2 -2
  156. package/dist/server/self-test-input-tokens.d.ts +2 -1
  157. package/dist/server/self-test-input-tokens.js +18 -14
  158. package/dist/server/self-test.d.ts +14 -3
  159. package/dist/server/self-test.js +129 -58
  160. package/dist/server/serve-implementation.d.ts +230 -0
  161. package/dist/server/serve-implementation.js +2265 -0
  162. package/dist/server/serve.d.ts +1 -70
  163. package/dist/server/serve.js +1 -1131
  164. package/dist/server/trace-output.d.ts +6 -0
  165. package/dist/server/trace-output.js +79 -0
  166. package/dist/server/types.d.ts +30 -5
  167. package/dist/server/types.js +13 -1
  168. package/dist/stateful/errors.d.ts +19 -0
  169. package/dist/stateful/errors.js +24 -0
  170. package/dist/stateful/http-provider-event-emitter.d.ts +40 -0
  171. package/dist/stateful/http-provider-event-emitter.js +237 -0
  172. package/dist/stateful/http-session-owner-registry.d.ts +44 -0
  173. package/dist/stateful/http-session-owner-registry.js +210 -0
  174. package/dist/stateful/index.d.ts +18 -0
  175. package/dist/stateful/index.js +18 -0
  176. package/dist/stateful/provider-event-delivery-failures.d.ts +32 -0
  177. package/dist/stateful/provider-event-delivery-failures.js +43 -0
  178. package/dist/stateful/provider-event-pipeline-metrics.d.ts +46 -0
  179. package/dist/stateful/provider-event-pipeline-metrics.js +48 -0
  180. package/dist/stateful/provider-event-pipeline.d.ts +50 -0
  181. package/dist/stateful/provider-event-pipeline.js +1 -0
  182. package/dist/stateful/provider-events.d.ts +101 -0
  183. package/dist/stateful/provider-events.js +289 -0
  184. package/dist/stateful/session-key.d.ts +15 -0
  185. package/dist/stateful/session-key.js +86 -0
  186. package/dist/stateful/stateful-provider-adapter-context.d.ts +5 -0
  187. package/dist/stateful/stateful-provider-adapter-context.js +42 -0
  188. package/dist/stateful/stateful-provider-adapter-metrics.d.ts +15 -0
  189. package/dist/stateful/stateful-provider-adapter-metrics.js +21 -0
  190. package/dist/stateful/stateful-provider-adapter.d.ts +98 -0
  191. package/dist/stateful/stateful-provider-adapter.js +287 -0
  192. package/dist/stateful/stateful-provider-observability.d.ts +62 -0
  193. package/dist/stateful/stateful-provider-observability.js +161 -0
  194. package/dist/stateful/stateful-provider-owner-forwarder.d.ts +41 -0
  195. package/dist/stateful/stateful-provider-owner-forwarder.js +215 -0
  196. package/dist/stateful/stateful-provider-runtime-context.d.ts +32 -0
  197. package/dist/stateful/stateful-provider-runtime-context.js +60 -0
  198. package/dist/stateful/stateful-provider-runtime-executor.d.ts +34 -0
  199. package/dist/stateful/stateful-provider-runtime-executor.js +52 -0
  200. package/dist/stateful/stateful-provider-session-routing.d.ts +67 -0
  201. package/dist/stateful/stateful-provider-session-routing.js +345 -0
  202. package/dist/stateful/stateful-provider-session-runtime.d.ts +98 -0
  203. package/dist/stateful/stateful-provider-session-runtime.js +245 -0
  204. package/dist/stateful-signing.d.ts +18 -0
  205. package/dist/stateful-signing.js +27 -0
  206. package/dist/stealth/profiles.d.ts +9 -4
  207. package/dist/stealth/profiles.js +160 -211
  208. package/dist/stream-evidence.d.ts +74 -0
  209. package/dist/stream-evidence.js +785 -0
  210. package/dist/stream.js +7 -1
  211. package/dist/testing/index.d.ts +2 -1
  212. package/dist/testing/index.js +2 -1
  213. package/dist/testing/run.d.ts +32 -2
  214. package/dist/testing/run.js +489 -21
  215. package/dist/trace-sanitization.d.ts +5 -0
  216. package/dist/trace-sanitization.js +45 -0
  217. package/dist/types.d.ts +673 -131
  218. package/dist/types.js +1 -0
  219. package/package.json +45 -5
  220. package/src/auth-turn/index.ts +1 -1
  221. package/src/auth.ts +118 -0
  222. package/src/ceremonies/index.ts +189 -46
  223. package/src/cli/__tests__/fixtures/migrate-operation-declaration/approval-override.ts.txt +6 -0
  224. package/src/cli/__tests__/fixtures/migrate-operation-declaration/codemod-syntax.ts.txt +3 -0
  225. package/src/cli/__tests__/fixtures/migrate-operation-declaration/connection-precedence.ts.txt +10 -0
  226. package/src/cli/__tests__/fixtures/migrate-operation-declaration/docs-conflict.ts.txt +8 -0
  227. package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-hoisted-array-spread.ts.txt +15 -0
  228. package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-imported-array-spread.ts.txt +9 -0
  229. package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-map.ts.txt +5 -0
  230. package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-mixed-array-spread.ts.txt +24 -0
  231. package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-operation.ts.txt +16 -0
  232. package/src/cli/__tests__/fixtures/migrate-operation-declaration/factory-map.ts.txt +3 -0
  233. package/src/cli/__tests__/fixtures/migrate-operation-declaration/hoist-all.ts.txt +31 -0
  234. package/src/cli/__tests__/fixtures/migrate-operation-declaration/hoisted-const.ts.txt +11 -0
  235. package/src/cli/__tests__/fixtures/migrate-operation-declaration/imported-spread.ts.txt +11 -0
  236. package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-map.ts.txt +11 -0
  237. package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-cast-tail.ts.txt +21 -0
  238. package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-ekitan.ts.txt +11 -0
  239. package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-override.ts.txt +14 -0
  240. package/src/cli/__tests__/fixtures/migrate-operation-declaration/missing-english-locale.ts.txt +7 -0
  241. package/src/cli/__tests__/fixtures/migrate-operation-declaration/no-safety.ts.txt +6 -0
  242. package/src/cli/__tests__/fixtures/migrate-operation-declaration/non-literal.ts.txt +7 -0
  243. package/src/cli/__tests__/fixtures/migrate-operation-declaration/redundant-approval.ts.txt +6 -0
  244. package/src/cli/__tests__/fixtures/migrate-operation-declaration/safety-conflict.ts.txt +7 -0
  245. package/src/cli/__tests__/fixtures/migrate-operation-declaration/stream.ts.txt +7 -0
  246. package/src/cli/__tests__/fixtures/migrate-operation-declaration/tool-router-spread.ts.txt +15 -0
  247. package/src/cli/__tests__/fixtures/migrate-operation-declaration/unparseable.ts.txt +4 -0
  248. package/src/cli/__tests__/fixtures/migrate-operation-declaration/verbatim-template.ts.txt +12 -0
  249. package/src/cli/commands.ts +33 -0
  250. package/src/cli/create.ts +50 -37
  251. package/src/cli/migrate-operation-declaration.ts +1751 -0
  252. package/src/cli/migrate-operation-shape.ts +184 -0
  253. package/src/cli/migrate-provider-shape.ts +772 -0
  254. package/src/cli/prompt-assets.ts +865 -0
  255. package/src/cli/templates/provider/AGENTS.md.tpl +17 -8
  256. package/src/cli/templates/provider/Dockerfile.tpl +1 -1
  257. package/src/cli/templates/provider/README.md.tpl +5 -5
  258. package/src/cli/templates/provider/index.ts.tpl +6 -3
  259. package/src/cli/templates/provider/operations/ping.ts.tpl +4 -1
  260. package/src/cli/templates/provider/provider.json.tpl +6 -0
  261. package/src/config/loader.ts +690 -163
  262. package/src/contract-serialization.ts +5 -7
  263. package/src/contract-types.ts +12 -5
  264. package/src/contract.ts +24 -10
  265. package/src/declaration-validation.ts +330 -0
  266. package/src/define.ts +1048 -131
  267. package/src/dev.ts +4 -1
  268. package/src/engine.ts +279 -0
  269. package/src/error-observability.ts +64 -0
  270. package/src/error-resolution.ts +127 -0
  271. package/src/errors.ts +68 -0
  272. package/src/fixture-sanitization.ts +264 -0
  273. package/src/health-scenario.ts +875 -0
  274. package/src/index.ts +220 -13
  275. package/src/lint.ts +698 -90
  276. package/src/native-address.ts +340 -0
  277. package/src/native-egress-policy.ts +358 -0
  278. package/src/observability.ts +51 -1
  279. package/src/provider.ts +161 -3
  280. package/src/runtime/auth-flow.ts +12 -0
  281. package/src/runtime/browser.ts +661 -63
  282. package/src/runtime/cache.ts +189 -14
  283. package/src/runtime/choice-wordlist.ts +145 -0
  284. package/src/runtime/choice.ts +631 -120
  285. package/src/runtime/chrome149-header-order.ts +330 -0
  286. package/src/runtime/env.ts +13 -0
  287. package/src/runtime/executor.ts +43 -31
  288. package/src/runtime/http.ts +641 -61
  289. package/src/runtime/insights.ts +2 -2
  290. package/src/runtime/instrumentation.ts +520 -15
  291. package/src/runtime/native-network-errors.ts +99 -0
  292. package/src/runtime/native-network.ts +1605 -0
  293. package/src/runtime/ocr.ts +523 -0
  294. package/src/runtime/otlp.ts +467 -21
  295. package/src/runtime/proxy-errors.ts +12 -4
  296. package/src/runtime/proxy-nodemaven.ts +221 -0
  297. package/src/runtime/proxy-telemetry.ts +244 -75
  298. package/src/runtime/redirects.ts +66 -0
  299. package/src/runtime/redis.ts +7 -2
  300. package/src/runtime/request-options.ts +680 -1
  301. package/src/runtime/resolver-config.ts +6 -0
  302. package/src/runtime/resolver-public.ts +23 -0
  303. package/src/runtime/resolver-shared.ts +33 -0
  304. package/src/runtime/resolver-vendors/bindings.ts +56 -0
  305. package/src/runtime/resolver-vendors/browser.ts +533 -0
  306. package/src/runtime/resolver-vendors/capsolver.ts +707 -0
  307. package/src/runtime/resolver-vendors/hosts.ts +38 -0
  308. package/src/runtime/resolver-vendors/twocaptcha.ts +540 -0
  309. package/src/runtime/resolver-vendors/types.ts +212 -0
  310. package/src/runtime/resolver.ts +1157 -0
  311. package/src/runtime/secrets.ts +64 -0
  312. package/src/runtime/state.ts +394 -77
  313. package/src/runtime/stealth-cookies.ts +132 -0
  314. package/src/runtime/stealth.ts +1280 -336
  315. package/src/runtime/stt.ts +1 -19
  316. package/src/runtime/timeout.ts +18 -0
  317. package/src/runtime/trace-config.ts +78 -0
  318. package/src/runtime/trace.ts +57 -17
  319. package/src/serve.ts +6 -1
  320. package/src/server/error-observability.ts +1 -0
  321. package/src/server/index.ts +34 -2
  322. package/src/server/self-test-input-tokens.ts +29 -14
  323. package/src/server/self-test.ts +191 -68
  324. package/src/server/serve-implementation.ts +3378 -0
  325. package/src/server/serve.ts +1 -1632
  326. package/src/server/trace-output.ts +129 -0
  327. package/src/server/types.ts +13 -1
  328. package/src/stateful/README.md +146 -0
  329. package/src/stateful/errors.ts +35 -0
  330. package/src/stateful/http-provider-event-emitter.ts +314 -0
  331. package/src/stateful/http-session-owner-registry.ts +306 -0
  332. package/src/stateful/index.ts +18 -0
  333. package/src/stateful/provider-event-delivery-failures.ts +80 -0
  334. package/src/stateful/provider-event-pipeline-metrics.ts +95 -0
  335. package/src/stateful/provider-event-pipeline.ts +61 -0
  336. package/src/stateful/provider-events.ts +462 -0
  337. package/src/stateful/session-key.ts +111 -0
  338. package/src/stateful/stateful-provider-adapter-context.ts +59 -0
  339. package/src/stateful/stateful-provider-adapter-metrics.ts +48 -0
  340. package/src/stateful/stateful-provider-adapter.ts +562 -0
  341. package/src/stateful/stateful-provider-observability.ts +261 -0
  342. package/src/stateful/stateful-provider-owner-forwarder.ts +287 -0
  343. package/src/stateful/stateful-provider-runtime-context.ts +92 -0
  344. package/src/stateful/stateful-provider-runtime-executor.ts +96 -0
  345. package/src/stateful/stateful-provider-session-routing.ts +546 -0
  346. package/src/stateful/stateful-provider-session-runtime.ts +403 -0
  347. package/src/stateful-signing.ts +46 -0
  348. package/src/stealth/profiles.ts +202 -231
  349. package/src/stream-evidence.ts +988 -0
  350. package/src/stream.ts +8 -1
  351. package/src/testing/index.ts +10 -1
  352. package/src/testing/run.ts +658 -15
  353. package/src/trace-sanitization.ts +63 -0
  354. package/src/types.ts +788 -174
  355. package/dist/cli/templates/provider/CLAUDE.md.tpl +0 -1
  356. package/src/cli/templates/provider/CLAUDE.md.tpl +0 -1
  357. /package/dist/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
  358. /package/dist/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
  359. /package/dist/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
  360. /package/dist/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
  361. /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
  362. /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
  363. /package/src/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
  364. /package/src/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
  365. /package/src/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
  366. /package/src/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
  367. /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
  368. /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
@@ -1,57 +1,29 @@
1
+ import { createRequire } from "node:module";
2
+
3
+ import type { BrowserProfile, EmulationOS } from "wreq-js";
4
+
1
5
  import { SDKError } from "../errors.js";
2
- import type { StealthPlatform, StealthProfile } from "../types.js";
6
+ import type {
7
+ StealthBrowser,
8
+ StealthProfile,
9
+ StealthProfileDescriptor,
10
+ StealthProfileSelection,
11
+ StealthOS,
12
+ } from "../types.js";
3
13
 
4
- type StealthProfileDefinition = Omit<StealthProfile, "name" | "platform"> & {
5
- platform: StealthPlatform;
6
- };
14
+ type StealthProfileDefinition = Omit<StealthProfile, "browser" | "os">;
15
+ type WreqProfileApi = Pick<typeof import("wreq-js"), "getEmulationHeaders" | "getProfiles">;
7
16
 
8
- const CHROMIUM_HEADER_ORDER = [
9
- ":method",
10
- ":authority",
11
- ":scheme",
12
- ":path",
13
- "user-agent",
14
- "accept",
15
- "accept-encoding",
16
- "accept-language",
17
- "cache-control",
18
- "pragma",
19
- "cookie",
20
- "sec-ch-ua",
21
- "sec-ch-ua-mobile",
22
- "sec-ch-ua-platform",
23
- ];
17
+ const requireModule = createRequire(import.meta.url);
18
+ let wreqProfileApi: WreqProfileApi | undefined;
24
19
 
25
- const FIREFOX_HEADER_ORDER = [
26
- ":method",
27
- ":path",
28
- ":authority",
29
- ":scheme",
30
- "user-agent",
31
- "accept",
32
- "accept-language",
33
- "accept-encoding",
34
- "referer",
35
- "cookie",
36
- "upgrade-insecure-requests",
37
- "sec-fetch-dest",
38
- "sec-fetch-mode",
39
- "sec-fetch-site",
40
- "sec-fetch-user",
41
- ];
20
+ function getWreqProfileApi(): WreqProfileApi {
21
+ wreqProfileApi ??= requireModule("wreq-js") as WreqProfileApi;
22
+ return wreqProfileApi;
23
+ }
42
24
 
43
- const SAFARI_HEADER_ORDER = [
44
- ":method",
45
- ":scheme",
46
- ":path",
47
- ":authority",
48
- "accept",
49
- "user-agent",
50
- "accept-language",
51
- "accept-encoding",
52
- "cookie",
53
- "upgrade-insecure-requests",
54
- ];
25
+ export const DEFAULT_STEALTH_BROWSER = "chrome" as const;
26
+ export const DEFAULT_STEALTH_OS = "macos" as const;
55
27
 
56
28
  const CHROMIUM_H2_SETTINGS = {
57
29
  HEADER_TABLE_SIZE: 65536,
@@ -68,7 +40,7 @@ const FIREFOX_H2_SETTINGS = {
68
40
  };
69
41
 
70
42
  const SAFARI_H2_SETTINGS = {
71
- HEADER_TABLE_SIZE: 4096,
43
+ // Safari 17 also sends a connection-level WINDOW_UPDATE increment of 10485760.
72
44
  ENABLE_PUSH: 0,
73
45
  INITIAL_WINDOW_SIZE: 4194304,
74
46
  MAX_CONCURRENT_STREAMS: 100,
@@ -81,212 +53,211 @@ const FIREFOX_JA3 =
81
53
  const SAFARI_JA3 =
82
54
  "771,4865-4866-4867-49196-49195-52393-49200-49199-49188-49192-159-158-107-103-57-51-157-156-61-60-53-47-255,0-23-65281-10-11-16-5-13-18-51-45-43-27,29-23-24-25,0";
83
55
 
84
- function createProfile(name: string, definition: StealthProfileDefinition): StealthProfile {
85
- return {
86
- name,
87
- platform: definition.platform,
88
- version: definition.version,
89
- userAgent: definition.userAgent,
90
- tlsClientIdentifier: definition.tlsClientIdentifier,
91
- ja3: definition.ja3,
92
- ja4: definition.ja4,
93
- h2Settings: definition.h2Settings ? { ...definition.h2Settings } : undefined,
94
- headerOrder: definition.headerOrder ? [...definition.headerOrder] : undefined,
95
- };
56
+ const SUPPORTED_STEALTH_PROFILES: readonly StealthProfileDescriptor[] = [
57
+ { browser: "chrome", os: "windows" },
58
+ { browser: "chrome", os: "macos" },
59
+ { browser: "chrome", os: "linux" },
60
+ { browser: "firefox", os: "windows" },
61
+ { browser: "firefox", os: "macos" },
62
+ { browser: "firefox", os: "linux" },
63
+ { browser: "safari", os: "macos" },
64
+ { browser: "safari", os: "ios" },
65
+ ];
66
+
67
+ const DESKTOP_OSES = new Set<StealthOS>(["windows", "macos", "linux"]);
68
+
69
+ function structuredReplacement(browser: StealthBrowser, os: StealthOS): string {
70
+ return `stealth: { browser: "${browser}", os: "${os}" }`;
96
71
  }
97
72
 
98
- function extractBrowserMajorVersion(profile: StealthProfile): string {
99
- const chromeVersion = profile.userAgent.match(/Chrome\/(\d+)/)?.[1];
100
- if (chromeVersion) {
101
- return chromeVersion;
73
+ /** Internal detector used to keep version-pinned string failures actionable. */
74
+ export function getVersionPinnedStealthReplacement(name: string): string | undefined {
75
+ if (/^(?:chrome|chromium|edge)[-_]\d/i.test(name)) {
76
+ return structuredReplacement("chrome", DEFAULT_STEALTH_OS);
102
77
  }
103
-
104
- const identifierVersion = profile.tlsClientIdentifier?.match(/(\d+)(?!.*\d)/)?.[1];
105
- if (identifierVersion) {
106
- return identifierVersion;
78
+ if (/^firefox[-_]\d/i.test(name)) {
79
+ return structuredReplacement("firefox", DEFAULT_STEALTH_OS);
80
+ }
81
+ if (/^(?:ios[-_]safari|safari[-_](?:ios|ipad))[-_]\d/i.test(name)) {
82
+ return structuredReplacement("safari", "ios");
83
+ }
84
+ if (/^safari[-_]\d/i.test(name)) {
85
+ return structuredReplacement("safari", DEFAULT_STEALTH_OS);
107
86
  }
87
+ return undefined;
88
+ }
108
89
 
109
- return profile.version.split(".")[0] ?? profile.version;
90
+ function rejectStringSelection(name: string): never {
91
+ const replacement = getVersionPinnedStealthReplacement(name);
92
+ if (replacement) {
93
+ throw new SDKError(
94
+ `Stealth profile "${name}" pins a browser version and is not supported. Use ${replacement}.`,
95
+ { code: "STEALTH_VERSION_PIN_UNSUPPORTED" },
96
+ );
97
+ }
98
+ throw new SDKError(
99
+ `Stealth profile names are no longer supported: "${name}". Use structured browser/os options.`,
100
+ { code: "STEALTH_PROFILE_NAME_UNSUPPORTED" },
101
+ );
110
102
  }
111
103
 
112
- function toPlatformHeaderValue(platform: StealthPlatform): string {
113
- switch (platform) {
114
- case "macos":
115
- return '"macOS"';
116
- case "windows":
117
- return '"Windows"';
118
- case "linux":
119
- return '"Linux"';
120
- case "android":
121
- return '"Android"';
122
- case "ios":
123
- return '"iOS"';
104
+ function assertSupportedDescriptor(browser: StealthBrowser, os: StealthOS): void {
105
+ const supported =
106
+ (browser === "chrome" && DESKTOP_OSES.has(os)) ||
107
+ (browser === "firefox" && DESKTOP_OSES.has(os)) ||
108
+ (browser === "safari" && (os === "macos" || os === "ios"));
109
+ if (!supported) {
110
+ throw new SDKError(
111
+ `Unsupported stealth browser/OS combination: ${browser}/${os}. ` +
112
+ "Chrome and Firefox support windows, macos, and linux; Safari supports macos and ios.",
113
+ { code: "STEALTH_PROFILE_UNAVAILABLE" },
114
+ );
124
115
  }
125
116
  }
126
117
 
127
- export function generateLayer2Headers(profile: StealthProfile): Record<string, string> {
128
- const headers: Record<string, string> = {
129
- "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8",
130
- };
118
+ /** Resolve omitted axes and validate that the resulting pair is supported. */
119
+ export function resolveStealthProfileSelection(
120
+ selection: StealthProfileSelection | undefined,
121
+ base?: StealthProfileDescriptor,
122
+ ): StealthProfileDescriptor {
123
+ if (typeof selection === "string") rejectStringSelection(selection);
124
+ if (selection !== undefined && (typeof selection !== "object" || selection === null)) {
125
+ throw new SDKError("Stealth profile selection must use structured browser/os options.");
126
+ }
127
+ const unsafeSelection = selection as
128
+ | (Record<string, unknown> & { browser?: unknown; os?: unknown })
129
+ | undefined;
130
+ if (unsafeSelection && "profile" in unsafeSelection) {
131
+ if (typeof unsafeSelection.profile === "string") rejectStringSelection(unsafeSelection.profile);
132
+ throw new SDKError(
133
+ "stealth.profile is no longer supported. Use stealth.browser and stealth.os.",
134
+ { code: "STEALTH_PROFILE_NAME_UNSUPPORTED" },
135
+ );
136
+ }
131
137
 
132
- const identifier = profile.tlsClientIdentifier?.toLowerCase() ?? "";
133
- const majorVersion = extractBrowserMajorVersion(profile);
138
+ const browser = unsafeSelection?.browser ?? base?.browser ?? DEFAULT_STEALTH_BROWSER;
139
+ if (browser !== "chrome" && browser !== "firefox" && browser !== "safari") {
140
+ throw new SDKError(`Unsupported stealth browser: ${String(browser)}`);
141
+ }
142
+ const browserChanged =
143
+ base !== undefined && unsafeSelection?.browser !== undefined && browser !== base.browser;
144
+ const os =
145
+ unsafeSelection?.os ?? (browserChanged ? DEFAULT_STEALTH_OS : base?.os) ?? DEFAULT_STEALTH_OS;
146
+ if (os !== "windows" && os !== "macos" && os !== "linux" && os !== "ios") {
147
+ throw new SDKError(`Unsupported stealth OS: ${String(os)}`);
148
+ }
149
+ assertSupportedDescriptor(browser, os);
150
+ return { browser, os } as StealthProfileDescriptor;
151
+ }
134
152
 
135
- if (identifier.startsWith("chrome_") || identifier.startsWith("edge_")) {
136
- const isEdge = identifier.startsWith("edge_") || /\bEdg\//.test(profile.userAgent);
137
- headers["Sec-Ch-Ua"] = isEdge
138
- ? `"Chromium";v="${majorVersion}", "Microsoft Edge";v="${majorVersion}", "Not)A;Brand";v="99"`
139
- : `"Chromium";v="${majorVersion}", "Google Chrome";v="${majorVersion}", "Not)A;Brand";v="99"`;
140
- headers["Sec-Ch-Ua-Platform"] = toPlatformHeaderValue(profile.platform);
141
- headers["Sec-Ch-Ua-Mobile"] =
142
- profile.platform === "android" || profile.platform === "ios" ? "?1" : "?0";
153
+ /** Resolve the newest Chromium build exposed by the exactly pinned wreq-js package. */
154
+ function resolveLatestChromiumProfile(): {
155
+ readonly wreqName: BrowserProfile;
156
+ readonly version: string;
157
+ } {
158
+ const { getProfiles } = getWreqProfileApi();
159
+ let newest: { name: BrowserProfile; version: number } | undefined;
160
+ for (const name of getProfiles()) {
161
+ const match = /^chrome_(\d+)$/.exec(name);
162
+ if (!match) continue;
163
+ const version = Number(match[1]);
164
+ if (!newest || version > newest.version) newest = { name, version };
143
165
  }
166
+ if (!newest) {
167
+ throw new SDKError("wreq-js exposes no chrome_<version> emulation profile.", {
168
+ code: "STEALTH_PROFILE_UNAVAILABLE",
169
+ });
170
+ }
171
+ return { wreqName: newest.name, version: `${newest.version}.0.0.0` };
172
+ }
144
173
 
145
- return headers;
174
+ /** Read the identity wreq itself emits so the accessor and transport cannot diverge. */
175
+ function emulationUserAgent(profile: BrowserProfile, os: EmulationOS): string {
176
+ for (const [name, value] of getWreqProfileApi().getEmulationHeaders(profile, os)) {
177
+ if (String(name).toLowerCase() === "user-agent") return String(value);
178
+ }
179
+ throw new SDKError(`wreq-js profile ${profile} exposes no user-agent header.`, {
180
+ code: "STEALTH_PROFILE_UNAVAILABLE",
181
+ });
146
182
  }
147
183
 
148
- const STEALTH_PROFILE_ALIASES: Record<string, string> = {
149
- "chrome-desktop": "chrome-146",
150
- };
184
+ function createProfile(
185
+ descriptor: StealthProfileDescriptor,
186
+ definition: StealthProfileDefinition,
187
+ ): StealthProfile {
188
+ return {
189
+ ...descriptor,
190
+ ...definition,
191
+ h2Settings: definition.h2Settings ? { ...definition.h2Settings } : undefined,
192
+ };
193
+ }
151
194
 
152
- const STEALTH_PROFILES: Record<string, StealthProfile> = {
153
- "chrome-146": createProfile("chrome-146", {
154
- platform: "macos",
155
- version: "146.0.0.0",
156
- userAgent:
157
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
158
- tlsClientIdentifier: "chrome_146",
159
- ja3: CHROMIUM_JA3,
160
- h2Settings: CHROMIUM_H2_SETTINGS,
161
- headerOrder: CHROMIUM_HEADER_ORDER,
162
- }),
163
- "firefox-147": createProfile("firefox-147", {
164
- platform: "macos",
165
- version: "147.0",
166
- userAgent:
167
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0",
168
- tlsClientIdentifier: "firefox_147",
169
- ja3: FIREFOX_JA3,
170
- h2Settings: FIREFOX_H2_SETTINGS,
171
- headerOrder: FIREFOX_HEADER_ORDER,
172
- }),
173
- "firefox-135": createProfile("firefox-135", {
174
- platform: "macos",
175
- version: "135.0",
176
- userAgent:
177
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:135.0) Gecko/20100101 Firefox/135.0",
178
- tlsClientIdentifier: "firefox_135",
179
- ja3: FIREFOX_JA3,
180
- h2Settings: FIREFOX_H2_SETTINGS,
181
- headerOrder: FIREFOX_HEADER_ORDER,
182
- }),
183
- "firefox-133": createProfile("firefox-133", {
184
- platform: "macos",
185
- version: "133.0",
186
- userAgent:
187
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
188
- tlsClientIdentifier: "firefox_133",
189
- ja3: FIREFOX_JA3,
190
- h2Settings: FIREFOX_H2_SETTINGS,
191
- headerOrder: FIREFOX_HEADER_ORDER,
192
- }),
193
- "firefox-132": createProfile("firefox-132", {
194
- platform: "macos",
195
- version: "132.0",
196
- userAgent:
197
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:132.0) Gecko/20100101 Firefox/132.0",
198
- tlsClientIdentifier: "firefox_132",
199
- ja3: FIREFOX_JA3,
200
- h2Settings: FIREFOX_H2_SETTINGS,
201
- headerOrder: FIREFOX_HEADER_ORDER,
202
- }),
203
- "safari-16": createProfile("safari-16", {
204
- platform: "macos",
205
- version: "16.0",
206
- userAgent:
207
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15",
208
- tlsClientIdentifier: "safari_16_0",
209
- ja3: SAFARI_JA3,
210
- h2Settings: SAFARI_H2_SETTINGS,
211
- headerOrder: SAFARI_HEADER_ORDER,
212
- }),
213
- "safari-15": createProfile("safari-15", {
214
- platform: "macos",
215
- version: "15.6.1",
216
- userAgent:
217
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6.1 Safari/605.1.15",
218
- tlsClientIdentifier: "safari_15_6_1",
219
- ja3: SAFARI_JA3,
220
- h2Settings: SAFARI_H2_SETTINGS,
221
- headerOrder: SAFARI_HEADER_ORDER,
222
- }),
223
- "ios-safari-26": createProfile("ios-safari-26", {
224
- platform: "ios",
225
- version: "26.0",
226
- userAgent:
227
- "Mozilla/5.0 (iPhone; CPU iPhone OS 26_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1",
228
- tlsClientIdentifier: "safari_ios_26_0",
229
- ja3: SAFARI_JA3,
230
- h2Settings: SAFARI_H2_SETTINGS,
231
- headerOrder: SAFARI_HEADER_ORDER,
232
- }),
233
- "ios-safari-18": createProfile("ios-safari-18", {
234
- platform: "ios",
235
- version: "18.0",
236
- userAgent:
237
- "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1",
238
- tlsClientIdentifier: "safari_ios_18_0",
239
- ja3: SAFARI_JA3,
240
- h2Settings: SAFARI_H2_SETTINGS,
241
- headerOrder: SAFARI_HEADER_ORDER,
242
- }),
243
- "ios-safari-17": createProfile("ios-safari-17", {
244
- platform: "ios",
245
- version: "17.0",
246
- userAgent:
247
- "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1",
248
- tlsClientIdentifier: "safari_ios_17_0",
249
- ja3: SAFARI_JA3,
250
- h2Settings: SAFARI_H2_SETTINGS,
251
- headerOrder: SAFARI_HEADER_ORDER,
252
- }),
253
- "generic-desktop": createProfile("generic-desktop", {
254
- platform: "macos",
255
- version: "146.0.0.0",
256
- userAgent:
257
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
258
- tlsClientIdentifier: "chrome_146",
259
- ja3: CHROMIUM_JA3,
260
- h2Settings: CHROMIUM_H2_SETTINGS,
261
- headerOrder: CHROMIUM_HEADER_ORDER,
262
- }),
263
- "generic-mobile": createProfile("generic-mobile", {
264
- platform: "ios",
265
- version: "26.0",
266
- userAgent:
267
- "Mozilla/5.0 (iPhone; CPU iPhone OS 26_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1",
268
- tlsClientIdentifier: "safari_ios_26_0",
269
- ja3: SAFARI_JA3,
270
- h2Settings: SAFARI_H2_SETTINGS,
271
- headerOrder: SAFARI_HEADER_ORDER,
272
- }),
273
- };
195
+ function profileKey(descriptor: StealthProfileDescriptor): string {
196
+ return `${descriptor.browser}:${descriptor.os}`;
197
+ }
274
198
 
275
- export function getStealthProfile(name: string): StealthProfile {
276
- const canonicalName = STEALTH_PROFILE_ALIASES[name] ?? name;
277
- const profile = STEALTH_PROFILES[canonicalName];
199
+ let stealthProfileCatalog: Map<string, StealthProfile> | undefined;
278
200
 
279
- if (!profile) {
280
- throw new SDKError(`Unknown stealth profile: ${name}`);
201
+ function getStealthProfileCatalog(): Map<string, StealthProfile> {
202
+ if (stealthProfileCatalog) return stealthProfileCatalog;
203
+
204
+ const latestChrome = resolveLatestChromiumProfile();
205
+ const definitions: Record<StealthBrowser, Omit<StealthProfileDefinition, "userAgent">> = {
206
+ chrome: {
207
+ version: latestChrome.version,
208
+ tlsClientIdentifier: latestChrome.wreqName,
209
+ ja3: CHROMIUM_JA3,
210
+ h2Settings: CHROMIUM_H2_SETTINGS,
211
+ },
212
+ firefox: {
213
+ version: "147.0",
214
+ tlsClientIdentifier: "firefox_147",
215
+ ja3: FIREFOX_JA3,
216
+ h2Settings: FIREFOX_H2_SETTINGS,
217
+ },
218
+ safari: {
219
+ version: "17.0",
220
+ tlsClientIdentifier: "safari_17.0",
221
+ ja3: SAFARI_JA3,
222
+ h2Settings: SAFARI_H2_SETTINGS,
223
+ },
224
+ };
225
+
226
+ stealthProfileCatalog = new Map();
227
+ for (const descriptor of SUPPORTED_STEALTH_PROFILES) {
228
+ const isMobileSafari = descriptor.browser === "safari" && descriptor.os === "ios";
229
+ const definition = isMobileSafari
230
+ ? {
231
+ version: "26.0",
232
+ tlsClientIdentifier: "safari_ios_26" as BrowserProfile,
233
+ ja3: SAFARI_JA3,
234
+ h2Settings: SAFARI_H2_SETTINGS,
235
+ }
236
+ : definitions[descriptor.browser];
237
+ const wreqName = definition.tlsClientIdentifier as BrowserProfile;
238
+ stealthProfileCatalog.set(
239
+ profileKey(descriptor),
240
+ createProfile(descriptor, {
241
+ ...definition,
242
+ userAgent: emulationUserAgent(wreqName, descriptor.os),
243
+ }),
244
+ );
281
245
  }
246
+ return stealthProfileCatalog;
247
+ }
282
248
 
249
+ export function getStealthProfile(selection: StealthProfileSelection = {}): StealthProfile {
250
+ const descriptor = resolveStealthProfileSelection(selection);
251
+ const profile = getStealthProfileCatalog().get(profileKey(descriptor));
252
+ if (!profile) {
253
+ throw new SDKError(`Unknown stealth profile: ${descriptor.browser}/${descriptor.os}`);
254
+ }
283
255
  return {
284
256
  ...profile,
285
257
  h2Settings: profile.h2Settings ? { ...profile.h2Settings } : undefined,
286
- headerOrder: profile.headerOrder ? [...profile.headerOrder] : undefined,
287
258
  };
288
259
  }
289
260
 
290
- export function listStealthProfiles(): string[] {
291
- return [...Object.keys(STEALTH_PROFILES), ...Object.keys(STEALTH_PROFILE_ALIASES)];
261
+ export function listStealthProfiles(): StealthProfileDescriptor[] {
262
+ return SUPPORTED_STEALTH_PROFILES.map((profile) => ({ ...profile }));
292
263
  }