pi-cloudflare 0.1.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 (410) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +67 -0
  3. package/bin/setup.mjs +103 -0
  4. package/dist/auth-flow.d.ts +15 -0
  5. package/dist/auth-flow.d.ts.map +1 -0
  6. package/dist/auth-flow.js +90 -0
  7. package/dist/auth-flow.js.map +1 -0
  8. package/dist/client.d.ts +18 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +47 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/config.d.ts +13 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +10 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/index.d.ts +24 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +109 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/oauth.d.ts +44 -0
  21. package/dist/oauth.d.ts.map +1 -0
  22. package/dist/oauth.js +135 -0
  23. package/dist/oauth.js.map +1 -0
  24. package/dist/proxy.d.ts +29 -0
  25. package/dist/proxy.d.ts.map +1 -0
  26. package/dist/proxy.js +39 -0
  27. package/dist/proxy.js.map +1 -0
  28. package/dist/servers.d.ts +19 -0
  29. package/dist/servers.d.ts.map +1 -0
  30. package/dist/servers.js +40 -0
  31. package/dist/servers.js.map +1 -0
  32. package/dist/token-store.d.ts +23 -0
  33. package/dist/token-store.d.ts.map +1 -0
  34. package/dist/token-store.js +47 -0
  35. package/dist/token-store.js.map +1 -0
  36. package/package.json +67 -0
  37. package/skills/agents-sdk/SKILL.md +221 -0
  38. package/skills/agents-sdk/references/browse-the-web.md +63 -0
  39. package/skills/agents-sdk/references/callable.md +92 -0
  40. package/skills/agents-sdk/references/client-sdk.md +110 -0
  41. package/skills/agents-sdk/references/codemode.md +110 -0
  42. package/skills/agents-sdk/references/configuration.md +72 -0
  43. package/skills/agents-sdk/references/durable-execution.md +51 -0
  44. package/skills/agents-sdk/references/email.md +146 -0
  45. package/skills/agents-sdk/references/human-in-the-loop.md +67 -0
  46. package/skills/agents-sdk/references/mcp.md +188 -0
  47. package/skills/agents-sdk/references/observability.md +44 -0
  48. package/skills/agents-sdk/references/queue-retries.md +79 -0
  49. package/skills/agents-sdk/references/routing.md +75 -0
  50. package/skills/agents-sdk/references/server-driven-messages.md +63 -0
  51. package/skills/agents-sdk/references/state-scheduling.md +171 -0
  52. package/skills/agents-sdk/references/streaming-chat.md +198 -0
  53. package/skills/agents-sdk/references/think.md +112 -0
  54. package/skills/agents-sdk/references/voice.md +68 -0
  55. package/skills/agents-sdk/references/webhooks-push.md +86 -0
  56. package/skills/agents-sdk/references/workflows.md +132 -0
  57. package/skills/cloudflare/SKILL.md +248 -0
  58. package/skills/cloudflare/references/agents-sdk/README.md +89 -0
  59. package/skills/cloudflare/references/agents-sdk/api.md +190 -0
  60. package/skills/cloudflare/references/agents-sdk/configuration.md +182 -0
  61. package/skills/cloudflare/references/agents-sdk/gotchas.md +158 -0
  62. package/skills/cloudflare/references/agents-sdk/patterns.md +192 -0
  63. package/skills/cloudflare/references/ai-gateway/README.md +175 -0
  64. package/skills/cloudflare/references/ai-gateway/configuration.md +111 -0
  65. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +82 -0
  66. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  67. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +114 -0
  68. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +88 -0
  69. package/skills/cloudflare/references/ai-search/README.md +138 -0
  70. package/skills/cloudflare/references/ai-search/api.md +87 -0
  71. package/skills/cloudflare/references/ai-search/configuration.md +88 -0
  72. package/skills/cloudflare/references/ai-search/gotchas.md +81 -0
  73. package/skills/cloudflare/references/ai-search/patterns.md +85 -0
  74. package/skills/cloudflare/references/analytics-engine/README.md +94 -0
  75. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  76. package/skills/cloudflare/references/analytics-engine/configuration.md +112 -0
  77. package/skills/cloudflare/references/analytics-engine/gotchas.md +85 -0
  78. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  79. package/skills/cloudflare/references/api/README.md +66 -0
  80. package/skills/cloudflare/references/api/api.md +204 -0
  81. package/skills/cloudflare/references/api/configuration.md +160 -0
  82. package/skills/cloudflare/references/api/gotchas.md +225 -0
  83. package/skills/cloudflare/references/api/patterns.md +204 -0
  84. package/skills/cloudflare/references/api-shield/README.md +44 -0
  85. package/skills/cloudflare/references/api-shield/api.md +141 -0
  86. package/skills/cloudflare/references/api-shield/configuration.md +192 -0
  87. package/skills/cloudflare/references/api-shield/gotchas.md +125 -0
  88. package/skills/cloudflare/references/api-shield/patterns.md +180 -0
  89. package/skills/cloudflare/references/argo-smart-routing/README.md +90 -0
  90. package/skills/cloudflare/references/argo-smart-routing/api.md +240 -0
  91. package/skills/cloudflare/references/argo-smart-routing/configuration.md +197 -0
  92. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +111 -0
  93. package/skills/cloudflare/references/argo-smart-routing/patterns.md +104 -0
  94. package/skills/cloudflare/references/artifacts/README.md +79 -0
  95. package/skills/cloudflare/references/artifacts/api.md +128 -0
  96. package/skills/cloudflare/references/artifacts/configuration.md +92 -0
  97. package/skills/cloudflare/references/bindings/README.md +122 -0
  98. package/skills/cloudflare/references/bindings/api.md +203 -0
  99. package/skills/cloudflare/references/bindings/configuration.md +188 -0
  100. package/skills/cloudflare/references/bindings/gotchas.md +208 -0
  101. package/skills/cloudflare/references/bindings/patterns.md +200 -0
  102. package/skills/cloudflare/references/bot-management/README.md +94 -0
  103. package/skills/cloudflare/references/bot-management/api.md +169 -0
  104. package/skills/cloudflare/references/bot-management/configuration.md +163 -0
  105. package/skills/cloudflare/references/bot-management/gotchas.md +114 -0
  106. package/skills/cloudflare/references/bot-management/patterns.md +182 -0
  107. package/skills/cloudflare/references/browser-rendering/README.md +78 -0
  108. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  109. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  110. package/skills/cloudflare/references/browser-rendering/gotchas.md +88 -0
  111. package/skills/cloudflare/references/browser-rendering/patterns.md +91 -0
  112. package/skills/cloudflare/references/c3/README.md +111 -0
  113. package/skills/cloudflare/references/c3/api.md +71 -0
  114. package/skills/cloudflare/references/c3/configuration.md +81 -0
  115. package/skills/cloudflare/references/c3/gotchas.md +92 -0
  116. package/skills/cloudflare/references/c3/patterns.md +82 -0
  117. package/skills/cloudflare/references/cache-reserve/README.md +147 -0
  118. package/skills/cloudflare/references/cache-reserve/api.md +194 -0
  119. package/skills/cloudflare/references/cache-reserve/configuration.md +169 -0
  120. package/skills/cloudflare/references/cache-reserve/gotchas.md +132 -0
  121. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  122. package/skills/cloudflare/references/containers/README.md +85 -0
  123. package/skills/cloudflare/references/containers/api.md +187 -0
  124. package/skills/cloudflare/references/containers/configuration.md +188 -0
  125. package/skills/cloudflare/references/containers/gotchas.md +178 -0
  126. package/skills/cloudflare/references/containers/patterns.md +202 -0
  127. package/skills/cloudflare/references/cron-triggers/README.md +99 -0
  128. package/skills/cloudflare/references/cron-triggers/api.md +196 -0
  129. package/skills/cloudflare/references/cron-triggers/configuration.md +180 -0
  130. package/skills/cloudflare/references/cron-triggers/gotchas.md +199 -0
  131. package/skills/cloudflare/references/cron-triggers/patterns.md +190 -0
  132. package/skills/cloudflare/references/d1/README.md +133 -0
  133. package/skills/cloudflare/references/d1/api.md +196 -0
  134. package/skills/cloudflare/references/d1/configuration.md +191 -0
  135. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  136. package/skills/cloudflare/references/d1/patterns.md +189 -0
  137. package/skills/cloudflare/references/ddos/README.md +41 -0
  138. package/skills/cloudflare/references/ddos/api.md +164 -0
  139. package/skills/cloudflare/references/ddos/configuration.md +93 -0
  140. package/skills/cloudflare/references/ddos/gotchas.md +107 -0
  141. package/skills/cloudflare/references/ddos/patterns.md +174 -0
  142. package/skills/cloudflare/references/do-storage/README.md +75 -0
  143. package/skills/cloudflare/references/do-storage/api.md +102 -0
  144. package/skills/cloudflare/references/do-storage/configuration.md +112 -0
  145. package/skills/cloudflare/references/do-storage/gotchas.md +150 -0
  146. package/skills/cloudflare/references/do-storage/patterns.md +194 -0
  147. package/skills/cloudflare/references/do-storage/testing.md +183 -0
  148. package/skills/cloudflare/references/durable-objects/README.md +185 -0
  149. package/skills/cloudflare/references/durable-objects/api.md +187 -0
  150. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  151. package/skills/cloudflare/references/durable-objects/gotchas.md +197 -0
  152. package/skills/cloudflare/references/durable-objects/patterns.md +201 -0
  153. package/skills/cloudflare/references/email-routing/README.md +89 -0
  154. package/skills/cloudflare/references/email-routing/api.md +195 -0
  155. package/skills/cloudflare/references/email-routing/configuration.md +186 -0
  156. package/skills/cloudflare/references/email-routing/gotchas.md +196 -0
  157. package/skills/cloudflare/references/email-routing/patterns.md +229 -0
  158. package/skills/cloudflare/references/email-workers/README.md +151 -0
  159. package/skills/cloudflare/references/email-workers/api.md +237 -0
  160. package/skills/cloudflare/references/email-workers/configuration.md +112 -0
  161. package/skills/cloudflare/references/email-workers/gotchas.md +125 -0
  162. package/skills/cloudflare/references/email-workers/patterns.md +102 -0
  163. package/skills/cloudflare/references/flagship/README.md +59 -0
  164. package/skills/cloudflare/references/flagship/api.md +390 -0
  165. package/skills/cloudflare/references/flagship/configuration.md +202 -0
  166. package/skills/cloudflare/references/flagship/gotchas.md +178 -0
  167. package/skills/cloudflare/references/flagship/patterns.md +469 -0
  168. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  169. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  170. package/skills/cloudflare/references/graphql-api/configuration.md +118 -0
  171. package/skills/cloudflare/references/graphql-api/gotchas.md +110 -0
  172. package/skills/cloudflare/references/graphql-api/patterns.md +225 -0
  173. package/skills/cloudflare/references/hyperdrive/README.md +82 -0
  174. package/skills/cloudflare/references/hyperdrive/api.md +143 -0
  175. package/skills/cloudflare/references/hyperdrive/configuration.md +159 -0
  176. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  177. package/skills/cloudflare/references/hyperdrive/patterns.md +190 -0
  178. package/skills/cloudflare/references/images/README.md +61 -0
  179. package/skills/cloudflare/references/images/api.md +96 -0
  180. package/skills/cloudflare/references/images/configuration.md +211 -0
  181. package/skills/cloudflare/references/images/gotchas.md +99 -0
  182. package/skills/cloudflare/references/images/patterns.md +115 -0
  183. package/skills/cloudflare/references/kv/README.md +89 -0
  184. package/skills/cloudflare/references/kv/api.md +160 -0
  185. package/skills/cloudflare/references/kv/configuration.md +144 -0
  186. package/skills/cloudflare/references/kv/gotchas.md +131 -0
  187. package/skills/cloudflare/references/kv/patterns.md +196 -0
  188. package/skills/cloudflare/references/miniflare/README.md +105 -0
  189. package/skills/cloudflare/references/miniflare/api.md +187 -0
  190. package/skills/cloudflare/references/miniflare/configuration.md +173 -0
  191. package/skills/cloudflare/references/miniflare/gotchas.md +160 -0
  192. package/skills/cloudflare/references/miniflare/patterns.md +181 -0
  193. package/skills/cloudflare/references/network-interconnect/README.md +99 -0
  194. package/skills/cloudflare/references/network-interconnect/api.md +199 -0
  195. package/skills/cloudflare/references/network-interconnect/configuration.md +114 -0
  196. package/skills/cloudflare/references/network-interconnect/gotchas.md +165 -0
  197. package/skills/cloudflare/references/network-interconnect/patterns.md +166 -0
  198. package/skills/cloudflare/references/observability/README.md +88 -0
  199. package/skills/cloudflare/references/observability/api.md +164 -0
  200. package/skills/cloudflare/references/observability/configuration.md +169 -0
  201. package/skills/cloudflare/references/observability/gotchas.md +115 -0
  202. package/skills/cloudflare/references/observability/patterns.md +105 -0
  203. package/skills/cloudflare/references/pages/README.md +88 -0
  204. package/skills/cloudflare/references/pages/api.md +204 -0
  205. package/skills/cloudflare/references/pages/configuration.md +201 -0
  206. package/skills/cloudflare/references/pages/gotchas.md +203 -0
  207. package/skills/cloudflare/references/pages/patterns.md +204 -0
  208. package/skills/cloudflare/references/pages-functions/README.md +98 -0
  209. package/skills/cloudflare/references/pages-functions/api.md +143 -0
  210. package/skills/cloudflare/references/pages-functions/configuration.md +122 -0
  211. package/skills/cloudflare/references/pages-functions/gotchas.md +94 -0
  212. package/skills/cloudflare/references/pages-functions/patterns.md +137 -0
  213. package/skills/cloudflare/references/pipelines/README.md +90 -0
  214. package/skills/cloudflare/references/pipelines/api.md +124 -0
  215. package/skills/cloudflare/references/pipelines/configuration.md +155 -0
  216. package/skills/cloudflare/references/pipelines/gotchas.md +58 -0
  217. package/skills/cloudflare/references/pipelines/patterns.md +130 -0
  218. package/skills/cloudflare/references/pulumi/README.md +100 -0
  219. package/skills/cloudflare/references/pulumi/api.md +200 -0
  220. package/skills/cloudflare/references/pulumi/configuration.md +198 -0
  221. package/skills/cloudflare/references/pulumi/gotchas.md +181 -0
  222. package/skills/cloudflare/references/pulumi/patterns.md +191 -0
  223. package/skills/cloudflare/references/queues/README.md +96 -0
  224. package/skills/cloudflare/references/queues/api.md +206 -0
  225. package/skills/cloudflare/references/queues/configuration.md +144 -0
  226. package/skills/cloudflare/references/queues/gotchas.md +206 -0
  227. package/skills/cloudflare/references/queues/patterns.md +220 -0
  228. package/skills/cloudflare/references/r2/README.md +95 -0
  229. package/skills/cloudflare/references/r2/api.md +200 -0
  230. package/skills/cloudflare/references/r2/configuration.md +165 -0
  231. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  232. package/skills/cloudflare/references/r2/patterns.md +193 -0
  233. package/skills/cloudflare/references/r2-data-catalog/README.md +75 -0
  234. package/skills/cloudflare/references/r2-data-catalog/api.md +122 -0
  235. package/skills/cloudflare/references/r2-data-catalog/configuration.md +98 -0
  236. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +55 -0
  237. package/skills/cloudflare/references/r2-data-catalog/patterns.md +122 -0
  238. package/skills/cloudflare/references/r2-sql/README.md +64 -0
  239. package/skills/cloudflare/references/r2-sql/api.md +121 -0
  240. package/skills/cloudflare/references/r2-sql/configuration.md +50 -0
  241. package/skills/cloudflare/references/r2-sql/gotchas.md +39 -0
  242. package/skills/cloudflare/references/r2-sql/patterns.md +118 -0
  243. package/skills/cloudflare/references/realtime-sfu/README.md +65 -0
  244. package/skills/cloudflare/references/realtime-sfu/api.md +158 -0
  245. package/skills/cloudflare/references/realtime-sfu/configuration.md +137 -0
  246. package/skills/cloudflare/references/realtime-sfu/gotchas.md +133 -0
  247. package/skills/cloudflare/references/realtime-sfu/patterns.md +174 -0
  248. package/skills/cloudflare/references/realtimekit/README.md +113 -0
  249. package/skills/cloudflare/references/realtimekit/api.md +212 -0
  250. package/skills/cloudflare/references/realtimekit/configuration.md +203 -0
  251. package/skills/cloudflare/references/realtimekit/gotchas.md +169 -0
  252. package/skills/cloudflare/references/realtimekit/patterns.md +223 -0
  253. package/skills/cloudflare/references/sandbox/README.md +96 -0
  254. package/skills/cloudflare/references/sandbox/api.md +198 -0
  255. package/skills/cloudflare/references/sandbox/configuration.md +143 -0
  256. package/skills/cloudflare/references/sandbox/gotchas.md +194 -0
  257. package/skills/cloudflare/references/sandbox/patterns.md +201 -0
  258. package/skills/cloudflare/references/secrets-store/README.md +74 -0
  259. package/skills/cloudflare/references/secrets-store/api.md +200 -0
  260. package/skills/cloudflare/references/secrets-store/configuration.md +185 -0
  261. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  262. package/skills/cloudflare/references/secrets-store/patterns.md +207 -0
  263. package/skills/cloudflare/references/smart-placement/README.md +138 -0
  264. package/skills/cloudflare/references/smart-placement/api.md +183 -0
  265. package/skills/cloudflare/references/smart-placement/configuration.md +196 -0
  266. package/skills/cloudflare/references/smart-placement/gotchas.md +174 -0
  267. package/skills/cloudflare/references/smart-placement/patterns.md +183 -0
  268. package/skills/cloudflare/references/snippets/README.md +68 -0
  269. package/skills/cloudflare/references/snippets/api.md +198 -0
  270. package/skills/cloudflare/references/snippets/configuration.md +227 -0
  271. package/skills/cloudflare/references/snippets/gotchas.md +86 -0
  272. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  273. package/skills/cloudflare/references/spectrum/README.md +52 -0
  274. package/skills/cloudflare/references/spectrum/api.md +181 -0
  275. package/skills/cloudflare/references/spectrum/configuration.md +194 -0
  276. package/skills/cloudflare/references/spectrum/gotchas.md +145 -0
  277. package/skills/cloudflare/references/spectrum/patterns.md +196 -0
  278. package/skills/cloudflare/references/static-assets/README.md +65 -0
  279. package/skills/cloudflare/references/static-assets/api.md +199 -0
  280. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  281. package/skills/cloudflare/references/static-assets/gotchas.md +162 -0
  282. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  283. package/skills/cloudflare/references/stream/README.md +114 -0
  284. package/skills/cloudflare/references/stream/api-live.md +195 -0
  285. package/skills/cloudflare/references/stream/api.md +199 -0
  286. package/skills/cloudflare/references/stream/configuration.md +141 -0
  287. package/skills/cloudflare/references/stream/gotchas.md +130 -0
  288. package/skills/cloudflare/references/stream/patterns.md +184 -0
  289. package/skills/cloudflare/references/tail-workers/README.md +89 -0
  290. package/skills/cloudflare/references/tail-workers/api.md +200 -0
  291. package/skills/cloudflare/references/tail-workers/configuration.md +176 -0
  292. package/skills/cloudflare/references/tail-workers/gotchas.md +192 -0
  293. package/skills/cloudflare/references/tail-workers/patterns.md +180 -0
  294. package/skills/cloudflare/references/terraform/README.md +102 -0
  295. package/skills/cloudflare/references/terraform/api.md +178 -0
  296. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  297. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  298. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  299. package/skills/cloudflare/references/tunnel/README.md +129 -0
  300. package/skills/cloudflare/references/tunnel/api.md +193 -0
  301. package/skills/cloudflare/references/tunnel/configuration.md +157 -0
  302. package/skills/cloudflare/references/tunnel/gotchas.md +147 -0
  303. package/skills/cloudflare/references/tunnel/networking.md +168 -0
  304. package/skills/cloudflare/references/tunnel/patterns.md +192 -0
  305. package/skills/cloudflare/references/turn/README.md +82 -0
  306. package/skills/cloudflare/references/turn/api.md +239 -0
  307. package/skills/cloudflare/references/turn/configuration.md +179 -0
  308. package/skills/cloudflare/references/turn/gotchas.md +231 -0
  309. package/skills/cloudflare/references/turn/patterns.md +213 -0
  310. package/skills/cloudflare/references/turnstile/README.md +99 -0
  311. package/skills/cloudflare/references/turnstile/api.md +240 -0
  312. package/skills/cloudflare/references/turnstile/configuration.md +222 -0
  313. package/skills/cloudflare/references/turnstile/gotchas.md +218 -0
  314. package/skills/cloudflare/references/turnstile/patterns.md +193 -0
  315. package/skills/cloudflare/references/vectorize/README.md +133 -0
  316. package/skills/cloudflare/references/vectorize/api.md +88 -0
  317. package/skills/cloudflare/references/vectorize/configuration.md +88 -0
  318. package/skills/cloudflare/references/vectorize/gotchas.md +76 -0
  319. package/skills/cloudflare/references/vectorize/patterns.md +90 -0
  320. package/skills/cloudflare/references/waf/README.md +113 -0
  321. package/skills/cloudflare/references/waf/api.md +202 -0
  322. package/skills/cloudflare/references/waf/configuration.md +203 -0
  323. package/skills/cloudflare/references/waf/gotchas.md +204 -0
  324. package/skills/cloudflare/references/waf/patterns.md +197 -0
  325. package/skills/cloudflare/references/web-analytics/README.md +141 -0
  326. package/skills/cloudflare/references/web-analytics/configuration.md +76 -0
  327. package/skills/cloudflare/references/web-analytics/gotchas.md +82 -0
  328. package/skills/cloudflare/references/web-analytics/integration.md +60 -0
  329. package/skills/cloudflare/references/web-analytics/patterns.md +91 -0
  330. package/skills/cloudflare/references/workerd/README.md +78 -0
  331. package/skills/cloudflare/references/workerd/api.md +185 -0
  332. package/skills/cloudflare/references/workerd/configuration.md +183 -0
  333. package/skills/cloudflare/references/workerd/gotchas.md +139 -0
  334. package/skills/cloudflare/references/workerd/patterns.md +192 -0
  335. package/skills/cloudflare/references/workers/README.md +108 -0
  336. package/skills/cloudflare/references/workers/api.md +195 -0
  337. package/skills/cloudflare/references/workers/configuration.md +185 -0
  338. package/skills/cloudflare/references/workers/frameworks.md +197 -0
  339. package/skills/cloudflare/references/workers/gotchas.md +137 -0
  340. package/skills/cloudflare/references/workers/patterns.md +198 -0
  341. package/skills/cloudflare/references/workers-ai/README.md +197 -0
  342. package/skills/cloudflare/references/workers-ai/api.md +112 -0
  343. package/skills/cloudflare/references/workers-ai/configuration.md +97 -0
  344. package/skills/cloudflare/references/workers-ai/gotchas.md +114 -0
  345. package/skills/cloudflare/references/workers-ai/patterns.md +120 -0
  346. package/skills/cloudflare/references/workers-for-platforms/README.md +89 -0
  347. package/skills/cloudflare/references/workers-for-platforms/api.md +196 -0
  348. package/skills/cloudflare/references/workers-for-platforms/configuration.md +167 -0
  349. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  350. package/skills/cloudflare/references/workers-for-platforms/patterns.md +188 -0
  351. package/skills/cloudflare/references/workers-playground/README.md +127 -0
  352. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  353. package/skills/cloudflare/references/workers-playground/configuration.md +163 -0
  354. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  355. package/skills/cloudflare/references/workers-playground/patterns.md +132 -0
  356. package/skills/cloudflare/references/workers-vpc/README.md +127 -0
  357. package/skills/cloudflare/references/workers-vpc/api.md +202 -0
  358. package/skills/cloudflare/references/workers-vpc/configuration.md +147 -0
  359. package/skills/cloudflare/references/workers-vpc/gotchas.md +167 -0
  360. package/skills/cloudflare/references/workers-vpc/patterns.md +209 -0
  361. package/skills/cloudflare/references/workflows/README.md +77 -0
  362. package/skills/cloudflare/references/workflows/api.md +218 -0
  363. package/skills/cloudflare/references/workflows/configuration.md +152 -0
  364. package/skills/cloudflare/references/workflows/gotchas.md +90 -0
  365. package/skills/cloudflare/references/workflows/patterns.md +175 -0
  366. package/skills/cloudflare/references/wrangler/README.md +135 -0
  367. package/skills/cloudflare/references/wrangler/api.md +188 -0
  368. package/skills/cloudflare/references/wrangler/configuration.md +197 -0
  369. package/skills/cloudflare/references/wrangler/gotchas.md +197 -0
  370. package/skills/cloudflare/references/wrangler/patterns.md +209 -0
  371. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
  372. package/skills/cloudflare/references/zaraz/README.md +111 -0
  373. package/skills/cloudflare/references/zaraz/api.md +112 -0
  374. package/skills/cloudflare/references/zaraz/configuration.md +90 -0
  375. package/skills/cloudflare/references/zaraz/gotchas.md +81 -0
  376. package/skills/cloudflare/references/zaraz/patterns.md +74 -0
  377. package/skills/cloudflare-email-service/SKILL.md +103 -0
  378. package/skills/cloudflare-email-service/references/cli-and-mcp.md +125 -0
  379. package/skills/cloudflare-email-service/references/deliverability.md +285 -0
  380. package/skills/cloudflare-email-service/references/rest-api.md +184 -0
  381. package/skills/cloudflare-email-service/references/routing.md +199 -0
  382. package/skills/cloudflare-email-service/references/sending.md +252 -0
  383. package/skills/cloudflare-one/SKILL.md +176 -0
  384. package/skills/cloudflare-one-migrations/SKILL.md +110 -0
  385. package/skills/durable-objects/SKILL.md +186 -0
  386. package/skills/durable-objects/references/rules.md +295 -0
  387. package/skills/durable-objects/references/testing.md +264 -0
  388. package/skills/durable-objects/references/workers.md +346 -0
  389. package/skills/sandbox-migrate-to-next/SKILL.md +185 -0
  390. package/skills/sandbox-next/SKILL.md +91 -0
  391. package/skills/sandbox-next/references/api-quick-ref.md +94 -0
  392. package/skills/sandbox-next/references/examples.md +15 -0
  393. package/skills/sandbox-stable/SKILL.md +110 -0
  394. package/skills/turnstile-spin/README.md +51 -0
  395. package/skills/turnstile-spin/SKILL.md +330 -0
  396. package/skills/turnstile-spin/references/astro.md +199 -0
  397. package/skills/turnstile-spin/references/hugo.md +114 -0
  398. package/skills/turnstile-spin/references/nextjs-app.md +261 -0
  399. package/skills/turnstile-spin/references/nextjs-pages.md +82 -0
  400. package/skills/turnstile-spin/references/sveltekit.md +191 -0
  401. package/skills/turnstile-spin/references/vanilla-html.md +157 -0
  402. package/skills/turnstile-spin/scripts/auth-probe.sh +285 -0
  403. package/skills/turnstile-spin/scripts/persist-skill.sh +114 -0
  404. package/skills/turnstile-spin/scripts/validate.sh +137 -0
  405. package/skills/turnstile-spin/scripts/widget-create.sh +121 -0
  406. package/skills/turnstile-spin/tests/validation.md +62 -0
  407. package/skills/workers-best-practices/SKILL.md +127 -0
  408. package/skills/workers-best-practices/references/review.md +174 -0
  409. package/skills/workers-best-practices/references/rules.md +467 -0
  410. package/skills/wrangler/SKILL.md +922 -0
