cf 0.3.0 → 0.5.0

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 (228) hide show
  1. package/README.md +7 -1
  2. package/dist/_meta/agent-context.json +26 -21
  3. package/dist/_meta/commands.json +7696 -18100
  4. package/dist/_meta/schemas.json +6411 -13925
  5. package/dist/{abuse-reports-dMIfUJ8v.mjs → abuse-reports-Ina5TlsU.mjs} +2 -2
  6. package/dist/{accounts-Kx1epdA1.mjs → accounts-B_joQcMi.mjs} +9 -9
  7. package/dist/{acm-Utu252kC.mjs → acm-_kIHqYME.mjs} +2 -2
  8. package/dist/{addressing-CBq7Z7Vq.mjs → addressing-CaFlw8y1.mjs} +10 -10
  9. package/dist/{agent-context-BGTU299M.mjs → agent-context-DMPfi54f.mjs} +1 -1
  10. package/dist/ai-CqnhNb_c.mjs +2 -0
  11. package/dist/ai-gateway-pgYGI519.mjs +8 -0
  12. package/dist/ai-search-eqQMPQol.mjs +7 -0
  13. package/dist/ai_gateway--vuVLnOm.mjs +4 -0
  14. package/dist/{alerting-CqmEIaKn.mjs → alerting-CPxHiYHb.mjs} +5 -5
  15. package/dist/{analytics-Dv-X8x7D.mjs → analytics-DSSRDZz8.mjs} +1 -1
  16. package/dist/analytics_engine-gWyfnsCs.mjs +2 -0
  17. package/dist/{api-gateway-CNv0IHTU.mjs → api-gateway-BXXGFCVR.mjs} +10 -10
  18. package/dist/argo-aC6A3JyX.mjs +2 -0
  19. package/dist/artifacts-HD4V2xpK.mjs +4 -0
  20. package/dist/audit-logs-BuExU_nz.mjs +2 -0
  21. package/dist/auth-CSC4yhEJ.mjs +9 -0
  22. package/dist/auth-D5hNsOFq.mjs +5 -0
  23. package/dist/billing-COaghyxl.mjs +2 -0
  24. package/dist/bot-management-DmEzeV1Y.mjs +5 -0
  25. package/dist/botnet-feed-ByEAXAkw.mjs +3 -0
  26. package/dist/brand-protection-dPrGe8sL.mjs +3 -0
  27. package/dist/browser-rendering-BiSGnpBf.mjs +4 -0
  28. package/dist/{build-DYkGW4dh.mjs → build-HuS9-R0V.mjs} +131 -131
  29. package/dist/{cache-DsoW6Xwv.mjs → cache-CY-7Lt71.mjs} +4 -4
  30. package/dist/calls-wOQGDWPl.mjs +4 -0
  31. package/dist/certificate-authorities-CtqzAtxQ.mjs +2 -0
  32. package/dist/chunk-6IEM75FG-BEjRFMGh.mjs +2 -0
  33. package/dist/client-certificates-CRf41xLe.mjs +3 -0
  34. package/dist/cloud-connector-BA5IRZUP.mjs +2 -0
  35. package/dist/{cloudforce-one-2Bhz8YdW.mjs → cloudforce-one-Bq_qPAWs.mjs} +20 -20
  36. package/dist/{completions-BwRpZQVn.mjs → completions-DOeHPdCG.mjs} +2 -2
  37. package/dist/config-B5k-XbwS.mjs +2 -0
  38. package/dist/connectivity-Bx3MgTHX.mjs +3 -0
  39. package/dist/connector-interrupts-D7ylweJZ.mjs +2 -0
  40. package/dist/connector-telemetry-events-6izV1kbP.mjs +2 -0
  41. package/dist/connector-telemetry-snapshots-BnjKbyxX.mjs +2 -0
  42. package/dist/connectors-DRt4e6d_.mjs +3 -0
  43. package/dist/content-scanning-Cd2vy5Sz.mjs +4 -0
  44. package/dist/context-jpewmual.mjs +2 -0
  45. package/dist/{custom-certificates-aAiEguR7.mjs → custom-certificates-DYE-9epx.mjs} +3 -3
  46. package/dist/{custom-hostnames-AG5yBHIi.mjs → custom-hostnames-CtuTdFcX.mjs} +4 -4
  47. package/dist/custom-nameservers-CWqA51in.mjs +3 -0
  48. package/dist/custom-pages-DeUKEFGe.mjs +4 -0
  49. package/dist/d1-DvWY9Gp4.mjs +4 -0
  50. package/dist/data-security-BPo6dIWu.mjs +6 -0
  51. package/dist/dcv-delegation-Bgf86J-r.mjs +2 -0
  52. package/dist/{deploy-CQial3kN.mjs → deploy-dVrgDUOp.mjs} +1 -1
  53. package/dist/{dev-B38LfCTl.mjs → dev-C01_Lby6.mjs} +1 -1
  54. package/dist/diagnostics-6nKPmVgz.mjs +3 -0
  55. package/dist/{dispatch-namespaces-DmHvoBOg.mjs → dispatch-namespaces-64lXx2WJ.mjs} +6 -6
  56. package/dist/dist-C6zxsVdY.mjs +306 -0
  57. package/dist/{dist-AIcZFk0U.mjs → dist-t_YrL25p.mjs} +7 -7
  58. package/dist/{dns-VMhQSr5n.mjs → dns-ClciFGxx.mjs} +13 -13
  59. package/dist/dns-firewall-DfUmXDCe.mjs +57 -0
  60. package/dist/durable-objects-CMaYZ-YU.mjs +2 -0
  61. package/dist/{email-routing-tIR2SFu-.mjs → email-routing-CGXhFqF5.mjs} +9 -9
  62. package/dist/{email-security-Ca1id3rZ.mjs → email-security-D5viPq8S.mjs} +7 -7
  63. package/dist/email-sending-C2jpc3gh.mjs +3 -0
  64. package/dist/{filters-A4dg_a68.mjs → filters-bzsFcWt0.mjs} +3 -3
  65. package/dist/{firewall-DWPQgYd9.mjs → firewall-DYZcTtIC.mjs} +10 -10
  66. package/dist/{fraud-BMkSsJGU.mjs → fraud-C03MtdZb.mjs} +1 -1
  67. package/dist/google-tag-gateway-Dfy887yA.mjs +2 -0
  68. package/dist/{healthchecks-CtIfrFql.mjs → healthchecks-DRoAlWgr.mjs} +3 -3
  69. package/dist/hostnames-CFgIVI3s.mjs +3 -0
  70. package/dist/hyperdrive-C7-gwTSV.mjs +18 -0
  71. package/dist/iam-DqVPzGrb.mjs +6 -0
  72. package/dist/images-BYfl4YgR.mjs +7 -0
  73. package/dist/index.mjs +1 -1
  74. package/dist/intel-duTEPIHc.mjs +3 -0
  75. package/dist/{ips-K4bzaGqd.mjs → ips-nv9INuWZ.mjs} +1 -1
  76. package/dist/keyless-certificates-CRCDVd3g.mjs +3 -0
  77. package/dist/{kv-8o27w_pY.mjs → kv-CZoV4tiv.mjs} +4 -4
  78. package/dist/leaked-credential-checks-DNIBg7Pe.mjs +3 -0
  79. package/dist/{load-balancers-DtG8nj25.mjs → load-balancers--OMg0HNt.mjs} +5 -5
  80. package/dist/{logpush-4L0njy1d.mjs → logpush-C0_lZTyY.mjs} +3 -3
  81. package/dist/{logs-B_Yp95hv.mjs → logs-BtpWZQfV.mjs} +2 -2
  82. package/dist/magic-cloud-networking-u6rwYbGg.mjs +5 -0
  83. package/dist/{magic-network-monitoring-BnwvM4-I.mjs → magic-network-monitoring-CKgQyRj4.mjs} +3 -3
  84. package/dist/{magic-transit-CXDyvhxq.mjs → magic-transit-CLhMcJ_-.mjs} +32 -33
  85. package/dist/managed-transforms-D0Z2mlth.mjs +3 -0
  86. package/dist/mtls-certificates-BL65NK5T.mjs +3 -0
  87. package/dist/{network-interconnects-rrr7red3.mjs → network-interconnects-Bgu9gmaG.mjs} +5 -5
  88. package/dist/oauth-Bk-F-tIO.mjs +52 -0
  89. package/dist/{observability-DWvpqnQJ.mjs → observability-BynRbTF4.mjs} +3 -3
  90. package/dist/open-YWOUIZ5Y-3jqSKAB1.mjs +4 -0
  91. package/dist/{organizations-T77D50Sq.mjs → organizations-BqJHyvMK.mjs} +3 -3
  92. package/dist/origin-ca-certificates-BGvYwm3C.mjs +3 -0
  93. package/dist/origin-post-quantum-encryption-9KOE8YPI.mjs +2 -0
  94. package/dist/{origin-tls-client-auth-CaVW1Ztp.mjs → origin-tls-client-auth-d3snC3vr.mjs} +3 -3
  95. package/dist/{output-BJFNwj7b.mjs → output-B6fBFRqe.mjs} +1 -1
  96. package/dist/{page-rules-CjZPTMQX.mjs → page-rules-EZHJePmn.mjs} +4 -4
  97. package/dist/{page-shield-D5RRNJCY.mjs → page-shield-CXJioWPs.mjs} +5 -5
  98. package/dist/{pages-CWJtJnL0.mjs → pages-D4aYteKk.mjs} +8 -8
  99. package/dist/{pipelines-B0L_7j9e.mjs → pipelines-G8Iusxq-.mjs} +5 -5
  100. package/dist/progress-DrDErV9w.mjs +2 -0
  101. package/dist/queues-DEkbKqZX.mjs +6 -0
  102. package/dist/{r2-DQIcyRtA.mjs → r2-CV0IkCAW.mjs} +9 -9
  103. package/dist/r2-data-catalog-NtqGC_a_.mjs +14 -0
  104. package/dist/radar-D986zPJr.mjs +2 -0
  105. package/dist/{rate-limits-DcrQV6Ar.mjs → rate-limits-B2wRsUX1.mjs} +3 -3
  106. package/dist/raw-fetch-_n0lMAnD.mjs +2 -0
  107. package/dist/{realtime-kit-CaquuVOE.mjs → realtime-kit-Ld3c5eU6.mjs} +9 -9
  108. package/dist/{registrar-Ko-xZemf.mjs → registrar-CDIwTz3G.mjs} +6 -6
  109. package/dist/request-tracers-D7SFMDik.mjs +2 -0
  110. package/dist/resource-sharing-YIQ04jXE.mjs +5 -0
  111. package/dist/{resource-tagging-C3qtLzCz.mjs → resource-tagging-Bd6Y03sg.mjs} +7 -7
  112. package/dist/rules-DHjLP5Kx.mjs +4 -0
  113. package/dist/{rulesets-CBgpeSvJ.mjs → rulesets-q4QABpKs.mjs} +7 -7
  114. package/dist/rum-SmT4HZmM.mjs +4 -0
  115. package/dist/{schema-D16TgWBg.mjs → schema-BR31o4P6.mjs} +1 -1
  116. package/dist/{schema-validation-Dgv_opM3.mjs → schema-validation-vVetgC_P.mjs} +5 -5
  117. package/dist/{scim-DdSEr4kZ.mjs → scim-ChOkZpNx.mjs} +2 -2
  118. package/dist/{session-COHHdS7A.mjs → sdk-DhIhH6GB.mjs} +4 -4
  119. package/dist/{secrets-store-7BfyvJLb.mjs → secrets-store-BAK9G12O.mjs} +12 -12
  120. package/dist/security-center-eScuYDKP.mjs +2 -0
  121. package/dist/security-txt-x7R4gmQu.mjs +3 -0
  122. package/dist/session-DHYCE-PM.mjs +93 -0
  123. package/dist/shared-BAjo72Lz.mjs +2 -0
  124. package/dist/{smart-shield-TeWZFnH2.mjs → smart-shield-CWlSsNi8.mjs} +2 -2
  125. package/dist/snippets-DrlgYJYp.mjs +4 -0
  126. package/dist/{spawn-DcppKGI5.mjs → spawn-CCGzKlC4.mjs} +1 -1
  127. package/dist/{spectrum-CTTZID8u.mjs → spectrum-pVGxb7u5.mjs} +6 -6
  128. package/dist/speed-ZFrMWDgd.mjs +4 -0
  129. package/dist/src-DU7FBCOX.mjs +108 -0
  130. package/dist/ssl-9JY05sYt.mjs +15 -0
  131. package/dist/stream-tRU39b8K.mjs +14 -0
  132. package/dist/{tenants-Bd7NGQ_m.mjs → tenants-HLGUazms.mjs} +1 -1
  133. package/dist/{token-validation-DAgtFOvs.mjs → token-validation-_VdamKpz.mjs} +4 -4
  134. package/dist/{tools-DXQmfFuE.mjs → tools-D_hfUU_Z.mjs} +1 -1
  135. package/dist/{turnstile-cfdaO4ca.mjs → turnstile-BRzXd28B.mjs} +4 -4
  136. package/dist/{ui-D4KtlMh9.mjs → ui-erjBdVKL.mjs} +1 -1
  137. package/dist/url-normalization-D-NxuLtN.mjs +3 -0
  138. package/dist/url-scanner-BzzR6iDx.mjs +2 -0
  139. package/dist/{user-CAo-yCJA.mjs → user-C4omq__w.mjs} +2 -2
  140. package/dist/vectorize-By6EqcNR.mjs +4 -0
  141. package/dist/{versions-CUwWJWmy.mjs → versions-CBHwWPAM.mjs} +1 -1
  142. package/dist/{waiting-rooms-Dln5ICg5.mjs → waiting-rooms-u6KwrzWd.mjs} +6 -6
  143. package/dist/{web3-HQJRm38W.mjs → web3-DQ5dmE9W.mjs} +3 -3
  144. package/dist/{workers-Dg7ddG2Q.mjs → workers-D8Be7_as.mjs} +14 -14
  145. package/dist/workers-builds-BE3W3qNk.mjs +7 -0
  146. package/dist/{workflows-VquuSh2J.mjs → workflows-BWWufqFA.mjs} +3 -3
  147. package/dist/zaraz-Bsa9AvVL.mjs +2 -0
  148. package/dist/{zero-trust-CP96wnSh.mjs → zero-trust-UNVZFnKu.mjs} +87 -87
  149. package/dist/zero_trust-B0_Rk4p2.mjs +3 -0
  150. package/dist/zones-BXtdwt6E.mjs +21 -0
  151. package/package.json +4 -4
  152. package/dist/ai-DOOKLPkG.mjs +0 -2
  153. package/dist/ai-gateway-Cj1T3avF.mjs +0 -8
  154. package/dist/ai-search-CQF_Sn7d.mjs +0 -7
  155. package/dist/ai_gateway-C3fH22C0.mjs +0 -4
  156. package/dist/analytics_engine-DdXVR8z2.mjs +0 -2
  157. package/dist/argo-CX_A4kcn.mjs +0 -2
  158. package/dist/audit-logs-BfBf3oo-.mjs +0 -2
  159. package/dist/auth-SyWhMmPu.mjs +0 -6
  160. package/dist/auth-ffdf9yR0.mjs +0 -135
  161. package/dist/autorag-BuGhGTeZ.mjs +0 -2
  162. package/dist/billing-PoG81XaQ.mjs +0 -2
  163. package/dist/bot-management-CFvtVx62.mjs +0 -5
  164. package/dist/botnet-feed-B-M4Yu0W.mjs +0 -3
  165. package/dist/brand-protection-D05Eg-_6.mjs +0 -3
  166. package/dist/browser-rendering-xu8F_Rrv.mjs +0 -4
  167. package/dist/calls-CZbO7TyR.mjs +0 -4
  168. package/dist/certificate-authorities-D2yr7_3t.mjs +0 -2
  169. package/dist/client-certificates-MJcDsTId.mjs +0 -3
  170. package/dist/cloud-connector-DWOrN2eM.mjs +0 -2
  171. package/dist/config-DYzlVxcB.mjs +0 -2
  172. package/dist/connectivity-BX8C7tvK.mjs +0 -3
  173. package/dist/content-scanning-r6uzMO1r.mjs +0 -4
  174. package/dist/context-DGlHRGWM.mjs +0 -2
  175. package/dist/custom-nameservers-D1DtlRue.mjs +0 -3
  176. package/dist/custom-pages-DQCi2plU.mjs +0 -4
  177. package/dist/d1-DbnYhw45.mjs +0 -4
  178. package/dist/data-security-D_EtYBfo.mjs +0 -6
  179. package/dist/dcv-delegation-CHspSzTI.mjs +0 -2
  180. package/dist/diagnostics-BJQGjVJn.mjs +0 -3
  181. package/dist/dist-DNBSHor6.mjs +0 -301
  182. package/dist/dns-firewall-B4DVXFBQ.mjs +0 -57
  183. package/dist/durable-objects-CTboySEo.mjs +0 -2
  184. package/dist/email-sending-DwWKc5jC.mjs +0 -3
  185. package/dist/google-tag-gateway-BGD49nRC.mjs +0 -2
  186. package/dist/hostnames-BiomxukN.mjs +0 -3
  187. package/dist/hyperdrive-Da104VaQ.mjs +0 -18
  188. package/dist/iam-BIGKo0WW.mjs +0 -6
  189. package/dist/images-BO8FbDAa.mjs +0 -5
  190. package/dist/intel-CY6_79v8.mjs +0 -3
  191. package/dist/keyless-certificates-CZC-L8gM.mjs +0 -3
  192. package/dist/leaked-credential-checks-qLzRyu85.mjs +0 -3
  193. package/dist/magic-cloud-networking-CSOM3EM-.mjs +0 -5
  194. package/dist/managed-transforms-D15yVbZx.mjs +0 -3
  195. package/dist/mtls-certificates-D8k0AXWK.mjs +0 -3
  196. package/dist/origin-ca-certificates-DXIvD8H5.mjs +0 -3
  197. package/dist/origin-post-quantum-encryption-C8oOczyV.mjs +0 -2
  198. package/dist/progress-CrCGTq7N.mjs +0 -2
  199. package/dist/queues-CN6DPhRR.mjs +0 -6
  200. package/dist/r2-data-catalog-Bbo93TJx.mjs +0 -14
  201. package/dist/radar-Bxb0WX8V.mjs +0 -2
  202. package/dist/raw-fetch-Dlccg0Tr.mjs +0 -2
  203. package/dist/request-tracers-DOW_reTJ.mjs +0 -2
  204. package/dist/resource-sharing-D7TX0JV0.mjs +0 -5
  205. package/dist/rules-BXRADHL5.mjs +0 -4
  206. package/dist/rum-BjPptTUP.mjs +0 -4
  207. package/dist/security-center-DAy6AKtT.mjs +0 -2
  208. package/dist/security-txt-xAMb7K6Y.mjs +0 -3
  209. package/dist/shared-AGtpXwwL.mjs +0 -2
  210. package/dist/snippets-CCSsCXVs.mjs +0 -4
  211. package/dist/speed-CuzTE0AL.mjs +0 -4
  212. package/dist/src-BW6vfAwE.mjs +0 -108
  213. package/dist/ssl-BWA2LdwC.mjs +0 -15
  214. package/dist/stream-GFsIZ-pP.mjs +0 -14
  215. package/dist/url-normalization-B5RN4nLD.mjs +0 -3
  216. package/dist/url-scanner-BrZ1L9OC.mjs +0 -2
  217. package/dist/vectorize-C7_oQlaI.mjs +0 -4
  218. package/dist/workers-builds-AVfx8IyL.mjs +0 -7
  219. package/dist/zaraz-xYSWIV4P.mjs +0 -2
  220. package/dist/zones-BSgmZ9WC.mjs +0 -21
  221. /package/dist/{body-parser-DKa8Ipg1.mjs → body-parser-DWSy7uZ8.mjs} +0 -0
  222. /package/dist/{cli-types-CRIDdDw3.mjs → cli-types-BeyOc81z.mjs} +0 -0
  223. /package/dist/{input-validation-zEO81MWN.mjs → input-validation-_fMCApaH.mjs} +0 -0
  224. /package/dist/{lib-Eu1wXxuh.mjs → lib-4PQI6yRW.mjs} +0 -0
  225. /package/dist/{local-VJaJ3BZ1.mjs → local-CYc9q7l2.mjs} +0 -0
  226. /package/dist/{metadata-5VwHPW6C.mjs → metadata-OOwvpR8m.mjs} +0 -0
  227. /package/dist/{resolve-4-OSeHlK.mjs → resolve-C3h-mwp7.mjs} +0 -0
  228. /package/dist/{theme-BklJDrb2.mjs → theme-DbNbIY4d.mjs} +0 -0
