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,390 @@
1
+ # Flagship API Reference
2
+
3
+ ## Binding API (Workers)
4
+
5
+ The binding is available as `env.FLAGS` (type `Flagship` from `@cloudflare/workers-types`).
6
+
7
+ ### Evaluation Methods
8
+
9
+ All methods are async, never throw, and return the `defaultValue` on errors.
10
+
11
+ | Method | Signature | Returns |
12
+ |--------|-----------|---------|
13
+ | `get` | `get(flagKey, defaultValue?, context?)` | `Promise<unknown>` |
14
+ | `getBooleanValue` | `getBooleanValue(flagKey, defaultValue, context?)` | `Promise<boolean>` |
15
+ | `getStringValue` | `getStringValue(flagKey, defaultValue, context?)` | `Promise<string>` |
16
+ | `getNumberValue` | `getNumberValue(flagKey, defaultValue, context?)` | `Promise<number>` |
17
+ | `getObjectValue` | `getObjectValue<T>(flagKey, defaultValue, context?)` | `Promise<T>` |
18
+ | `getBooleanDetails` | `getBooleanDetails(flagKey, defaultValue, context?)` | `Promise<FlagshipEvaluationDetails<boolean>>` |
19
+ | `getStringDetails` | `getStringDetails(flagKey, defaultValue, context?)` | `Promise<FlagshipEvaluationDetails<string>>` |
20
+ | `getNumberDetails` | `getNumberDetails(flagKey, defaultValue, context?)` | `Promise<FlagshipEvaluationDetails<number>>` |
21
+ | `getObjectDetails` | `getObjectDetails<T>(flagKey, defaultValue, context?)` | `Promise<FlagshipEvaluationDetails<T>>` |
22
+
23
+ ### Parameters (shared across all methods)
24
+
25
+ | Parameter | Type | Required | Description |
26
+ |-----------|------|----------|-------------|
27
+ | `flagKey` | `string` | Yes | Flag key to evaluate |
28
+ | `defaultValue` | varies | Yes (except `get`) | Fallback if evaluation fails or flag not found |
29
+ | `context` | `FlagshipEvaluationContext` | No | Attributes for targeting rules (`{ userId: "user-42", country: "US" }`) |
30
+
31
+ ### Types
32
+
33
+ ```typescript
34
+ type FlagshipEvaluationContext = Record<string, string | number | boolean>;
35
+
36
+ interface FlagshipEvaluationDetails<T> {
37
+ flagKey: string;
38
+ value: T;
39
+ variant?: string; // name of the matched variation
40
+ reason?: string; // "TARGETING_MATCH" | "DEFAULT" | "DISABLED" | "SPLIT"
41
+ errorCode?: string; // "TYPE_MISMATCH" | "GENERAL"
42
+ errorMessage?: string;
43
+ }
44
+ ```
45
+
46
+ ### Example
47
+
48
+ ```typescript
49
+ export default {
50
+ async fetch(request: Request, env: Env): Promise<Response> {
51
+ const enabled = await env.FLAGS.getBooleanValue("new-feature", false, {
52
+ userId: "user-42",
53
+ });
54
+ return new Response(enabled ? "Feature on" : "Feature off");
55
+ },
56
+ };
57
+ ```
58
+
59
+ ---
60
+
61
+ ## OpenFeature SDK
62
+
63
+ Package: `@cloudflare/flagship`
64
+
65
+ ### Server Provider (`FlagshipServerProvider`)
66
+
67
+ For Workers, Node.js, and server-side JavaScript.
68
+
69
+ **With binding (recommended inside Workers):**
70
+
71
+ ```typescript
72
+ import { OpenFeature } from "@openfeature/server-sdk";
73
+ import { FlagshipServerProvider } from "@cloudflare/flagship";
74
+
75
+ await OpenFeature.setProviderAndWait(
76
+ new FlagshipServerProvider({ binding: env.FLAGS }),
77
+ );
78
+ const client = OpenFeature.getClient();
79
+ const enabled = await client.getBooleanValue("new-checkout", false, {
80
+ targetingKey: "user-42",
81
+ });
82
+ ```
83
+
84
+ **With app ID (Node.js / non-Worker runtimes):**
85
+
86
+ ```typescript
87
+ import { OpenFeature } from "@openfeature/server-sdk";
88
+ import { FlagshipServerProvider } from "@cloudflare/flagship";
89
+
90
+ await OpenFeature.setProviderAndWait(
91
+ new FlagshipServerProvider({
92
+ appId: "<APP_ID>",
93
+ accountId: "<ACCOUNT_ID>",
94
+ authToken: "<API_TOKEN>",
95
+ }),
96
+ );
97
+ const client = OpenFeature.getClient();
98
+ const enabled = await client.getBooleanValue("new-checkout", false, {
99
+ targetingKey: "user-42",
100
+ });
101
+ ```
102
+
103
+ ### Client Provider (`FlagshipClientProvider`)
104
+
105
+ For browser applications. Pre-fetches flags on init, evaluates synchronously.
106
+
107
+ ```typescript
108
+ import { OpenFeature } from "@openfeature/web-sdk";
109
+ import { FlagshipClientProvider } from "@cloudflare/flagship";
110
+
111
+ await OpenFeature.setProviderAndWait(
112
+ new FlagshipClientProvider({
113
+ appId: "<APP_ID>",
114
+ accountId: "<ACCOUNT_ID>",
115
+ authToken: "<API_TOKEN>",
116
+ prefetchFlags: ["promo-banner", "dark-mode"],
117
+ }),
118
+ );
119
+ await OpenFeature.setContext({ targetingKey: "user-42", plan: "enterprise" });
120
+ const client = OpenFeature.getClient();
121
+
122
+ // Synchronous — no await needed
123
+ const showBanner = client.getBooleanValue("promo-banner", false);
124
+ ```
125
+
126
+ **Important:** Only flags listed in `prefetchFlags` are available. Unlisted flags return `FLAG_NOT_FOUND`.
127
+
128
+ ### SDK Hooks
129
+
130
+ ```typescript
131
+ import { LoggingHook, TelemetryHook } from "@cloudflare/flagship";
132
+ OpenFeature.addHooks(new LoggingHook(), new TelemetryHook());
133
+ ```
134
+
135
+ ---
136
+
137
+ ## REST API (Flag Management)
138
+
139
+ Source of truth: [Cloudflare Flagship API reference](https://developers.cloudflare.com/api/resources/flagship/). Use it to verify REST paths, envelopes, response fields, and permission wording before relying on examples here.
140
+
141
+ ### FIRST: Check Prerequisites
142
+
143
+ Before making any REST API calls (create, read, update, delete, toggle flags), verify these environment variables are set:
144
+
145
+ | Variable | Purpose | How to get |
146
+ |----------|---------|------------|
147
+ | `CLOUDFLARE_ACCOUNT_ID` | Account identifier | Dashboard URL or `wrangler whoami` |
148
+ | `CLOUDFLARE_API_TOKEN` | Bearer token for API auth | [Create API token](https://dash.cloudflare.com/profile/api-tokens) with Flagship permissions |
149
+ | `FLAGSHIP_APP_ID` | Target app UUID | Dashboard under **Compute > Flagship**, or `GET /apps` endpoint |
150
+
151
+ Check with:
152
+
153
+ ```bash
154
+ echo "CLOUDFLARE_ACCOUNT_ID=${CLOUDFLARE_ACCOUNT_ID:-(not set)}"
155
+ echo "CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN:-(not set)}"
156
+ echo "FLAGSHIP_APP_ID=${FLAGSHIP_APP_ID:-(not set)}"
157
+ ```
158
+
159
+ **If any are missing, ask the user to provide them before proceeding.**
160
+
161
+ ### Base URL and Auth
162
+
163
+ Base URL: `https://api.cloudflare.com/client/v4/accounts/{account_id}/flagship`
164
+
165
+ Authentication: `Authorization: Bearer <API_TOKEN>`
166
+
167
+ Management endpoints use the Cloudflare v4 envelope. On success, the payload is under `result`; errors are an array under `errors`.
168
+
169
+ ```jsonc
170
+ // Success
171
+ { "success": true, "result": <T>, "errors": [], "messages": [] }
172
+
173
+ // Paginated success
174
+ {
175
+ "success": true,
176
+ "result": [<T>],
177
+ "result_info": { "count": 50, "cursor": "next-cursor-or-null" },
178
+ "errors": [],
179
+ "messages": []
180
+ }
181
+
182
+ // Error
183
+ { "success": false, "result": null, "errors": [{ "message": "message" }], "messages": [] }
184
+ ```
185
+
186
+ ### App Endpoints
187
+
188
+ | Method | Path | Description |
189
+ |--------|------|-------------|
190
+ | `GET` | `/apps` | List all apps |
191
+ | `GET` | `/apps/{app_id}` | Get app |
192
+ | `POST` | `/apps` | Create app (`{ "name": "my-app" }`) |
193
+ | `PUT` | `/apps/{app_id}` | Update app (`{ "name": "new-name" }`) |
194
+ | `DELETE` | `/apps/{app_id}` | Delete app |
195
+
196
+ App name constraints: alphanumeric + hyphens + underscores, 1-64 chars.
197
+
198
+ ### Flag Endpoints
199
+
200
+ | Method | Path | Description |
201
+ |--------|------|-------------|
202
+ | `GET` | `/apps/{app_id}/flags?limit=50&cursor=<cursor>` | List flags (paginated) |
203
+ | `GET` | `/apps/{app_id}/flags/{flag_key}` | Get flag |
204
+ | `POST` | `/apps/{app_id}/flags` | Create flag |
205
+ | `PUT` | `/apps/{app_id}/flags/{flag_key}` | Update flag (full replace) |
206
+ | `DELETE` | `/apps/{app_id}/flags/{flag_key}` | Delete flag |
207
+ | `GET` | `/apps/{app_id}/flags/{flag_key}/changelog?limit=20&cursor=<cursor>` | Flag changelog |
208
+
209
+ ### Evaluate Endpoint
210
+
211
+ ```
212
+ GET /apps/{app_id}/evaluate?flagKey=<key>&<context-attrs>
213
+ ```
214
+
215
+ Requires an API token with the `com.cloudflare.account.flagship.evaluate` permission. Context attributes passed as query params. This endpoint is not wrapped in the management envelope; the SDK contract returns OpenFeature-style camelCase:
216
+
217
+ ```json
218
+ {
219
+ "flagKey": "my-flag",
220
+ "value": true,
221
+ "variant": "on",
222
+ "reason": "SPLIT"
223
+ }
224
+ ```
225
+
226
+ Reasons: `TARGETING_MATCH`, `SPLIT`, `DEFAULT`, `DISABLED`.
227
+
228
+ ### Management Response Payloads
229
+
230
+ Management endpoints are wrapped in the Cloudflare v4 envelope shown above. Common `.result` payloads:
231
+
232
+ **App result**
233
+
234
+ ```json
235
+ {
236
+ "id": "app-uuid",
237
+ "name": "my-app",
238
+ "created_at": "2026-06-09T12:00:00.000Z",
239
+ "updated_at": "2026-06-09T12:00:00.000Z",
240
+ "updated_by": "user@example.com"
241
+ }
242
+ ```
243
+
244
+ **Flag result**
245
+
246
+ ```json
247
+ {
248
+ "key": "my-flag",
249
+ "type": "boolean",
250
+ "default_variation": "off",
251
+ "variations": { "on": true, "off": false },
252
+ "rules": [],
253
+ "description": "Enables the new feature",
254
+ "enabled": true,
255
+ "updated_at": "2026-06-09T12:00:00.000Z",
256
+ "updated_by": "user@example.com"
257
+ }
258
+ ```
259
+
260
+ **Changelog entry**
261
+
262
+ ```json
263
+ {
264
+ "flag_key": "my-flag",
265
+ "event": "update",
266
+ "after": { "key": "my-flag", "default_variation": "off", "variations": { "on": true, "off": false }, "rules": [], "enabled": true },
267
+ "diff": { "enabled": { "from": false, "to": true } }
268
+ }
269
+ ```
270
+
271
+ Changelog entries include the full flag state after the change. `update` entries also include `diff`.
272
+
273
+ ---
274
+
275
+ ## FlagDefinition Schema
276
+
277
+ ```json
278
+ {
279
+ "key": "my-flag",
280
+ "type": "boolean",
281
+ "default_variation": "off",
282
+ "variations": {
283
+ "on": true,
284
+ "off": false
285
+ },
286
+ "rules": [
287
+ {
288
+ "priority": 1,
289
+ "conditions": [
290
+ {
291
+ "attribute": "email",
292
+ "operator": "ends_with",
293
+ "value": "@cloudflare.com"
294
+ }
295
+ ],
296
+ "serve_variation": "on",
297
+ "rollout": { "percentage": 100 }
298
+ }
299
+ ],
300
+ "description": "Enables the new feature",
301
+ "enabled": true
302
+ }
303
+ ```
304
+
305
+ ### Field Constraints
306
+
307
+ | Field | Type | Constraints |
308
+ |-------|------|-------------|
309
+ | `key` | string | 1-64 chars, `/^[a-zA-Z0-9_-]+$/` |
310
+ | `type` | enum | Optional. `boolean`, `string`, `number`, `json` (auto-inferred from variations) |
311
+ | `default_variation` | string | Must be a key in `variations` |
312
+ | `variations` | `Record<string, T>` | At least one. All values same type. Keys: alphanumeric/hyphens/underscores, max 64 chars. Values max 10KB. |
313
+ | `rules` | `Rule[]` | Can be empty. No duplicate priorities. |
314
+ | `description` | string? | Max 512 chars, nullable |
315
+ | `enabled` | boolean | Required. `false` = always returns default variation. |
316
+
317
+ ### Rule Schema
318
+
319
+ ```json
320
+ {
321
+ "priority": 1,
322
+ "conditions": [ /* Condition[] */ ],
323
+ "serve_variation": "on",
324
+ "rollout": { "percentage": 50, "attribute": "targetingKey" }
325
+ }
326
+ ```
327
+
328
+ - `priority`: integer >= 1, unique across rules in the flag (lower = evaluated first)
329
+ - `conditions`: array of base or logical conditions
330
+ - `serve_variation`: must be a key in `variations`
331
+ - `rollout`: optional. `percentage` 0-100. `attribute` defaults to `targetingKey`.
332
+
333
+ ### Condition Schema
334
+
335
+ **Base condition:**
336
+
337
+ ```json
338
+ { "attribute": "email", "operator": "ends_with", "value": "@cloudflare.com" }
339
+ ```
340
+
341
+ **Logical condition (AND/OR):**
342
+
343
+ ```json
344
+ {
345
+ "logical_operator": "AND",
346
+ "clauses": [
347
+ { "attribute": "country", "operator": "equals", "value": "US" },
348
+ { "attribute": "plan", "operator": "in", "value": ["enterprise", "business"] }
349
+ ]
350
+ }
351
+ ```
352
+
353
+ Nesting supported up to 6 levels deep.
354
+
355
+ ### Operators
356
+
357
+ | Operator | Description | Value Type |
358
+ |----------|-------------|------------|
359
+ | `equals` | Exact match (case-sensitive) | String |
360
+ | `not_equals` | Not exact match | String |
361
+ | `greater_than` | Numeric / datetime > | Number, ISO 8601 |
362
+ | `less_than` | Numeric / datetime < | Number, ISO 8601 |
363
+ | `greater_than_or_equals` | >= | Number, ISO 8601 |
364
+ | `less_than_or_equals` | <= | Number, ISO 8601 |
365
+ | `contains` | Substring match (case-sensitive) | String |
366
+ | `starts_with` | Prefix match | String |
367
+ | `ends_with` | Suffix match | String |
368
+ | `in` | Value in array | Array |
369
+ | `not_in` | Value not in array | Array |
370
+
371
+ ---
372
+
373
+ ## Rate Limits
374
+
375
+ | Operation | Limit |
376
+ |-----------|-------|
377
+ | Mutations (POST/PUT/DELETE) | 60 per 60s per account:app |
378
+ | Reads (GET) | 600 per 60s per account:app |
379
+
380
+ ## Error Codes
381
+
382
+ | HTTP Status | Meaning |
383
+ |-------------|---------|
384
+ | 200 | Success (read/update/delete) |
385
+ | 201 | Created (create) |
386
+ | 400 | Validation error (check `errors[].message`) |
387
+ | 401 | Invalid or missing token |
388
+ | 404 | Flag or app not found |
389
+ | 409 | Flag key already exists (create) |
390
+ | 429 | Rate limited |
@@ -0,0 +1,202 @@
1
+ # Flagship Configuration
2
+
3
+ ## Wrangler Binding Setup
4
+
5
+ Add a Flagship binding to your Wrangler config to access flags via `env.FLAGS`.
6
+
7
+ ### Single App
8
+
9
+ ```jsonc
10
+ // wrangler.jsonc
11
+ {
12
+ "flagship": {
13
+ "binding": "FLAGS",
14
+ "app_id": "<APP_ID>"
15
+ }
16
+ }
17
+ ```
18
+
19
+ ```toml
20
+ # wrangler.toml
21
+ [flagship]
22
+ binding = "FLAGS"
23
+ app_id = "<APP_ID>"
24
+ ```
25
+
26
+ ### Multiple Apps
27
+
28
+ ```jsonc
29
+ // wrangler.jsonc
30
+ {
31
+ "flagship": [
32
+ {
33
+ "binding": "FLAGS",
34
+ "app_id": "<APP_ID_1>"
35
+ },
36
+ {
37
+ "binding": "EXPERIMENT_FLAGS",
38
+ "app_id": "<APP_ID_2>"
39
+ }
40
+ ]
41
+ }
42
+ ```
43
+
44
+ ```toml
45
+ # wrangler.toml
46
+ [[flagship]]
47
+ binding = "FLAGS"
48
+ app_id = "<APP_ID_1>"
49
+
50
+ [[flagship]]
51
+ binding = "EXPERIMENT_FLAGS"
52
+ app_id = "<APP_ID_2>"
53
+ ```
54
+
55
+ ### Generate Types
56
+
57
+ After adding the binding, generate TypeScript types:
58
+
59
+ ```bash
60
+ npx wrangler types
61
+ ```
62
+
63
+ This creates the `Env` interface with each binding typed as `Flagship`:
64
+
65
+ ```typescript
66
+ interface Env {
67
+ FLAGS: Flagship;
68
+ EXPERIMENT_FLAGS: Flagship; // if multiple
69
+ }
70
+ ```
71
+
72
+ The `Flagship` type comes from `@cloudflare/workers-types`.
73
+
74
+ ---
75
+
76
+ ## OpenFeature SDK Installation
77
+
78
+ ### Server-Side (Workers, Node.js)
79
+
80
+ ```bash
81
+ npm i @cloudflare/flagship @openfeature/server-sdk
82
+ ```
83
+
84
+ ### Browser
85
+
86
+ ```bash
87
+ npm i @cloudflare/flagship @openfeature/web-sdk
88
+ ```
89
+
90
+ ---
91
+
92
+ ## SDK Provider Setup
93
+
94
+ ### Server Provider — With Binding (Workers)
95
+
96
+ Recommended approach inside Workers. No HTTP overhead, auth handled automatically.
97
+
98
+ ```typescript
99
+ import { OpenFeature } from "@openfeature/server-sdk";
100
+ import { FlagshipServerProvider } from "@cloudflare/flagship";
101
+
102
+ export default {
103
+ async fetch(request: Request, env: Env): Promise<Response> {
104
+ await OpenFeature.setProviderAndWait(
105
+ new FlagshipServerProvider({ binding: env.FLAGS }),
106
+ );
107
+ const client = OpenFeature.getClient();
108
+ // ... evaluate flags
109
+ },
110
+ };
111
+ ```
112
+
113
+ ### Server Provider — With App ID (Node.js)
114
+
115
+ For non-Worker runtimes. Requires an API token with Flagship read permissions.
116
+
117
+ ```typescript
118
+ import { OpenFeature } from "@openfeature/server-sdk";
119
+ import { FlagshipServerProvider } from "@cloudflare/flagship";
120
+
121
+ await OpenFeature.setProviderAndWait(
122
+ new FlagshipServerProvider({
123
+ appId: "<APP_ID>",
124
+ accountId: "<ACCOUNT_ID>",
125
+ authToken: "<API_TOKEN>",
126
+ }),
127
+ );
128
+ const client = OpenFeature.getClient();
129
+ ```
130
+
131
+ ### Client Provider (Browser)
132
+
133
+ Pre-fetches flags on init, then evaluates synchronously. Only `prefetchFlags` are available.
134
+
135
+ ```typescript
136
+ import { OpenFeature } from "@openfeature/web-sdk";
137
+ import { FlagshipClientProvider } from "@cloudflare/flagship";
138
+
139
+ await OpenFeature.setProviderAndWait(
140
+ new FlagshipClientProvider({
141
+ appId: "<APP_ID>",
142
+ accountId: "<ACCOUNT_ID>",
143
+ authToken: "<API_TOKEN>",
144
+ prefetchFlags: ["promo-banner", "dark-mode", "max-uploads"],
145
+ }),
146
+ );
147
+ await OpenFeature.setContext({ targetingKey: "user-42", plan: "enterprise" });
148
+ const client = OpenFeature.getClient();
149
+ ```
150
+
151
+ ### Provider Options Reference
152
+
153
+ **FlagshipServerProvider:**
154
+
155
+ | Option | Type | Required | Description |
156
+ |--------|------|----------|-------------|
157
+ | `binding` | `Flagship` | No | Binding from `env.FLAGS`. Use inside Workers. |
158
+ | `appId` | string | No | App ID from dashboard. Required without binding. |
159
+ | `accountId` | string | No | Cloudflare account ID. Required without binding. |
160
+ | `authToken` | string | No | API token with Flagship read permissions. Required without binding. |
161
+
162
+ Provide either `binding` or all three of `appId` + `accountId` + `authToken`.
163
+
164
+ **FlagshipClientProvider:**
165
+
166
+ | Option | Type | Required | Description |
167
+ |--------|------|----------|-------------|
168
+ | `appId` | string | Yes | App ID from dashboard |
169
+ | `accountId` | string | Yes | Cloudflare account ID |
170
+ | `authToken` | string | Yes | API token with Flagship read permissions |
171
+ | `prefetchFlags` | string[] | Yes | Flag keys to prefetch. Unlisted flags return `FLAG_NOT_FOUND`. |
172
+
173
+ ---
174
+
175
+ ## REST API Authentication
176
+
177
+ For managing flags via the REST API (create, update, delete), set these environment variables:
178
+
179
+ | Variable | Description |
180
+ |----------|-------------|
181
+ | `CLOUDFLARE_ACCOUNT_ID` | Your Cloudflare account ID |
182
+ | `CLOUDFLARE_API_TOKEN` | API token with Flagship permissions |
183
+ | `FLAGSHIP_APP_ID` | Target app UUID (from dashboard under **Compute > Flagship**, or `GET /apps`) |
184
+
185
+ Base URL: `https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/flagship`
186
+
187
+ ```bash
188
+ curl -s -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
189
+ "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/flagship/apps" | jq .
190
+ ```
191
+
192
+ App IDs are shown in the Cloudflare dashboard under **Compute > Flagship**.
193
+
194
+ ---
195
+
196
+ ## Local Development
197
+
198
+ Flagship bindings work in local dev with `wrangler dev`. Flag evaluation uses the live Flagship configuration — there is no local flag store. Ensure the `app_id` in your Wrangler config points to a valid app.
199
+
200
+ ```bash
201
+ npx wrangler dev
202
+ ```