@@ -0,0 +1,190 @@
1
+ # Patterns
2
+
3
+ See [README.md](./README.md), [configuration.md](./configuration.md), [api.md](./api.md).
4
+
5
+ ## High-Traffic Read-Heavy
6
+
7
+ ```typescript
8
+ const sql = postgres(env.HYPERDRIVE.connectionString, {max: 5, prepare: true});
9
+
10
+ // Cacheable: popular content
11
+ const posts = await sql`SELECT * FROM posts WHERE published = true ORDER BY views DESC LIMIT 20`;
12
+
13
+ // Cacheable: user profiles
14
+ const [user] = await sql`SELECT id, username, bio FROM users WHERE id = ${userId}`;
15
+ ```
16
+
17
+ **Benefits:** Trending/profiles cached (60s), connection pooling handles spikes.
18
+
19
+ ## Mixed Read/Write
20
+
21
+ ```typescript
22
+ interface Env {
23
+ HYPERDRIVE_CACHED: Hyperdrive; // max_age=120
24
+ HYPERDRIVE_REALTIME: Hyperdrive; // caching disabled
25
+ }
26
+
27
+ // Reads: cached
28
+ if (req.method === "GET") {
29
+ const sql = postgres(env.HYPERDRIVE_CACHED.connectionString, {prepare: true});
30
+ const products = await sql`SELECT * FROM products WHERE category = ${cat}`;
31
+ }
32
+
33
+ // Writes: no cache (immediate consistency)
34
+ if (req.method === "POST") {
35
+ const sql = postgres(env.HYPERDRIVE_REALTIME.connectionString, {prepare: true});
36
+ await sql`INSERT INTO orders ${sql(data)}`;
37
+ }
38
+ ```
39
+
40
+ ## Analytics Dashboard
41
+
42
+ ```typescript
43
+ const client = new Client({connectionString: env.HYPERDRIVE.connectionString});
44
+ await client.connect();
45
+
46
+ // Aggregate queries cached (use fixed timestamps for caching)
47
+ const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString();
48
+ const dailyStats = await client.query(`
49
+ SELECT DATE(created_at) as date, COUNT(*) as orders, SUM(amount) as revenue
50
+ FROM orders WHERE created_at >= $1
51
+ GROUP BY DATE(created_at) ORDER BY date DESC
52
+ `, [thirtyDaysAgo]);
53
+
54
+ const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
55
+ const topProducts = await client.query(`
56
+ SELECT p.name, COUNT(oi.id) as count, SUM(oi.quantity * oi.price) as revenue
57
+ FROM order_items oi JOIN products p ON oi.product_id = p.id
58
+ WHERE oi.created_at >= $1
59
+ GROUP BY p.id, p.name ORDER BY revenue DESC LIMIT 10
60
+ `, [sevenDaysAgo]);
61
+ ```
62
+
63
+ **Benefits:** Expensive aggregations cached (avoid NOW() for cacheability), dashboard instant, reduced DB load.
64
+
65
+ ## Multi-Tenant
66
+
67
+ ```typescript
68
+ const tenantId = req.headers.get("X-Tenant-ID");
69
+ const sql = postgres(env.HYPERDRIVE.connectionString, {prepare: true});
70
+
71
+ // Tenant-scoped queries cached separately
72
+ const docs = await sql`
73
+ SELECT * FROM documents
74
+ WHERE tenant_id = ${tenantId} AND deleted_at IS NULL
75
+ ORDER BY updated_at DESC LIMIT 50
76
+ `;
77
+ ```
78
+
79
+ **Benefits:** Per-tenant caching, shared connection pool, protects DB from multi-tenant load.
80
+
81
+ ## Geographically Distributed
82
+
83
+ ```typescript
84
+ // Worker runs at edge nearest user
85
+ // Connection setup at edge (fast), pooling near DB (efficient)
86
+ const sql = postgres(env.HYPERDRIVE.connectionString, {prepare: true});
87
+ const [user] = await sql`SELECT * FROM users WHERE id = ${userId}`;
88
+
89
+ return Response.json({
90
+ user,
91
+ serverRegion: req.cf?.colo, // Edge location
92
+ });
93
+ ```
94
+
95
+ **Benefits:** Edge setup + DB pooling = global → single-region DB without replication.
96
+
97
+ ## Multi-Query + Smart Placement
98
+
99
+ For Workers making **multiple queries** per request, enable Smart Placement to execute near DB:
100
+
101
+ ```jsonc
102
+ // wrangler.jsonc
103
+ {
104
+ "placement": {"mode": "smart"},
105
+ "hyperdrive": [{"binding": "HYPERDRIVE", "id": "<ID>"}]
106
+ }
107
+ ```
108
+
109
+ ```typescript
110
+ const sql = postgres(env.HYPERDRIVE.connectionString, {prepare: true});
111
+
112
+ // Multiple queries benefit from Smart Placement
113
+ const [user] = await sql`SELECT * FROM users WHERE id = ${userId}`;
114
+ const orders = await sql`SELECT * FROM orders WHERE user_id = ${userId} ORDER BY created_at DESC LIMIT 10`;
115
+ const stats = await sql`SELECT COUNT(*) as total, SUM(amount) as spent FROM orders WHERE user_id = ${userId}`;
116
+
117
+ return Response.json({user, orders, stats});
118
+ ```
119
+
120
+ **Benefits:** Worker executes near DB → reduces latency for each query. Without Smart Placement, each query round-trips from edge.
121
+
122
+ ## Connection Pooling
123
+
124
+ Operates in **transaction mode**: connection acquired per transaction, `RESET` on return.
125
+
126
+ **SET statements:**
127
+ ```typescript
128
+ // ✅ Within transaction
129
+ await client.query("BEGIN");
130
+ await client.query("SET work_mem = '256MB'");
131
+ await client.query("SELECT * FROM large_table"); // Uses SET
132
+ await client.query("COMMIT"); // RESET after
133
+
134
+ // ✅ Single statement
135
+ await client.query("SET work_mem = '256MB'; SELECT * FROM large_table");
136
+
137
+ // ❌ Across queries (may get different connection)
138
+ await client.query("SET work_mem = '256MB'");
139
+ await client.query("SELECT * FROM large_table"); // SET not applied
140
+ ```
141
+
142
+ **Best practices:**
143
+ ```typescript
144
+ // ❌ Long transactions block pooling
145
+ await client.query("BEGIN");
146
+ await processThousands(); // Connection held entire time
147
+ await client.query("COMMIT");
148
+
149
+ // ✅ Short transactions
150
+ await client.query("BEGIN");
151
+ await client.query("UPDATE users SET status = $1 WHERE id = $2", [status, id]);
152
+ await client.query("COMMIT");
153
+
154
+ // ✅ SET LOCAL within transaction
155
+ await client.query("BEGIN");
156
+ await client.query("SET LOCAL work_mem = '256MB'");
157
+ await client.query("SELECT * FROM large_table");
158
+ await client.query("COMMIT");
159
+ ```
160
+
161
+ ## Performance Tips
162
+
163
+ **Enable prepared statements (required for caching):**
164
+ ```typescript
165
+ const sql = postgres(connectionString, {prepare: true}); // Default, enables caching
166
+ ```
167
+
168
+ **Optimize connection settings:**
169
+ ```typescript
170
+ const sql = postgres(connectionString, {
171
+ max: 5, // Stay under Workers' 6 connection limit
172
+ fetch_types: false, // Reduce latency if not using arrays
173
+ idle_timeout: 60, // Match Worker lifetime
174
+ });
175
+ ```
176
+
177
+ **Write cache-friendly queries:**
178
+ ```typescript
179
+ // ✅ Cacheable (deterministic)
180
+ await sql`SELECT * FROM products WHERE category = 'electronics' LIMIT 10`;
181
+
182
+ // ❌ Not cacheable (volatile NOW())
183
+ await sql`SELECT * FROM logs WHERE created_at > NOW()`;
184
+
185
+ // ✅ Cacheable (parameterized timestamp)
186
+ const ts = Date.now();
187
+ await sql`SELECT * FROM logs WHERE created_at > ${ts}`;
188
+ ```
189
+
190
+ See [gotchas.md](./gotchas.md) for limits, troubleshooting.
@@ -0,0 +1,61 @@
1
+ # Cloudflare Images Skill Reference
2
+
3
+ **Cloudflare Images** is an end-to-end image management solution providing storage, transformation, optimization, and delivery at scale via Cloudflare's global network.
4
+
5
+ ## Quick Decision Tree
6
+
7
+ **Need to:**
8
+ - **Transform in Worker?** → [api.md](api.md#workers-binding-api-2026-primary-method) (Workers Binding API)
9
+ - **Upload from Worker?** → [api.md](api.md#upload-from-worker) (REST API)
10
+ - **Upload from client?** → [patterns.md](patterns.md#upload-from-client-direct-creator-upload) (Direct Creator Upload)
11
+ - **Set up variants?** → [configuration.md](configuration.md#variants-configuration)
12
+ - **Serve responsive images?** → [patterns.md](patterns.md#responsive-images)
13
+ - **Add watermarks?** → [patterns.md](patterns.md#watermarking)
14
+ - **Fix errors?** → [gotchas.md](gotchas.md#common-errors)
15
+
16
+ ## Reading Order
17
+
18
+ **For building image upload/transform feature:**
19
+ 1. [configuration.md](configuration.md) - Setup Workers binding
20
+ 2. [api.md](api.md#workers-binding-api-2026-primary-method) - Learn transform API
21
+ 3. [patterns.md](patterns.md#upload-from-client-direct-creator-upload) - Direct upload pattern
22
+ 4. [gotchas.md](gotchas.md) - Check limits and errors
23
+
24
+ **For URL-based transforms:**
25
+ 1. [configuration.md](configuration.md#variants-configuration) - Create variants
26
+ 2. [api.md](api.md#url-transform-api) - URL syntax
27
+ 3. [patterns.md](patterns.md#responsive-images) - Responsive patterns
28
+
29
+ **For troubleshooting:**
30
+ 1. [gotchas.md](gotchas.md#common-errors) - Error messages
31
+ 2. [gotchas.md](gotchas.md#limits) - Size/format limits
32
+
33
+ ## Core Methods
34
+
35
+ | Method | Use Case | Location |
36
+ |--------|----------|----------|
37
+ | `env.IMAGES.input().transform()` | Transform in Worker | [api.md:11](api.md) |
38
+ | REST API `/images/v1` | Upload images | [api.md:57](api.md) |
39
+ | Direct Creator Upload | Client-side upload | [api.md:127](api.md) |
40
+ | URL transforms | Static image delivery | [api.md:112](api.md) |
41
+
42
+ ## In This Reference
43
+
44
+ - **[api.md](api.md)** - Complete API: Workers binding, REST endpoints, URL transforms
45
+ - **[configuration.md](configuration.md)** - Setup: wrangler.toml, variants, auth, signed URLs
46
+ - **[patterns.md](patterns.md)** - Patterns: responsive images, watermarks, format negotiation, caching
47
+ - **[gotchas.md](gotchas.md)** - Troubleshooting: limits, errors, best practices
48
+
49
+ ## Key Features
50
+
51
+ - **Automatic Optimization** - AVIF/WebP format negotiation
52
+ - **On-the-fly Transforms** - Resize, crop, blur, sharpen via URL or API
53
+ - **Workers Binding** - Transform images in Workers (2026 primary method)
54
+ - **Direct Upload** - Secure client-side uploads without backend proxy
55
+ - **Global Delivery** - Cached at 300+ Cloudflare data centers
56
+ - **Watermarking** - Overlay images programmatically
57
+
58
+ ## See Also
59
+
60
+ - [Official Docs](https://developers.cloudflare.com/images/)
61
+ - [Workers Examples](https://developers.cloudflare.com/images/tutorials/)
@@ -0,0 +1,96 @@
1
+ # API Reference
2
+
3
+ ## Workers Binding API
4
+
5
+ ```toml
6
+ # wrangler.toml
7
+ [images]
8
+ binding = "IMAGES"
9
+ ```
10
+
11
+ ### Transform Images
12
+
13
+ ```typescript
14
+ const imageResponse = await env.IMAGES
15
+ .input(fileBuffer)
16
+ .transform({ width: 800, height: 600, fit: "cover", quality: 85, format: "avif" })
17
+ .output();
18
+ return imageResponse.response();
19
+ ```
20
+
21
+ ### Transform Options
22
+
23
+ ```typescript
24
+ interface TransformOptions {
25
+ width?: number; height?: number;
26
+ fit?: "scale-down" | "contain" | "cover" | "crop" | "pad";
27
+ quality?: number; // 1-100
28
+ format?: "avif" | "webp" | "jpeg" | "png";
29
+ dpr?: number; // 1-3
30
+ gravity?: "auto" | "left" | "right" | "top" | "bottom" | "face" | string;
31
+ sharpen?: number; // 0-10
32
+ blur?: number; // 1-250
33
+ rotate?: 90 | 180 | 270;
34
+ background?: string; // CSS color for pad
35
+ metadata?: "none" | "copyright" | "keep";
36
+ brightness?: number; contrast?: number; gamma?: number; // 0-2
37
+ }
38
+ ```
39
+
40
+ ### Draw/Watermark
41
+
42
+ ```typescript
43
+ await env.IMAGES.input(baseImage)
44
+ .draw(env.IMAGES.input(watermark).transform({ width: 100 }), { top: 10, left: 10, opacity: 0.8 })
45
+ .output();
46
+ ```
47
+
48
+ ## REST API
49
+
50
+ ### Upload Image
51
+
52
+ ```bash
53
+ curl -X POST https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v1 \
54
+ -H "Authorization: Bearer {token}" -F file=@image.jpg -F metadata='{"key":"value"}'
55
+ ```
56
+
57
+ ### Other Operations
58
+
59
+ ```bash
60
+ GET /accounts/{account_id}/images/v1/{image_id} # Get details
61
+ DELETE /accounts/{account_id}/images/v1/{image_id} # Delete
62
+ GET /accounts/{account_id}/images/v1?page=1 # List
63
+ ```
64
+
65
+ ## URL Transform API
66
+
67
+ ```
68
+ https://imagedelivery.net/{hash}/{id}/width=800,height=600,fit=cover,format=avif
69
+ ```
70
+
71
+ **Params:** `w=`, `h=`, `fit=`, `q=`, `f=`, `dpr=`, `gravity=`, `sharpen=`, `blur=`, `rotate=`, `background=`, `metadata=`
72
+
73
+ ## Direct Creator Upload
74
+
75
+ ```typescript
76
+ // 1. Get upload URL (backend)
77
+ const { result } = await fetch(
78
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/images/v2/direct_upload`,
79
+ { method: 'POST', headers: { 'Authorization': `Bearer ${token}` },
80
+ body: JSON.stringify({ requireSignedURLs: false }) }
81
+ ).then(r => r.json());
82
+
83
+ // 2. Client uploads to result.uploadURL
84
+ const formData = new FormData();
85
+ formData.append('file', file);
86
+ await fetch(result.uploadURL, { method: 'POST', body: formData });
87
+ ```
88
+
89
+ ## Error Codes
90
+
91
+ | Code | Message | Solution |
92
+ |------|---------|----------|
93
+ | 5400 | Invalid format | Use JPEG, PNG, GIF, WebP |
94
+ | 5401 | Too large | Max 100MB |
95
+ | 5403 | Invalid transform | Check params |
96
+ | 9413 | Rate limit | Implement backoff |
@@ -0,0 +1,211 @@
1
+ # Configuration
2
+
3
+ ## Wrangler Integration
4
+
5
+ ### Workers Binding Setup
6
+
7
+ Add to `wrangler.toml`:
8
+
9
+ ```toml
10
+ name = "my-image-worker"
11
+ main = "src/index.ts"
12
+ compatibility_date = "2024-01-01"
13
+
14
+ [images]
15
+ binding = "IMAGES"
16
+ ```
17
+
18
+ Access in Worker:
19
+
20
+ ```typescript
21
+ interface Env {
22
+ IMAGES: ImageBinding;
23
+ }
24
+
25
+ export default {
26
+ async fetch(request: Request, env: Env): Promise<Response> {
27
+ return await env.IMAGES
28
+ .input(imageBuffer)
29
+ .transform({ width: 800 })
30
+ .output()
31
+ .response();
32
+ }
33
+ };
34
+ ```
35
+
36
+ ### Upload via Script
37
+
38
+ Wrangler doesn't have built-in Images commands, use REST API:
39
+
40
+ ```typescript
41
+ // scripts/upload-image.ts
42
+ import fs from 'fs';
43
+ import FormData from 'form-data';
44
+
45
+ async function uploadImage(filePath: string) {
46
+ const accountId = process.env.CLOUDFLARE_ACCOUNT_ID!;
47
+ const apiToken = process.env.CLOUDFLARE_API_TOKEN!;
48
+
49
+ const formData = new FormData();
50
+ formData.append('file', fs.createReadStream(filePath));
51
+
52
+ const response = await fetch(
53
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/images/v1`,
54
+ {
55
+ method: 'POST',
56
+ headers: {
57
+ 'Authorization': `Bearer ${apiToken}`,
58
+ },
59
+ body: formData,
60
+ }
61
+ );
62
+
63
+ const result = await response.json();
64
+ console.log('Uploaded:', result);
65
+ }
66
+
67
+ uploadImage('./photo.jpg');
68
+ ```
69
+
70
+ ### Environment Variables
71
+
72
+ Store account hash for URL construction:
73
+
74
+ ```toml
75
+ [vars]
76
+ IMAGES_ACCOUNT_HASH = "your-account-hash"
77
+ ACCOUNT_ID = "your-account-id"
78
+ ```
79
+
80
+ Access in Worker:
81
+
82
+ ```typescript
83
+ const imageUrl = `https://imagedelivery.net/${env.IMAGES_ACCOUNT_HASH}/${imageId}/public`;
84
+ ```
85
+
86
+ ## Variants Configuration
87
+
88
+ Variants are named presets for transformations.
89
+
90
+ ### Create Variant (Dashboard)
91
+
92
+ 1. Navigate to Images → Variants
93
+ 2. Click "Create Variant"
94
+ 3. Set name (e.g., `thumbnail`)
95
+ 4. Configure: `width=200,height=200,fit=cover`
96
+
97
+ ### Create Variant (API)
98
+
99
+ ```bash
100
+ curl -X POST \
101
+ https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v1/variants \
102
+ -H "Authorization: Bearer {api_token}" \
103
+ -H "Content-Type: application/json" \
104
+ -d '{
105
+ "id": "thumbnail",
106
+ "options": {
107
+ "width": 200,
108
+ "height": 200,
109
+ "fit": "cover"
110
+ },
111
+ "neverRequireSignedURLs": true
112
+ }'
113
+ ```
114
+
115
+ ### Use Variant
116
+
117
+ ```
118
+ https://imagedelivery.net/{account_hash}/{image_id}/thumbnail
119
+ ```
120
+
121
+ ### Common Variant Presets
122
+
123
+ ```json
124
+ {
125
+ "thumbnail": {
126
+ "width": 200,
127
+ "height": 200,
128
+ "fit": "cover"
129
+ },
130
+ "avatar": {
131
+ "width": 128,
132
+ "height": 128,
133
+ "fit": "cover",
134
+ "gravity": "face"
135
+ },
136
+ "hero": {
137
+ "width": 1920,
138
+ "height": 1080,
139
+ "fit": "cover",
140
+ "quality": 90
141
+ },
142
+ "mobile": {
143
+ "width": 640,
144
+ "fit": "scale-down",
145
+ "quality": 80,
146
+ "format": "avif"
147
+ }
148
+ }
149
+ ```
150
+
151
+ ## Authentication
152
+
153
+ ### API Token (Recommended)
154
+
155
+ Generate at: Dashboard → My Profile → API Tokens
156
+
157
+ Required permissions:
158
+ - Account → Cloudflare Images → Edit
159
+
160
+ ```bash
161
+ curl -H "Authorization: Bearer {api_token}" \
162
+ https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v1
163
+ ```
164
+
165
+ ### API Key (Legacy)
166
+
167
+ ```bash
168
+ curl -H "X-Auth-Email: {email}" \
169
+ -H "X-Auth-Key: {api_key}" \
170
+ https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v1
171
+ ```
172
+
173
+ ## Signed URLs
174
+
175
+ For private images, enable signed URLs:
176
+
177
+ ```bash
178
+ # Upload with signed URLs required
179
+ curl -X POST \
180
+ https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v1 \
181
+ -H "Authorization: Bearer {api_token}" \
182
+ -F file=@private.jpg \
183
+ -F requireSignedURLs=true
184
+ ```
185
+
186
+ Generate signed URL:
187
+
188
+ ```typescript
189
+ import { createHmac } from 'crypto';
190
+
191
+ function signUrl(imageId: string, variant: string, expiry: number, key: string): string {
192
+ const path = `/${imageId}/${variant}`;
193
+ const toSign = `${path}${expiry}`;
194
+ const signature = createHmac('sha256', key)
195
+ .update(toSign)
196
+ .digest('hex');
197
+
198
+ return `https://imagedelivery.net/{hash}${path}?exp=${expiry}&sig=${signature}`;
199
+ }
200
+
201
+ // Sign URL valid for 1 hour
202
+ const signedUrl = signUrl('image-id', 'public', Date.now() + 3600, env.SIGNING_KEY);
203
+ ```
204
+
205
+ ## Local Development
206
+
207
+ ```bash
208
+ npx wrangler dev --remote
209
+ ```
210
+
211
+ Must use `--remote` for Images binding access.
@@ -0,0 +1,99 @@
1
+ # Gotchas & Best Practices
2
+
3
+ ## Fit Modes
4
+
5
+ | Mode | Best For | Behavior |
6
+ |------|----------|----------|
7
+ | `cover` | Hero images, thumbnails | Fills space, crops excess |
8
+ | `contain` | Product images, artwork | Preserves full image, may add padding |
9
+ | `scale-down` | User uploads | Never enlarges |
10
+ | `crop` | Precise crops | Uses gravity |
11
+ | `pad` | Fixed aspect ratio | Adds background |
12
+
13
+ ## Format Selection
14
+
15
+ ```typescript
16
+ format: 'auto' // Recommended - negotiates best format
17
+ ```
18
+
19
+ **Support:** AVIF (Chrome 85+, Firefox 93+, Safari 16.4+), WebP (Chrome 23+, Firefox 65+, Safari 14+)
20
+
21
+ ## Quality Settings
22
+
23
+ | Use Case | Quality |
24
+ |----------|---------|
25
+ | Thumbnails | 75-80 |
26
+ | Standard | 85 (default) |
27
+ | High-quality | 90-95 |
28
+
29
+ ## Common Errors
30
+
31
+ ### 5403: "Image transformation failed"
32
+ - Verify `width`/`height` ≤ 12000
33
+ - Check `quality` 1-100, `dpr` 1-3
34
+ - Don't combine incompatible options
35
+
36
+ ### 9413: "Rate limit exceeded"
37
+ Implement caching and exponential backoff:
38
+ ```typescript
39
+ for (let i = 0; i < 3; i++) {
40
+ try { return await env.IMAGES.input(buffer).transform({...}).output(); }
41
+ catch { await new Promise(r => setTimeout(r, 2 ** i * 1000)); }
42
+ }
43
+ ```
44
+
45
+ ### 5401: "Image too large"
46
+ Pre-process images before upload (max 100MB, 12000×12000px)
47
+
48
+ ### 5400: "Invalid image format"
49
+ Supported: JPEG, PNG, GIF, WebP, AVIF, SVG
50
+
51
+ ### 401/403: "Unauthorized"
52
+ Verify API token has `Cloudflare Images → Edit` permission
53
+
54
+ ## Limits
55
+
56
+ | Resource | Limit |
57
+ |----------|-------|
58
+ | Max input size | 100MB |
59
+ | Max dimensions | 12000×12000px |
60
+ | Quality range | 1-100 |
61
+ | DPR range | 1-3 |
62
+ | API rate limit | ~1200 req/min |
63
+
64
+ ## AVIF Gotchas
65
+
66
+ - **Slower encoding**: First request may have higher latency
67
+ - **Browser detection**:
68
+ ```typescript
69
+ const format = /image\/avif/.test(request.headers.get('Accept') || '') ? 'avif' : 'webp';
70
+ ```
71
+
72
+ ## Anti-Patterns
73
+
74
+ ```typescript
75
+ // ❌ No caching - transforms every request
76
+ return env.IMAGES.input(buffer).transform({...}).output().response();
77
+
78
+ // ❌ cover without both dimensions
79
+ transform({ width: 800, fit: 'cover' })
80
+
81
+ // ✅ Always set both for cover
82
+ transform({ width: 800, height: 600, fit: 'cover' })
83
+
84
+ // ❌ Exposes API token to client
85
+ // ✅ Use Direct Creator Upload (patterns.md)
86
+ ```
87
+
88
+ ## Debugging
89
+
90
+ ```typescript
91
+ // Check response headers
92
+ console.log('Content-Type:', response.headers.get('Content-Type'));
93
+
94
+ // Test with curl
95
+ // curl -I "https://imagedelivery.net/{hash}/{id}/width=800,format=avif"
96
+
97
+ // Monitor logs
98
+ // npx wrangler tail
99
+ ```