@@ -1,135 +0,0 @@
1
- #!/usr/bin/env node
2
- import{o as e}from"./chunk-DH-VkVmc.mjs";import{a as t,i as n,o as r,r as i,t as a}from"./session-COHHdS7A.mjs";import{A as o,G as s,H as c,L as l,N as u,b as d,f,g as ee,h as p,m as te,q as m,t as ne}from"./dist-DNBSHor6.mjs";import{n as re,t as h}from"./theme-BklJDrb2.mjs";import{a as ie,i as g,n as ae,r as oe}from"./config-DYzlVxcB.mjs";import{c as se,f as ce,h as _,i as le,m as v,o as ue,r as de,s as fe,t as pe}from"./dist-AIcZFk0U.mjs";import{n as me,t as he}from"./resolve-4-OSeHlK.mjs";import{createRequire as ge}from"node:module";import{chmodSync as _e,existsSync as y,mkdirSync as ve,readFileSync as ye,rmSync as b,unlinkSync as be,writeFileSync as x}from"node:fs";import xe from"node:assert";import{platform as Se}from"node:os";import S,{dirname as C,join as w}from"node:path";import{exec as Ce,spawnSync as we}from"node:child_process";import{createCipheriv as Te,createDecipheriv as Ee,createHash as De,randomBytes as Oe,webcrypto as ke}from"node:crypto";import Ae from"node:http";import{TextEncoder as je}from"node:util";import Me from"node:url";import"node:process";import{execSync as Ne}from"child_process";import Pe from"os";var Fe=Object.defineProperty,T=(e,t)=>Fe(e,`name`,{value:t,configurable:!0}),E=o(),Ie=!1;function D(e){let{configOverride:t,warningLogger:n,storage:r}=e,{oauth_token:i,refresh_token:a,expiration_time:o,scopes:s,api_token:c}=t??r.read()??{};return i?{accessToken:{value:i,expiry:o??`2000-01-01:00:00:00+00:00`},refreshToken:{value:a??``},scopes:s}:c?(!Ie&&n&&(Ie=!0,n.warn(`It looks like you have used Wrangler v1's \`config\` command to login with an API token
3
- from ${t===void 0?r.path():`in-memory config`}.
4
- This is no longer supported in the current version of Wrangler.
5
- If you wish to authenticate via an API token then please set the \`CLOUDFLARE_API_TOKEN\` environment variable.`)),{deprecatedApiToken:c}):{}}T(D,`readStoredAuthState`);var Le=d({variableName:`CLOUDFLARE_API_TOKEN`,deprecatedName:`CF_API_TOKEN`}),Re=d({variableName:`CLOUDFLARE_API_KEY`,deprecatedName:`CF_API_KEY`}),ze=d({variableName:`CLOUDFLARE_EMAIL`,deprecatedName:`CF_EMAIL`});function Be(e){if(e?.allowGlobalAuthKey??!0){let e=Re(),t=ze();if(e&&t)return{authKey:e,authEmail:t}}let t=Le();if(t)return{apiToken:t}}T(Be,`getAuthFromEnv`);function Ve(e){let t=Be(e);if(t)return t;let n=D({storage:e.storage,warningLogger:e.warningLogger});if(n.deprecatedApiToken)return{apiToken:n.deprecatedApiToken};if(n.accessToken?.value)return{apiToken:n.accessToken.value}}T(Ve,`getAPIToken`);function He(e){let t=Ve(e);if(!t)throw new l(`No API token found.`,{telemetryMessage:`user auth missing api token`});return t}T(He,`requireApiToken`);var O=d({variableName:`WRANGLER_AUTH_DOMAIN`,defaultValue:T(()=>p()===`staging`?`dash.staging.cloudflare.com`:`dash.cloudflare.com`,`defaultValue`)}),Ue=d({variableName:`WRANGLER_AUTH_URL`,defaultValue:T(()=>`https://${O()}/oauth2/auth`,`defaultValue`)}),We=d({variableName:`WRANGLER_TOKEN_URL`,defaultValue:T(()=>`https://${O()}/oauth2/token`,`defaultValue`)}),Ge=d({variableName:`WRANGLER_REVOKE_URL`,defaultValue:T(()=>`https://${O()}/oauth2/revoke`,`defaultValue`)}),Ke=d({variableName:`CLOUDFLARE_ACCESS_CLIENT_ID`}),qe=d({variableName:`CLOUDFLARE_ACCESS_CLIENT_SECRET`}),Je=d({variableName:`WRANGLER_CF_AUTHORIZATION_TOKEN`}),Ye=f({variableName:`CLOUDFLARE_AUTH_USE_KEYRING`}),k={},A=new Map;function Xe(){for(let e of Object.keys(k))delete k[e];A.clear()}T(Xe,`clearAccessCaches`);async function Ze(e,t){if(t.debug(`Checking if domain has Access enabled:`,e),A.has(e))return t.debug(`Using cached Access switch for:`,e,A.get(e)),A.get(e)??!1;t.debug(`Access switch not cached for:`,e);try{let n=new AbortController,r=setTimeout(()=>{n.abort()},1e3),i=await(0,E.fetch)(`https://${e}`,{redirect:`manual`,signal:n.signal});clearTimeout(r);let a=!!(i.status===302&&i.headers.get(`location`)?.includes(`cloudflareaccess.com`));return t.debug(`Caching access switch for:`,e),A.set(e,a),a}catch{return A.set(e,!1),!1}}T(Ze,`domainUsesAccess`);async function Qe(e,t){let n=t.logger,r=t.isNonInteractiveOrCI,i=Ke(),a=qe();if(i&&a){n.debug(`Using Access Service Token headers for domain:`,e);let t={"CF-Access-Client-Id":i,"CF-Access-Client-Secret":a};return k[e]=t,t}if((i!==void 0||a!==void 0)&&n.warn(`Both CLOUDFLARE_ACCESS_CLIENT_ID and CLOUDFLARE_ACCESS_CLIENT_SECRET must be set to use Access Service Token authentication. Only ${i===void 0?`CLOUDFLARE_ACCESS_CLIENT_SECRET`:`CLOUDFLARE_ACCESS_CLIENT_ID`} was found.`),!await Ze(e,n))return{};if(n.debug(`Getting Access headers for domain:`,e),k[e])return n.debug(`Using cached Access headers for domain:`,e),k[e];if(r())throw new l(`The domain "${e}" is behind Cloudflare Access, but no Access Service Token credentials were found and the current environment is non-interactive.
6
- Set the CLOUDFLARE_ACCESS_CLIENT_ID and CLOUDFLARE_ACCESS_CLIENT_SECRET environment variables to authenticate with an Access Service Token.
7
- See https://developers.cloudflare.com/cloudflare-one/access-controls/service-credentials/service-tokens/`,{telemetryMessage:`user access missing service token non interactive`});n.debug(`Spawning cloudflared to get Access token for domain:`);let o=we(`cloudflared`,[`access`,`login`,e]);if(o.error)throw new l("To use Wrangler with Cloudflare Access, please install `cloudflared` from https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation",{telemetryMessage:`user access missing cloudflared`});let s=o.stdout.toString();n.debug(`cloudflared output:`,s);let c=s.match(/fetched your token:\n\n(.*)/m);if(c&&c.length>=2){let t={Cookie:`CF_Authorization=${c[1]}`};return k[e]=t,n.debug(`Caching Access headers for domain:`,e),t}throw Error(`Failed to authenticate with Cloudflare Access`)}T(Qe,`getAccessHeaders`);async function $e(e){let t=Je();return t===void 0?Qe(O(),e):(e.logger.debug(`Using WRANGLER_CF_AUTHORIZATION_TOKEN from environment`),{Cookie:`CF_Authorization=${t}`})}T($e,`getCloudflareAccessHeaders`);function et(e){var t=[...arguments].slice(1),n=Array.from(typeof e==`string`?[e]:e);n[n.length-1]=n[n.length-1].replace(/\r?\n([\t ]*)$/,``);var r=n.reduce(function(e,t){var n=t.match(/\n([\t ]+|(?!\s).)/g);return n?e.concat(n.map(function(e){return e.match(/[\t ]/g)?.length??0})):e},[]);if(r.length){var i=RegExp(`
8
- [ ]{`+Math.min.apply(Math,r)+`}`,`g`);n=n.map(function(e){return e.replace(i,`
9
- `)})}n[0]=n[0].replace(/^\r?\n/,``);var a=n[0];return t.forEach(function(e,t){var r=a.match(/(?:^|\n)( *)$/),i=r?r[1]:``,o=e;typeof e==`string`&&e.includes(`
10
- `)&&(o=String(e).split(`
11
- `).map(function(e,t){return t===0?e:``+i+e}).join(`
12
- `)),a+=o+n[t+1]}),a}T(et,`dedent`);var tt=et,j=class extends l{static{T(this,`ErrorOAuth2`)}code;description;uri;toString(){return`ErrorOAuth2`}},nt=class extends j{static{T(this,`ErrorUnknown`)}toString(){return`ErrorUnknown`}},rt=class extends j{static{T(this,`ErrorNoAuthCode`)}toString(){return`ErrorNoAuthCode`}},it=class extends j{static{T(this,`ErrorInvalidReturnedStateParam`)}toString(){return`ErrorInvalidReturnedStateParam`}},at=class extends j{static{T(this,`ErrorInvalidJson`)}toString(){return`ErrorInvalidJson`}},ot=class extends j{static{T(this,`ErrorInvalidScope`)}toString(){return`ErrorInvalidScope`}},st=class extends j{static{T(this,`ErrorInvalidRequest`)}toString(){return`ErrorInvalidRequest`}},ct=class extends j{static{T(this,`ErrorInvalidToken`)}toString(){return`ErrorInvalidToken`}},M=class extends j{static{T(this,`ErrorAuthenticationGrant`)}toString(){return`ErrorAuthenticationGrant`}},lt=class extends M{static{T(this,`ErrorUnauthorizedClient`)}toString(){return`ErrorUnauthorizedClient`}},ut=class extends M{static{T(this,`ErrorAccessDenied`)}toString(){return`ErrorAccessDenied`}},dt=class extends M{static{T(this,`ErrorUnsupportedResponseType`)}toString(){return`ErrorUnsupportedResponseType`}},ft=class extends M{static{T(this,`ErrorServerError`)}toString(){return`ErrorServerError`}},pt=class extends M{static{T(this,`ErrorTemporarilyUnavailable`)}toString(){return`ErrorTemporarilyUnavailable`}},mt=class extends j{static{T(this,`ErrorAccessTokenResponse`)}toString(){return`ErrorAccessTokenResponse`}},ht=class extends mt{static{T(this,`ErrorInvalidClient`)}toString(){return`ErrorInvalidClient`}},gt=class extends mt{static{T(this,`ErrorInvalidGrant`)}toString(){return`ErrorInvalidGrant`}},_t=class extends mt{static{T(this,`ErrorUnsupportedGrantType`)}toString(){return`ErrorUnsupportedGrantType`}};function vt(e,t,n){let r=`OAuth error: ${e}`;return t&&(r+=`
13
- ${t}`),n&&(r+=`
14
- See: ${n}`),r}T(vt,`formatOAuthErrorMessage`);function N(e,t,n){let r=vt(e,t,n),i;switch(e){case`invalid_request`:i=new st(r,{telemetryMessage:`user oauth invalid request`});break;case`invalid_grant`:i=new gt(r,{telemetryMessage:`user oauth invalid grant`});break;case`unauthorized_client`:i=new lt(r,{telemetryMessage:`user oauth unauthorized client`});break;case`access_denied`:i=new ut(r,{telemetryMessage:`user oauth access denied`});break;case`unsupported_response_type`:i=new dt(r,{telemetryMessage:`user oauth unsupported response type`});break;case`invalid_scope`:i=new ot(r,{telemetryMessage:`user oauth invalid scope`});break;case`server_error`:i=new ft(r,{telemetryMessage:`user oauth server error`});break;case`temporarily_unavailable`:i=new pt(r,{telemetryMessage:`user oauth temporarily unavailable`});break;case`invalid_client`:i=new ht(r,{telemetryMessage:`user oauth invalid client`});break;case`unsupported_grant_type`:i=new _t(r,{telemetryMessage:`user oauth unsupported grant type`});break;case`invalid_json`:i=new at(r,{telemetryMessage:`user oauth invalid json`});break;case`invalid_token`:i=new ct(r,{telemetryMessage:`user oauth invalid token`});break;default:i=new nt(r,{telemetryMessage:`user oauth unknown error`});break}return i.code=e,i.description=t,i.uri=n,i}T(N,`toErrorClass`);var yt=96,bt=32,P=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~`;function xt(e){let t=btoa(e);return t=t.replace(/\+/g,`-`),t=t.replace(/\//g,`_`),t=t.replace(/=/g,``),t}T(xt,`base64urlEncode`);async function St(){let e=new Uint32Array(yt);ke.getRandomValues(e);let t=xt(Array.from(e).map(e=>P[e%P.length]).join(``)),n=await ke.subtle.digest(`SHA-256`,new je().encode(t)),r=new Uint8Array(n),i=``,a=r.byteLength;for(let e=0;e<a;e++)i+=String.fromCharCode(r[e]);return{codeChallenge:xt(i),codeVerifier:t}}T(St,`generatePKCECodes`);function Ct(e,t,n){if(e.error)throw N(Array.isArray(e.error)?e.error[0]:e.error,Array.isArray(e.error_description)?e.error_description[0]:e.error_description,Array.isArray(e.error_uri)?e.error_uri[0]:e.error_uri);let r=e.code;if(!r)return!1;if(e.state!==t.stateQueryParam)throw n.warn(`Received query string parameter doesn't match the one sent! Possible malicious activity somewhere.`),new it(``,{telemetryMessage:`user oauth invalid returned state`});return xe(!Array.isArray(r)),t.authorizationCode=r,t.hasAuthCodeBeenExchangedForAccessToken=!1,!0}T(Ct,`isReturningFromAuthServer`);async function wt(e,t,n,r,i){let{codeChallenge:a,codeVerifier:o}=await St(),s=i.generateRandomState(bt);return Object.assign(r,{codeChallenge:a,codeVerifier:o,stateQueryParam:s}),i.generateAuthUrl({authUrl:Ue(),clientId:t,scopes:e,stateQueryParam:s,codeChallenge:a,redirectUri:n})}T(wt,`getAuthURL`);async function Tt(e,t,n,r){let i=D({warningLogger:e,storage:r}).refreshToken;i||e.warn(`No refresh token is present.`);let a=await Dt(new URLSearchParams({grant_type:`refresh_token`,refresh_token:i?.value??``,client_id:n}),e,t);if(a.status>=400){let t;try{t=await F(a,e)}catch(t){e.error(t)}throw t===void 0?new nt(`Failed to parse Error from exchangeRefreshTokenForAccessToken`,{telemetryMessage:`user oauth refresh token exchange parse error`}):typeof t==`string`?Error(t):t}else try{let t=await F(a,e);if(`error`in t)throw t.error;let{access_token:n,expires_in:r,refresh_token:o,scope:s}=t;return{token:{value:n,expiry:new Date(Date.now()+r*1e3).toISOString()},scopes:s?s.split(` `):[],refreshToken:o?{value:o}:i}}catch(e){throw typeof e==`string`?N(e):e}}T(Tt,`exchangeRefreshTokenForAccessToken`);async function Et(e,t,n,r,i){let{authorizationCode:a,codeVerifier:o=``}=e;o?a||t.warn(`No authorization grant code is being passed.`):t.warn(`No code verifier is being sent.`);let s=await Dt(new URLSearchParams({grant_type:`authorization_code`,code:a??``,redirect_uri:i,client_id:r,code_verifier:o}),t,n);if(!s.ok){let{error:e}=await F(s,t);throw e===`invalid_grant`&&t.log(`Expired! Auth code or refresh token needs to be renewed.`),N(e)}let c=await F(s,t);if(`error`in c)throw N(c.error);let{access_token:l,expires_in:u,refresh_token:d,scope:f}=c;return e.hasAuthCodeBeenExchangedForAccessToken=!0,{token:{value:l,expiry:new Date(Date.now()+u*1e3).toISOString()},scopes:f?f.split(` `):[],refreshToken:d?{value:d}:void 0}}T(Et,`exchangeAuthCodeForAccessToken`);async function Dt(e,t,n){let r={"Content-Type":`application/x-www-form-urlencoded`};if(t.debug(`fetching auth token`,`grant_type=${e.get(`grant_type`)??`<unknown>`}`),await Ze(O(),t)){t.debug(`Using Cloudflare Access to get an access token for the auth request`);let e=await $e({logger:t,isNonInteractiveOrCI:n});Object.assign(r,e)}t.debug(`Fetching auth token from`,We());try{let n=await(0,E.fetch)(We(),{method:`POST`,body:e.toString(),headers:r});return n.ok||t.debug(`Failed to fetch auth token:`,n.status,n.statusText),n}catch(e){throw t.debug(`Failed to fetch auth token:`,e),e}}T(Dt,`fetchAuthToken`);async function F(e,t){let n=await e.text();try{return JSON.parse(n)}catch(r){throw n.match(/<!DOCTYPE html>/)&&(t.error(`The body of the response was HTML rather than JSON. Check the debug logs to see the full body of the response.`),n.match(/challenge-platform/)&&t.error(`It looks like you might have hit a bot challenge page. This may be transient but if not, please contact Cloudflare to find out what can be done. When you contact Cloudflare, please provide your Ray ID: ${e.headers.get(`cf-ray`)}`)),t.debug(`Full body of response
15
-
16
- `,n),Error(`Invalid JSON in response: status: ${e.status} ${e.statusText}`,{cause:r})}}T(F,`getJSONFromResponse`);async function Ot(e,t,n,r){let i=await wt(e.scopes,e.clientId,e.redirectUri,t,r),a=new URL(e.redirectUri).pathname,o,s,c=new Promise((e,t)=>{s=setTimeout(()=>{o.close(),clearTimeout(s),t(new l(`Timed out waiting for authorization code, please try again.`,{telemetryMessage:`user oauth authorization timeout`}))},12e4)}),u=new Promise((r,i)=>{o=Ae.createServer(async(c,u)=>{function d(e,t){clearTimeout(s),u.writableEnded||u.end(),o.close(n=>{t||n?i(t||n):(xe(e),r(e))})}T(d,`finish`);function f(e){let t=T(e=>e.replace(/[&<>"']/g,e=>({"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`})[e]),`escape`),n=`<!doctype html>
17
- <html lang="en">
18
- <head>
19
- <meta charset="utf-8" />
20
- <title>Wrangler login failed</title>
21
- <style>
22
- body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; max-width: 720px; margin: 4rem auto; padding: 0 1rem; color: #1f2933; line-height: 1.5; }
23
- h1 { color: #c12d3f; }
24
- code { background: #f5f7fa; padding: 0.15em 0.3em; border-radius: 3px; }
25
- p.detail { background: #f5f7fa; padding: 1rem; border-radius: 4px; white-space: pre-wrap; }
26
- </style>
27
- </head>
28
- <body>
29
- <h1>Wrangler login failed</h1>
30
- <p>The Cloudflare OAuth provider returned an error.</p>
31
- ${e.code?`<p>Code: <code>${t(e.code)}</code></p>`:``}
32
- ${e.description?`<p class="detail">${t(e.description)}</p>`:``}
33
- <p>You can close this tab and return to your terminal for more details.</p>
34
- </body>
35
- </html>`;u.writeHead(400,{"Content-Type":`text/html; charset=utf-8`}),u.end(n)}T(f,`renderErrorPage`),xe(c.url,`This request doesn't have a URL`);let{pathname:ee,query:p}=Me.parse(c.url,!0);if(c.method!==`GET`)return u.end(`OK`);switch(ee){case a:{let r=!1;try{r=Ct(p,t,n.logger)}catch(t){if(t instanceof ut){u.writeHead(307,{Location:e.denied.url}),u.end(()=>{d(null,new l(e.denied.error,{telemetryMessage:`user oauth consent denied`}))});return}let n=t;f({code:n.code,description:n.description??n.message}),d(null,n);return}if(!r){let e=`The Cloudflare OAuth provider did not return an authorisation code.`;f({description:e}),d(null,new rt(e,{telemetryMessage:`user oauth missing auth code`}));return}try{let r=await Et(t,n.logger,n.isNonInteractiveOrCI,e.clientId,e.redirectUri);u.writeHead(307,{Location:e.granted.url}),u.end(()=>{d(r)})}catch(e){let t=e,n=t instanceof j;f({code:n?t.code:void 0,description:(n?t.description:void 0)??t.message??`Failed to exchange the authorisation code for an access token.`}),d(null,t)}return}}});let c=new URL(e.redirectUri),u=Number(c.port||(c.protocol===`https:`?443:80));(c.hostname!==e.callbackHost||u!==e.callbackPort)&&(n.logger.log(`Temporary login server listening on ${e.callbackHost}:${e.callbackPort}`),n.logger.log(`Note that the OAuth login page will always redirect to \`${e.redirectUri}\`.
36
- If you have changed the callback host or port because you are running in a container, then ensure that you have port forwarding set up correctly.`)),o.once(`error`,t=>{clearTimeout(s),t.code===`EADDRINUSE`?i(new l(`The OAuth callback server could not bind to ${e.callbackHost}:${e.callbackPort} because the port is already in use. Stop the process using that port or pass a different \`--callback-port\`.`,{telemetryMessage:`user oauth callback port in use`})):i(t)}),o.listen(e.callbackPort,e.callbackHost)});return e.browser?(n.logger.log(`Opening a link in your default browser: ${i}`),await n.openInBrowser(i)):n.logger.log(`Visit this link to authenticate: ${i}`),Promise.race([c,u])}T(Ot,`getOauthToken`);var kt=T(({authUrl:e,clientId:t,scopes:n,stateQueryParam:r,codeChallenge:i,redirectUri:a})=>e+`?response_type=code&client_id=${encodeURIComponent(t)}&redirect_uri=${encodeURIComponent(a)}&scope=${encodeURIComponent([...n,`offline_access`].join(` `))}&state=${r}&code_challenge=${encodeURIComponent(i)}&code_challenge_method=S256`,`generateAuthUrl`);function At(e){let t=new Uint32Array(e);return ke.getRandomValues(t),Array.from(t).map(e=>P[e%P.length]).join(``)}T(At,`generateRandomState`);var jt=64e6;function Mt(e,t,n){let r=Array(t+1),i=De(`sha256`).update(e).digest();r[0]=i;for(let e=0;e<t;e++){for(let e=0;e<n;e++)i=De(`sha256`).update(i).digest();r[e+1]=i}return r}T(Mt,`solvePow`);function Nt(e){return Buffer.concat(e).toString(`base64`)}T(Nt,`encodeCheckpoints`);function Pt(e){let t=Mt(Buffer.from(e.seed,`base64url`),e.k,e.g);return{challengeToken:e.challengeToken,solution:{checkpoints:Nt(t)}}}T(Pt,`solveChallenge`);var I={termsOfService:`https://www.cloudflare.com/terms/`,privacyPolicy:`https://www.cloudflare.com/privacypolicy/`},Ft=`You must accept Cloudflare's Terms of Service (${I.termsOfService}) and Privacy Policy (${I.privacyPolicy}) in order to continue. By typing "yes", you agree to these terms. Type "yes" to continue.`,It=`Continuing means you accept Cloudflare's Terms of Service (${I.termsOfService}) and Privacy Policy (${I.privacyPolicy}).`,Lt=`You must accept Cloudflare's Terms of Service (${I.termsOfService}) and Privacy Policy (${I.privacyPolicy}) to use --temporary.`;function Rt(){return`${te(ne)}/provisioning/previews`}T(Rt,`getTemporaryPreviewUrl`);function zt(){return`${Rt()}/challenge`}T(zt,`getTemporaryPreviewChallengeUrl`);function Bt(e){let t=Date.parse(e);return!Number.isNaN(t)&&t>Date.now()}T(Bt,`isFutureTimestamp`);function Vt(e){let t=e.read();if(t&&!(!t.account?.id||!t.account?.apiToken||!t.account?.name||!t.claim?.url||!Bt(t.account?.expiresAt??``)||!Bt(t.claim?.expiresAt??``)))return t}T(Vt,`getCachedTemporaryPreviewAccount`);async function Ht(e){let t=await(0,E.fetch)(zt(),{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`});if(!t.ok)throw new u(`Failed to request a proof-of-work challenge (${t.status} ${t.statusText}).`,{telemetryMessage:`deploy temporary account challenge failed`});let n;try{n=await t.json()}catch{throw new u(`Failed to request a proof-of-work challenge. Received an invalid response (${t.status} ${t.statusText}).`,{telemetryMessage:`deploy temporary account challenge invalid response`})}let{challengeToken:r,seed:i,k:a,g:o}=n.result??{};if(r===void 0||i===void 0||a===void 0||o===void 0)throw new u(`Failed to request a proof-of-work challenge because the response was missing required fields.`,{telemetryMessage:`deploy temporary account challenge incomplete`});if(!Number.isInteger(a)||!Number.isInteger(o)||a<=0||o<=0||a*o>jt||Buffer.from(i,`base64url`).length!==32)throw new u(`The proof-of-work challenge is not supported by this version of Wrangler.`,{telemetryMessage:`deploy temporary account challenge difficulty unsupported`});return e.log(`Solving proof-of-work challenge…`),Pt({challengeToken:r,seed:i,k:a,g:o})}T(Ht,`requestPowSolution`);async function Ut(e){let t=await Ht(e),n=await(0,E.fetch)(Rt(),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({termsOfService:I.termsOfService,privacyPolicy:I.privacyPolicy,acceptTermsOfService:`yes`,challengeToken:t.challengeToken,solution:t.solution})});if(!n.ok)throw new u(`Failed to create a temporary preview account (${n.status} ${n.statusText}).`,{telemetryMessage:`deploy temporary account create failed`});let r;try{r=await n.json()}catch{throw new u(`Failed to create a temporary preview account. Received an invalid response (${n.status} ${n.statusText}).`,{telemetryMessage:`deploy temporary account invalid response`})}let i=r.result,a=i?.account?.id,o=i?.account?.name,s=i?.account?.apiToken,c=i?.account?.expiresAt,l=i?.claim?.url,d=i?.claim?.expiresAt;if(a===void 0||o===void 0||s===void 0||c===void 0||l===void 0||d===void 0)throw new u(`Failed to create a temporary preview account because the response was missing required fields.`,{telemetryMessage:`deploy temporary account response incomplete`});return{account:{id:a,name:o,apiToken:s,expiresAt:c},claim:{url:l,expiresAt:d}}}T(Ut,`createTemporaryPreviewAccount`);async function Wt(e){let t=Vt(e.storage);if(t)return{account:t,cached:!0};if(!await e.prompt(Ft,It))throw new l(Lt,{telemetryMessage:`user temporary terms not accepted`});let n=await Ut(e.logger);return e.storage.write(n),{account:n,cached:!1}}T(Wt,`getOrCreateTemporaryPreviewAccount`);function Gt(e){let t={},n={generateAuthUrl:e.generateAuthUrl??kt,generateRandomState:e.generateRandomState??At},r=`default`;function i(t){return e.storageFactory(t??r)}T(i,`getStorage`);let a=T(()=>typeof e.clientId==`function`?e.clientId():e.clientId,`getClientId`),o=e.consent,s=!1,c,u=new URL(e.redirectUri),d=u.hostname,f=Number(u.port);async function p(r){if(e.hasEnvCredentials())return e.logger.error(`You are logged in with an API Token. Unset the CLOUDFLARE_API_TOKEN in the environment to log in via OAuth.`),!1;let s=ee(r.complianceConfig);if(s===`fedramp_high`)throw new l(tt`
37
- OAuth login is not supported in the \`${s}\` compliance region.
38
- Please use a Cloudflare API token (\`CLOUDFLARE_API_TOKEN\` environment variable) or remove the ${r.complianceConfig?.compliance_region?"`compliance_region` configuration property":"`CLOUDFLARE_API_ENVIRONMENT` environment variable"}.
39
- `,{telemetryMessage:`user login unsupported compliance region`});e.logger.log(`Attempting to login via OAuth...`);let c=await Ot({browser:r.browser??!0,scopes:r.scopes,clientId:a(),redirectUri:e.redirectUri,denied:o.denied,granted:o.granted,callbackHost:r.callbackHost??d,callbackPort:r.callbackPort??f},t,e,n);return i(r.profile).write({oauth_token:c.token?.value??``,expiration_time:c.token?.expiry,refresh_token:c.refreshToken?.value,scopes:c.scopes}),e.logger.log(`Successfully logged in.`),_(),e.purgeOnLoginOrLogout?.(),!0}T(p,`login`);function te(t){if(e.hasEnvCredentials())return!1;let{accessToken:n}=D({warningLogger:e.logger,storage:i(t)});return!!(n&&new Date>=new Date(n.expiry))}T(te,`isRefreshNeeded`);async function m(t){let n=i(t);try{let{token:{value:t,expiry:r}={value:``,expiry:``},refreshToken:{value:i}={},scopes:o}=await Tt(e.logger,e.isNonInteractiveOrCI,a(),n);return n.write({oauth_token:t,expiration_time:r,refresh_token:i,scopes:o}),!0}catch(t){return e.logger.debug(`Token refresh failed: ${t instanceof Error?t.message:String(t)}`),!1}}T(m,`refreshToken`);async function ne(t){if(e.hasEnvCredentials())return{loggedIn:!0};let n=D({warningLogger:e.logger,storage:i(t.profile)});return!n.accessToken&&!n.deprecatedApiToken?e.isNonInteractiveOrCI()?{loggedIn:!1,reason:`no-credentials-non-interactive`}:await p(t)?{loggedIn:!0}:{loggedIn:!1,reason:`no-credentials-login-failed`}:te(t.profile)?await m(t.profile)?{loggedIn:!0}:e.isNonInteractiveOrCI()?{loggedIn:!1,reason:`token-expired-non-interactive`}:await p(t)?{loggedIn:!0}:{loggedIn:!1,reason:`token-expired-login-failed`}:{loggedIn:!0}}T(ne,`loginOrRefreshIfRequired`);async function re(t){let n=_();if(e.hasEnvCredentials()){e.logger.log(`You are logged in with an API Token. Unset the CLOUDFLARE_API_TOKEN in the environment to log out.`);return}let r=D({warningLogger:e.logger,storage:i(t)}).refreshToken;if(!r){e.logger.log(n?`Cleared temporary preview account.`:`Not logged in, exiting...`);return}let o=`client_id=${encodeURIComponent(a())}&token_type_hint=refresh_token&token=${encodeURIComponent(r.value||``)}`;await(await(0,E.fetch)(Ge(),{method:`POST`,body:o,headers:{"Content-Type":`application/x-www-form-urlencoded`}})).text(),i(t).clear(),e.logger.log(`Successfully logged out.`),e.purgeOnLoginOrLogout?.()}T(re,`logout`);async function h(){let t=D({warningLogger:e.logger,storage:i()});if(t.accessToken){if(t.accessToken&&new Date>=new Date(t.accessToken.expiry)){if(!await m())return;t=D({warningLogger:e.logger,storage:i()})}return t.accessToken?.value}}T(h,`getOAuthTokenFromLocalState`);function ie(){return c?{apiToken:c.account.apiToken}:Ve({storage:i(),warningLogger:e.logger,allowGlobalAuthKey:e.allowGlobalAuthKey})}T(ie,`getAPITokenInternal`);function g(){return c?{apiToken:c.account.apiToken}:He({storage:i(),warningLogger:e.logger,allowGlobalAuthKey:e.allowGlobalAuthKey})}T(g,`requireApiTokenInternal`);function ae(t){s=t&&e.temporary!==void 0,c=void 0}T(ae,`setTemporaryAllowed`);function oe(){return s}T(oe,`isTemporaryAllowed`);function se(){return c}T(se,`getActiveTemporaryAccount`);async function ce(){if(!e.temporary)throw new l(`Temporary preview accounts are not supported by this CLI.`,{telemetryMessage:`user temporary account unsupported`});let t=await Wt({...e.temporary,logger:e.logger});return c=t.account,t}T(ce,`activateTemporaryAccount`);function _(){return c=void 0,e.temporary?.storage.clear()??!1}T(_,`clearTemporaryAccount`);function le(e){r=e}T(le,`setProfile`);function v(){return r}T(v,`getActiveProfile`);function ue(){return D({warningLogger:e.logger,storage:i()}).scopes}return T(ue,`getScopes`),{setProfile:le,getActiveProfile:v,login:p,logout:re,loginOrRefreshIfRequired:ne,getOAuthTokenFromLocalState:h,getAPIToken:ie,requireApiToken:g,getScopes:ue,setTemporaryAllowed:ae,isTemporaryAllowed:oe,getActiveTemporaryAccount:se,activateTemporaryAccount:ce}}T(Gt,`createOAuthFlow`);var Kt=[`default`,`staging`];function qt(e){let t={read(){return e.bindings.read()},write(t){e.bindings.write(t)},activate(t,n){let r=S.resolve(n),i=e.bindings.read();i[r]=t,e.bindings.write(i)},deactivate(t){let n=S.resolve(t),r=e.bindings.read(),i=r[n];if(i===void 0){let e=R(n,r);throw e?new l(`No profile is directly bound to "${L(n)}". The active profile "${e.profile}" is bound at "${L(e.dir)}". Run \`wrangler auth deactivate\` from that directory instead.`,{telemetryMessage:`auth deactivate wrong directory`}):new l(`No profile is bound to "${L(n)}". Nothing to deactivate.`,{telemetryMessage:`auth deactivate no binding`})}delete r[n],e.bindings.write(r);let a=R(n,r);return a?{removedProfile:i,newResolution:{profile:a.profile,source:`inherited from ${a.dir}`}}:e.configs.exists(`default`)?{removedProfile:i,newResolution:{profile:`default`,source:`default profile`}}:{removedProfile:i,newResolution:{profile:void 0,source:`no profile`}}},getProfileForDirectory(t){return R(t,e.bindings.read())?.profile},getBindingsForProfile(t){return Object.entries(e.bindings.read()).filter(([,e])=>e===t).map(([e])=>e)},removeAllBindingsForProfile(t){let n=e.bindings.read(),r=[];for(let[e,i]of Object.entries(n))i===t&&(r.push(e),delete n[e]);return r.length>0&&e.bindings.write(n),r}};return{configs:e.configs,bindings:t,resolve(e){return e.profile?e.profile===`default`?`default`:(Jt(e.profile),e.profile):t.getProfileForDirectory(e.cwd)||`default`}}}T(qt,`createProfileStore`);function Jt(e){if(Kt.includes(e.toLowerCase()))throw new l(`"${e}" is a reserved profile name. Use \`wrangler login\` and \`wrangler logout\` to manage the default profile, which applies as a global fallback.`,{telemetryMessage:`auth profile reserved name`});if(!/^[a-zA-Z0-9_-]+$/.test(e))throw new l(`Invalid profile name "${e}". Profile names may only contain alphanumeric characters, hyphens, and underscores.`,{telemetryMessage:`auth profile invalid name`})}T(Jt,`validateProfileName`);function L(e){return S.relative(process.cwd(),e)||`.`}T(L,`formatDirectoryForUserError`);function R(e,t){let n=S.resolve(e),r=Object.entries(t).sort(([e],[t])=>t.length-e.length);for(let[e,t]of r)if(n===e||n.startsWith(e)&&n[e.length]===S.sep)return{profile:t,dir:e}}T(R,`getProfileForDirectoryFromBindings`);function Yt(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}T(Yt,`getLineColFromPtr`);function Xt(e,t,n){let r=e.split(/\r\n|\n|\r/g),i=``,a=(Math.log10(t+1)|0)+1;for(let e=t-1;e<=t+1;e++){let o=r[e-1];o&&(i+=e.toString().padEnd(a,` `),i+=`: `,i+=o,i+=`
40
- `,e===t&&(i+=` `.repeat(a+n+2),i+=`^
41
- `))}return i}T(Xt,`makeCodeBlock`);var z=class extends Error{static{T(this,`TomlError`)}line;column;codeblock;constructor(e,t){let[n,r]=Yt(t.toml,t.ptr),i=Xt(t.toml,n,r);super(`Invalid TOML document: ${e}
42
-
43
- ${i}`,t),this.line=n,this.column=r,this.codeblock=i}};function Zt(e,t){let n=0;for(;e[t-++n]===`\\`;);return--n&&n%2}T(Zt,`isEscaped`);function B(e,t=0,n=e.length){let r=e.indexOf(`
44
- `,t);return e[r-1]===`\r`&&r--,r<=n?r:-1}T(B,`indexOfNewline`);function Qt(e,t){for(let n=t;n<e.length;n++){let r=e[n];if(r===`
45
- `)return n;if(r===`\r`&&e[n+1]===`
46
- `)return n+1;if(r<` `&&r!==` `||r===``)throw new z(`control characters are not allowed in comments`,{toml:e,ptr:t})}return e.length}T(Qt,`skipComment`);function V(e,t,n,r){let i;for(;(i=e[t])===` `||i===` `||!n&&(i===`
47
- `||i===`\r`&&e[t+1]===`
48
- `);)t++;return r||i!==`#`?t:V(e,Qt(e,t),n)}T(V,`skipVoid`);function $t(e,t,n,r,i=!1){if(!r)return t=B(e,t),t<0?e.length:t;for(let a=t;a<e.length;a++){let t=e[a];if(t===`#`)a=B(e,a);else if(t===n)return a+1;else if(t===r||i&&(t===`
49
- `||t===`\r`&&e[a+1]===`
50
- `))return a}throw new z(`cannot find end of structure`,{toml:e,ptr:t})}T($t,`skipUntil`);function en(e,t){let n=e[t],r=n===e[t+1]&&e[t+1]===e[t+2]?e.slice(t,t+3):n;t+=r.length-1;do t=e.indexOf(r,++t);while(t>-1&&n!==`'`&&Zt(e,t));return t>-1&&(t+=r.length,r.length>1&&(e[t]===n&&t++,e[t]===n&&t++)),t}T(en,`getStringEnd`);var tn=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}:\d{2}(?:\.\d+)?)?(Z|[-+]\d{2}:\d{2})?$/i,nn=class e extends Date{static{T(this,`TomlDate`)}#e=!1;#t=!1;#n=null;constructor(e){let t=!0,n=!0,r=`Z`;if(typeof e==`string`){let i=e.match(tn);i?(i[1]||(t=!1,e=`0000-01-01T${e}`),n=!!i[2],n&&e[10]===` `&&(e=e.replace(` `,`T`)),i[2]&&+i[2]>23?e=``:(r=i[3]||null,e=e.toUpperCase(),!r&&n&&(e+=`Z`))):e=``}super(e),isNaN(this.getTime())||(this.#e=t,this.#t=n,this.#n=r)}isDateTime(){return this.#e&&this.#t}isLocal(){return!this.#e||!this.#t||!this.#n}isDate(){return this.#e&&!this.#t}isTime(){return this.#t&&!this.#e}isValid(){return this.#e||this.#t}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#n===null)return e.slice(0,-1);if(this.#n===`Z`)return e;let t=this.#n.slice(1,3)*60+ +this.#n.slice(4,6);return t=this.#n[0]===`-`?t:-t,new Date(this.getTime()-t*6e4).toISOString().slice(0,-1)+this.#n}static wrapAsOffsetDateTime(t,n=`Z`){let r=new e(t);return r.#n=n,r}static wrapAsLocalDateTime(t){let n=new e(t);return n.#n=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#t=!1,n.#n=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#e=!1,n.#n=null,n}},rn=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,an=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,on=/^[+-]?0[0-9_]/,sn=/^[0-9a-f]{4,8}$/i,cn={b:`\b`,t:` `,n:`
51
- `,f:`\f`,r:`\r`,'"':`"`,"\\":`\\`};function ln(e,t=0,n=e.length){let r=e[t]===`'`,i=e[t++]===e[t]&&e[t]===e[t+1];i&&(n-=2,e[t+=2]===`\r`&&t++,e[t]===`
52
- `&&t++);let a=0,o,s=``,c=t;for(;t<n-1;){let n=e[t++];if(n===`
53
- `||n===`\r`&&e[t]===`
54
- `){if(!i)throw new z(`newlines are not allowed in strings`,{toml:e,ptr:t-1})}else if(n<` `&&n!==` `||n===``)throw new z(`control characters are not allowed in strings`,{toml:e,ptr:t-1});if(o){if(o=!1,n===`u`||n===`U`){let r=e.slice(t,t+=n===`u`?4:8);if(!sn.test(r))throw new z(`invalid unicode escape`,{toml:e,ptr:a});try{s+=String.fromCodePoint(parseInt(r,16))}catch{throw new z(`invalid unicode escape`,{toml:e,ptr:a})}}else if(i&&(n===`
55
- `||n===` `||n===` `||n===`\r`)){if(t=V(e,t-1,!0),e[t]!==`
56
- `&&e[t]!==`\r`)throw new z(`invalid escape: only line-ending whitespace may be escaped`,{toml:e,ptr:a});t=V(e,t)}else if(n in cn)s+=cn[n];else throw new z(`unrecognized escape sequence`,{toml:e,ptr:a});c=t}else !r&&n===`\\`&&(a=t-1,o=!0,s+=e.slice(c,a))}return s+e.slice(c,n-1)}T(ln,`parseString`);function un(e,t,n,r){if(e===`true`)return!0;if(e===`false`)return!1;if(e===`-inf`)return-1/0;if(e===`inf`||e===`+inf`)return 1/0;if(e===`nan`||e===`+nan`||e===`-nan`)return NaN;if(e===`-0`)return r?0n:0;let i=rn.test(e);if(i||an.test(e)){if(on.test(e))throw new z(`leading zeroes are not allowed`,{toml:t,ptr:n});e=e.replace(/_/g,``);let a=+e;if(isNaN(a))throw new z(`invalid number`,{toml:t,ptr:n});if(i){if((i=!Number.isSafeInteger(a))&&!r)throw new z(`integer value cannot be represented losslessly`,{toml:t,ptr:n});(i||r===!0)&&(a=BigInt(e))}return a}let a=new nn(e);if(!a.isValid())throw new z(`invalid value`,{toml:t,ptr:n});return a}T(un,`parseValue`);function dn(e,t,n,r){let i=e.slice(t,n),a=i.indexOf(`#`);a>-1&&(Qt(e,a),i=i.slice(0,a));let o=i.trimEnd();if(!r){let n=i.indexOf(`
57
- `,o.length);if(n>-1)throw new z(`newlines are not allowed in inline tables`,{toml:e,ptr:t+n})}return[o,a]}T(dn,`sliceAndTrimEndOf`);function fn(e,t,n,r,i){if(r===0)throw new z(`document contains excessively nested structures. aborting.`,{toml:e,ptr:t});let a=e[t];if(a===`[`||a===`{`){let[o,s]=a===`[`?gn(e,t,r,i):hn(e,t,r,i),c=n?$t(e,s,`,`,n):s;if(s-c&&n===`}`){let t=B(e,s,c);if(t>-1)throw new z(`newlines are not allowed in inline tables`,{toml:e,ptr:t})}return[o,c]}let o;if(a===`"`||a===`'`){o=en(e,t);let r=ln(e,t,o);if(n){if(o=V(e,o,n!==`]`),e[o]&&e[o]!==`,`&&e[o]!==n&&e[o]!==`
58
- `&&e[o]!==`\r`)throw new z(`unexpected character encountered`,{toml:e,ptr:o});o+=+(e[o]===`,`)}return[r,o]}o=$t(e,t,`,`,n);let s=dn(e,t,o-+(e[o-1]===`,`),n===`]`);if(!s[0])throw new z(`incomplete key-value declaration: no value specified`,{toml:e,ptr:t});return n&&s[1]>-1&&(o=V(e,t+s[1]),o+=+(e[o]===`,`)),[un(s[0],e,t,i),o]}T(fn,`extractValue`);var pn=/^[a-zA-Z0-9-_]+[ \t]*$/;function mn(e,t,n=`=`){let r=t-1,i=[],a=e.indexOf(n,t);if(a<0)throw new z(`incomplete key-value: cannot find end of key`,{toml:e,ptr:t});do{let o=e[t=++r];if(o!==` `&&o!==` `)if(o===`"`||o===`'`){if(o===e[t+1]&&o===e[t+2])throw new z(`multiline strings are not allowed in keys`,{toml:e,ptr:t});let s=en(e,t);if(s<0)throw new z(`unfinished string encountered`,{toml:e,ptr:t});r=e.indexOf(`.`,s);let c=e.slice(s,r<0||r>a?a:r),l=B(c);if(l>-1)throw new z(`newlines are not allowed in keys`,{toml:e,ptr:t+r+l});if(c.trimStart())throw new z(`found extra tokens after the string part`,{toml:e,ptr:s});if(a<s&&(a=e.indexOf(n,s),a<0))throw new z(`incomplete key-value: cannot find end of key`,{toml:e,ptr:t});i.push(ln(e,t,s))}else{r=e.indexOf(`.`,t);let n=e.slice(t,r<0||r>a?a:r);if(!pn.test(n))throw new z(`only letter, numbers, dashes and underscores are allowed in keys`,{toml:e,ptr:t});i.push(n.trimEnd())}}while(r+1&&r<a);return[i,V(e,a+1,!0,!0)]}T(mn,`parseKey`);function hn(e,t,n,r){let i={},a=new Set,o,s=0;for(t++;(o=e[t++])!==`}`&&o;){let c={toml:e,ptr:t-1};if(o===`
59
- `)throw new z(`newlines are not allowed in inline tables`,c);if(o===`#`)throw new z(`inline tables cannot contain comments`,c);if(o===`,`)throw new z(`expected key-value, found comma`,c);if(o!==` `&&o!==` `){let o,c=i,l=!1,[u,d]=mn(e,t-1);for(let n=0;n<u.length;n++){if(n&&(c=l?c[o]:c[o]={}),o=u[n],(l=Object.hasOwn(c,o))&&(typeof c[o]!=`object`||a.has(c[o])))throw new z(`trying to redefine an already defined value`,{toml:e,ptr:t});!l&&o===`__proto__`&&Object.defineProperty(c,o,{enumerable:!0,configurable:!0,writable:!0})}if(l)throw new z(`trying to redefine an already defined value`,{toml:e,ptr:t});let[f,ee]=fn(e,d,`}`,n-1,r);a.add(f),c[o]=f,t=ee,s=e[t-1]===`,`?t-1:0}}if(s)throw new z(`trailing commas are not allowed in inline tables`,{toml:e,ptr:s});if(!o)throw new z(`unfinished table encountered`,{toml:e,ptr:t});return[i,t]}T(hn,`parseInlineTable`);function gn(e,t,n,r){let i=[],a;for(t++;(a=e[t++])!==`]`&&a;)if(a===`,`)throw new z(`expected value, found comma`,{toml:e,ptr:t-1});else if(a===`#`)t=Qt(e,t);else if(a!==` `&&a!==` `&&a!==`
60
- `&&a!==`\r`){let a=fn(e,t-1,`]`,n-1,r);i.push(a[0]),t=a[1]}if(!a)throw new z(`unfinished array encountered`,{toml:e,ptr:t});return[i,t]}T(gn,`parseArray`);function _n(e,t,n,r){let i=t,a=n,o,s=!1,c;for(let t=0;t<e.length;t++){if(t){if(i=s?i[o]:i[o]={},a=(c=a[o]).c,r===0&&(c.t===1||c.t===2))return null;if(c.t===2){let e=i.length-1;i=i[e],a=a[e].c}}if(o=e[t],(s=Object.hasOwn(i,o))&&a[o]?.t===0&&a[o]?.d)return null;s||(o===`__proto__`&&(Object.defineProperty(i,o,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(a,o,{enumerable:!0,configurable:!0,writable:!0})),a[o]={t:t<e.length-1&&r===2?3:r,d:!1,i:0,c:{}})}if(c=a[o],c.t!==r&&!(r===1&&c.t===3)||(r===2&&(c.d||(c.d=!0,i[o]=[]),i[o].push(i={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}),c.d))return null;if(c.d=!0,r===1)i=s?i[o]:i[o]={};else if(r===0&&s)return null;return[o,i,c.c]}T(_n,`peekTable`);function vn(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let r={},i={},a=r,o=i;for(let s=V(e,0);s<e.length;){if(e[s]===`[`){let t=e[++s]===`[`,n=mn(e,s+=+t,`]`);if(t){if(e[n[1]-1]!==`]`)throw new z(`expected end of table declaration`,{toml:e,ptr:n[1]-1});n[1]++}let c=_n(n[0],r,i,t?2:1);if(!c)throw new z(`trying to redefine an already defined table or value`,{toml:e,ptr:s});o=c[2],a=c[1],s=n[1]}else{let r=mn(e,s),i=_n(r[0],a,o,0);if(!i)throw new z(`trying to redefine an already defined table or value`,{toml:e,ptr:s});let c=fn(e,r[1],void 0,t,n);i[1][i[0]]=c[0],s=c[1]}if(s=V(e,s,!0),e[s]&&e[s]!==`
61
- `&&e[s]!==`\r`)throw new z(`each key-value declaration must be followed by an end-of-line`,{toml:e,ptr:s});s=V(e,s)}return r}T(vn,`parse`);var yn=/^[a-z0-9-_]+$/i;function H(e){let t=typeof e;if(t===`object`){if(Array.isArray(e))return`array`;if(e instanceof Date)return`date`}return t}T(H,`extendedTypeOf`);function bn(e){for(let t=0;t<e.length;t++)if(H(e[t])!==`object`)return!1;return e.length!=0}T(bn,`isArrayOfTables`);function U(e){return JSON.stringify(e).replace(/\x7f/g,`\\u007f`)}T(U,`formatString`);function xn(e,t,n,r){if(n===0)throw Error(`Could not stringify the object: maximum object depth exceeded`);if(t===`number`)return isNaN(e)?`nan`:e===1/0?`inf`:e===-1/0?`-inf`:r&&Number.isInteger(e)?e.toFixed(1):e.toString();if(t===`bigint`||t===`boolean`)return e.toString();if(t===`string`)return U(e);if(t===`date`){if(isNaN(e.getTime()))throw TypeError(`cannot serialize invalid date`);return e.toISOString()}if(t===`object`)return Sn(e,n,r);if(t===`array`)return Cn(e,n,r)}T(xn,`stringifyValue`);function Sn(e,t,n){let r=Object.keys(e);if(r.length===0)return`{}`;let i=`{ `;for(let a=0;a<r.length;a++){let o=r[a];a&&(i+=`, `),i+=yn.test(o)?o:U(o),i+=` = `,i+=xn(e[o],H(e[o]),t-1,n)}return i+` }`}T(Sn,`stringifyInlineTable`);function Cn(e,t,n){if(e.length===0)return`[]`;let r=`[ `;for(let i=0;i<e.length;i++){if(i&&(r+=`, `),e[i]===null||e[i]===void 0)throw TypeError(`arrays cannot contain null or undefined values`);r+=xn(e[i],H(e[i]),t-1,n)}return r+` ]`}T(Cn,`stringifyArray`);function wn(e,t,n,r){if(n===0)throw Error(`Could not stringify the object: maximum object depth exceeded`);let i=``;for(let a=0;a<e.length;a++)i+=`${i&&`
62
- `}[[${t}]]
63
- `,i+=Tn(0,e[a],t,n,r);return i}T(wn,`stringifyArrayTable`);function Tn(e,t,n,r,i){if(r===0)throw Error(`Could not stringify the object: maximum object depth exceeded`);let a=``,o=``,s=Object.keys(t);for(let e=0;e<s.length;e++){let c=s[e];if(t[c]!==null&&t[c]!==void 0){let e=H(t[c]);if(e===`symbol`||e===`function`)throw TypeError(`cannot serialize values of type '${e}'`);let s=yn.test(c)?c:U(c);if(e===`array`&&bn(t[c]))o+=(o&&`
64
- `)+wn(t[c],n?`${n}.${s}`:s,r-1,i);else if(e===`object`){let e=n?`${n}.${s}`:s;o+=(o&&`
65
- `)+Tn(e,t[c],e,r-1,i)}else a+=s,a+=` = `,a+=xn(t[c],e,r,i),a+=`
66
- `}}return e&&(a||!o)&&(a=a?`[${e}]
67
- ${a}`:`[${e}]`),a&&o?`${a}
68
- ${o}`:a||o}T(Tn,`stringifyTable`);function En(e,{maxDepth:t=1e3,numbersAsFloat:n=!1}={}){if(H(e)!==`object`)throw TypeError(`stringify can only be called with an object`);let r=Tn(0,e,``,t,n);return r[r.length-1]===`
69
- `?r:r+`
70
- `}T(En,`stringify`);var Dn={parse:vn,stringify:En,TomlDate:nn,TomlError:z},On=`config`;function kn(e){if(e===void 0||e===`default`){let e=p();return e===`production`?`default`:e}return Jt(e),e}T(kn,`resolveAuthProfileBaseName`);function W(e,t){return S.join(e,On,`${kn(t)}.toml`)}T(W,`getAuthConfigFilePath`);var An=class{constructor(e,t){this.configPath=e,this.profile=t}static{T(this,`FileCredentialStore`)}kind=`file`;read(){let e=W(this.configPath,this.profile);if(y(e))return s(m(e))}write(e){let t=W(this.configPath,this.profile);ve(S.dirname(t),{recursive:!0}),x(t,Dn.stringify(e),{encoding:`utf-8`,mode:384}),_e(t,384)}clear(){let e=W(this.configPath,this.profile),t=y(e);return t&&b(e),t}path(){return W(this.configPath,this.profile)}describe(){return W(this.configPath,this.profile)}},G=32,jn=12,Mn=16,Nn=`AES-256-GCM`,Pn=`aes-256-gcm`;function Fn(){return new Uint8Array(Oe(G))}T(Fn,`generateKey`);function In(e,t){if(t.length!==G)throw Error(`AES-256-GCM requires a ${G}-byte key (got ${t.length} bytes).`);let n=Oe(jn),r=Te(Pn,t,n),i=Buffer.concat([r.update(e,`utf-8`),r.final()]),a=r.getAuthTag();return{v:1,alg:Nn,iv:n.toString(`base64`),tag:a.toString(`base64`),ciphertext:i.toString(`base64`)}}T(In,`encryptString`);function Ln(e,t){if(t.length!==G)throw Error(`AES-256-GCM requires a ${G}-byte key (got ${t.length} bytes).`);if(e.v!==1)throw Error(`Unsupported encrypted envelope version: ${e.v}.`);let n=Buffer.from(e.iv,`base64`),r=Buffer.from(e.tag,`base64`),i=Buffer.from(e.ciphertext,`base64`);if(n.length!==jn)throw Error(`Expected ${jn}-byte IV in envelope (got ${n.length} bytes).`);if(r.length!==Mn)throw Error(`Expected ${Mn}-byte auth tag in envelope (got ${r.length} bytes).`);let a=Ee(Pn,t,n);return a.setAuthTag(r),Buffer.concat([a.update(i),a.final()]).toString(`utf-8`)}T(Ln,`decryptString`);function Rn(e){if(typeof e!=`object`||!e)return;let t=e;if(!(t.v!==1||t.alg!==Nn||typeof t.iv!=`string`||typeof t.tag!=`string`||typeof t.ciphertext!=`string`))return t}T(Rn,`parseEncryptedEnvelope`);function K(e,t){return S.join(e,`config`,`${kn(t)}.enc`)}T(K,`getEncryptedAuthConfigFilePath`);var zn=class{constructor(e,t,n,r){this.configPath=e,this.keyProvider=t,this.onPlaintextMigration=n,this.profile=r}static{T(this,`EncryptedFileCredentialStore`)}kind=`encrypted-file`;read(){let e=K(this.configPath,this.profile);if(y(e))return this.readEncryptedFile(e);let t=W(this.configPath,this.profile);if(y(t))return this.migrateFromPlaintext(t,e)}write(e){let t=this.ensureKey(),n=In(Dn.stringify(e),t),r=K(this.configPath,this.profile);ve(S.dirname(r),{recursive:!0}),x(r,JSON.stringify(n,null,` `),{encoding:`utf-8`,mode:384}),_e(r,384);let i=W(this.configPath,this.profile);y(i)&&b(i)}clear(){let e=K(this.configPath,this.profile),t=W(this.configPath,this.profile),n=!1;y(e)&&(b(e),n=!0),y(t)&&(b(t),n=!0);try{this.keyProvider.deleteKey()}catch{}return n}path(){return K(this.configPath,this.profile)}describe(){return`Encrypted file (${K(this.configPath,this.profile)}) with key in ${this.keyProvider.describe()}`}readEncryptedFile(e){let t=this.keyProvider.getKey();if(t===void 0)return;let n=m(e),r;try{r=Rn(JSON.parse(n))}catch{return}if(r===void 0)return;let i;try{i=Ln(r,t)}catch{return}try{return Dn.parse(i)}catch{return}}migrateFromPlaintext(e,t){let n=m(e),r;try{r=Dn.parse(n)}catch{return}return this.write(r),this.onPlaintextMigration?.({plaintextPath:e,encryptedPath:t,keyProviderDescription:this.keyProvider.describe()}),r}ensureKey(){let e=this.keyProvider.getKey();if(e!==void 0)return e;let t=Fn();return this.keyProvider.setKey(t),t}},Bn=`1.3.0`;function Vn(e){return we(`npm`,e,{encoding:`utf-8`,stdio:[`ignore`,`pipe`,`pipe`],shell:process.platform===`win32`})}T(Vn,`defaultNpmRunner`);var Hn=Vn,q=new Map;function Un(e){Hn=e??Vn,q.clear()}T(Un,`setNpmRunner`);function Wn(e){return S.join(e,`native`,`keyring`)}T(Wn,`getKeyringInstallDir`);function Gn(e){return S.join(e,`node_modules`,`@napi-rs`,`keyring`)}T(Gn,`getInstalledBindingPath`);function Kn(e){let t=q.get(e);if(t!==void 0)return t;let n=Gn(e);if(y(S.join(n,`index.js`)))return q.set(e,n),n;try{let t=Hn([`root`,`-g`]);if(t.status===0){let n=S.join(t.stdout.trim(),`@napi-rs`,`keyring`);if(y(S.join(n,`index.js`)))return q.set(e,n),n}}catch{}return q.set(e,null),null}T(Kn,`findKeyringBinding`);function qn(e){let t=e;ve(t,{recursive:!0});let n=S.join(t,`package.json`);y(n)||x(n,JSON.stringify({private:!0,name:`cloudflare-auth-keyring-host`},null,` `),`utf-8`);let r;try{r=Hn([`install`,`@napi-rs/keyring@${Bn}`,`--prefix`,t,`--no-save`,`--no-audit`,`--no-fund`,`--no-package-lock`,`--loglevel=error`])}catch(e){throw new l(`Failed to spawn \`npm\` to install the keyring backend: ${e instanceof Error?e.message:String(e)}
71
-
72
- Install \`npm\` and retry, or install the binding globally:
73
- npm install -g @napi-rs/keyring@${Bn}`,{telemetryMessage:`workers-auth keyring npm spawn failed`})}if(r.status!==0)throw new l(`Failed to install \`@napi-rs/keyring\` (npm exited ${r.status}):
74
- ${r.stderr?.trim()??`(no stderr)`}
75
-
76
- Retry once the underlying issue is fixed, or install the binding globally:
77
- npm install -g @napi-rs/keyring@${Bn}`,{telemetryMessage:`workers-auth keyring npm install failed`});q.delete(e)}T(qn,`installKeyringBindingSync`);var Jn;function Yn(e){Jn=e}T(Yn,`setKeyringEntryFactory`);var Xn=ge(import.meta.url);function Zn(e){if(Jn!==void 0)return Jn;let t=Kn(e);if(t===null)throw Error("`@napi-rs/keyring` binding not found. Call `installKeyringBindingSync()` first.");let n=Xn(t);return(e,t)=>new n.Entry(e,t)}T(Zn,`resolveKeyringEntryFactory`);function J(e){return kn(e)}T(J,`getKeyringAccountName`);function Qn(e){let t={v:1,key:Buffer.from(e).toString(`base64`),created:new Date().toISOString()};return JSON.stringify(t)}T(Qn,`encodeKeyEnvelope`);function $n(e){if(e===``)return;let t;try{t=JSON.parse(e)}catch{return}if(!(typeof t!=`object`||!t||t.v!==1||typeof t.key!=`string`))try{let e=Buffer.from(t.key,`base64`);return e.length===32?new Uint8Array(e):void 0}catch{return}}T($n,`decodeKeyEnvelope`);function er(e,t={}){return we(`secret-tool`,e,{encoding:`utf-8`,input:t.input})}T(er,`defaultRunner`);var Y=er,tr=void 0;function nr(e){Y=e??er,tr=void 0}T(nr,`setLinuxSecretToolRunner`);function rr(){if(tr!==void 0)return tr;let e;try{e=Y([`--version`]).status===0}catch{e=!1}return tr=e,e}T(rr,`probeSecretTool`);var ir=class{constructor(e,t){this.serviceName=e,this.profile=t}static{T(this,`LinuxSecretToolKeyProvider`)}getKey(){let e=Y([`lookup`,`service`,this.serviceName,`account`,J(this.profile)]);if(e.status!==1){if(e.status!==0)throw Error(`Failed to read key via secret-tool (exit ${e.status}): ${e.stderr?.trim()??`(no stderr)`}`);return $n(e.stdout.trim())}}setKey(e){let t=Y([`store`,`--label=Cloudflare credentials key`,`service`,this.serviceName,`account`,J(this.profile)],{input:Qn(e)});if(t.status!==0)throw Error(`Failed to write key via secret-tool (exit ${t.status}): ${t.stderr?.trim()??`(no stderr)`}`)}deleteKey(){let e=Y([`clear`,`service`,this.serviceName,`account`,J(this.profile)]);if(e.status!==0)throw Error(`Failed to delete key via secret-tool (exit ${e.status}): ${e.stderr?.trim()??`(no stderr)`}`)}describe(){return`Linux secret-tool (service=${this.serviceName}, account=${J(this.profile)})`}},ar=44;function or(e,t={}){return we(`/usr/bin/security`,e,{encoding:`utf-8`,input:t.input})}T(or,`defaultRunner`);var sr=or;function cr(e){sr=e??or}T(cr,`setMacSecurityCommandRunner`);var lr=class{constructor(e,t){this.serviceName=e,this.profile=t}static{T(this,`MacSecurityKeyProvider`)}getKey(){let e=sr([`find-generic-password`,`-s`,this.serviceName,`-a`,J(this.profile),`-w`]);if(e.status!==ar){if(e.status!==0)throw Error(`Failed to read key from macOS Keychain (exit ${e.status}): ${e.stderr?.trim()??`(no stderr)`}`);return $n(e.stdout.trim())}}setKey(e){let t=sr([`add-generic-password`,`-s`,this.serviceName,`-a`,J(this.profile),`-w`,Qn(e),`-U`]);if(t.status!==0)throw Error(`Failed to write key to macOS Keychain (exit ${t.status}): ${t.stderr?.trim()??`(no stderr)`}`)}deleteKey(){let e=sr([`delete-generic-password`,`-s`,this.serviceName,`-a`,J(this.profile)]);if(!(e.status===0||e.status===ar))throw Error(`Failed to delete key from macOS Keychain (exit ${e.status}): ${e.stderr?.trim()??`(no stderr)`}`)}describe(){return`macOS Keychain (service=${this.serviceName}, account=${J(this.profile)})`}},ur=class{constructor(e,t,n){this.serviceName=e,this.installDir=t,this.profile=n}static{T(this,`NapiKeyringKeyProvider`)}entry(){return Zn(this.installDir)(this.serviceName,J(this.profile))}getKey(){let e=this.entry().getPassword();if(!(e===null||e===``))return $n(e)}setKey(e){this.entry().setPassword(Qn(e))}deleteKey(){try{this.entry().deletePassword()}catch{}}describe(){return`${process.platform===`win32`?`Windows Credential Manager`:`OS keyring`} via @napi-rs/keyring (service=${this.serviceName}, account=${J(this.profile)})`}},dr;function fr(e){dr=e}T(fr,`setKeyProviderFactoryForTesting`);function pr(e,t,n){if(dr!==void 0)return{kind:`available`,provider:dr(e,t)};switch(process.platform){case`darwin`:return{kind:`available`,provider:new lr(e,t)};case`linux`:return rr()?{kind:`available`,provider:new ir(e,t)}:{kind:`unsupported`};case`win32`:{let r=Wn(n);return Kn(r)===null?{kind:`needs-install`,install:T(()=>qn(r),`install`),afterInstall:T(()=>new ur(e,r,t),`afterInstall`)}:{kind:`available`,provider:new ur(e,r,t)}}default:return{kind:`unsupported`}}}T(pr,`resolveKeyProvider`);var mr={installFailedThisSession:!1,hasWarnedAboutKeyringFallback:!1,hasWarnedAboutSecretToolMissing:!1};function hr(){return mr}T(hr,`getResolverSessionFlags`);function gr(){mr.installFailedThisSession=!1,mr.hasWarnedAboutKeyringFallback=!1,mr.hasWarnedAboutSecretToolMissing=!1}T(gr,`resetCredentialStorageState`);function _r(e){let t={...e,cliName:e.cliName??`your CLI`};function n(e){return vr(t,e)}T(n,`getActiveStore`);function r(e){return{read:T(()=>n(e).read(),`read`),write:T(t=>n(e).write(t),`write`),clear:T(()=>n(e).clear(),`clear`),path:T(()=>n(e).path(),`path`)}}return T(r,`storageFactory`),{storageFactory:r,getActiveStore:n}}T(_r,`createCredentialStorageContext`);function vr(e,t){let n=Ye(),r=e.getConfigPath();if(n===!1)return new An(r,t);let i=n===!0;if(!(n??e.isKeyringEnabled()??!1))return new An(r,t);let a=pr(e.serviceName,t,r);switch(a.kind){case`available`:return new zn(r,a.provider,yr(e),t);case`needs-install`:return br(a,i,e,t);case`unsupported`:return xr(i,e,t)}}T(vr,`resolveActiveCredentialStore`);function yr(e){return t=>{e.logger.warn(`Migrated credentials from ${t.plaintextPath} into ${t.encryptedPath} (key in ${t.keyProviderDescription}). The plaintext file has been deleted.`)}}T(yr,`buildMigrationLogger`);function br(e,t,n,r){let i=hr();if(i.installFailedThisSession){if(t)throw new l(`CLOUDFLARE_AUTH_USE_KEYRING is set but the keyring backend could not be installed earlier this session.`,{telemetryMessage:`workers-auth keyring install previously failed`});return Sr(`The keyring backend could not be installed earlier this session; using the plaintext credentials file.`,n,r)}if(n.isNonInteractiveOrCI())throw new l(wr(n.cliName),{telemetryMessage:`workers-auth keyring binding not installed`});try{n.logger.log(`🔐 Installing keyring backend (one-time, ~2 MB)…`),e.install()}catch(e){if(i.installFailedThisSession=!0,t)throw e instanceof l?e:new l(`Failed to install the keyring backend: ${e instanceof Error?e.message:String(e)}`,{telemetryMessage:`workers-auth keyring install threw`});return Sr(`Failed to install the keyring backend (${e instanceof Error?e.message:String(e)}); falling back to the plaintext credentials file.`,n,r)}return new zn(n.getConfigPath(),e.afterInstall(),yr(n),r)}T(br,`handleNeedsInstall`);function xr(e,t,n){let r=process.platform,i=r===`linux`,a=i?Cr(t.cliName):`OS keyring storage is not supported on \`${r}\`; falling back to the plaintext credentials file.`;if(e)throw new l(i?`CLOUDFLARE_AUTH_USE_KEYRING is set but ${a}`:`CLOUDFLARE_AUTH_USE_KEYRING is set but no keyring backend is available on \`${r}\`.`,{telemetryMessage:i?`workers-auth keyring secret tool missing`:`workers-auth keyring unsupported platform`});if(i&&t.isNonInteractiveOrCI())throw new l(a,{telemetryMessage:`workers-auth keyring secret tool missing`});let o=hr();return i?(o.hasWarnedAboutSecretToolMissing||(o.hasWarnedAboutSecretToolMissing=!0,t.logger.warn(`${a}
78
-
79
- Falling back to the plaintext credentials file for this session.`)),new An(t.getConfigPath(),n)):Sr(a,t,n)}T(xr,`handleUnsupported`);function Sr(e,t,n){let r=hr();return r.hasWarnedAboutKeyringFallback||(r.hasWarnedAboutKeyringFallback=!0,t.logger.warn(e)),new An(t.getConfigPath(),n)}T(Sr,`fallbackToFileWithWarning`);function Cr(e){return`\`secret-tool\` is required for OS keyring storage on Linux but is not installed.
80
-
81
- Install it via your package manager:
82
- Debian/Ubuntu: sudo apt-get install libsecret-tools
83
- Fedora/RHEL: sudo dnf install libsecret
84
- Arch: sudo pacman -S libsecret
85
- Alpine: apk add libsecret
86
-
87
- Or disable keyring storage: \`${e} login --no-use-keyring\`.`}T(Cr,`secretToolMissingMessage`);function wr(e){return`\`@napi-rs/keyring\` is required for OS keyring storage on Windows but is not installed.
88
-
89
- Run \`${e} login --use-keyring\` interactively to install it automatically, or install it globally for CI:
90
-
91
- npm install -g @napi-rs/keyring@${Bn}
92
-
93
- Or disable keyring storage: \`${e} login --no-use-keyring\`.`}T(wr,`windowsBindingMissingMessage`);function Tr(e){let t=K(e.configPath,e.profile),n=y(t),r=pr(e.serviceName,e.profile,e.configPath);return r.kind===`available`?(new zn(e.configPath,r.provider,void 0,e.profile).clear(),{backendAvailable:!0,encryptedFileExisted:n}):(n&&b(t),{backendAvailable:!1,encryptedFileExisted:n})}T(Tr,`scrubEncryptedCredentials`);const{white:Er,gray:Dr,dim:Or,hidden:kr,bold:Ar,cyanBright:jr,bgCyan:Mr}=_;_.hex(`#BD5B08`);const Nr=_.hex(`#111`);_.hex(`#0E838F`);const Pr=Nr.bgHex(`#0E838F`);_.hex(`#AB2526`);const Fr=Nr.bgHex(`#AB2526`);_.hex(`#218529`);const Ir=Nr.bgHex(`#218529`);_.hex(`#7F7322`);const Lr=Nr.bgHex(`#7F7322`),Rr=process.stdout;process.stderr;var zr=e(se(),1);const Br={diamond:`◇`,dash:`─`,radioInactive:`○`,radioActive:`●`,backActive:`◀`,backInactive:`◁`,bar:`│`,leftT:`├`,rigthT:`┤`,arrows:{left:`‹`,right:`›`},corners:{tl:`╭`,bl:`╰`,tr:`╮`,br:`╯`}};Fr(` ERROR `),Lr(` WARNING `),Pr(` INFO `),Ir(` SUCCESS `),Er.bgRed(` X `),fe(Rr),Dr(Br.bar),Dr(Br.corners.bl),Dr(Br.leftT);function Vr(){try{return!!(process.stdin.isTTY&&process.stdout.isTTY)}catch{return!1}}function X(){return!Vr()||zr.isCI}const Hr=zr.isCI;function Ur(){a(i)}async function Wr(e){let t=re(),n=e.map(e=>({value:e,label:e.name})),r=await new ce({options:n,initialValue:n[0]?.value,render(){let e=t.bold(`Select an account`),n=this.options.map((e,n)=>{let r=n===this.cursor,i=e.value,a=t.hex(h.muted)(`${i.id.slice(0,12)}...`);return r?` ${t.hex(h.orange)(`>`)} ${t.bold(i.name)} ${a}`:` ${t.dim(i.name)} ${a}`});return`${e} ${t.dim(`(use arrow keys, enter to confirm)`)}\n${n.join(`
94
- `)}`}}).prompt();return v(r)||!r?null:r}async function Gr(){let e=[];for await(let t of process.stdin)e.push(Buffer.from(t));let t=Buffer.concat(e).toString(`utf-8`);return t.endsWith(`
95
- `)?t.slice(0,-1):t}async function Kr(e,t,n){let r=n?.kind??`text`;if(X()){if(r===`secret`){let t=await Gr();if(t.length>0)return t;throw Error(`--${e} is required. Pipe the value via stdin, pass --${e} <value>, or run interactively.`)}throw Error(`--${e} is required. Pass --${e} <value> or run interactively.`)}let i=`Enter value for --${e}`,a=t||n?.question||i;Ur();let o=r===`secret`?await de({message:a,mask:`•`,validate:e=>e&&e.length>0?void 0:`Value cannot be empty`}):await ue({message:a,validate:e=>e&&e.length>0?void 0:`Value cannot be empty`});return(v(o)||typeof o!=`string`)&&process.exit(130),o}async function qr(e,t,n){if(X())throw Error(`--${e} is required (one of: ${n.join(`, `)}). Pass --${e} <value> or run interactively.`);let r=`Select value for --${e}`,i=t||r;Ur();let a=await le({message:i,options:n.map(e=>({value:e,label:e}))});return(v(a)||typeof a!=`string`)&&process.exit(130),a}async function Jr(e={}){if(e.force===!0)return!0;let t=e.message?`${e.message} Continue?`:`This permanently deletes the resource. Continue?`;if(X()){let e=re();return process.stderr.write(`${e.hex(h.warning)(`?`)} ${t}\n ${e.dim(`(non-interactive; pass --force to confirm)`)}\n`),!1}Ur();let n=await pe({message:t,initialValue:!1});return v(n)&&process.exit(130),n===!0}const Z=`.cfrc`;function Yr(e){let t=e||process.cwd(),n=C(t);for(;t!==n;){let e=w(t,Z);if(y(e))try{let t=ye(e,`utf-8`).replace(/^\s*\/\/.*$/gm,``);return{config:JSON.parse(t),path:e}}catch{}t=C(t)}let r=w(t,Z);if(y(r))try{let e=ye(r,`utf-8`).replace(/^\s*\/\/.*$/gm,``);return{config:JSON.parse(e),path:r}}catch{}return null}function Xr(e,t){x(w(t||process.cwd(),Z),JSON.stringify(e,null,2)+`
96
- `,{mode:384})}function Zr(e){let t=w(e||process.cwd(),Z);return y(t)?(be(t),!0):!1}async function Qr(e){let t={},n=Q(`accountId`,`CLOUDFLARE_ACCOUNT_ID`);n&&(t.accountId=n);let r=Q(`zone`,`CLOUDFLARE_ZONE_ID`,e?.zone);r&&(t.zone=r);let i=Q(`complianceRegion`,`CLOUDFLARE_COMPLIANCE_REGION`);return i&&(t.complianceRegion=i),t}function Q(e,t,n){if(n)return{value:n,source:`flag`};let r=process.env[t];if(r)return{value:r,source:`env`};let i=Yr(),a=i?.config[e];if(a)return{value:a,source:`project`,path:i.path};let o=g().defaults?.[e];if(o)return{value:o,source:`config`,path:oe()}}function $r(){return Q(`accountId`,`CLOUDFLARE_ACCOUNT_ID`)?.value}async function ei(e){let t=Q(`accountId`,`CLOUDFLARE_ACCOUNT_ID`);if(t)return ti(t.value,di(t,`accountId`)),t.value;if(e){let t=await ni(e);if(t)return t}throw Error(`No account ID found.
97
-
98
- Please provide one of the following:
99
- 1. CLOUDFLARE_ACCOUNT_ID environment variable
100
- 2. Run 'cf context set account-id <id>' to set a default
101
- 3. Create a .cfrc file in your project
102
-
103
- You can find your account ID in the Cloudflare dashboard URL:
104
- https://dash.cloudflare.com/<account-id>/...`)}function ti(e,t){if(!process.env.DEBUG)return;let n=e.length>12?e.slice(0,12)+`…`:e;process.stderr.write(`Using account: ${n} (${t})\n`)}async function ni(e){let t;try{t=await mi(e)}catch{return}if(t.length===0)return;if(t.length===1&&t[0]){let n=t[0],{displayName:r}=await fi(`accountId`,n.id,`user`,e);return ti(n.id,`auto-selected from token — ${r}`),n.id}if(X()){let e=t.map(e=>` ${e.id} ${e.name}`).join(`
105
- `);throw Error(`Multiple accounts available but running non-interactively.
106
-
107
- Available accounts:
108
- ${e}
109
-
110
- Set one with CLOUDFLARE_ACCOUNT_ID or 'cf context set account-id'.`)}let n=await Wr(t);n||process.exit(130);let{displayName:r}=await fi(`accountId`,n.id,`user`,e);return ti(n.id,`selected interactively — ${r}`),n.id}async function ri(e,t,n){if(e?.zoneId)return ii(e.zoneId,t);let r=Q(`zone`,`CLOUDFLARE_ZONE_ID`,e?.zone);if(r){if(!n?.quiet&&r.source!==`flag`){let e=di(r);console.error(`Using zone: ${r.value} (from ${e})`)}return ii(r.value,t)}throw Error(`No zone specified.
111
-
112
- Please provide one of the following:
113
- 1. Zone as a positional argument: cf dns records list <zone>
114
- 2. --zone flag (or -z): cf dns records list --zone example.com
115
- 3. CLOUDFLARE_ZONE_ID environment variable
116
- 4. Run 'cf context set zone <zone>' to set a default
117
- 5. Create a .cfrc file in your project with {"zone": "example.com"}`)}async function ii(e,t){if(he(e)||!t)return e;let{resolveZoneId:n}=await import(`./resolve-4-OSeHlK.mjs`).then(e=>e.r);return n(t,await ei(),e)}function ai(e){if(e?.scriptName)return e.scriptName;throw Error("Required Worker name missing. Please specify the Worker name with `--worker <name>`.")}const oi=[`public`,`fedramp_high`],si={"account-id":`accountId`,zone:`zone`,"compliance-region":`complianceRegion`},ci=Object.keys(si);function li(e){return oi.includes(e)}function ui(){let e=Q(`complianceRegion`,`CLOUDFLARE_COMPLIANCE_REGION`);if(!e)return`public`;if(!li(e.value))throw Error(`Invalid compliance region "${e.value}". Must be one of: ${oi.join(`, `)}`);return e.value}function di(e,t=`zone`){switch(e.source){case`flag`:return t===`zone`?`--zone flag`:`(flag)`;case`env`:return{accountId:`CLOUDFLARE_ACCOUNT_ID`,zone:`CLOUDFLARE_ZONE_ID`,complianceRegion:`CLOUDFLARE_COMPLIANCE_REGION`}[t];case`project`:return`.cfrc`;case`config`:return`~/.config/cf/config.json`}}async function fi(e,t,n,r){let i=t,a=t;if(e===`accountId`){if(!r)throw Error(`Authentication required to validate account ID`);let{id:e,name:n}=await hi(t,r);i=e,a=n?`${e.slice(0,12)}... (${n})`:e}else if(e===`zone`){if(!r)throw Error(`Authentication required to validate zone`);let e=await gi(t,r);i=t,a=e.name}else e===`complianceRegion`&&(i=t,a=t);if(n===`project`){let t=Yr()?.config||{};t[e]=i,Xr(t)}else{let t=g();t.defaults||={},t.defaults[e]=i,ie(t)}return{resolvedValue:i,displayName:a}}function pi(e,t){if(t===`project`)if(e===`all`)Zr();else{let t=Yr();t&&(delete t.config[e],Object.keys(t.config).length===0?Zr(C(t.path)):Xr(t.config,C(t.path)))}else{let t=g();t.defaults&&(e===`all`?delete t.defaults:(delete t.defaults[e],Object.keys(t.defaults).length===0&&delete t.defaults),ie(t))}}async function mi(e){return(await e.accounts.list({})).result}async function hi(e,t){let n=await mi(t),r=n.find(t=>t.id===e);if(r)return{id:r.id,name:r.name};let i=n.find(t=>t.name.toLowerCase()===e.toLowerCase());if(i)return{id:i.id,name:i.name};if(he(e))return{id:e};throw Error(`Account not found: "${e}"
118
-
119
- Available accounts:
120
- ${n.map(e=>` ${e.id.slice(0,12)}... ${e.name}`).join(`
121
- `)}`)}async function gi(e,t){let n=(await t.zones.list({})).result,r=n.find(t=>t.id===e);if(r)return{id:r.id,name:r.name};let i=n.find(t=>t.name.toLowerCase()===e.toLowerCase());if(i)return{id:i.id,name:i.name};throw me(e)?Error(`Zone not found: "${e}"
122
-
123
- This zone either doesn't exist or you don't have access to it.
124
- Run 'cf zones list' to see available zones.`):Error(`Invalid zone: "${e}"
125
-
126
- Please provide a zone ID or domain name.
127
- Run 'cf zones list' to see available zones.`)}function _i(){return w(process.cwd(),Z)}const vi=`openid.offline.user:read.account:read.access:read.access:write.agw:read.agw:run.agw:write.ai:read.ai:write.ai-search:read.ai-search:run.ai-search:write.aiaudit:read.aiaudit:write.aig:read.aig:write.auditlogs:read.browser:read.browser:write.cfone:read.cfone:write.cloudchamber:write.connectivity:admin.connectivity:bind.connectivity:read.constellation:write.containers:write.d1:write.dex:read.dex:write.dns_analytics:read.dns_records:edit.dns_records:read.dns_settings:read.firstpartytags:write.images:read.images:write.lb:edit.lb:read.logpush:read.logpush:write.mcp_portals:read.mcp_portals:write.notebook-examples:read.notification:read.notification:write.pages:read.pages:write.pipelines:read.pipelines:setup.pipelines:write.query_cache:write.queues:write.r2_catalog:write.radar:read.rag:read.rag:write.registrar:read.registrar:write.secrets_store:read.secrets_store:write.sso-connector:read.sso-connector:write.ssl_certs:write.teams:pii.teams:read.teams:secure_location.teams:write.url_scanner:read.url_scanner:write.vectorize:write.workers:read.workers:write.workers_builds:read.workers_builds:write.workers_deployments:read.workers_kv:write.workers_observability:read.workers_observability:write.workers_observability_telemetry:write.workers_routes:write.workers_scripts:write.workers_tail:read.zone:read`.split(`.`);function yi(){return w(ae(),`auth.jsonc`)}function bi(){return{read(){let e=yi(),t;try{t=ye(e,`utf-8`)}catch(e){if(e.code===`ENOENT`)return;throw e}try{return c(t,e)}catch{return}},write(e){let t=yi();ve(C(t),{recursive:!0,mode:448}),x(t,JSON.stringify(e,null,2)+`
128
- `,{encoding:`utf-8`,mode:384}),_e(t,384)},clear(){let e=yi(),t=y(e);return b(e,{force:!0}),t},path(){return yi()}}}const xi=8877,Si=`localhost`,Ci=`http://${Si}:${xi}/oauth/callback`,wi={granted:{url:`https://welcome.developers.workers.dev/cf-oauth-consent-granted`},denied:{url:`https://welcome.developers.workers.dev/cf-oauth-consent-denied`,error:"Error: Consent denied. You must grant consent to cf in order to login.\nIf you don't want to do this consider passing an API token via the `CLOUDFLARE_API_TOKEN` environment variable"}},Ti=bi();function Ei(){return Be({allowGlobalAuthKey:!1})!==void 0}const Di={debug:(...e)=>{process.env.DEBUG&&console.error(...e)},info:(...e)=>console.error(...e),log:(...e)=>console.error(...e),warn:(...e)=>console.error(...e),error:(...e)=>console.error(...e)};function Oi(e){return new Promise((t,n)=>{let r=Se(),i;switch(r){case`darwin`:i=`open "${e}"`;break;case`win32`:i=`start "" "${e}"`;break;default:i=`xdg-open "${e}"`}Ce(i,e=>{e?n(Error(`Failed to open browser: ${e.message}`)):t()})})}const ki=Gt({logger:Di,isNonInteractiveOrCI:X,openInBrowser:Oi,hasEnvCredentials:Ei,clientId:`cbca97e7-c331-4cdd-8fd8-e25a451b98bf`,consent:wi,redirectUri:Ci,storageFactory:()=>Ti,allowGlobalAuthKey:!1,temporary:void 0});function Ai(e){return ki.login({complianceConfig:ne,scopes:[...vi],browser:e?.browser??!0,callbackHost:Si,callbackPort:xi})}function ji(){return ki.logout()}function Mi(){return ki.getOAuthTokenFromLocalState()}function Ni(){return D({storage:Ti}).accessToken!==void 0}function Pi(){return D({storage:Ti})}function Fi(){return Ti.path()}function Ii(e){try{let t=Ne(`ps -p ${e} -o pid=,ppid=,command=`,{encoding:`utf8`,timeout:5e3}).trim();if(!t)return null;let[n,r,...i]=t.split(/\s+/),a=n?parseInt(n,10):NaN,o=r?parseInt(r,10):NaN;return isNaN(a)||isNaN(o)?null:{pid:a,ppid:o,command:i.join(` `)||void 0}}catch(t){return t instanceof Error&&t.message.includes(`timeout`)&&console.warn(`Process lookup timed out for PID ${e}`),null}}function Li(e){let t=[],n=new Set,r=e,i=1e3;for(;r&&i>0;){if(n.has(r)){console.warn(`Detected cycle in process tree at PID ${r}`);break}n.add(r);let e=Ii(r);if(!e||e.ppid===0||e.ppid===1)break;t.push(e),r=e.ppid,i--}return i===0&&console.warn(`Reached maximum depth limit while traversing process tree from PID ${e}`),t}function Ri(e){try{let t=Ne(`wmic process where (ProcessId=${e}) get ProcessId,ParentProcessId,CommandLine /format:csv`,{encoding:`utf8`,timeout:1e4});if(!t)return null;let n=t.split(`
129
- `).filter(e=>e.trim()&&!e.startsWith(`Node`)).pop()?.split(`,`);if(!n||n.length<4)return null;let[r,i,a,o]=n,s=o?parseInt(o.trim(),10):NaN,c=a?parseInt(a.trim(),10):NaN;return isNaN(s)||isNaN(c)?null:{pid:s,ppid:c,command:i?.trim()||void 0}}catch(t){return t instanceof Error&&t.message.includes(`timeout`)&&console.warn(`Process lookup timed out for PID ${e}`),null}}function zi(e){let t=[],n=new Set,r=e,i=1e3;for(;r&&i>0;){if(n.has(r)){console.warn(`Detected cycle in process tree at PID ${r}`);break}n.add(r);let e=Ri(r);if(!e||e.ppid===0||e.ppid===4)break;t.push(e),r=e.ppid,i--}return i===0&&console.warn(`Reached maximum depth limit while traversing process tree from PID ${e}`),t}function Bi(e=process.pid){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw Error(`PID must be a positive integer`);return Pe.platform()===`win32`?zi(e):Li(e)}const Vi=[{id:`opencode`,name:`OpenCode`,type:`agent`,envVars:[{any:[`OPENCODE`,`OPENCODE_BIN_PATH`,`OPENCODE_SERVER`,`OPENCODE_APP_INFO`,`OPENCODE_MODES`]}]},{id:`jules`,name:`Jules`,type:`agent`,envVars:[{all:[[`HOME`,`/home/jules`],[`USER`,`swebot`]]}]},{id:`claude-code`,name:`Claude Code`,type:`agent`,envVars:[`CLAUDECODE`]},{id:`cursor-agent`,name:`Cursor Agent`,type:`agent`,envVars:[{all:[`CURSOR_TRACE_ID`,[`PAGER`,`head -n 10000 | cat`]]}]},{id:`cursor`,name:`Cursor`,type:`interactive`,envVars:[`CURSOR_TRACE_ID`]},{id:`gemini-agent`,name:`Gemini Agent`,type:`agent`,processChecks:[`gemini`]},{id:`codex`,name:`OpenAI Codex`,type:`agent`,processChecks:[`codex`]},{id:`replit`,name:`Replit`,type:`agent`,envVars:[`REPL_ID`]},{id:`aider`,name:`Aider`,type:`agent`,envVars:[`AIDER_API_KEY`],processChecks:[`aider`]},{id:`bolt-agent`,name:`Bolt.new Agent`,type:`agent`,envVars:[{all:[[`SHELL`,`/bin/jsh`],`npm_config_yes`]}]},{id:`bolt`,name:`Bolt.new`,type:`interactive`,envVars:[{all:[[`SHELL`,`/bin/jsh`]],none:[`npm_config_yes`]}]},{id:`zed-agent`,name:`Zed Agent`,type:`agent`,envVars:[{all:[[`TERM_PROGRAM`,`zed`],[`PAGER`,`cat`]]}]},{id:`zed`,name:`Zed`,type:`interactive`,envVars:[{all:[[`TERM_PROGRAM`,`zed`]],none:[[`PAGER`,`cat`]]}]},{id:`replit-assistant`,name:`Replit Assistant`,type:`agent`,envVars:[{all:[`REPL_ID`,[`REPLIT_MODE`,`assistant`]]}]},{id:`replit`,name:`Replit`,type:`interactive`,envVars:[{all:[`REPL_ID`],none:[[`REPLIT_MODE`,`assistant`]]}]},{id:`windsurf`,name:`Windsurf`,type:`agent`,envVars:[`CODEIUM_EDITOR_APP_ROOT`]},{id:`crush`,name:`Crush`,type:`agent`,processChecks:[`crush`]},{id:`vscode-copilot-agent`,name:`GitHub Copilot in VS Code`,type:`agent`,envVars:[{all:[[`TERM_PROGRAM`,`vscode`],[`GIT_PAGER`,`cat`]]}]},{id:`warp`,name:`Warp Terminal`,type:`hybrid`,envVars:[{all:[[`TERM_PROGRAM`,`WarpTerminal`]]}]},{id:`octofriend`,name:`Octofriend`,type:`agent`,processChecks:[`octofriend`]}];function $(e,t=process.env){let[n,r]=typeof e==`string`?[e,void 0]:e,i=t[n];return!!(i&&(!r||i===r))}function Hi(e,t){try{let n=t??Bi();for(let t of n)if(t.command?.includes(e))return!0}catch{}return!1}function Ui(e,t=process.env){if(typeof e==`string`||Array.isArray(e))return $(e,t);let{any:n,all:r,none:i}=e,a=!n?.length||n.some(e=>$(e,t)),o=!r?.length||r.every(e=>$(e,t)),s=!i?.length||!i.some(e=>$(e,t));return a&&o&&s}function Wi(e){return e.customDetectors?.some(e=>{try{return e()}catch{return!1}})??!1}function Gi(e){return{isAgentic:!0,id:e.id,name:e.name,type:e.type}}function Ki(e=process.env,t){for(let t of Vi)if(t.envVars?.some(t=>Ui(t,e)))return Gi(t);let n=t,r=()=>{if(n===void 0)try{n=Bi()}catch{n=[]}return n};for(let e of Vi)if(e.processChecks?.some(e=>Hi(e,r())))return Gi(e);for(let e of Vi)if(Wi(e))return Gi(e);return{isAgentic:!1,id:null,name:null,type:null}}function qi(){return Hr?`ci`:Vr()?`interactive`:`non-interactive`}function Ji(){let e=Ki(),t=e.isAgentic&&e.id!==null?{"X-CF-CLI-Agent":e.id}:{};return{"User-Agent":`cf/${i}`,"X-CF-CLI-Mode":qi(),...t}}const Yi=3e4,Xi=t.Default;function Zi(e){return e instanceof FormData||e instanceof Blob||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||e instanceof ReadableStream||e instanceof URLSearchParams}function Qi(e){return Object.keys(e).some(e=>e.toLowerCase()===`content-type`)}async function $i(e){let t=e.headers.get(`content-type`)??``;try{return t.includes(`application/json`)?await e.json():await e.text()}catch{return null}}function ea(e,t,n){if(!(n==null||n===``)){if(Array.isArray(n)){for(let r of n)ea(e,t,r);return}e.append(t,String(n))}}function ta(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))ea(t,n,r);return t.toString()}function na(e,t,n){let r=new URL(t.endsWith(`/`)?t:`${t}/`),i=new URL(e.startsWith(`/`)?e.slice(1):e,r);if(i.origin!==r.origin)throw Error(`Refusing to send an authenticated request to ${i.origin} (expected ${r.origin})`);let a=ta(n??{});return a&&(i.search=a),i.toString()}const ra=new WeakMap;async function ia(e,t,n,i={}){let a=na(n,ra.get(e)??Xi,i.query),o={...i.headers},s;i.body!==void 0&&(Zi(i.body)||typeof i.body==`string`&&Qi(o)?s=i.body:(o[`Content-Type`]??=`application/json`,s=JSON.stringify(i.body)));let c;try{c=await e.fetch(a,{method:t,headers:o,body:s,signal:i.signal},{timeoutInSeconds:i.timeout?i.timeout/1e3:void 0,abortSignal:i.signal})}catch(e){throw i.signal?.aborted?Error(`Request aborted`):e instanceof Error&&e.name===`AbortError`?Error(`Request timed out after ${i.timeout??Yi}ms`):e instanceof Error?Error(`Request failed: ${e.message}`):e}if(!c.ok)throw new r({statusCode:c.status,body:await $i(c),rawResponse:{status:c.status,statusText:c.statusText,url:c.url||a,headers:c.headers,redirected:c.redirected,type:c.type}});if(c.status===204)return null;let l=await c.text();if(l===``)return null;if(!(c.headers.get(`content-type`)??``).includes(`application/json`))return l;let u=JSON.parse(l);if(u.success===!1)throw new r({message:`API error: ${u.errors?.map(e=>e.message).filter(Boolean).join(`, `)||`unknown error`}`,statusCode:c.status,body:u});return`result`in u?u.result:u}function aa(e){let t=e.baseURL??Xi,r=new n({baseUrl:t,auth:async()=>({headers:{Authorization:`Bearer ${e.apiToken}`}}),headers:e.defaultHeaders,timeoutInSeconds:(e.timeout??Yi)/1e3,maxRetries:0,fetch:e.fetch??globalThis.fetch});return ra.set(r,t),r}async function oa(){let e=Be({allowGlobalAuthKey:!1});if(e&&`apiToken`in e)return e.apiToken;let t=await Mi();if(t)return t;throw Error(`No authentication token found.
130
-
131
- Please set one of the following:
132
- 1. Set the CLOUDFLARE_API_TOKEN environment variable
133
- 2. Run 'cf auth login' to authenticate via OAuth
134
-
135
- For API tokens, visit: https://dash.cloudflare.com/profile/api-tokens`)}async function sa(e){let t=te({compliance_region:ui()});if(e.local){if(!e.localEndpoint)throw Error(`--local requires --local-endpoint <url>; this should have been caught by the global middleware.`);let{createLocalFetch:n}=await import(`./local-VJaJ3BZ1.mjs`).then(e=>e.r);return aa({apiToken:`cf-local-mode-no-auth`,baseURL:t,defaultHeaders:Ji(),fetch:n({endpoint:e.localEndpoint})})}return aa({apiToken:await oa(),baseURL:t,defaultHeaders:Ji()})}export{$r as C,Kr as D,qr as E,X as O,ri as S,Jr as T,ei as _,Ji as a,_i as b,Ni as c,ji as d,ci as f,Yr as g,pi as h,ia as i,Pi as l,oi as m,sa as n,Fi as o,si as p,oa as r,Mi as s,aa as t,Ai as u,ui as v,fi as w,ai as x,Qr as y};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{C as e,D as t,_ as n,n as r}from"./auth-ffdf9yR0.mjs";import{n as i,t as a}from"./body-parser-DKa8Ipg1.mjs";import{t as o}from"./output-BJFNwj7b.mjs";import{n as s,t as c}from"./progress-CrCGTq7N.mjs";import{n as l}from"./input-validation-zEO81MWN.mjs";import{t as u}from"./local-VJaJ3BZ1.mjs";import{t as d}from"./cli-types-CRIDdDw3.mjs";function f(e){return e.positional(`id`,{type:`string`,description:`rag id`,demandOption:!0}).option(`max-num-results`,{type:`number`,description:`The max_num_results field`,default:10}).option(`query`,{type:`string`,description:`The query field`}).option(`ranking-options-ranker`,{type:`string`,description:`The ranking_options.ranker field`}).option(`ranking-options-score-threshold`,{type:`number`,description:`The ranking_options.score_threshold field`,default:.4}).option(`reranking-enabled`,{type:`boolean`,description:`The reranking.enabled field`,default:!1}).option(`rewrite-query`,{type:`boolean`,description:`The rewrite_query field`,default:!1}).option(`stream`,{type:`boolean`,description:`The stream field`,default:!1}).option(`system-prompt`,{type:`string`,description:`The system_prompt field`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const p={command:`ai-search <id>`,describe:`AI Search`,builder:f,handler:async d=>{if(d.dryRun){s({command:`cf autorag ai-search`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/autorag/rags/${d.id==null?`<id>`:encodeURIComponent(String(d.id))}/ai-search`,pathParams:{id:String(d.id??``)},bodyKind:`json`,body:d.body===void 0?a({max_num_results:d[`max-num-results`],query:l(d.query,`query`,`text`),ranking_options:{ranker:l(d[`ranking-options-ranker`],`ranking-options-ranker`,`text`),score_threshold:d[`ranking-options-score-threshold`]},reranking:{enabled:d[`reranking-enabled`]},rewrite_query:d[`rewrite-query`],stream:d.stream,system_prompt:l(d[`system-prompt`],`system-prompt`,`text`)}):i(d.body)});return}let f=await r(d),p=d.local?u:await n(f);if(d.accountId=p,d.body){let e=i(d.body);o(await c(`Creating`,async()=>f.autorag.aiSearch({...e,account_id:p,id:d.id})),{successLabel:`Created`});return}d.query===void 0&&(d.query=await t(`query`,`The query field`));let m=a({max_num_results:d[`max-num-results`],query:l(d.query,`query`,`text`),ranking_options:{ranker:l(d[`ranking-options-ranker`],`ranking-options-ranker`,`text`),score_threshold:d[`ranking-options-score-threshold`]},reranking:{enabled:d[`reranking-enabled`]},rewrite_query:d[`rewrite-query`],stream:d.stream,system_prompt:l(d[`system-prompt`],`system-prompt`,`text`)});o(await c(`Creating`,async()=>f.autorag.aiSearch({...m,account_id:p,id:d.id})),{successLabel:`Created`})}};function m(e){return e.positional(`id`,{type:`string`,description:`rag id`,demandOption:!0}).option(`page`,{type:`number`,description:`Page`}).option(`per-page`,{type:`number`,description:`Per page`}).option(`search`,{type:`string`,description:`Search`}).option(`status`,{type:`string`,description:`Status`,choices:[`completed`,`queued`,`running`,`error`]}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const h={command:`files <id>`,describe:`Files`,builder:d(m),handler:async t=>{let i={page:t.page,per_page:t[`per-page`],search:t.search,status:t.status};if(t.dryRun){s({command:`cf autorag files`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/autorag/rags/${t.id==null?`<id>`:encodeURIComponent(String(t.id))}/files`,pathParams:{id:String(t.id??``)},query:i,bodyKind:`none`});return}let a=await r(t),l=t.local?u:await n(a);t.accountId=l,o(await c(`Loading`,async()=>a.autorag.files({account_id:l,id:t.id,...i})),{successLabel:`Loaded`})}};function g(e){return e.positional(`job-id`,{type:`string`,description:`Job ID`,demandOption:!0}).option(`id`,{type:`string`,description:`rag id`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const _={command:`get <job-id>`,describe:`Get a Job Details`,builder:g,handler:async t=>{if(t.dryRun){s({command:`cf autorag jobs get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/autorag/rags/${t.id==null?`<id>`:encodeURIComponent(String(t.id))}/jobs/${t[`job-id`]==null?`<job-id>`:encodeURIComponent(String(t[`job-id`]))}`,pathParams:{id:String(t.id??``),"job-id":String(t[`job-id`]??``)},bodyKind:`none`});return}let i=await r(t),a=t.local?u:await n(i);t.accountId=a,o(await c(`Loading`,async()=>i.autorag.jobs.get({account_id:a,id:t.id,job_id:t[`job-id`]})),{successLabel:`Loaded`})}};function v(e){return e.option(`id`,{type:`string`,description:`rag id`,demandOption:!0}).option(`page`,{type:`number`,description:`Page`}).option(`per-page`,{type:`number`,description:`Per page`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const y={command:`list`,describe:`List Jobs`,builder:v,handler:async t=>{let i={page:t.page,per_page:t[`per-page`]};if(t.dryRun){s({command:`cf autorag jobs list`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/autorag/rags/${t.id==null?`<id>`:encodeURIComponent(String(t.id))}/jobs`,pathParams:{id:String(t.id??``)},query:i,bodyKind:`none`});return}let a=await r(t),l=t.local?u:await n(a);t.accountId=l,o(await c(`Loading`,async()=>a.autorag.jobs.list({account_id:l,id:t.id,...i})),{successLabel:`Loaded`})}};function b(e){return e.positional(`job-id`,{type:`string`,description:`Job ID`,demandOption:!0}).option(`id`,{type:`string`,description:`rag id`,demandOption:!0}).option(`page`,{type:`number`,description:`Page`}).option(`per-page`,{type:`number`,description:`Per page`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const x={command:`logs <job-id>`,describe:`List Job Logs`,builder:b,handler:async t=>{let i={page:t.page,per_page:t[`per-page`]};if(t.dryRun){s({command:`cf autorag jobs logs`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/autorag/rags/${t.id==null?`<id>`:encodeURIComponent(String(t.id))}/jobs/${t[`job-id`]==null?`<job-id>`:encodeURIComponent(String(t[`job-id`]))}/logs`,pathParams:{id:String(t.id??``),"job-id":String(t[`job-id`]??``)},query:i,bodyKind:`none`});return}let a=await r(t),l=t.local?u:await n(a);t.accountId=l,o(await c(`Loading`,async()=>a.autorag.jobs.logs({account_id:l,id:t.id,job_id:t[`job-id`],...i})),{successLabel:`Loaded`})}},S={command:`jobs`,describe:`AutoRAG job operations`,builder:e=>e.command(_).command(y).command(x).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function C(e){return e.positional(`id`,{type:`string`,description:`rag id`,demandOption:!0}).option(`max-num-results`,{type:`number`,description:`The max_num_results field`,default:10}).option(`query`,{type:`string`,description:`The query field`}).option(`ranking-options-ranker`,{type:`string`,description:`The ranking_options.ranker field`}).option(`ranking-options-score-threshold`,{type:`number`,description:`The ranking_options.score_threshold field`,default:.4}).option(`reranking-enabled`,{type:`boolean`,description:`The reranking.enabled field`,default:!1}).option(`rewrite-query`,{type:`boolean`,description:`The rewrite_query field`,default:!1}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const w={command:`search <id>`,describe:`Search`,builder:C,handler:async d=>{if(d.dryRun){s({command:`cf autorag search`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/autorag/rags/${d.id==null?`<id>`:encodeURIComponent(String(d.id))}/search`,pathParams:{id:String(d.id??``)},bodyKind:`json`,body:d.body===void 0?a({max_num_results:d[`max-num-results`],query:l(d.query,`query`,`text`),ranking_options:{ranker:l(d[`ranking-options-ranker`],`ranking-options-ranker`,`text`),score_threshold:d[`ranking-options-score-threshold`]},reranking:{enabled:d[`reranking-enabled`]},rewrite_query:d[`rewrite-query`]}):i(d.body)});return}let f=await r(d),p=d.local?u:await n(f);if(d.accountId=p,d.body){let e=i(d.body);o(await c(`Loading`,async()=>f.autorag.search({...e,account_id:p,id:d.id})),{successLabel:`Loaded`});return}d.query===void 0&&(d.query=await t(`query`,`The query field`));let m=a({max_num_results:d[`max-num-results`],query:l(d.query,`query`,`text`),ranking_options:{ranker:l(d[`ranking-options-ranker`],`ranking-options-ranker`,`text`),score_threshold:d[`ranking-options-score-threshold`]},reranking:{enabled:d[`reranking-enabled`]},rewrite_query:d[`rewrite-query`]});o(await c(`Loading`,async()=>f.autorag.search({...m,account_id:p,id:d.id})),{successLabel:`Loaded`})}};function T(e){return e.positional(`id`,{type:`string`,description:`rag id`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const E={command:`sync <id>`,describe:`Sync`,builder:T,handler:async t=>{if(t.dryRun){s({command:`cf autorag sync`,method:`PATCH`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/autorag/rags/${t.id==null?`<id>`:encodeURIComponent(String(t.id))}/sync`,pathParams:{id:String(t.id??``)},bodyKind:`none`});return}let i=await r(t),a=t.local?u:await n(i);t.accountId=a,o(await c(`Updating`,async()=>i.autorag.sync({account_id:a,id:t.id})),{successLabel:`Updated`})}},D={command:`autorag`,describe:`AutoRAG — AI search, file management, job tracking, and sync for retrieval-augmented generation`,builder:e=>e.command(p).command(h).command(w).command(E).command(S).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{D as default};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{C as e,_ as t,i as n,n as r}from"./auth-ffdf9yR0.mjs";import{t as i}from"./output-BJFNwj7b.mjs";import{n as a,t as o}from"./progress-CrCGTq7N.mjs";import{t as s}from"./local-VJaJ3BZ1.mjs";function c(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const l={command:`get`,describe:`Gets the current billing profile for the account.`,builder:c,handler:async n=>{if(n.dryRun){a({command:`cf billing profiles get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/billing/profile`,pathParams:{},bodyKind:`none`});return}let c=await r(n),l=n.local?s:await t(c);n.accountId=l,i(await o(`Loading`,async()=>c.billing.profiles.get({account_id:l})),{successLabel:`Loaded`})}},u={command:`profiles`,describe:`Billing profile with payment method, address, and invoice preferences`,builder:e=>e.command(l).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function d(e){return e.option(`from`,{type:`string`,description:`Start date for the usage query (ISO 8601).`}).option(`to`,{type:`string`,description:`End date for the usage query (ISO 8601).`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const f={command:`paygo`,describe:`Returns billable usage data for PayGo (self-serve) accounts. When no query parameters are provided, returns usage for the current billing period.`,builder:d,handler:async n=>{let c={from:n.from,to:n.to};if(n.dryRun){a({command:`cf billing usage paygo`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/paygo-usage`,pathParams:{},query:c,bodyKind:`none`});return}let l=await r(n),u=n.local?s:await t(l);n.accountId=u,i(await o(`Loading`,async()=>l.billing.usage.paygo({account_id:u,...c})),{successLabel:`Loaded`})}};function p(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const m={command:`paygo_info`,describe:`Returns high-level usage information for the account, including coverage, and subscription metadata.`,builder:p,handler:async c=>{if(c.dryRun){a({command:`cf billing usage paygo_info`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/paygo-usage-info`,pathParams:{},bodyKind:`none`});return}let l=await r(c),u=c.local?s:await t(l);c.accountId=u,i(await o(`Loading`,async()=>n(l,`GET`,`/accounts/${u}/paygo-usage-info`)),{successLabel:`Loaded`})}},h={command:`usage`,describe:`Operations for usage`,builder:e=>e.command(f).command(m).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},g={command:`billing`,describe:`Account billing profiles and usage data for Cloudflare subscriptions and add-on services`,builder:e=>e.command(u).command(h).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{g as default};
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import{D as e,E as t,S as n,n as r}from"./auth-ffdf9yR0.mjs";import{n as i,t as a}from"./body-parser-DKa8Ipg1.mjs";import{t as o}from"./output-BJFNwj7b.mjs";import{n as s,t as c}from"./progress-CrCGTq7N.mjs";import{n as l}from"./input-validation-zEO81MWN.mjs";function u(e){return e.option(`description`,{type:`string`,description:`The description field`}).option(`expression`,{type:`string`,description:`Wirefilter expression describing the traffic being reported.`}).option(`first-request-seen-at`,{type:`string`,description:`The first_request_seen_at field`}).option(`last-request-seen-at`,{type:`string`,description:`The last_request_seen_at field`}).option(`requests`,{type:`number`,description:`The requests field`}).option(`subtype`,{type:`string`,description:`The subtype field`}).option(`type`,{type:`string`,description:`Type of feedback report.`,choices:[`false_positive`,`false_negative`]}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const d={command:`create`,describe:"Submit a feedback report for the specified zone. Use `type` to indicate whether the report is a false positive (good traffic flagged as bot) or a false negative (bot traffic missed). Furthermore, you can also use `expression` as a wirefilter to identify the affected traffic sample. See more accepted API fields and expression types at https://developers.cloudflare.com/bots/concepts/feedback-loop/#api-fields and https://developers.cloudflare.com/bots/concepts/feedback-loop/#expression-fields, respectively.",builder:u,handler:async u=>{if(u.dryRun){s({command:`cf bot-management feedback create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/zones/${u.zone??u.zoneId??`<zone>`}/bot_management/feedback`,pathParams:{"zone-id":String(u.zone??u[`zone-id`]??``)},bodyKind:`json`,body:u.body===void 0?a({description:l(u.description,`description`,`text`),expression:l(u.expression,`expression`,`text`),first_request_seen_at:l(u[`first-request-seen-at`],`first-request-seen-at`,`text`),last_request_seen_at:l(u[`last-request-seen-at`],`last-request-seen-at`,`text`),requests:u.requests,subtype:l(u.subtype,`subtype`,`text`),type:l(u.type,`type`,`text`)}):i(u.body)});return}let d=await r(u),f=await n({zone:u.zone},d,{quiet:u.quiet});if(u.zoneId=f,u.body){let e=i(u.body);o(await c(`Creating`,async()=>d.botManagement.feedback.create({body:e,zone_id:f})),{successLabel:`Created`});return}if(u.description===void 0&&(u.description=await e(`description`,`The description field`)),u.expression===void 0&&(u.expression=await e(`expression`,`Wirefilter expression describing the traffic being reported.`)),u[`first-request-seen-at`]===void 0&&(u[`first-request-seen-at`]=await e(`first-request-seen-at`,`The first_request_seen_at field`)),u[`last-request-seen-at`]===void 0&&(u[`last-request-seen-at`]=await e(`last-request-seen-at`,`The last_request_seen_at field`)),u.requests===void 0)throw Error(`--requests is required (or pass --body with this field set).`);u.type===void 0&&(u.type=await t(`type`,`Type of feedback report.`,[`false_positive`,`false_negative`]));let p=a({description:l(u.description,`description`,`text`),expression:l(u.expression,`expression`,`text`),first_request_seen_at:l(u[`first-request-seen-at`],`first-request-seen-at`,`text`),last_request_seen_at:l(u[`last-request-seen-at`],`last-request-seen-at`,`text`),requests:u.requests,subtype:l(u.subtype,`subtype`,`text`),type:l(u.type,`type`,`text`)});o(await c(`Creating`,async()=>d.botManagement.feedback.create({body:p,zone_id:f})),{successLabel:`Created`})}};function f(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const p={command:`list`,describe:`Returns all feedback reports previously submitted for the specified zone. Feedback reports help improve detection by sharing samples of traffic that were misclassified as bots or humans.`,builder:f,handler:async e=>{if(e.dryRun){s({command:`cf bot-management feedback list`,method:`GET`,url:`https://api.cloudflare.com/client/v4/zones/${e.zone??e.zoneId??`<zone>`}/bot_management/feedback`,pathParams:{"zone-id":String(e.zone??e[`zone-id`]??``)},bodyKind:`none`});return}let t=await r(e),i=await n({zone:e.zone},t,{quiet:e.quiet});e.zoneId=i,o(await c(`Loading`,async()=>t.botManagement.feedback.list({zone_id:i})),{successLabel:`Loaded`})}},m={command:`feedback`,describe:`Feedback operations`,builder:e=>e.command(d).command(p).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function h(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const g={command:`get`,describe:`Retrieve a zone's Bot Management Config`,builder:h,handler:async e=>{if(e.dryRun){s({command:`cf bot-management get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/zones/${e.zone??e.zoneId??`<zone>`}/bot_management`,pathParams:{"zone-id":String(e.zone??e[`zone-id`]??``)},bodyKind:`none`});return}let t=await r(e),i=await n({zone:e.zone},t,{quiet:e.quiet});e.zoneId=i,o(await c(`Loading`,async()=>t.botManagement.get({zone_id:i})),{successLabel:`Loaded`})}};function _(e){return e.option(`ai-bots-protection`,{type:`string`,description:`Enable rule to block AI Scrapers and Crawlers.`,choices:[`block`,`disabled`,`only_on_ad_pages`]}).option(`cf-robots-variant`,{type:`string`,description:`Specifies the Robots Access Control License variant to use.`,choices:[`off`,`policy_only`]}).option(`content-bots-protection`,{type:`string`,description:`Enable rule to block content bots. When enabled, blocks automated traffic with low bot scores, excluding safe verified bot categories. Exceptions should be managed via skip rules.`,choices:[`block`,`disabled`]}).option(`crawler-protection`,{type:`string`,description:`Enable rule to punish AI Scrapers and Crawlers via a link maze.`,choices:[`enabled`,`disabled`]}).option(`enable-js`,{type:`boolean`,description:`Use lightweight, invisible JavaScript detections to improve Bot Management. [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/).`}).option(`is-robots-txt-managed`,{type:`boolean`,description:`Enable cloudflare managed robots.txt. If an existing robots.txt is detected, then managed robots.txt will be prepended to the existing robots.txt.`}).option(`fight-mode`,{type:`boolean`,description:`Whether to enable Bot Fight Mode.`}).option(`stale-zone-configuration-optimize-wordpress`,{type:`boolean`,description:`Indicates that the zone's wordpress optimization for SBFM is turned on.`}).option(`stale-zone-configuration-sbfm-definitely-automated`,{type:`string`,description:`Indicates that the zone's definitely automated requests are being blocked or challenged.`}).option(`stale-zone-configuration-sbfm-likely-automated`,{type:`string`,description:`Indicates that the zone's likely automated requests are being blocked or challenged.`}).option(`stale-zone-configuration-sbfm-static-resource-protection`,{type:`string`,description:`Indicates that the zone's static resource protection is turned on.`}).option(`stale-zone-configuration-sbfm-verified-bots`,{type:`string`,description:`Indicates that the zone's verified bot requests are being blocked.`}).option(`stale-zone-configuration-suppress-session-score`,{type:`boolean`,description:`Indicates that the zone's session score tracking is disabled.`}).option(`stale-zone-configuration-fight-mode`,{type:`boolean`,description:`Indicates that the zone's Bot Fight Mode is turned on.`}).option(`optimize-wordpress`,{type:`boolean`,description:`Whether to optimize Super Bot Fight Mode protections for Wordpress.`}).option(`sbfm-definitely-automated`,{type:`string`,description:`Super Bot Fight Mode (SBFM) action to take on definitely automated requests.`,choices:[`allow`,`block`,`managed_challenge`]}).option(`sbfm-static-resource-protection`,{type:`boolean`,description:`Super Bot Fight Mode (SBFM) to enable static resource protection.
3
- Enable if static resources on your application need bot protection.
4
- Note: Static resource protection can also result in legitimate traffic being blocked.
5
- `}).option(`sbfm-verified-bots`,{type:`string`,description:`Super Bot Fight Mode (SBFM) action to take on verified bots requests.`,choices:[`allow`,`block`]}).option(`sbfm-likely-automated`,{type:`string`,description:`Super Bot Fight Mode (SBFM) action to take on likely automated requests.`,choices:[`allow`,`block`,`managed_challenge`]}).option(`auto-update-model`,{type:`boolean`,description:`Automatically update to the newest bot detection models created by Cloudflare as they are released. [Learn more.](https://developers.cloudflare.com/bots/reference/machine-learning-models#model-versions-and-release-notes)`}).option(`bm-cookie-enabled`,{type:`boolean`,description:`Indicates that the bot management cookie can be placed on end user devices accessing the site. Defaults to true`}).option(`suppress-session-score`,{type:`boolean`,description:`Whether to disable tracking the highest bot score for a session in the Bot Management cookie.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const v={command:`update`,describe:'Updates the Bot Management configuration for a zone. This API is used to update: - **Bot Fight Mode** - **Super Bot Fight Mode** - **Bot Management for Enterprise** See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more information on the different plans \\ If you recently upgraded or downgraded your plan, refer to the following examples to clean up old configurations. Copy and paste the example body to remove old zone configurations based on your current plan. #### Clean up configuration for Bot Fight Mode plan ```json { "sbfm_likely_automated": "allow", "sbfm_definitely_automated": "allow", "sbfm_verified_bots": "allow", "sbfm_static_resource_protection": false, "optimize_wordpress": false, "suppress_session_score": false } ``` #### Clean up configuration for SBFM Pro plan ```json { "sbfm_likely_automated": "allow", "fight_mode": false } ``` #### Clean up configuration for SBFM Biz plan ```json { "fight_mode": false } ``` #### Clean up configuration for BM Enterprise Subscription plan It is strongly recommended that you ensure you have [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to protect your zone before disabling the SBFM rules. Without these protections, your zone is vulnerable to attacks. ```json { "sbfm_likely_automated": "allow", "sbfm_definitely_automated": "allow", "sbfm_verified_bots": "allow", "sbfm_static_resource_protection": false, "optimize_wordpress": false, "fight_mode": false } ```',builder:_,handler:async e=>{if(e.dryRun){s({command:`cf bot-management update`,method:`PUT`,url:`https://api.cloudflare.com/client/v4/zones/${e.zone??e.zoneId??`<zone>`}/bot_management`,pathParams:{"zone-id":String(e.zone??e[`zone-id`]??``)},bodyKind:`json`,body:e.body===void 0?a({ai_bots_protection:l(e[`ai-bots-protection`],`ai-bots-protection`,`text`),cf_robots_variant:l(e[`cf-robots-variant`],`cf-robots-variant`,`text`),content_bots_protection:l(e[`content-bots-protection`],`content-bots-protection`,`text`),crawler_protection:l(e[`crawler-protection`],`crawler-protection`,`text`),enable_js:e[`enable-js`],is_robots_txt_managed:e[`is-robots-txt-managed`],fight_mode:e[`fight-mode`],stale_zone_configuration:{optimize_wordpress:e[`stale-zone-configuration-optimize-wordpress`],sbfm_definitely_automated:l(e[`stale-zone-configuration-sbfm-definitely-automated`],`stale-zone-configuration-sbfm-definitely-automated`,`text`),sbfm_likely_automated:l(e[`stale-zone-configuration-sbfm-likely-automated`],`stale-zone-configuration-sbfm-likely-automated`,`text`),sbfm_static_resource_protection:l(e[`stale-zone-configuration-sbfm-static-resource-protection`],`stale-zone-configuration-sbfm-static-resource-protection`,`text`),sbfm_verified_bots:l(e[`stale-zone-configuration-sbfm-verified-bots`],`stale-zone-configuration-sbfm-verified-bots`,`text`),suppress_session_score:e[`stale-zone-configuration-suppress-session-score`],fight_mode:e[`stale-zone-configuration-fight-mode`]},optimize_wordpress:e[`optimize-wordpress`],sbfm_definitely_automated:l(e[`sbfm-definitely-automated`],`sbfm-definitely-automated`,`text`),sbfm_static_resource_protection:e[`sbfm-static-resource-protection`],sbfm_verified_bots:l(e[`sbfm-verified-bots`],`sbfm-verified-bots`,`text`),sbfm_likely_automated:l(e[`sbfm-likely-automated`],`sbfm-likely-automated`,`text`),auto_update_model:e[`auto-update-model`],bm_cookie_enabled:e[`bm-cookie-enabled`],suppress_session_score:e[`suppress-session-score`]}):i(e.body)});return}let t=await r(e),u=await n({zone:e.zone},t,{quiet:e.quiet});if(e.zoneId=u,e.body){let n=i(e.body);o(await c(`Updating`,async()=>t.botManagement.update({body:n,zone_id:u})),{successLabel:`Updated`});return}let d=a({ai_bots_protection:l(e[`ai-bots-protection`],`ai-bots-protection`,`text`),cf_robots_variant:l(e[`cf-robots-variant`],`cf-robots-variant`,`text`),content_bots_protection:l(e[`content-bots-protection`],`content-bots-protection`,`text`),crawler_protection:l(e[`crawler-protection`],`crawler-protection`,`text`),enable_js:e[`enable-js`],is_robots_txt_managed:e[`is-robots-txt-managed`],fight_mode:e[`fight-mode`],stale_zone_configuration:{optimize_wordpress:e[`stale-zone-configuration-optimize-wordpress`],sbfm_definitely_automated:l(e[`stale-zone-configuration-sbfm-definitely-automated`],`stale-zone-configuration-sbfm-definitely-automated`,`text`),sbfm_likely_automated:l(e[`stale-zone-configuration-sbfm-likely-automated`],`stale-zone-configuration-sbfm-likely-automated`,`text`),sbfm_static_resource_protection:l(e[`stale-zone-configuration-sbfm-static-resource-protection`],`stale-zone-configuration-sbfm-static-resource-protection`,`text`),sbfm_verified_bots:l(e[`stale-zone-configuration-sbfm-verified-bots`],`stale-zone-configuration-sbfm-verified-bots`,`text`),suppress_session_score:e[`stale-zone-configuration-suppress-session-score`],fight_mode:e[`stale-zone-configuration-fight-mode`]},optimize_wordpress:e[`optimize-wordpress`],sbfm_definitely_automated:l(e[`sbfm-definitely-automated`],`sbfm-definitely-automated`,`text`),sbfm_static_resource_protection:e[`sbfm-static-resource-protection`],sbfm_verified_bots:l(e[`sbfm-verified-bots`],`sbfm-verified-bots`,`text`),sbfm_likely_automated:l(e[`sbfm-likely-automated`],`sbfm-likely-automated`,`text`),auto_update_model:e[`auto-update-model`],bm_cookie_enabled:e[`bm-cookie-enabled`],suppress_session_score:e[`suppress-session-score`]});o(await c(`Updating`,async()=>t.botManagement.update({body:d,zone_id:u})),{successLabel:`Updated`})}},y={command:`bot-management`,describe:`Bot detection and mitigation settings — configure bot scores, JavaScript detections, and challenge behavior`,builder:e=>e.command(g).command(v).command(m).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{y as default};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import{C as e,T as t,_ as n,n as r}from"./auth-ffdf9yR0.mjs";import{t as i}from"./output-BJFNwj7b.mjs";import{n as a,t as o}from"./progress-CrCGTq7N.mjs";import{t as s}from"./local-VJaJ3BZ1.mjs";import{t as c}from"./cli-types-CRIDdDw3.mjs";function l(e){return e.positional(`asn-id`,{type:`string`,description:`Asn ID`,demandOption:!0}).option(`date`,{type:`string`,description:`Date`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const u={command:`day-report <asn-id>`,describe:`Gets all the data the botnet tracking database has for a given ASN registered to user account for given date. If no date is given, it will return results for the previous day.`,builder:c(l),handler:async t=>{let c={date:t.date};if(t.dryRun){a({command:`cf botnet-feed asn day-report`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/botnet_feed/asn/${t[`asn-id`]==null?`<asn-id>`:encodeURIComponent(String(t[`asn-id`]))}/day_report`,pathParams:{"asn-id":String(t[`asn-id`]??``)},query:c,bodyKind:`none`});return}let l=await r(t),u=t.local?s:await n(l);t.accountId=u,i(await o(`Loading`,async()=>l.botnetFeed.asn.dayReport({account_id:u,asn_id:t[`asn-id`],...c})),{successLabel:`Loaded`})}};function d(e){return e.positional(`asn-id`,{type:`string`,description:`Asn ID`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const f={command:`full-report <asn-id>`,describe:`Gets all the data the botnet threat feed tracking database has for a given ASN registered to user account.`,builder:c(d),handler:async t=>{if(t.dryRun){a({command:`cf botnet-feed asn full-report`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/botnet_feed/asn/${t[`asn-id`]==null?`<asn-id>`:encodeURIComponent(String(t[`asn-id`]))}/full_report`,pathParams:{"asn-id":String(t[`asn-id`]??``)},bodyKind:`none`});return}let c=await r(t),l=t.local?s:await n(c);t.accountId=l,i(await o(`Loading`,async()=>c.botnetFeed.asn.fullReport({account_id:l,asn_id:t[`asn-id`]})),{successLabel:`Loaded`})}},p={command:`asn`,describe:`ASN-level botnet activity data showing networks with known C2 infrastructure`,builder:e=>e.command(u).command(f).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function m(e){return e.positional(`asn-id`,{type:`string`,description:`Asn ID`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`force`,{type:`boolean`,alias:`f`,description:`Skip confirmation (useful in scripts and CI)`,default:!1})}const h={command:`delete <asn-id>`,describe:`Delete an ASN from botnet threat feed for a given user.`,builder:c(m),handler:async c=>{if(c.dryRun){a({command:`cf botnet-feed configs asn delete`,method:`DELETE`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/botnet_feed/configs/asn/${c[`asn-id`]==null?`<asn-id>`:encodeURIComponent(String(c[`asn-id`]))}`,pathParams:{"asn-id":String(c[`asn-id`]??``)},bodyKind:`none`});return}let l=await r(c),u=c.local?s:await n(l);if(c.accountId=u,!await t({force:!!c.force})){process.stderr.write(`Aborted.
3
- `);return}i(await o(`Deleting`,async()=>l.botnetFeed.configs.asn.delete({account_id:u,asn_id:c[`asn-id`]})),{successLabel:`Deleted`})}};function g(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const _={command:`get`,describe:`Gets a list of all ASNs registered for a user for the DDoS Botnet Feed API.`,builder:g,handler:async t=>{if(t.dryRun){a({command:`cf botnet-feed configs asn get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/botnet_feed/configs/asn`,pathParams:{},bodyKind:`none`});return}let c=await r(t),l=t.local?s:await n(c);t.accountId=l,i(await o(`Loading`,async()=>c.botnetFeed.configs.asn.get({account_id:l})),{successLabel:`Loaded`})}},v={command:`asn`,describe:`Botnet feed subscription configuration and notification preferences`,builder:e=>e.command(h).command(_).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},y={command:`configs`,describe:`Operations for configs`,builder:e=>e.command(v).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},b={command:`botnet-feed`,describe:`Botnet threat intelligence feeds — IP and ASN-level data on known command-and-control infrastructure`,builder:e=>e.command(p).command(y).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{b as default};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import{C as e,D as t,T as n,_ as r,n as i}from"./auth-ffdf9yR0.mjs";import{n as a,t as o}from"./body-parser-DKa8Ipg1.mjs";import{t as s}from"./output-BJFNwj7b.mjs";import{n as c,t as l}from"./progress-CrCGTq7N.mjs";import{n as u}from"./input-validation-zEO81MWN.mjs";import{t as d}from"./local-VJaJ3BZ1.mjs";import{t as f}from"./cli-types-CRIDdDw3.mjs";function p(e){return e.option(`show-historic`,{type:`string`,description:`Include scanned images without domain metadata (historic data). Default: false (only show images with domain)`}).option(`download`,{type:`string`,description:`If true, include base64-encoded image data in the response`}).option(`image-data`,{type:`string`,description:`Base64 encoded image data. Can include data URI prefix (e.g., 'data:image/png;base64,...') or just the base64 string.`}).option(`score-threshold`,{type:`number`,description:`Minimum similarity score threshold for matches (0-1, default: 0)`,default:0}).option(`top-k`,{type:`number`,description:`Number of closest matches to return (1-100, default: 10)`,default:10}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const m={command:`submit`,describe:`Submit an image and find the n closest matches from the scanned images index without creating any match records. Returns similarity scores and metadata for each match.`,builder:p,handler:async n=>{let f={showHistoric:n[`show-historic`],download:n.download};if(n.dryRun){c({command:`cf brand-protection submit`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/cloudforce-one/v2/brand-protection/logo/search`,pathParams:{},query:f,bodyKind:`json`,body:n.body===void 0?o({image_data:u(n[`image-data`],`image-data`,`text`),score_threshold:n[`score-threshold`],top_k:n[`top-k`]}):a(n.body)});return}let p=await i(n),m=n.local?d:await r(p);if(n.accountId=m,n.body){let e=a(n.body);new URLSearchParams(Object.entries(f).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),s(await l(`Creating`,async()=>p.brandProtection.submit({...e,account_id:m,...f})),{successLabel:`Created`});return}n[`image-data`]===void 0&&(n[`image-data`]=await t(`image-data`,`Base64 encoded image data. Can include data URI prefix (e.g., 'data:image/png;base64,...') or just the base64 string.`));let h=o({image_data:u(n[`image-data`],`image-data`,`text`),score_threshold:n[`score-threshold`],top_k:n[`top-k`]});new URLSearchParams(Object.entries(f).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),s(await l(`Creating`,async()=>p.brandProtection.submit({...h,account_id:m,...f})),{successLabel:`Created`})}};function h(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const g={command:`url-info`,describe:`Get the total number of saved brand protection queries (domain + logo) for an account`,builder:h,handler:async t=>{if(t.dryRun){c({command:`cf brand-protection url-info`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/cloudforce-one/v2/brand-protection/total-queries`,pathParams:{},bodyKind:`none`});return}let n=await i(t),a=t.local?d:await r(n);t.accountId=a,s(await l(`Loading`,async()=>n.brandProtection.urlInfo({account_id:a})),{successLabel:`Loaded`})}};function _(e){return e.option(`offset`,{type:`string`,description:`Offset`}).option(`limit`,{type:`string`,description:`Limit`}).option(`query-id`,{type:`string`,description:`Query ID`,demandOption:!0}).option(`download`,{type:`string`,description:`Download`}).option(`order-by`,{type:`string`,description:`Column to sort by. Options: 'matchedAt', 'domain', 'similarityScore', or 'registrar'`,choices:[`matchedAt`,`domain`,`similarityScore`,`registrar`]}).option(`order`,{type:`string`,description:`Sort order. Options: 'asc' (ascending) or 'desc' (descending)`,choices:[`asc`,`desc`]}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const v={command:`get`,describe:`Get paginated list of logo matches for a specific brand protection logo query`,builder:f(_),handler:async t=>{let n={offset:t.offset,limit:t.limit,query_id:t[`query-id`],download:t.download,orderBy:t[`order-by`],order:t.order};if(t.dryRun){c({command:`cf brand-protection v2 logo-matches get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/cloudforce-one/v2/brand-protection/logo/matches`,pathParams:{},query:n,bodyKind:`none`});return}let a=await i(t),o=t.local?d:await r(a);t.accountId=o,s(await l(`Loading`,async()=>a.brandProtection.v2.logoMatches.get({account_id:o,...n})),{successLabel:`Loaded`})}},y={command:`logo-matches`,describe:`Detected visual logo matches found on potentially infringing websites`,builder:e=>e.command(v).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function b(e){return e.option(`image-data`,{type:`string`,description:`Base64 encoded image data. Can include data URI prefix (e.g., 'data:image/png;base64,...') or just the base64 string.`}).option(`search-lookback`,{type:`boolean`,description:`If true, search historic scanned images for matches above the similarity threshold`,default:!0}).option(`similarity-threshold`,{type:`number`,description:`Minimum similarity score (0-1) required for visual matches`}).option(`tag`,{type:`string`,description:`Unique identifier for the logo query`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const x={command:`create`,describe:`Create a new saved brand protection logo query for visual similarity matching`,builder:b,handler:async n=>{if(n.dryRun){c({command:`cf brand-protection v2 logos create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/cloudforce-one/v2/brand-protection/logo/queries`,pathParams:{},bodyKind:`json`,body:n.body===void 0?o({image_data:u(n[`image-data`],`image-data`,`text`),search_lookback:n[`search-lookback`],similarity_threshold:n[`similarity-threshold`],tag:u(n.tag,`tag`,`text`)}):a(n.body)});return}let f=await i(n),p=n.local?d:await r(f);if(n.accountId=p,n.body){let e=a(n.body);s(await l(`Creating`,async()=>f.brandProtection.v2.logos.create({...e,account_id:p})),{successLabel:`Created`});return}if(n[`image-data`]===void 0&&(n[`image-data`]=await t(`image-data`,`Base64 encoded image data. Can include data URI prefix (e.g., 'data:image/png;base64,...') or just the base64 string.`)),n[`similarity-threshold`]===void 0)throw Error(`--similarity-threshold is required (or pass --body with this field set).`);n.tag===void 0&&(n.tag=await t(`tag`,`Unique identifier for the logo query`));let m=o({image_data:u(n[`image-data`],`image-data`,`text`),search_lookback:n[`search-lookback`],similarity_threshold:n[`similarity-threshold`],tag:u(n.tag,`tag`,`text`)});s(await l(`Creating`,async()=>f.brandProtection.v2.logos.create({...m,account_id:p})),{successLabel:`Created`})}};function S(e){return e.positional(`query-id`,{type:`string`,description:`Query ID`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`force`,{type:`boolean`,alias:`f`,description:`Skip confirmation (useful in scripts and CI)`,default:!1})}const C={command:`delete <query-id>`,describe:`Delete a saved brand protection logo query. Returns 404 if the query ID doesn't exist.`,builder:S,handler:async t=>{if(t.dryRun){c({command:`cf brand-protection v2 logos delete`,method:`DELETE`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/cloudforce-one/v2/brand-protection/logo/queries/${t[`query-id`]==null?`<query-id>`:encodeURIComponent(String(t[`query-id`]))}`,pathParams:{"query-id":String(t[`query-id`]??``)},bodyKind:`none`});return}let a=await i(t),o=t.local?d:await r(a);if(t.accountId=o,!await n({force:!!t.force})){process.stderr.write(`Aborted.
3
- `);return}s(await l(`Deleting`,async()=>a.brandProtection.v2.logos.delete({account_id:o,query_id:t[`query-id`]})),{successLabel:`Deleted`})}};function w(e){return e.option(`id`,{type:`string`,description:`Optional query ID to retrieve a specific logo query`}).option(`download`,{type:`string`,description:`If true, include base64-encoded image data in the response`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const T={command:`get`,describe:`Get all saved brand protection logo queries for an account. Optionally specify id to get a single query. Set download=true to include base64-encoded image data.`,builder:w,handler:async t=>{let n={id:t.id,download:t.download};if(t.dryRun){c({command:`cf brand-protection v2 logos get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/cloudforce-one/v2/brand-protection/logo/queries`,pathParams:{},query:n,bodyKind:`none`});return}let a=await i(t),o=t.local?d:await r(a);t.accountId=o,s(await l(`Loading`,async()=>a.brandProtection.v2.logos.get({account_id:o,...n})),{successLabel:`Loaded`})}},E={command:`logos`,describe:`Brand monitoring queries that define search patterns for detecting brand abuse`,builder:e=>e.command(x).command(C).command(T).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function D(e){return e.option(`offset`,{type:`string`,description:`Offset`}).option(`limit`,{type:`string`,description:`Limit`}).option(`query-id`,{type:`string`,description:`Query ID or comma-separated list of Query IDs. When multiple IDs are provided, matches are deduplicated across queries and each match includes a match_details array with per-match query metadata and dismissed state.`,demandOption:!0}).option(`include-domain-id`,{type:`string`,description:`Include domain ID`}).option(`include-dismissed`,{type:`string`,description:`Include dismissed`}).option(`domain-search`,{type:`string`,description:`Filter matches by domain name (substring match)`}).option(`order-by`,{type:`string`,description:`Column to sort by. Options: 'domain', 'first_seen', or 'registrar'`,choices:[`domain`,`first_seen`,`registrar`]}).option(`order`,{type:`string`,description:`Sort order. Options: 'asc' (ascending) or 'desc' (descending)`,choices:[`asc`,`desc`]}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const O={command:`get`,describe:`Get paginated list of domain matches for one or more brand protection queries. When multiple query_ids are provided (comma-separated), matches are deduplicated across queries and each match includes a match_details array with per-match query metadata and individual dismissed state.`,builder:f(D),handler:async t=>{let n={offset:t.offset,limit:t.limit,query_id:t[`query-id`],include_domain_id:t[`include-domain-id`],include_dismissed:t[`include-dismissed`],domain_search:t[`domain-search`],orderBy:t[`order-by`],order:t.order};if(t.dryRun){c({command:`cf brand-protection v2 matches get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/cloudforce-one/v2/brand-protection/domain/matches`,pathParams:{},query:n,bodyKind:`none`});return}let a=await i(t),o=t.local?d:await r(a);t.accountId=o,s(await l(`Loading`,async()=>a.brandProtection.v2.matches.get({account_id:o,...n})),{successLabel:`Loaded`})}},k={command:`matches`,describe:`Detected brand abuse matches from monitoring queries with evidence downloads`,builder:e=>e.command(O).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function A(e){return e.option(`id`,{type:`string`,description:`ID`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const j={command:`get`,describe:`Get all saved brand protection queries for an account`,builder:A,handler:async t=>{let n={id:t.id};if(t.dryRun){c({command:`cf brand-protection v2 queries get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/cloudforce-one/v2/brand-protection/domain/queries`,pathParams:{},query:n,bodyKind:`none`});return}let a=await i(t),o=t.local?d:await r(a);t.accountId=o,s(await l(`Loading`,async()=>a.brandProtection.v2.queries.get({account_id:o,...n})),{successLabel:`Loaded`})}},M={command:`queries`,describe:`Brand monitoring queries that define search patterns for detecting brand abuse`,builder:e=>e.command(j).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},N={command:`v2`,describe:`Operations for v2`,builder:e=>e.command(y).command(E).command(k).command(M).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},P={command:`brand-protection`,describe:`Monitor the Internet for phishing sites, lookalike domains, and unauthorized use of your brand assets`,builder:e=>e.command(m).command(g).command(N).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{P as default};
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import{C as e,T as t,_ as n,i as r,n as i}from"./auth-ffdf9yR0.mjs";import{n as a}from"./body-parser-DKa8Ipg1.mjs";import{t as o}from"./output-BJFNwj7b.mjs";import{n as s,t as c}from"./progress-CrCGTq7N.mjs";import{t as l}from"./local-VJaJ3BZ1.mjs";import{t as u}from"./cli-types-CRIDdDw3.mjs";import{n as d,t as f}from"./raw-fetch-Dlccg0Tr.mjs";function p(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const m={command:`create`,describe:"Returns the page's accessibility tree. Use `interestingOnly` to only return semantically meaningful nodes; use `root` to scope the tree to a CSS-selector-anchored subtree. Control page loading with `gotoOptions` and `waitFor*` options.",builder:p,handler:async t=>{let u={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering accessibilityTree create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/accessibilityTree`,pathParams:{},query:u,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let d=await i(t),f=t.local?l:await n(d);if(t.accountId=f,t.body){let e=a(t.body);new URLSearchParams(Object.entries(u).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),o(await c(`Creating`,async()=>d.browserRendering.accessibilityTree.create({body:e,account_id:f,...u})),{successLabel:`Created`});return}o(await c(`Creating`,async()=>r(d,`POST`,`/accounts/${f}/browser-rendering/accessibilityTree`,{query:u})),{successLabel:`Created`})}},ee={command:`accessibilityTree`,describe:`Operations for accessibilityTree`,builder:e=>e.command(m).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function h(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const g={command:`create`,describe:"Fetches rendered HTML content from provided URL or HTML. Check available options like `gotoOptions` and `waitFor*` to control page load behaviour.",builder:h,handler:async t=>{let u={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering content create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/content`,pathParams:{},query:u,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let d=await i(t),f=t.local?l:await n(d);if(t.accountId=f,t.body){let e=a(t.body);new URLSearchParams(Object.entries(u).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),o(await c(`Creating`,async()=>d.browserRendering.content.create({body:e,account_id:f,...u})),{successLabel:`Created`});return}o(await c(`Creating`,async()=>r(d,`POST`,`/accounts/${f}/browser-rendering/content`,{query:u})),{successLabel:`Created`})}},_={command:`content`,describe:`Render a page and return its full HTML content after JavaScript execution`,builder:e=>e.command(g).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function v(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const y={command:`create`,describe:"Starts a crawl job for the provided URL and its children. Check available options like `gotoOptions` and `waitFor*` to control page load behaviour.",builder:v,handler:async t=>{let u={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering crawl create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/crawl`,pathParams:{},query:u,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let d=await i(t),f=t.local?l:await n(d);if(t.accountId=f,t.body){let e=a(t.body);new URLSearchParams(Object.entries(u).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),o(await c(`Creating`,async()=>d.browserRendering.crawl.create({body:e,account_id:f,...u})),{successLabel:`Created`});return}o(await c(`Creating`,async()=>r(d,`POST`,`/accounts/${f}/browser-rendering/crawl`,{query:u})),{successLabel:`Created`})}};function b(e){return e.positional(`job-id`,{type:`string`,description:`The ID of the crawl job to cancel.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`force`,{type:`boolean`,alias:`f`,description:`Skip confirmation (useful in scripts and CI)`,default:!1})}const x={command:`delete <job-id>`,describe:`Cancels an ongoing crawl job by setting its status to cancelled and stopping all queued URLs.`,builder:b,handler:async r=>{if(r.dryRun){s({command:`cf browser-rendering crawl delete`,method:`DELETE`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/crawl/${r[`job-id`]==null?`<job-id>`:encodeURIComponent(String(r[`job-id`]))}`,pathParams:{"job-id":String(r[`job-id`]??``)},bodyKind:`none`});return}let a=await i(r),u=r.local?l:await n(a);if(r.accountId=u,!await t({force:!!r.force})){process.stderr.write(`Aborted.
3
- `);return}o(await c(`Deleting`,async()=>a.browserRendering.crawl.delete({account_id:u,job_id:r[`job-id`]})),{successLabel:`Deleted`})}};function S(e){return e.positional(`job-id`,{type:`string`,description:`Crawl job ID.`,demandOption:!0}).option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`status`,{type:`string`,description:`Filter by URL status.`,choices:[`queued`,`errored`,`completed`,`disallowed`,`skipped`,`cancelled`]}).option(`cursor`,{type:`number`,description:`Cursor for pagination.`}).option(`limit`,{type:`number`,description:`Limit for pagination.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const C={command:`get <job-id>`,describe:`Returns the result of a crawl job.`,builder:u(S),handler:async t=>{let r={cacheTTL:t[`cache-ttl`],status:t.status,cursor:t.cursor,limit:t.limit};if(t.dryRun){s({command:`cf browser-rendering crawl get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/crawl/${t[`job-id`]==null?`<job-id>`:encodeURIComponent(String(t[`job-id`]))}`,pathParams:{"job-id":String(t[`job-id`]??``)},query:r,bodyKind:`none`});return}let a=await i(t),u=t.local?l:await n(a);t.accountId=u,o(await c(`Loading`,async()=>a.browserRendering.crawl.get({account_id:u,job_id:t[`job-id`],...r})),{successLabel:`Loaded`})}},w={command:`crawl`,describe:`Crawl operations`,builder:e=>e.command(y).command(x).command(C).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function T(e){return e.positional(`session-id`,{type:`string`,description:`Browser session ID to connect to.`,demandOption:!0}).option(`keep-alive`,{type:`number`,description:`Keep-alive time in ms (only valid when acquiring new session).`}).option(`lab`,{type:`boolean`,description:`Use experimental browser.`}).option(`recording`,{type:`boolean`,description:`Recording`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const E={command:`connect <session-id>`,describe:`Establishes a WebSocket connection to an existing browser session.`,builder:T,handler:async t=>{let r={keep_alive:t[`keep-alive`],lab:t.lab,recording:t.recording};if(t.dryRun){s({command:`cf browser-rendering devtools browser connect`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}`,pathParams:{"session-id":String(t[`session-id`]??``)},query:r,bodyKind:`none`});return}let a=await i(t),u=t.local?l:await n(a);t.accountId=u,o(await c(`Loading`,async()=>a.browserRendering.devtools.browser.connect({account_id:u,session_id:t[`session-id`],...r})),{successLabel:`Loaded`})}};function D(e){return e.option(`keep-alive`,{type:`number`,description:`Keep-alive time in milliseconds.`}).option(`lab`,{type:`boolean`,description:`Use experimental browser.`}).option(`targets`,{type:`boolean`,description:`Include browser targets in response.`}).option(`live-view-url-expires-in-ms`,{type:`number`,description:`How long the live view URL remains valid, in milliseconds (max 60 minutes). Only used when targets is true.`}).option(`recording`,{type:`boolean`,description:`Recording`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const O={command:`create`,describe:`Acquires a browser and returns its session ID and websocket URL.`,builder:D,handler:async t=>{let r={keep_alive:t[`keep-alive`],lab:t.lab,targets:t.targets,liveViewUrlExpiresInMs:t[`live-view-url-expires-in-ms`],recording:t.recording};if(t.dryRun){s({command:`cf browser-rendering devtools browser create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser`,pathParams:{},query:r,bodyKind:`none`});return}let a=await i(t),u=t.local?l:await n(a);t.accountId=u,o(await c(`Creating`,async()=>a.browserRendering.devtools.browser.create({account_id:u,...r})),{successLabel:`Created`})}};function k(e){return e.positional(`session-id`,{type:`string`,description:`Browser session ID to close.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`force`,{type:`boolean`,alias:`f`,description:`Skip confirmation (useful in scripts and CI)`,default:!1})}const A={command:`delete <session-id>`,describe:`Closes an existing browser session.`,builder:k,handler:async r=>{if(r.dryRun){s({command:`cf browser-rendering devtools browser delete`,method:`DELETE`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${r[`session-id`]==null?`<session-id>`:encodeURIComponent(String(r[`session-id`]))}`,pathParams:{"session-id":String(r[`session-id`]??``)},bodyKind:`none`});return}let a=await i(r),u=r.local?l:await n(a);if(r.accountId=u,!await t({force:!!r.force})){process.stderr.write(`Aborted.
4
- `);return}o(await c(`Deleting`,async()=>a.browserRendering.devtools.browser.delete({account_id:u,session_id:r[`session-id`]})),{successLabel:`Deleted`})}};function j(e){return e.option(`keep-alive`,{type:`number`,description:`Keep-alive time in ms (only valid when acquiring new session).`}).option(`lab`,{type:`boolean`,description:`Use experimental browser.`}).option(`recording`,{type:`boolean`,description:`Recording`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const M={command:`launch`,describe:`Acquires and establishes a WebSocket connection to a browser session.`,builder:j,handler:async t=>{let r={keep_alive:t[`keep-alive`],lab:t.lab,recording:t.recording};if(t.dryRun){s({command:`cf browser-rendering devtools browser launch`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser`,pathParams:{},query:r,bodyKind:`none`});return}let a=await i(t),u=t.local?l:await n(a);t.accountId=u,o(await c(`Loading`,async()=>a.browserRendering.devtools.browser.launch({account_id:u,...r})),{successLabel:`Loaded`})}};function N(e){return e.positional(`target-id`,{type:`string`,description:`Target ID, e.g. page ID.`,demandOption:!0}).option(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const P={command:`get <target-id>`,describe:`Establishes a WebSocket connection to a specific Chrome DevTools target or page.`,builder:N,handler:async t=>{if(t.dryRun){s({command:`cf browser-rendering devtools browser page get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/page/${t[`target-id`]==null?`<target-id>`:encodeURIComponent(String(t[`target-id`]))}`,pathParams:{"session-id":String(t[`session-id`]??``),"target-id":String(t[`target-id`]??``)},bodyKind:`none`});return}let r=await i(t),a=t.local?l:await n(r);t.accountId=a,o(await c(`Loading`,async()=>r.browserRendering.devtools.browser.page.get({account_id:a,session_id:t[`session-id`],target_id:t[`target-id`]})),{successLabel:`Loaded`})}},F={command:`page`,describe:`Chrome DevTools Protocol endpoints for browser automation and debugging`,builder:e=>e.command(P).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function I(e){return e.positional(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const L={command:`protocol <session-id>`,describe:`Returns the complete Chrome DevTools Protocol schema including all domains, commands, events, and types. This schema describes the entire CDP API surface.`,builder:I,handler:async t=>{if(t.dryRun){s({command:`cf browser-rendering devtools browser protocol`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/json/protocol`,pathParams:{"session-id":String(t[`session-id`]??``)},bodyKind:`none`});return}let r=await i(t),a=t.local?l:await n(r);t.accountId=a,o(await c(`Loading`,async()=>r.browserRendering.devtools.browser.protocol({account_id:a,session_id:t[`session-id`]})),{successLabel:`Loaded`})}};function R(e){return e.positional(`target-id`,{type:`string`,description:`Target ID to activate.`,demandOption:!0}).option(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const z={command:`activate <target-id>`,describe:`Activates (brings to front) a specific browser target by its ID.`,builder:R,handler:async t=>{if(t.dryRun){s({command:`cf browser-rendering devtools browser targets activate`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/json/activate/${t[`target-id`]==null?`<target-id>`:encodeURIComponent(String(t[`target-id`]))}`,pathParams:{"session-id":String(t[`session-id`]??``),"target-id":String(t[`target-id`]??``)},bodyKind:`none`});return}let r=await i(t),a=t.local?l:await n(r);t.accountId=a,o(await c(`Loading`,async()=>r.browserRendering.devtools.browser.targets.activate({account_id:a,session_id:t[`session-id`],target_id:t[`target-id`]})),{successLabel:`Loaded`})}};function B(e){return e.positional(`target-id`,{type:`string`,description:`Target ID to close.`,demandOption:!0}).option(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const V={command:`close <target-id>`,describe:`Closes a specific browser target (tab, page, etc.) by its ID. Returns 'Target is closing' on success or an error if the target is not found.`,builder:B,handler:async t=>{if(t.dryRun){s({command:`cf browser-rendering devtools browser targets close`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/json/close/${t[`target-id`]==null?`<target-id>`:encodeURIComponent(String(t[`target-id`]))}`,pathParams:{"session-id":String(t[`session-id`]??``),"target-id":String(t[`target-id`]??``)},bodyKind:`none`});return}let r=await i(t),a=t.local?l:await n(r);t.accountId=a,o(await c(`Loading`,async()=>r.browserRendering.devtools.browser.targets.close({account_id:a,session_id:t[`session-id`],target_id:t[`target-id`]})),{successLabel:`Loaded`})}};function H(e){return e.positional(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`url`,{type:`string`,description:`Url`}).option(`live-view-url-expires-in-ms`,{type:`number`,description:`How long the live view URL remains valid, in milliseconds (max 60 minutes)`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const U={command:`create <session-id>`,describe:`Opens a new tab in the browser. Optionally specify a URL to navigate to.`,builder:H,handler:async t=>{let r={url:t.url,liveViewUrlExpiresInMs:t[`live-view-url-expires-in-ms`]};if(t.dryRun){s({command:`cf browser-rendering devtools browser targets create`,method:`PUT`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/json/new`,pathParams:{"session-id":String(t[`session-id`]??``)},query:r,bodyKind:`none`});return}let a=await i(t),u=t.local?l:await n(a);t.accountId=u,o(await c(`Updating`,async()=>a.browserRendering.devtools.browser.targets.create({account_id:u,session_id:t[`session-id`],...r})),{successLabel:`Updated`})}};function W(e){return e.positional(`target-id`,{type:`string`,description:`Target ID.`,demandOption:!0}).option(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const G={command:`get <target-id>`,describe:`Returns the debuggable target with the given ID.`,builder:W,handler:async t=>{if(t.dryRun){s({command:`cf browser-rendering devtools browser targets get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/json/list/${t[`target-id`]==null?`<target-id>`:encodeURIComponent(String(t[`target-id`]))}`,pathParams:{"session-id":String(t[`session-id`]??``),"target-id":String(t[`target-id`]??``)},bodyKind:`none`});return}let r=await i(t),a=t.local?l:await n(r);t.accountId=a,o(await c(`Loading`,async()=>r.browserRendering.devtools.browser.targets.get({account_id:a,session_id:t[`session-id`],target_id:t[`target-id`]})),{successLabel:`Loaded`})}};function K(e){return e.option(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`live-view-url-expires-in-ms`,{type:`number`,description:`How long the live view URLs remain valid, in milliseconds (max 60 minutes)`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const q={command:`list`,describe:`Returns a list of all debuggable targets including tabs, pages, service workers, and other browser contexts.`,builder:K,handler:async t=>{let r={liveViewUrlExpiresInMs:t[`live-view-url-expires-in-ms`]};if(t.dryRun){s({command:`cf browser-rendering devtools browser targets list`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/json/list`,pathParams:{"session-id":String(t[`session-id`]??``)},query:r,bodyKind:`none`});return}let a=await i(t),u=t.local?l:await n(a);t.accountId=u,o(await c(`Loading`,async()=>a.browserRendering.devtools.browser.targets.list({account_id:u,session_id:t[`session-id`],...r})),{successLabel:`Loaded`})}},J={command:`targets`,describe:`Chrome DevTools Protocol endpoints for browser automation and debugging`,builder:e=>e.command(z).command(V).command(U).command(G).command(q).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function Y(e){return e.positional(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const X={command:`version <session-id>`,describe:`Get browser version metadata.`,builder:Y,handler:async t=>{if(t.dryRun){s({command:`cf browser-rendering devtools browser version`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/json/version`,pathParams:{"session-id":String(t[`session-id`]??``)},bodyKind:`none`});return}let r=await i(t),a=t.local?l:await n(r);t.accountId=a,o(await c(`Loading`,async()=>r.browserRendering.devtools.browser.version({account_id:a,session_id:t[`session-id`]})),{successLabel:`Loaded`})}},te={command:`browser`,describe:`Chrome DevTools Protocol endpoints for browser automation and debugging`,builder:e=>e.command(E).command(O).command(A).command(M).command(L).command(X).command(F).command(J).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function Z(e){return e.positional(`session-id`,{type:`string`,description:`Browser session ID.`,demandOption:!0}).option(`live-view-url-expires-in-ms`,{type:`number`,description:`How long the live view URLs remain valid, in milliseconds (max 60 minutes)`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const Q={command:`get <session-id>`,describe:`Returns a list of all debuggable targets including tabs, pages, service workers, and other browser contexts.`,builder:Z,handler:async t=>{let r={liveViewUrlExpiresInMs:t[`live-view-url-expires-in-ms`]};if(t.dryRun){s({command:`cf browser-rendering devtools json get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/browser/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}/json`,pathParams:{"session-id":String(t[`session-id`]??``)},query:r,bodyKind:`none`});return}let a=await i(t),u=t.local?l:await n(a);t.accountId=u,o(await c(`Loading`,async()=>a.browserRendering.devtools.json.get({account_id:u,session_id:t[`session-id`],...r})),{successLabel:`Loaded`})}},ne={command:`json`,describe:`Chrome DevTools Protocol endpoints for browser automation and debugging`,builder:e=>e.command(Q).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function re(e){return e.positional(`session-id`,{type:`string`,description:`Session ID.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const ie={command:`get <session-id>`,describe:`Get details for a specific browser session.`,builder:re,handler:async t=>{if(t.dryRun){s({command:`cf browser-rendering devtools session get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/session/${t[`session-id`]==null?`<session-id>`:encodeURIComponent(String(t[`session-id`]))}`,pathParams:{"session-id":String(t[`session-id`]??``)},bodyKind:`none`});return}let r=await i(t),a=t.local?l:await n(r);t.accountId=a,o(await c(`Loading`,async()=>r.browserRendering.devtools.session.get({account_id:a,session_id:t[`session-id`]})),{successLabel:`Loaded`})}};function ae(e){return e.option(`limit`,{type:`number`,description:`Limit`}).option(`offset`,{type:`number`,description:`Offset`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const oe={command:`list`,describe:`List active browser sessions.`,builder:ae,handler:async t=>{let r={limit:t.limit,offset:t.offset};if(t.dryRun){s({command:`cf browser-rendering devtools session list`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/devtools/session`,pathParams:{},query:r,bodyKind:`none`});return}let a=await i(t),u=t.local?l:await n(a);t.accountId=u,o(await c(`Loading`,async()=>a.browserRendering.devtools.session.list({account_id:u,...r})),{successLabel:`Loaded`})}},se={command:`session`,describe:`Chrome DevTools Protocol endpoints for browser automation and debugging`,builder:e=>e.command(ie).command(oe).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},ce={command:`devtools`,describe:`Operations for devtools`,builder:e=>e.command(te).command(ne).command(se).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function le(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const ue={command:`create`,describe:"Gets json from a webpage from a provided URL or HTML. Pass `prompt` or `schema` in the body. Control page loading with `gotoOptions` and `waitFor*` options.",builder:le,handler:async t=>{let u={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering json create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/json`,pathParams:{},query:u,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let d=await i(t),f=t.local?l:await n(d);if(t.accountId=f,t.body){let e=a(t.body);new URLSearchParams(Object.entries(u).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),o(await c(`Creating`,async()=>d.browserRendering.json.create({body:e,account_id:f,...u})),{successLabel:`Created`});return}o(await c(`Creating`,async()=>r(d,`POST`,`/accounts/${f}/browser-rendering/json`,{query:u})),{successLabel:`Created`})}},de={command:`json`,describe:`Extract structured JSON data from rendered pages using selectors`,builder:e=>e.command(ue).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function fe(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const pe={command:`create`,describe:`Get links from a web page.`,builder:fe,handler:async t=>{let u={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering links create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/links`,pathParams:{},query:u,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let d=await i(t),f=t.local?l:await n(d);if(t.accountId=f,t.body){let e=a(t.body);new URLSearchParams(Object.entries(u).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),o(await c(`Creating`,async()=>d.browserRendering.links.create({body:e,account_id:f,...u})),{successLabel:`Created`});return}o(await c(`Creating`,async()=>r(d,`POST`,`/accounts/${f}/browser-rendering/links`,{query:u})),{successLabel:`Created`})}},me={command:`links`,describe:`Extract all links from a rendered web page`,builder:e=>e.command(pe).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function he(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const ge={command:`create`,describe:"Gets markdown of a webpage from provided URL or HTML. Control page loading with `gotoOptions` and `waitFor*` options.",builder:he,handler:async t=>{let u={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering markdown create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/markdown`,pathParams:{},query:u,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let d=await i(t),f=t.local?l:await n(d);if(t.accountId=f,t.body){let e=a(t.body);new URLSearchParams(Object.entries(u).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),o(await c(`Creating`,async()=>d.browserRendering.markdown.create({body:e,account_id:f,...u})),{successLabel:`Created`});return}o(await c(`Creating`,async()=>r(d,`POST`,`/accounts/${f}/browser-rendering/markdown`,{query:u})),{successLabel:`Created`})}},_e={command:`markdown`,describe:`Convert rendered web page content to clean Markdown format`,builder:e=>e.command(ge).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function ve(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`}).option(`text`,{type:`boolean`,description:`Decode the response body as UTF-8 text instead of writing raw bytes`,default:!1})}const ye={command:`create`,describe:"Fetches rendered PDF from provided URL or HTML. Check available options like `gotoOptions` and `waitFor*` to control page load behaviour.",builder:ve,handler:async t=>{let r={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering pdf create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/pdf`,pathParams:{},query:r,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let o=await i(t),u=t.local?l:await n(o);if(t.accountId=u,t.body){let e=a(t.body),n=new URLSearchParams(Object.entries(r).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),i=await c(`Creating`,async()=>f(`/accounts/${u}/browser-rendering/pdf${n?`?`+n:``}`,{method:`POST`,localEndpoint:t.local?t.localEndpoint:void 0,body:JSON.stringify(e),contentType:`application/json`}));d(t.text===!0?i.toString(`utf-8`):i);return}let p=new URLSearchParams(Object.entries(r).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),m=await c(`Creating`,async()=>f(`/accounts/${u}/browser-rendering/pdf${p?`?`+p:``}`,{method:`POST`,localEndpoint:t.local?t.localEndpoint:void 0}));d(t.text===!0?m.toString(`utf-8`):m)}},be={command:`pdf`,describe:`Generate PDF documents from rendered web pages`,builder:e=>e.command(ye).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function $(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const xe={command:`create`,describe:`Get meta attributes like height, width, text and others of selected elements.`,builder:$,handler:async t=>{let u={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering scrape create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/scrape`,pathParams:{},query:u,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let d=await i(t),f=t.local?l:await n(d);if(t.accountId=f,t.body){let e=a(t.body);new URLSearchParams(Object.entries(u).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),o(await c(`Creating`,async()=>d.browserRendering.scrape.create({body:e,account_id:f,...u})),{successLabel:`Created`});return}o(await c(`Creating`,async()=>r(d,`POST`,`/accounts/${f}/browser-rendering/scrape`,{query:u})),{successLabel:`Created`})}},Se={command:`scrape`,describe:`Scrape structured data from web pages using CSS selectors`,builder:e=>e.command(xe).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function Ce(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`}).option(`text`,{type:`boolean`,description:`Decode the response body as UTF-8 text instead of writing raw bytes`,default:!1})}const we={command:`create`,describe:"Takes a screenshot of a webpage from provided URL or HTML. Control page loading with `gotoOptions` and `waitFor*` options. Customize screenshots with `viewport`, `fullPage`, `clip` and others.",builder:Ce,handler:async t=>{let r={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering screenshot create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/screenshot`,pathParams:{},query:r,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let o=await i(t),u=t.local?l:await n(o);if(t.accountId=u,t.body){let e=a(t.body),n=new URLSearchParams(Object.entries(r).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),i=await c(`Creating`,async()=>f(`/accounts/${u}/browser-rendering/screenshot${n?`?`+n:``}`,{method:`POST`,localEndpoint:t.local?t.localEndpoint:void 0,body:JSON.stringify(e),contentType:`application/json`}));d(t.text===!0?i.toString(`utf-8`):i);return}let p=new URLSearchParams(Object.entries(r).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),m=await c(`Creating`,async()=>f(`/accounts/${u}/browser-rendering/screenshot${p?`?`+p:``}`,{method:`POST`,localEndpoint:t.local?t.localEndpoint:void 0}));d(t.text===!0?m.toString(`utf-8`):m)}},Te={command:`screenshot`,describe:`Capture viewport or full-page screenshots as PNG or JPEG images`,builder:e=>e.command(we).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function Ee(e){return e.option(`cache-ttl`,{type:`number`,description:`Cache TTL default is 5s. Set to 0 to disable.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const De={command:`create`,describe:"Returns the page's HTML content and screenshot. Control page loading with `gotoOptions` and `waitFor*` options. Customize screenshots with `viewport`, `fullPage`, `clip` and others.",builder:Ee,handler:async t=>{let u={cacheTTL:t[`cache-ttl`]};if(t.dryRun){s({command:`cf browser-rendering snapshot create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/browser-rendering/snapshot`,pathParams:{},query:u,bodyKind:`json`,body:t.body===void 0?void 0:a(t.body)});return}let d=await i(t),f=t.local?l:await n(d);if(t.accountId=f,t.body){let e=a(t.body);new URLSearchParams(Object.entries(u).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])).toString(),o(await c(`Creating`,async()=>d.browserRendering.snapshot.create({body:e,account_id:f,...u})),{successLabel:`Created`});return}o(await c(`Creating`,async()=>r(d,`POST`,`/accounts/${f}/browser-rendering/snapshot`,{query:u})),{successLabel:`Created`})}},Oe={command:`snapshot`,describe:`Capture a complete DOM snapshot including styles and resources`,builder:e=>e.command(De).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},ke={command:`browser-rendering`,describe:`Headless browser API — render pages, take screenshots, generate PDFs, scrape content, and extract structured data`,builder:e=>e.command(ee).command(_).command(w).command(ce).command(de).command(me).command(_e).command(be).command(Se).command(Te).command(Oe).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{ke as default};
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import{C as e,T as t,_ as n,n as r}from"./auth-ffdf9yR0.mjs";import{n as i,t as a}from"./body-parser-DKa8Ipg1.mjs";import{t as o}from"./output-BJFNwj7b.mjs";import{n as s,t as c}from"./progress-CrCGTq7N.mjs";import{n as l}from"./input-validation-zEO81MWN.mjs";import{t as u}from"./local-VJaJ3BZ1.mjs";function d(e){return e.option(`name`,{type:`string`,description:`A short description of Calls app, not shown to end users.`,default:``}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const f={command:`create`,describe:`Creates a new Cloudflare calls app. An app is an unique enviroment where each Session can access all Tracks within the app.`,builder:d,handler:async t=>{if(t.dryRun){s({command:`cf calls sfu create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/apps`,pathParams:{},bodyKind:`json`,body:t.body===void 0?a({name:l(t.name,`name`,`text`)}):i(t.body)});return}let d=await r(t),f=t.local?u:await n(d);if(t.accountId=f,t.body){let e=i(t.body);o(await c(`Creating`,async()=>d.calls.sfu.create({body:e,account_id:f})),{successLabel:`Created`});return}let p=a({name:l(t.name,`name`,`text`)});o(await c(`Creating`,async()=>d.calls.sfu.create({body:p,account_id:f})),{successLabel:`Created`})}};function p(e){return e.positional(`app-id`,{type:`string`,description:`A Cloudflare-generated unique identifier for a item.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`force`,{type:`boolean`,alias:`f`,description:`Skip confirmation (useful in scripts and CI)`,default:!1})}const m={command:`delete <app-id>`,describe:`Deletes an app from Cloudflare Calls`,builder:p,handler:async i=>{if(i.dryRun){s({command:`cf calls sfu delete`,method:`DELETE`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/apps/${i[`app-id`]==null?`<app-id>`:encodeURIComponent(String(i[`app-id`]))}`,pathParams:{"app-id":String(i[`app-id`]??``)},bodyKind:`none`});return}let a=await r(i),l=i.local?u:await n(a);if(i.accountId=l,!await t({force:!!i.force})){process.stderr.write(`Aborted.
3
- `);return}o(await c(`Deleting`,async()=>a.calls.sfu.delete({account_id:l,app_id:i[`app-id`]})),{successLabel:`Deleted`})}};function h(e){return e.positional(`app-id`,{type:`string`,description:`A Cloudflare-generated unique identifier for a item.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const g={command:`get <app-id>`,describe:`Fetches details for a single Calls app.`,builder:h,handler:async t=>{if(t.dryRun){s({command:`cf calls sfu get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/apps/${t[`app-id`]==null?`<app-id>`:encodeURIComponent(String(t[`app-id`]))}`,pathParams:{"app-id":String(t[`app-id`]??``)},bodyKind:`none`});return}let i=await r(t),a=t.local?u:await n(i);t.accountId=a,o(await c(`Loading`,async()=>i.calls.sfu.get({account_id:a,app_id:t[`app-id`]})),{successLabel:`Loaded`})}};function _(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const v={command:`list`,describe:`Lists all apps in the Cloudflare account`,builder:_,handler:async t=>{if(t.dryRun){s({command:`cf calls sfu list`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/apps`,pathParams:{},bodyKind:`none`});return}let i=await r(t),a=t.local?u:await n(i);t.accountId=a,o(await c(`Loading`,async()=>i.calls.sfu.list({account_id:a})),{successLabel:`Loaded`})}};function y(e){return e.positional(`app-id`,{type:`string`,description:`A Cloudflare-generated unique identifier for a item.`,demandOption:!0}).option(`name`,{type:`string`,description:`A short description of Calls app, not shown to end users.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const b={command:`update <app-id>`,describe:`Edit details for a single app.`,builder:y,handler:async t=>{if(t.dryRun){s({command:`cf calls sfu update`,method:`PUT`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/apps/${t[`app-id`]==null?`<app-id>`:encodeURIComponent(String(t[`app-id`]))}`,pathParams:{"app-id":String(t[`app-id`]??``)},bodyKind:`json`,body:t.body===void 0?a({name:l(t.name,`name`,`text`)}):i(t.body)});return}let d=await r(t),f=t.local?u:await n(d);if(t.accountId=f,t.body){let e=i(t.body);o(await c(`Updating`,async()=>d.calls.sfu.update({body:e,account_id:f,app_id:t[`app-id`]})),{successLabel:`Updated`});return}let p=a({name:l(t.name,`name`,`text`)});o(await c(`Updating`,async()=>d.calls.sfu.update({body:p,account_id:f,app_id:t[`app-id`]})),{successLabel:`Updated`})}},x={command:`sfu`,describe:`Selective Forwarding Unit apps that route WebRTC media between participants`,builder:e=>e.command(f).command(m).command(g).command(v).command(b).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};function S(e){return e.option(`name`,{type:`string`,description:`A short description of a TURN key, not shown to end users.`,default:``}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const C={command:`create`,describe:`Creates a new Cloudflare Calls TURN key.`,builder:S,handler:async t=>{if(t.dryRun){s({command:`cf calls turn create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/turn_keys`,pathParams:{},bodyKind:`json`,body:t.body===void 0?a({name:l(t.name,`name`,`text`)}):i(t.body)});return}let d=await r(t),f=t.local?u:await n(d);if(t.accountId=f,t.body){let e=i(t.body);o(await c(`Creating`,async()=>d.calls.turn.create({body:e,account_id:f})),{successLabel:`Created`});return}let p=a({name:l(t.name,`name`,`text`)});o(await c(`Creating`,async()=>d.calls.turn.create({body:p,account_id:f})),{successLabel:`Created`})}};function w(e){return e.positional(`key-id`,{type:`string`,description:`A Cloudflare-generated unique identifier for a item.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`force`,{type:`boolean`,alias:`f`,description:`Skip confirmation (useful in scripts and CI)`,default:!1})}const T={command:`delete <key-id>`,describe:`Deletes a TURN key from Cloudflare Calls`,builder:w,handler:async i=>{if(i.dryRun){s({command:`cf calls turn delete`,method:`DELETE`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/turn_keys/${i[`key-id`]==null?`<key-id>`:encodeURIComponent(String(i[`key-id`]))}`,pathParams:{"key-id":String(i[`key-id`]??``)},bodyKind:`none`});return}let a=await r(i),l=i.local?u:await n(a);if(i.accountId=l,!await t({force:!!i.force})){process.stderr.write(`Aborted.
4
- `);return}o(await c(`Deleting`,async()=>a.calls.turn.delete({account_id:l,key_id:i[`key-id`]})),{successLabel:`Deleted`})}};function E(e){return e.positional(`key-id`,{type:`string`,description:`A Cloudflare-generated unique identifier for a item.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const D={command:`get <key-id>`,describe:`Fetches details for a single TURN key.`,builder:E,handler:async t=>{if(t.dryRun){s({command:`cf calls turn get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/turn_keys/${t[`key-id`]==null?`<key-id>`:encodeURIComponent(String(t[`key-id`]))}`,pathParams:{"key-id":String(t[`key-id`]??``)},bodyKind:`none`});return}let i=await r(t),a=t.local?u:await n(i);t.accountId=a,o(await c(`Loading`,async()=>i.calls.turn.get({account_id:a,key_id:t[`key-id`]})),{successLabel:`Loaded`})}};function O(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const k={command:`list`,describe:`Lists all TURN keys in the Cloudflare account`,builder:O,handler:async t=>{if(t.dryRun){s({command:`cf calls turn list`,method:`GET`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/turn_keys`,pathParams:{},bodyKind:`none`});return}let i=await r(t),a=t.local?u:await n(i);t.accountId=a,o(await c(`Loading`,async()=>i.calls.turn.list({account_id:a})),{successLabel:`Loaded`})}};function A(e){return e.positional(`key-id`,{type:`string`,description:`A Cloudflare-generated unique identifier for a item.`,demandOption:!0}).option(`name`,{type:`string`,description:`A short description of a TURN key, not shown to end users.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const j={command:`update <key-id>`,describe:`Edit details for a single TURN key.`,builder:A,handler:async t=>{if(t.dryRun){s({command:`cf calls turn update`,method:`PUT`,url:`https://api.cloudflare.com/client/v4/accounts/${e()??`<account-id>`}/calls/turn_keys/${t[`key-id`]==null?`<key-id>`:encodeURIComponent(String(t[`key-id`]))}`,pathParams:{"key-id":String(t[`key-id`]??``)},bodyKind:`json`,body:t.body===void 0?a({name:l(t.name,`name`,`text`)}):i(t.body)});return}let d=await r(t),f=t.local?u:await n(d);if(t.accountId=f,t.body){let e=i(t.body);o(await c(`Updating`,async()=>d.calls.turn.update({body:e,account_id:f,key_id:t[`key-id`]})),{successLabel:`Updated`});return}let p=a({name:l(t.name,`name`,`text`)});o(await c(`Updating`,async()=>d.calls.turn.update({body:p,account_id:f,key_id:t[`key-id`]})),{successLabel:`Updated`})}},M={command:`turn`,describe:`TURN relay keys that help clients traverse NATs and firewalls for peer-to-peer connectivity`,builder:e=>e.command(C).command(T).command(D).command(k).command(j).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},N={command:`calls`,describe:`Real-time audio/video communication infrastructure — SFU apps for WebRTC and TURN relay keys`,builder:e=>e.command(x).command(M).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{N as default};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{S as e,n as t}from"./auth-ffdf9yR0.mjs";import{n,t as r}from"./body-parser-DKa8Ipg1.mjs";import{t as i}from"./output-BJFNwj7b.mjs";import{n as a,t as o}from"./progress-CrCGTq7N.mjs";import{n as s}from"./input-validation-zEO81MWN.mjs";function c(e){return e.option(`mtls-certificate-id`,{type:`string`,description:`The UUID to match against for a certificate that was uploaded to the mTLS Certificate Management endpoint. If no mtls_certificate_id is given, the results will be the hostnames associated to your active Cloudflare Managed CA.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const l={command:`get`,describe:`List Hostname Associations.`,builder:c,handler:async n=>{let r={mtls_certificate_id:n[`mtls-certificate-id`]};if(n.dryRun){a({command:`cf certificate-authorities hostname-associations get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/zones/${n.zone??n.zoneId??`<zone>`}/certificate_authorities/hostname_associations`,pathParams:{"zone-id":String(n.zone??n[`zone-id`]??``)},query:r,bodyKind:`none`});return}let s=await t(n),c=await e({zone:n.zone},s,{quiet:n.quiet});n.zoneId=c,i(await o(`Loading`,async()=>s.certificateAuthorities.hostnameAssociations.get({zone_id:c,...r})),{successLabel:`Loaded`})}};function u(e){return e.option(`hostnames`,{type:`string`,array:!0,description:`The hostnames field`}).option(`mtls-certificate-id`,{type:`string`,description:`The UUID for a certificate that was uploaded to the mTLS Certificate Management endpoint. If no mtls_certificate_id is given, the hostnames will be associated to your active Cloudflare Managed CA.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const d={command:`update`,describe:`Replace Hostname Associations.`,builder:u,handler:async c=>{if(c.dryRun){a({command:`cf certificate-authorities hostname-associations update`,method:`PUT`,url:`https://api.cloudflare.com/client/v4/zones/${c.zone??c.zoneId??`<zone>`}/certificate_authorities/hostname_associations`,pathParams:{"zone-id":String(c.zone??c[`zone-id`]??``)},bodyKind:`json`,body:c.body===void 0?r({hostnames:c.hostnames,mtls_certificate_id:s(c[`mtls-certificate-id`],`mtls-certificate-id`,`text`)}):n(c.body)});return}let l=await t(c),u=await e({zone:c.zone},l,{quiet:c.quiet});if(c.zoneId=u,c.body){let e=n(c.body);i(await o(`Updating`,async()=>l.certificateAuthorities.hostnameAssociations.update({...e,zone_id:u})),{successLabel:`Updated`});return}let d=r({hostnames:c.hostnames,mtls_certificate_id:s(c[`mtls-certificate-id`],`mtls-certificate-id`,`text`)});i(await o(`Updating`,async()=>l.certificateAuthorities.hostnameAssociations.update({...d,zone_id:u})),{successLabel:`Updated`})}},f={command:`hostname-associations`,describe:`Operations for hostname-associations`,builder:e=>e.command(l).command(d).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},p={command:`certificate-authorities`,describe:`Map client certificates to specific hostnames for mTLS authentication`,builder:e=>e.command(f).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{p as default};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import{D as e,S as t,T as n,n as r}from"./auth-ffdf9yR0.mjs";import{n as i,t as a}from"./body-parser-DKa8Ipg1.mjs";import{t as o}from"./output-BJFNwj7b.mjs";import{n as s,t as c}from"./progress-CrCGTq7N.mjs";import{n as l}from"./input-validation-zEO81MWN.mjs";import{t as u}from"./cli-types-CRIDdDw3.mjs";function d(e){return e.option(`csr`,{type:`string`,description:`The Certificate Signing Request (CSR). Must be newline-encoded.`}).option(`validity-days`,{type:`number`,description:`The number of days the Client Certificate will be valid after the issued_on date.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const f={command:`create`,describe:`Create a new API Shield mTLS Client Certificate.`,builder:d,handler:async n=>{if(n.dryRun){s({command:`cf client-certificates create`,method:`POST`,url:`https://api.cloudflare.com/client/v4/zones/${n.zone??n.zoneId??`<zone>`}/client_certificates`,pathParams:{"zone-id":String(n.zone??n[`zone-id`]??``)},bodyKind:`json`,body:n.body===void 0?a({csr:l(n.csr,`csr`,`text`),validity_days:n[`validity-days`]}):i(n.body)});return}let u=await r(n),d=await t({zone:n.zone},u,{quiet:n.quiet});if(n.zoneId=d,n.body){let e=i(n.body);o(await c(`Creating`,async()=>u.clientCertificates.create({...e,zone_id:d})),{successLabel:`Created`});return}if(n.csr===void 0&&(n.csr=await e(`csr`,`The Certificate Signing Request (CSR). Must be newline-encoded.`)),n[`validity-days`]===void 0)throw Error(`--validity-days is required (or pass --body with this field set).`);let f=a({csr:l(n.csr,`csr`,`text`),validity_days:n[`validity-days`]});o(await c(`Creating`,async()=>u.clientCertificates.create({...f,zone_id:d})),{successLabel:`Created`})}};function p(e){return e.positional(`client-certificate-id`,{type:`string`,description:`Identifier.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`force`,{type:`boolean`,alias:`f`,description:`Skip confirmation (useful in scripts and CI)`,default:!1})}const m={command:`delete <client-certificate-id>`,describe:`Set a API Shield mTLS Client Certificate to pending_revocation status for processing to revoked status.`,builder:p,handler:async e=>{if(e.dryRun){s({command:`cf client-certificates delete`,method:`DELETE`,url:`https://api.cloudflare.com/client/v4/zones/${e.zone??e.zoneId??`<zone>`}/client_certificates/${e[`client-certificate-id`]==null?`<client-certificate-id>`:encodeURIComponent(String(e[`client-certificate-id`]))}`,pathParams:{"zone-id":String(e.zone??e[`zone-id`]??``),"client-certificate-id":String(e[`client-certificate-id`]??``)},bodyKind:`none`});return}let i=await r(e),a=await t({zone:e.zone},i,{quiet:e.quiet});if(e.zoneId=a,!await n({force:!!e.force})){process.stderr.write(`Aborted.
3
- `);return}o(await c(`Deleting`,async()=>i.clientCertificates.delete({zone_id:a,client_certificate_id:e[`client-certificate-id`]})),{successLabel:`Deleted`})}};function h(e){return e.positional(`client-certificate-id`,{type:`string`,description:`Identifier.`,demandOption:!0}).option(`reactivate`,{type:`boolean`,description:`The reactivate field`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const g={command:`edit <client-certificate-id>`,describe:`If a API Shield mTLS Client Certificate is in a pending_revocation state, you may reactivate it with this endpoint.`,builder:h,handler:async e=>{if(e.dryRun){s({command:`cf client-certificates edit`,method:`PATCH`,url:`https://api.cloudflare.com/client/v4/zones/${e.zone??e.zoneId??`<zone>`}/client_certificates/${e[`client-certificate-id`]==null?`<client-certificate-id>`:encodeURIComponent(String(e[`client-certificate-id`]))}`,pathParams:{"zone-id":String(e.zone??e[`zone-id`]??``),"client-certificate-id":String(e[`client-certificate-id`]??``)},bodyKind:`json`,body:e.body===void 0?a({reactivate:e.reactivate}):i(e.body)});return}let n=await r(e),l=await t({zone:e.zone},n,{quiet:e.quiet});if(e.zoneId=l,e.body){let t=i(e.body);o(await c(`Updating`,async()=>n.clientCertificates.edit({...t,zone_id:l,client_certificate_id:e[`client-certificate-id`]})),{successLabel:`Updated`});return}let u=a({reactivate:e.reactivate});o(await c(`Updating`,async()=>n.clientCertificates.edit({...u,zone_id:l,client_certificate_id:e[`client-certificate-id`]})),{successLabel:`Updated`})}};function _(e){return e.positional(`client-certificate-id`,{type:`string`,description:`Identifier.`,demandOption:!0}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const v={command:`get <client-certificate-id>`,describe:`Get Details for a single mTLS API Shield Client Certificate.`,builder:_,handler:async e=>{if(e.dryRun){s({command:`cf client-certificates get`,method:`GET`,url:`https://api.cloudflare.com/client/v4/zones/${e.zone??e.zoneId??`<zone>`}/client_certificates/${e[`client-certificate-id`]==null?`<client-certificate-id>`:encodeURIComponent(String(e[`client-certificate-id`]))}`,pathParams:{"zone-id":String(e.zone??e[`zone-id`]??``),"client-certificate-id":String(e[`client-certificate-id`]??``)},bodyKind:`none`});return}let n=await r(e),i=await t({zone:e.zone},n,{quiet:e.quiet});e.zoneId=i,o(await c(`Loading`,async()=>n.clientCertificates.get({zone_id:i,client_certificate_id:e[`client-certificate-id`]})),{successLabel:`Loaded`})}};function y(e){return e.option(`status`,{type:`string`,description:`Client Certitifcate Status to filter results by.`,choices:[`all`,`active`,`pending_reactivation`,`pending_revocation`,`revoked`]}).option(`page`,{type:`number`,description:`Page number of paginated results.`}).option(`per-page`,{type:`number`,description:`Number of records per page.`}).option(`limit`,{type:`number`,description:`Limit to the number of records returned.`}).option(`offset`,{type:`number`,description:`Offset the results.`}).option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const b={command:`list`,describe:`List all of your Zone's API Shield mTLS Client Certificates by Status and/or using Pagination.`,builder:u(y),handler:async e=>{let n={status:e.status,page:e.page,per_page:e[`per-page`],limit:e.limit,offset:e.offset};if(e.dryRun){s({command:`cf client-certificates list`,method:`GET`,url:`https://api.cloudflare.com/client/v4/zones/${e.zone??e.zoneId??`<zone>`}/client_certificates`,pathParams:{"zone-id":String(e.zone??e[`zone-id`]??``)},query:n,bodyKind:`none`});return}let i=await r(e),a=await t({zone:e.zone},i,{quiet:e.quiet});e.zoneId=a,o(await c(`Loading`,async()=>i.clientCertificates.list({zone_id:a,...n})),{successLabel:`Loaded`})}},x={command:`client-certificates`,describe:`Issue and manage client certificates for mutual TLS (mTLS) authentication on your zone`,builder:e=>e.command(f).command(m).command(g).command(v).command(b).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{x as default};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{S as e,n as t}from"./auth-ffdf9yR0.mjs";import{n}from"./body-parser-DKa8Ipg1.mjs";import{t as r}from"./output-BJFNwj7b.mjs";import{n as i,t as a}from"./progress-CrCGTq7N.mjs";function o(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1})}const s={command:`list`,describe:`Retrieves the Cloud Connector rules configured for a zone. Rules define how traffic is routed to cloud services.`,builder:o,handler:async n=>{if(n.dryRun){i({command:`cf cloud-connector rules list`,method:`GET`,url:`https://api.cloudflare.com/client/v4/zones/${n.zone??n.zoneId??`<zone>`}/cloud_connector/rules`,pathParams:{"zone-id":String(n.zone??n[`zone-id`]??``)},bodyKind:`none`});return}let o=await t(n),s=await e({zone:n.zone},o,{quiet:n.quiet});n.zoneId=s,r(await a(`Loading`,async()=>o.cloudConnector.rules.list({zone_id:s})),{successLabel:`Loaded`})}};function c(e){return e.option(`dry-run`,{type:`boolean`,description:`Validate and show what would happen without executing`,default:!1}).option(`body`,{type:`string`,description:`Raw JSON request body (bypasses individual flags)`})}const l={command:`update`,describe:`Updates Cloud Connector rules for a zone, replacing the existing rule configuration.`,builder:c,handler:async o=>{if(o.dryRun){i({command:`cf cloud-connector rules update`,method:`PUT`,url:`https://api.cloudflare.com/client/v4/zones/${o.zone??o.zoneId??`<zone>`}/cloud_connector/rules`,pathParams:{"zone-id":String(o.zone??o[`zone-id`]??``)},bodyKind:`json`,body:o.body===void 0?void 0:n(o.body)});return}let s=await t(o),c=await e({zone:o.zone},s,{quiet:o.quiet});if(o.zoneId=c,o.body){let e=n(o.body);r(await a(`Updating`,async()=>s.cloudConnector.rules.update({body:e,zone_id:c})),{successLabel:`Updated`});return}if(o.body===void 0)throw Error(`--body is required for this command. Pass --body '<json>' or --body @path/to/file.json.`)}},u={command:`rules`,describe:`Routing rules that map request patterns to cloud provider endpoints`,builder:e=>e.command(s).command(l).demandCommand(1,`Please specify a subcommand`),handler:()=>{}},d={command:`cloud-connector`,describe:`Route traffic from Cloudflare directly to cloud provider services (AWS, Azure, GCP) without origin servers`,builder:e=>e.command(u).demandCommand(1,`Please specify a subcommand`),handler:()=>{}};export{d as default};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{r as e}from"./chunk-DH-VkVmc.mjs";import{J as t}from"./dist-DNBSHor6.mjs";import{existsSync as n,mkdirSync as r,readFileSync as i,writeFileSync as a}from"node:fs";import{join as o}from"node:path";var s=e({getConfigDir:()=>u,getConfigFile:()=>d,loadConfig:()=>p,saveConfig:()=>m,updateConfig:()=>h});function c(){return t({appName:`cf`,useLegacyHomeDir:!1})}function l(){return o(c(),`config.json`)}function u(){return c()}function d(){return l()}function f(){let e=c();n(e)||r(e,{recursive:!0,mode:448})}function p(){try{let e=l();if(!n(e))return{};let t=i(e,`utf-8`);return JSON.parse(t)}catch{return{}}}function m(e){f();let t=JSON.stringify(e,null,2);a(l(),t,{mode:384})}function h(e){let t=p(),n={...t,...e};e.completions&&t.completions&&(n.completions={...t.completions,...e.completions}),e.defaults&&t.defaults&&(n.defaults={...t.defaults,...e.defaults}),m(n)}export{m as a,p as i,u as n,d as r,s as t};