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,169 @@
1
+ ## Configuration Patterns
2
+
3
+ ### Enable Workers Logs
4
+
5
+ ```jsonc
6
+ {
7
+ "observability": {
8
+ "enabled": true,
9
+ "head_sampling_rate": 1 // 100% sampling (default)
10
+ }
11
+ }
12
+ ```
13
+
14
+ **Best Practice**: Use structured JSON logging for better indexing
15
+
16
+ ```typescript
17
+ // Good - structured logging
18
+ console.log({
19
+ user_id: 123,
20
+ action: "login",
21
+ status: "success",
22
+ duration_ms: 45
23
+ });
24
+
25
+ // Avoid - unstructured string
26
+ console.log("user_id: 123 logged in successfully in 45ms");
27
+ ```
28
+
29
+ ### Enable Workers Traces
30
+
31
+ ```jsonc
32
+ {
33
+ "observability": {
34
+ "traces": {
35
+ "enabled": true,
36
+ "head_sampling_rate": 0.05 // 5% sampling
37
+ }
38
+ }
39
+ }
40
+ ```
41
+
42
+ **Note**: Default sampling is 100%. For high-traffic Workers, use lower sampling (0.01-0.1).
43
+
44
+ ### Configure Analytics Engine
45
+
46
+ **Bind to Worker**:
47
+ ```toml
48
+ # wrangler.toml
49
+ analytics_engine_datasets = [
50
+ { binding = "ANALYTICS", dataset = "api_metrics" }
51
+ ]
52
+ ```
53
+
54
+ **Write Data Points**:
55
+ ```typescript
56
+ export interface Env {
57
+ ANALYTICS: AnalyticsEngineDataset;
58
+ }
59
+
60
+ export default {
61
+ async fetch(request: Request, env: Env): Promise<Response> {
62
+ // Track metrics
63
+ env.ANALYTICS.writeDataPoint({
64
+ blobs: ['customer_123', 'POST', '/api/v1/users'],
65
+ doubles: [1, 245.5], // request_count, response_time_ms
66
+ indexes: ['customer_123'] // for efficient filtering
67
+ });
68
+
69
+ return new Response('OK');
70
+ }
71
+ }
72
+ ```
73
+
74
+ ### Configure Tail Workers
75
+
76
+ Tail Workers receive logs/traces from other Workers for filtering, transformation, or export.
77
+
78
+ **Setup**:
79
+ ```toml
80
+ # wrangler.toml
81
+ name = "log-processor"
82
+ main = "src/tail.ts"
83
+
84
+ [[tail_consumers]]
85
+ service = "my-worker" # Worker to tail
86
+ ```
87
+
88
+ **Tail Worker Example**:
89
+ ```typescript
90
+ export default {
91
+ async tail(events: TraceItem[], env: Env, ctx: ExecutionContext) {
92
+ // Filter errors only
93
+ const errors = events.filter(event =>
94
+ event.outcome === 'exception' || event.outcome === 'exceededCpu'
95
+ );
96
+
97
+ if (errors.length > 0) {
98
+ // Send to external monitoring
99
+ ctx.waitUntil(
100
+ fetch('https://monitoring.example.com/errors', {
101
+ method: 'POST',
102
+ body: JSON.stringify(errors)
103
+ })
104
+ );
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ ### Configure Logpush
111
+
112
+ Send logs to external storage (S3, R2, GCS, Azure, Datadog, etc.). Requires Business/Enterprise plan.
113
+
114
+ **Via Dashboard**:
115
+ 1. Navigate to Analytics → Logs → Logpush
116
+ 2. Select destination type
117
+ 3. Provide credentials and bucket/endpoint
118
+ 4. Choose dataset (e.g., Workers Trace Events)
119
+ 5. Configure filters and fields
120
+
121
+ **Via API**:
122
+ ```bash
123
+ curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/logpush/jobs" \
124
+ -H "Authorization: Bearer <API_TOKEN>" \
125
+ -H "Content-Type: application/json" \
126
+ -d '{
127
+ "name": "workers-logs-to-s3",
128
+ "destination_conf": "s3://my-bucket/logs?region=us-east-1",
129
+ "dataset": "workers_trace_events",
130
+ "enabled": true,
131
+ "frequency": "high",
132
+ "filter": "{\"where\":{\"and\":[{\"key\":\"ScriptName\",\"operator\":\"eq\",\"value\":\"my-worker\"}]}}"
133
+ }'
134
+ ```
135
+
136
+ ### Environment-Specific Configuration
137
+
138
+ **Development** (verbose logs, full sampling):
139
+ ```jsonc
140
+ // wrangler.dev.jsonc
141
+ {
142
+ "observability": {
143
+ "enabled": true,
144
+ "head_sampling_rate": 1.0,
145
+ "traces": {
146
+ "enabled": true
147
+ }
148
+ }
149
+ }
150
+ ```
151
+
152
+ **Production** (reduced sampling, structured logs):
153
+ ```jsonc
154
+ // wrangler.prod.jsonc
155
+ {
156
+ "observability": {
157
+ "enabled": true,
158
+ "head_sampling_rate": 0.1, // 10% sampling
159
+ "traces": {
160
+ "enabled": true
161
+ }
162
+ }
163
+ }
164
+ ```
165
+
166
+ Deploy with env-specific config:
167
+ ```bash
168
+ wrangler deploy --config wrangler.prod.jsonc --env production
169
+ ```
@@ -0,0 +1,115 @@
1
+ ## Common Errors
2
+
3
+ ### "Logs not appearing"
4
+
5
+ **Cause:** Observability disabled, Worker not redeployed, no traffic, low sampling rate, or log size exceeds 256 KB
6
+ **Solution:**
7
+ ```bash
8
+ # Verify config
9
+ cat wrangler.jsonc | jq '.observability'
10
+
11
+ # Check deployment
12
+ wrangler deployments list <WORKER_NAME>
13
+
14
+ # Test with curl
15
+ curl https://your-worker.workers.dev
16
+ ```
17
+ Ensure `observability.enabled = true`, redeploy Worker, check `head_sampling_rate`, verify traffic
18
+
19
+ ### "Traces not being captured"
20
+
21
+ **Cause:** Traces not enabled, incorrect sampling rate, Worker not redeployed, or destination unavailable
22
+ **Solution:**
23
+ ```jsonc
24
+ // Temporarily set to 100% sampling for debugging
25
+ {
26
+ "observability": {
27
+ "enabled": true,
28
+ "head_sampling_rate": 1.0,
29
+ "traces": {
30
+ "enabled": true
31
+ }
32
+ }
33
+ }
34
+ ```
35
+ Ensure `observability.traces.enabled = true`, set `head_sampling_rate` to 1.0 for testing, redeploy, check destination status
36
+
37
+ ## Limits
38
+
39
+ | Resource/Limit | Value | Notes |
40
+ |----------------|-------|-------|
41
+ | Max log size | 256 KB | Logs exceeding this are truncated |
42
+ | Default sampling rate | 1.0 (100%) | Reduce for high-traffic Workers |
43
+ | Max destinations | Varies by plan | Check dashboard |
44
+ | Trace context propagation | 100 spans max | Deep call chains may lose spans |
45
+ | Analytics Engine write rate | 25 writes/request | Excess writes dropped silently |
46
+
47
+ ## Performance Gotchas
48
+
49
+ ### Spectre Mitigation Timing
50
+
51
+ **Problem:** `Date.now()` and `performance.now()` have reduced precision (coarsened to 100μs)
52
+ **Cause:** Spectre vulnerability mitigation in V8
53
+ **Solution:** Accept reduced precision or use Workers Traces for accurate timing
54
+ ```typescript
55
+ // Date.now() is coarsened - trace spans are accurate
56
+ export default {
57
+ async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
58
+ // For user-facing timing, Date.now() is fine
59
+ const start = Date.now();
60
+ const response = await processRequest(request);
61
+ const duration = Date.now() - start;
62
+
63
+ // For detailed performance analysis, use Workers Traces instead
64
+ return response;
65
+ }
66
+ }
67
+ ```
68
+
69
+ ### Analytics Engine _sample_interval Aggregation
70
+
71
+ **Problem:** Queries return incorrect totals when not multiplying by `_sample_interval`
72
+ **Cause:** Analytics Engine stores sampled data points, each representing multiple events
73
+ **Solution:** Always multiply counts/sums by `_sample_interval` in aggregations
74
+ ```sql
75
+ -- WRONG: Undercounts actual events
76
+ SELECT blob1 AS customer_id, COUNT(*) AS total_calls
77
+ FROM api_usage GROUP BY customer_id;
78
+
79
+ -- CORRECT: Accounts for sampling
80
+ SELECT blob1 AS customer_id, SUM(_sample_interval) AS total_calls
81
+ FROM api_usage GROUP BY customer_id;
82
+ ```
83
+
84
+ ### Trace Context Propagation Limits
85
+
86
+ **Problem:** Deep call chains lose trace context after 100 spans
87
+ **Cause:** Cloudflare limits trace depth to prevent performance impact
88
+ **Solution:** Design for flatter architectures or use custom correlation IDs for deep chains
89
+ ```typescript
90
+ // For deep call chains, add custom correlation ID
91
+ const correlationId = crypto.randomUUID();
92
+ console.log({ correlationId, event: 'request_start' });
93
+
94
+ // Pass correlationId through headers to downstream services
95
+ await fetch('https://api.example.com', {
96
+ headers: { 'X-Correlation-ID': correlationId }
97
+ });
98
+ ```
99
+
100
+ ## Pricing (2026)
101
+
102
+ ### Workers Traces
103
+ - **GA Pricing (starts March 1, 2026):**
104
+ - $0.10 per 1M trace spans captured
105
+ - Retention: 14 days included
106
+ - **Free tier:** 10M trace spans/month
107
+ - **Note:** Beta usage (before March 1, 2026) is free
108
+
109
+ ### Workers Logs
110
+ - **Included:** Free for all Workers
111
+ - **Logpush:** Requires Business/Enterprise plan
112
+
113
+ ### Analytics Engine
114
+ - **Included:** 10M writes/month on Paid Workers plan
115
+ - **Additional:** $0.25 per 1M writes beyond included quota
@@ -0,0 +1,105 @@
1
+ # Observability Patterns
2
+
3
+ ## Usage-Based Billing
4
+
5
+ ```typescript
6
+ env.ANALYTICS.writeDataPoint({
7
+ blobs: [customerId, request.url, request.method],
8
+ doubles: [1], // request_count
9
+ indexes: [customerId]
10
+ });
11
+ ```
12
+
13
+ ```sql
14
+ SELECT blob1 AS customer_id, SUM(_sample_interval * double1) AS total_calls
15
+ FROM api_usage WHERE timestamp >= DATE_TRUNC('month', NOW())
16
+ GROUP BY customer_id
17
+ ```
18
+
19
+ ## Performance Monitoring
20
+
21
+ ```typescript
22
+ const start = Date.now();
23
+ const response = await fetch(url);
24
+ env.ANALYTICS.writeDataPoint({
25
+ blobs: [url, response.status.toString()],
26
+ doubles: [Date.now() - start, response.status]
27
+ });
28
+ ```
29
+
30
+ ```sql
31
+ SELECT blob1 AS url, AVG(double1) AS avg_ms, percentile(double1, 0.95) AS p95_ms
32
+ FROM fetch_metrics WHERE timestamp >= NOW() - INTERVAL '1' HOUR
33
+ GROUP BY url
34
+ ```
35
+
36
+ ## Error Tracking
37
+
38
+ ```typescript
39
+ env.ANALYTICS.writeDataPoint({
40
+ blobs: [error.name, request.url, request.method],
41
+ doubles: [1],
42
+ indexes: [error.name]
43
+ });
44
+ ```
45
+
46
+ ## Multi-Tenant Tracking
47
+
48
+ ```typescript
49
+ env.ANALYTICS.writeDataPoint({
50
+ indexes: [tenantId], // efficient filtering
51
+ blobs: [tenantId, url.pathname, method, status],
52
+ doubles: [1, duration, bytesSize]
53
+ });
54
+ ```
55
+
56
+ ## Tail Worker Log Filtering
57
+
58
+ ```typescript
59
+ export default {
60
+ async tail(events, env, ctx) {
61
+ const critical = events.filter(e =>
62
+ e.exceptions.length > 0 || e.event.wallTime > 1000000
63
+ );
64
+ if (critical.length === 0) return;
65
+
66
+ ctx.waitUntil(
67
+ fetch('https://logging.example.com/ingest', {
68
+ method: 'POST',
69
+ headers: { 'Authorization': `Bearer ${env.API_KEY}` },
70
+ body: JSON.stringify(critical.map(e => ({
71
+ outcome: e.event.outcome,
72
+ cpu_ms: e.event.cpuTime / 1000,
73
+ errors: e.exceptions
74
+ })))
75
+ })
76
+ );
77
+ }
78
+ };
79
+ ```
80
+
81
+ ## OpenTelemetry Export
82
+
83
+ ```typescript
84
+ export default {
85
+ async tail(events, env, ctx) {
86
+ const otelSpans = events.map(e => ({
87
+ traceId: generateId(32),
88
+ spanId: generateId(16),
89
+ name: e.scriptName || 'worker.request',
90
+ attributes: [
91
+ { key: 'worker.outcome', value: { stringValue: e.event.outcome } },
92
+ { key: 'worker.cpu_time_us', value: { intValue: String(e.event.cpuTime) } }
93
+ ]
94
+ }));
95
+
96
+ ctx.waitUntil(
97
+ fetch('https://api.honeycomb.io/v1/traces', {
98
+ method: 'POST',
99
+ headers: { 'X-Honeycomb-Team': env.HONEYCOMB_KEY },
100
+ body: JSON.stringify({ resourceSpans: [{ scopeSpans: [{ spans: otelSpans }] }] })
101
+ })
102
+ );
103
+ }
104
+ };
105
+ ```
@@ -0,0 +1,88 @@
1
+ # Cloudflare Pages
2
+
3
+ JAMstack platform for full-stack apps on Cloudflare's global network.
4
+
5
+ ## Key Features
6
+
7
+ - **Git-based deploys**: Auto-deploy from GitHub/GitLab
8
+ - **Preview deployments**: Unique URL per branch/PR
9
+ - **Pages Functions**: File-based serverless routing (Workers runtime)
10
+ - **Static + dynamic**: Smart asset caching + edge compute
11
+ - **Smart Placement**: Automatic function optimization based on traffic patterns
12
+ - **Framework optimized**: SvelteKit, Astro, Nuxt, Qwik, Solid Start
13
+
14
+ ## Deployment Methods
15
+
16
+ ### 1. Git Integration (Production)
17
+ Dashboard → Workers & Pages → Create → Connect to Git → Configure build
18
+
19
+ ### 2. Direct Upload
20
+ ```bash
21
+ npx wrangler pages deploy ./dist --project-name=my-project
22
+ npx wrangler pages deploy ./dist --project-name=my-project --branch=staging
23
+ ```
24
+
25
+ ### 3. C3 CLI
26
+ ```bash
27
+ npm create cloudflare@latest my-app
28
+ # Select framework → auto-setup + deploy
29
+ ```
30
+
31
+ ## vs Workers
32
+
33
+ - **Pages**: Static sites, JAMstack, frameworks, git workflow, file-based routing
34
+ - **Workers**: Pure APIs, complex routing, WebSockets, scheduled tasks, email handlers
35
+ - **Combine**: Pages Functions use Workers runtime, can bind to Workers
36
+
37
+ ## Quick Start
38
+
39
+ ```bash
40
+ # Create
41
+ npm create cloudflare@latest
42
+
43
+ # Local dev
44
+ npx wrangler pages dev ./dist
45
+
46
+ # Deploy
47
+ npx wrangler pages deploy ./dist --project-name=my-project
48
+
49
+ # Types
50
+ npx wrangler types --path='./functions/types.d.ts'
51
+
52
+ # Secrets
53
+ echo "value" | npx wrangler pages secret put KEY --project-name=my-project
54
+
55
+ # Logs
56
+ npx wrangler pages deployment tail --project-name=my-project
57
+ ```
58
+
59
+ ## Resources
60
+
61
+ - [Pages Docs](https://developers.cloudflare.com/pages/)
62
+ - [Functions API](https://developers.cloudflare.com/pages/functions/api-reference/)
63
+ - [Framework Guides](https://developers.cloudflare.com/pages/framework-guides/)
64
+ - [Discord #functions](https://discord.com/channels/595317990191398933/910978223968518144)
65
+
66
+ ## Reading Order
67
+
68
+ **New to Pages?** Start here:
69
+ 1. README.md (you are here) - Overview & quick start
70
+ 2. [configuration.md](./configuration.md) - Project setup, wrangler.jsonc, bindings
71
+ 3. [api.md](./api.md) - Functions API, routing, context
72
+ 4. [patterns.md](./patterns.md) - Common implementations
73
+ 5. [gotchas.md](./gotchas.md) - Troubleshooting & pitfalls
74
+
75
+ **Quick reference?** Jump to relevant file above.
76
+
77
+ ## In This Reference
78
+
79
+ - [configuration.md](./configuration.md) - wrangler.jsonc, build, env vars, Smart Placement
80
+ - [api.md](./api.md) - Functions API, bindings, context, advanced mode
81
+ - [patterns.md](./patterns.md) - Full-stack patterns, framework integration
82
+ - [gotchas.md](./gotchas.md) - Build issues, limits, debugging, framework warnings
83
+
84
+ ## See Also
85
+
86
+ - [pages-functions](../pages-functions/) - File-based routing, middleware
87
+ - [d1](../d1/) - SQL database for Pages Functions
88
+ - [kv](../kv/) - Key-value storage for caching/state
@@ -0,0 +1,204 @@
1
+ # Functions API
2
+
3
+ ## File-Based Routing
4
+
5
+ ```
6
+ /functions/index.ts → example.com/
7
+ /functions/api/users.ts → example.com/api/users
8
+ /functions/api/users/[id].ts → example.com/api/users/:id
9
+ /functions/api/users/[[path]].ts → example.com/api/users/* (catchall)
10
+ /functions/_middleware.ts → Runs before all routes
11
+ ```
12
+
13
+ **Rules**: `[param]` = single segment, `[[param]]` = multi-segment catchall, more specific wins.
14
+
15
+ ## Request Handlers
16
+
17
+ ```typescript
18
+ import type { PagesFunction } from '@cloudflare/workers-types';
19
+
20
+ interface Env {
21
+ DB: D1Database;
22
+ KV: KVNamespace;
23
+ }
24
+
25
+ // All methods
26
+ export const onRequest: PagesFunction<Env> = async (context) => {
27
+ return new Response('All methods');
28
+ };
29
+
30
+ // Method-specific
31
+ export const onRequestGet: PagesFunction<Env> = async (context) => {
32
+ const { request, env, params, data } = context;
33
+
34
+ const user = await env.DB.prepare(
35
+ 'SELECT * FROM users WHERE id = ?'
36
+ ).bind(params.id).first();
37
+
38
+ return Response.json(user);
39
+ };
40
+
41
+ export const onRequestPost: PagesFunction<Env> = async (context) => {
42
+ const body = await context.request.json();
43
+ return Response.json({ success: true });
44
+ };
45
+
46
+ // Also: onRequestPut, onRequestPatch, onRequestDelete, onRequestHead, onRequestOptions
47
+ ```
48
+
49
+ ## Context Object
50
+
51
+ ```typescript
52
+ interface EventContext<Env, Params, Data> {
53
+ request: Request; // HTTP request
54
+ env: Env; // Bindings (KV, D1, R2, etc.)
55
+ params: Params; // Route parameters
56
+ data: Data; // Middleware-shared data
57
+ waitUntil: (promise: Promise<any>) => void; // Background tasks
58
+ next: () => Promise<Response>; // Next handler
59
+ passThroughOnException: () => void; // Error fallback (not in advanced mode)
60
+ }
61
+ ```
62
+
63
+ ## Dynamic Routes
64
+
65
+ ```typescript
66
+ // Single segment: functions/users/[id].ts
67
+ export const onRequestGet: PagesFunction = async ({ params }) => {
68
+ // /users/123 → params.id = "123"
69
+ return Response.json({ userId: params.id });
70
+ };
71
+
72
+ // Multi-segment: functions/files/[[path]].ts
73
+ export const onRequestGet: PagesFunction = async ({ params }) => {
74
+ // /files/docs/api/v1.md → params.path = ["docs", "api", "v1.md"]
75
+ const filePath = (params.path as string[]).join('/');
76
+ return new Response(filePath);
77
+ };
78
+ ```
79
+
80
+ ## Middleware
81
+
82
+ ```typescript
83
+ // functions/_middleware.ts
84
+ // Single
85
+ export const onRequest: PagesFunction = async (context) => {
86
+ const response = await context.next();
87
+ response.headers.set('X-Custom-Header', 'value');
88
+ return response;
89
+ };
90
+
91
+ // Chained (runs in order)
92
+ const errorHandler: PagesFunction = async (context) => {
93
+ try {
94
+ return await context.next();
95
+ } catch (err) {
96
+ return new Response(err.message, { status: 500 });
97
+ }
98
+ };
99
+
100
+ const auth: PagesFunction = async (context) => {
101
+ const token = context.request.headers.get('Authorization');
102
+ if (!token) return new Response('Unauthorized', { status: 401 });
103
+ context.data.userId = await verifyToken(token);
104
+ return context.next();
105
+ };
106
+
107
+ export const onRequest = [errorHandler, auth];
108
+ ```
109
+
110
+ **Scope**: `functions/_middleware.ts` → all; `functions/api/_middleware.ts` → `/api/*` only
111
+
112
+ ## Bindings Usage
113
+
114
+ ```typescript
115
+ export const onRequestGet: PagesFunction<Env> = async ({ env }) => {
116
+ // KV
117
+ const cached = await env.KV.get('key', 'json');
118
+ await env.KV.put('key', JSON.stringify({data: 'value'}), {expirationTtl: 3600});
119
+
120
+ // D1
121
+ const result = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(userId).first();
122
+
123
+ // R2, Queue, AI - see respective reference docs
124
+
125
+ return Response.json({success: true});
126
+ };
127
+ ```
128
+
129
+ ## Advanced Mode
130
+
131
+ Full Workers API, bypasses file-based routing:
132
+
133
+ ```javascript
134
+ // functions/_worker.js
135
+ export default {
136
+ async fetch(request, env, ctx) {
137
+ const url = new URL(request.url);
138
+
139
+ // Custom routing
140
+ if (url.pathname.startsWith('/api/')) {
141
+ return new Response('API response');
142
+ }
143
+
144
+ // REQUIRED: Serve static assets
145
+ return env.ASSETS.fetch(request);
146
+ }
147
+ };
148
+ ```
149
+
150
+ **When to use**: WebSockets, complex routing, scheduled handlers, email handlers.
151
+
152
+ ## Smart Placement
153
+
154
+ Automatically optimizes function execution location based on traffic patterns.
155
+
156
+ **Configuration** (in wrangler.jsonc):
157
+ ```jsonc
158
+ {
159
+ "placement": {
160
+ "mode": "smart" // Enables optimization (default: off)
161
+ }
162
+ }
163
+ ```
164
+
165
+ **How it works**: Analyzes traffic patterns over time and places functions closer to users or data sources (e.g., D1 databases). Requires no code changes.
166
+
167
+ **Trade-offs**: Initial requests may see slightly higher latency during learning period (hours-days). Performance improves as system optimizes.
168
+
169
+ **When to use**: Global apps with centralized databases or geographically concentrated traffic sources.
170
+
171
+ ## getRequestContext (Framework SSR)
172
+
173
+ Access bindings in framework code:
174
+
175
+ ```typescript
176
+ // SvelteKit
177
+ import type { RequestEvent } from '@sveltejs/kit';
178
+ export async function load({ platform }: RequestEvent) {
179
+ const data = await platform.env.DB.prepare('SELECT * FROM users').all();
180
+ return { users: data.results };
181
+ }
182
+
183
+ // Astro
184
+ const { DB } = Astro.locals.runtime.env;
185
+ const data = await DB.prepare('SELECT * FROM users').all();
186
+
187
+ // Solid Start (server function)
188
+ import { getRequestEvent } from 'solid-js/web';
189
+ const event = getRequestEvent();
190
+ const data = await event.locals.runtime.env.DB.prepare('SELECT * FROM users').all();
191
+ ```
192
+
193
+ **✅ Supported adapters** (2026):
194
+ - **SvelteKit**: `@sveltejs/adapter-cloudflare`
195
+ - **Astro**: Built-in Cloudflare adapter
196
+ - **Nuxt**: Set `nitro.preset: 'cloudflare-pages'` in `nuxt.config.ts`
197
+ - **Qwik**: Built-in Cloudflare adapter
198
+ - **Solid Start**: `@solidjs/start-cloudflare-pages`
199
+
200
+ **❌ Deprecated/Unsupported**:
201
+ - **Next.js**: Official adapter (`@cloudflare/next-on-pages`) deprecated. Use Vercel or self-host on Workers.
202
+ - **Remix**: Official adapter (`@remix-run/cloudflare-pages`) deprecated. Migrate to supported frameworks.
203
+
204
+ See [gotchas.md](./gotchas.md#framework-specific) for migration guidance.