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,195 @@
1
+ # Stream Live Streaming API
2
+
3
+ Live input creation, status checking, simulcast, and WebRTC streaming.
4
+
5
+ ## Create Live Input
6
+
7
+ ### Using Cloudflare SDK
8
+
9
+ ```typescript
10
+ import Cloudflare from 'cloudflare';
11
+
12
+ const client = new Cloudflare({ apiToken: env.CF_API_TOKEN });
13
+
14
+ const liveInput = await client.stream.liveInputs.create({
15
+ account_id: env.CF_ACCOUNT_ID,
16
+ recording: { mode: 'automatic', timeoutSeconds: 30 },
17
+ deleteRecordingAfterDays: 30
18
+ });
19
+
20
+ // Returns: { uid, rtmps, srt, webRTC }
21
+ ```
22
+
23
+ ### Raw fetch API
24
+
25
+ ```typescript
26
+ async function createLiveInput(accountId: string, apiToken: string) {
27
+ const response = await fetch(
28
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/live_inputs`,
29
+ {
30
+ method: 'POST',
31
+ headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
32
+ body: JSON.stringify({
33
+ recording: { mode: 'automatic', timeoutSeconds: 30 },
34
+ deleteRecordingAfterDays: 30
35
+ })
36
+ }
37
+ );
38
+ const { result } = await response.json();
39
+ return {
40
+ uid: result.uid,
41
+ rtmps: { url: result.rtmps.url, streamKey: result.rtmps.streamKey },
42
+ srt: { url: result.srt.url, streamId: result.srt.streamId, passphrase: result.srt.passphrase },
43
+ webRTC: result.webRTC
44
+ };
45
+ }
46
+ ```
47
+
48
+ ## Check Live Status
49
+
50
+ ```typescript
51
+ async function getLiveStatus(accountId: string, liveInputId: string, apiToken: string) {
52
+ const response = await fetch(
53
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/live_inputs/${liveInputId}`,
54
+ { headers: { 'Authorization': `Bearer ${apiToken}` } }
55
+ );
56
+ const { result } = await response.json();
57
+ return {
58
+ isLive: result.status?.current?.state === 'connected',
59
+ recording: result.recording,
60
+ status: result.status
61
+ };
62
+ }
63
+ ```
64
+
65
+ ## Simulcast (Live Outputs)
66
+
67
+ ### Create Output
68
+
69
+ ```typescript
70
+ async function createLiveOutput(
71
+ accountId: string, liveInputId: string, apiToken: string,
72
+ outputUrl: string, streamKey: string
73
+ ) {
74
+ return fetch(
75
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/live_inputs/${liveInputId}/outputs`,
76
+ {
77
+ method: 'POST',
78
+ headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
79
+ body: JSON.stringify({
80
+ url: `${outputUrl}/${streamKey}`,
81
+ enabled: true,
82
+ streamKey // For platforms like YouTube, Twitch
83
+ })
84
+ }
85
+ ).then(r => r.json());
86
+ }
87
+ ```
88
+
89
+ ### Example: Simulcast to YouTube + Twitch
90
+
91
+ ```typescript
92
+ const liveInput = await createLiveInput(accountId, apiToken);
93
+
94
+ // Add YouTube output
95
+ await createLiveOutput(
96
+ accountId, liveInput.uid, apiToken,
97
+ 'rtmp://a.rtmp.youtube.com/live2',
98
+ 'your-youtube-stream-key'
99
+ );
100
+
101
+ // Add Twitch output
102
+ await createLiveOutput(
103
+ accountId, liveInput.uid, apiToken,
104
+ 'rtmp://live.twitch.tv/app',
105
+ 'your-twitch-stream-key'
106
+ );
107
+ ```
108
+
109
+ ## WebRTC Streaming (WHIP/WHEP)
110
+
111
+ ### Browser to Stream (WHIP)
112
+
113
+ ```typescript
114
+ async function startWebRTCBroadcast(liveInputId: string) {
115
+ const pc = new RTCPeerConnection();
116
+
117
+ // Add local media tracks
118
+ const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
119
+ stream.getTracks().forEach(track => pc.addTrack(track, stream));
120
+
121
+ // Create offer
122
+ const offer = await pc.createOffer();
123
+ await pc.setLocalDescription(offer);
124
+
125
+ // Send to Stream via WHIP
126
+ const response = await fetch(
127
+ `https://customer-<CODE>.cloudflarestream.com/${liveInputId}/webRTC/publish`,
128
+ {
129
+ method: 'POST',
130
+ headers: { 'Content-Type': 'application/sdp' },
131
+ body: offer.sdp
132
+ }
133
+ );
134
+
135
+ const answer = await response.text();
136
+ await pc.setRemoteDescription({ type: 'answer', sdp: answer });
137
+ }
138
+ ```
139
+
140
+ ### Stream to Browser (WHEP)
141
+
142
+ ```typescript
143
+ async function playWebRTCStream(videoId: string) {
144
+ const pc = new RTCPeerConnection();
145
+
146
+ pc.addTransceiver('video', { direction: 'recvonly' });
147
+ pc.addTransceiver('audio', { direction: 'recvonly' });
148
+
149
+ const offer = await pc.createOffer();
150
+ await pc.setLocalDescription(offer);
151
+
152
+ const response = await fetch(
153
+ `https://customer-<CODE>.cloudflarestream.com/${videoId}/webRTC/play`,
154
+ {
155
+ method: 'POST',
156
+ headers: { 'Content-Type': 'application/sdp' },
157
+ body: offer.sdp
158
+ }
159
+ );
160
+
161
+ const answer = await response.text();
162
+ await pc.setRemoteDescription({ type: 'answer', sdp: answer });
163
+
164
+ return pc;
165
+ }
166
+ ```
167
+
168
+ ## Recording Settings
169
+
170
+ | Mode | Behavior |
171
+ |------|----------|
172
+ | `automatic` | Record all live streams |
173
+ | `off` | No recording |
174
+ | `timeoutSeconds` | Stop recording after N seconds of inactivity |
175
+
176
+ ```typescript
177
+ const recordingConfig = {
178
+ mode: 'automatic',
179
+ timeoutSeconds: 30, // Auto-stop 30s after stream ends
180
+ requireSignedURLs: true, // Require token for VOD playback
181
+ allowedOrigins: ['https://yourdomain.com']
182
+ };
183
+ ```
184
+
185
+ ## In This Reference
186
+
187
+ - [README.md](./README.md) - Overview and quick start
188
+ - [api.md](./api.md) - On-demand video APIs
189
+ - [configuration.md](./configuration.md) - Setup and config
190
+ - [patterns.md](./patterns.md) - Full-stack flows, best practices
191
+ - [gotchas.md](./gotchas.md) - Error codes, troubleshooting
192
+
193
+ ## See Also
194
+
195
+ - [workers](../workers/) - Deploy live APIs in Workers
@@ -0,0 +1,199 @@
1
+ # Stream API Reference
2
+
3
+ Upload, playback, live streaming, and management APIs.
4
+
5
+ ## Upload APIs
6
+
7
+ ### Direct Creator Upload (Recommended)
8
+
9
+ **Backend: Create upload URL (SDK)**
10
+ ```typescript
11
+ import Cloudflare from 'cloudflare';
12
+
13
+ const client = new Cloudflare({ apiToken: env.CF_API_TOKEN });
14
+
15
+ const uploadData = await client.stream.directUpload.create({
16
+ account_id: env.CF_ACCOUNT_ID,
17
+ maxDurationSeconds: 3600,
18
+ requireSignedURLs: true,
19
+ meta: { creator: 'user-123' }
20
+ });
21
+ // Returns: { uploadURL: string, uid: string }
22
+ ```
23
+
24
+ **Frontend: Upload file**
25
+ ```typescript
26
+ async function uploadVideo(file: File, uploadURL: string) {
27
+ const formData = new FormData();
28
+ formData.append('file', file);
29
+ return fetch(uploadURL, { method: 'POST', body: formData }).then(r => r.json());
30
+ }
31
+ ```
32
+
33
+ ### Upload from URL
34
+
35
+ ```typescript
36
+ const video = await client.stream.copy.create({
37
+ account_id: env.CF_ACCOUNT_ID,
38
+ url: 'https://example.com/video.mp4',
39
+ meta: { name: 'My Video' },
40
+ requireSignedURLs: false
41
+ });
42
+ ```
43
+
44
+ ## Playback APIs
45
+
46
+ ### Embed Player (iframe)
47
+
48
+ ```html
49
+ <iframe
50
+ src="https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/iframe?autoplay=true&muted=true"
51
+ style="border: none;" height="720" width="1280"
52
+ allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;"
53
+ allowfullscreen="true"
54
+ ></iframe>
55
+ ```
56
+
57
+ ### HLS/DASH Manifest URLs
58
+
59
+ ```typescript
60
+ // HLS
61
+ const hlsUrl = `https://customer-<CODE>.cloudflarestream.com/${videoId}/manifest/video.m3u8`;
62
+
63
+ // DASH
64
+ const dashUrl = `https://customer-<CODE>.cloudflarestream.com/${videoId}/manifest/video.mpd`;
65
+ ```
66
+
67
+ ### Thumbnails
68
+
69
+ ```typescript
70
+ // At specific time (seconds)
71
+ const thumb = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.jpg?time=10s`;
72
+
73
+ // By percentage
74
+ const thumbPct = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.jpg?time=50%`;
75
+
76
+ // Animated GIF
77
+ const gif = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.gif`;
78
+ ```
79
+
80
+ ## Signed URLs
81
+
82
+ ```typescript
83
+ // Low volume (<1k/day): Use API
84
+ async function getSignedToken(accountId: string, videoId: string, apiToken: string) {
85
+ const response = await fetch(
86
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/${videoId}/token`,
87
+ {
88
+ method: 'POST',
89
+ headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
90
+ body: JSON.stringify({
91
+ exp: Math.floor(Date.now() / 1000) + 3600,
92
+ accessRules: [{ type: 'ip.geoip.country', action: 'allow', country: ['US'] }]
93
+ })
94
+ }
95
+ );
96
+ return (await response.json()).result.token;
97
+ }
98
+
99
+ // High volume: Self-sign with RS256 JWT (see "Self-Sign JWT" in patterns.md)
100
+ ```
101
+
102
+ ## Captions & Clips
103
+
104
+ ### Upload Captions
105
+
106
+ ```typescript
107
+ async function uploadCaption(
108
+ accountId: string, videoId: string, apiToken: string,
109
+ language: string, captionFile: File
110
+ ) {
111
+ const formData = new FormData();
112
+ formData.append('file', captionFile);
113
+ return fetch(
114
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/${videoId}/captions/${language}`,
115
+ {
116
+ method: 'PUT',
117
+ headers: { 'Authorization': `Bearer ${apiToken}` },
118
+ body: formData
119
+ }
120
+ ).then(r => r.json());
121
+ }
122
+ ```
123
+
124
+ ### Generate AI Captions
125
+
126
+ ```typescript
127
+ // TODO: Requires Workers AI integration - see workers-ai reference
128
+ async function generateAICaptions(accountId: string, videoId: string, apiToken: string) {
129
+ return fetch(
130
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/${videoId}/captions/generate`,
131
+ {
132
+ method: 'POST',
133
+ headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
134
+ body: JSON.stringify({ language: 'en' })
135
+ }
136
+ ).then(r => r.json());
137
+ }
138
+ ```
139
+
140
+ ### Clip Video
141
+
142
+ ```typescript
143
+ async function clipVideo(
144
+ accountId: string, videoId: string, apiToken: string,
145
+ startTime: number, endTime: number
146
+ ) {
147
+ return fetch(
148
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/clip`,
149
+ {
150
+ method: 'POST',
151
+ headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
152
+ body: JSON.stringify({
153
+ clippedFromVideoUID: videoId,
154
+ startTimeSeconds: startTime,
155
+ endTimeSeconds: endTime
156
+ })
157
+ }
158
+ ).then(r => r.json());
159
+ }
160
+ ```
161
+
162
+ ## Video Management
163
+
164
+ ```typescript
165
+ // List videos
166
+ const videos = await client.stream.videos.list({
167
+ account_id: env.CF_ACCOUNT_ID,
168
+ search: 'keyword' // optional
169
+ });
170
+
171
+ // Get video details
172
+ const video = await client.stream.videos.get(videoId, {
173
+ account_id: env.CF_ACCOUNT_ID
174
+ });
175
+
176
+ // Update video
177
+ await client.stream.videos.update(videoId, {
178
+ account_id: env.CF_ACCOUNT_ID,
179
+ meta: { title: 'New Title' },
180
+ requireSignedURLs: true
181
+ });
182
+
183
+ // Delete video
184
+ await client.stream.videos.delete(videoId, {
185
+ account_id: env.CF_ACCOUNT_ID
186
+ });
187
+ ```
188
+
189
+ ## In This Reference
190
+
191
+ - [README.md](./README.md) - Overview and quick start
192
+ - [configuration.md](./configuration.md) - Setup and config
193
+ - [api-live.md](./api-live.md) - Live streaming APIs (RTMPS/SRT/WebRTC)
194
+ - [patterns.md](./patterns.md) - Full-stack flows, best practices
195
+ - [gotchas.md](./gotchas.md) - Error codes, troubleshooting
196
+
197
+ ## See Also
198
+
199
+ - [workers](../workers/) - Deploy Stream APIs in Workers
@@ -0,0 +1,141 @@
1
+ # Stream Configuration
2
+
3
+ Setup, environment variables, and wrangler configuration.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # Official Cloudflare SDK (Node.js, Workers, Pages)
9
+ npm install cloudflare
10
+
11
+ # React component library
12
+ npm install @cloudflare/stream-react
13
+
14
+ # TUS resumable uploads (large files)
15
+ npm install tus-js-client
16
+ ```
17
+
18
+ ## Environment Variables
19
+
20
+ ```bash
21
+ # Required
22
+ CF_ACCOUNT_ID=your-account-id
23
+ CF_API_TOKEN=your-api-token
24
+
25
+ # For signed URLs (high volume)
26
+ STREAM_KEY_ID=your-key-id
27
+ STREAM_JWK=base64-encoded-jwk
28
+
29
+ # For webhooks
30
+ WEBHOOK_SECRET=your-webhook-secret
31
+
32
+ # Customer subdomain (from dashboard)
33
+ STREAM_CUSTOMER_CODE=your-customer-code
34
+ ```
35
+
36
+ ## Wrangler Configuration
37
+
38
+ ```jsonc
39
+ {
40
+ "name": "stream-worker",
41
+ "main": "src/index.ts",
42
+ "compatibility_date": "2025-01-01", // Use current date for new projects
43
+ "vars": {
44
+ "CF_ACCOUNT_ID": "your-account-id"
45
+ }
46
+ // Store secrets: wrangler secret put CF_API_TOKEN
47
+ // wrangler secret put STREAM_KEY_ID
48
+ // wrangler secret put STREAM_JWK
49
+ // wrangler secret put WEBHOOK_SECRET
50
+ }
51
+ ```
52
+
53
+ ## Signing Keys (High Volume)
54
+
55
+ Create once for self-signing tokens (thousands of daily users).
56
+
57
+ **Create key**
58
+ ```bash
59
+ curl -X POST \
60
+ "https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/keys" \
61
+ -H "Authorization: Bearer <API_TOKEN>"
62
+
63
+ # Save `id` and `jwk` (base64) from response
64
+ ```
65
+
66
+ **Store in secrets**
67
+ ```bash
68
+ wrangler secret put STREAM_KEY_ID
69
+ wrangler secret put STREAM_JWK
70
+ ```
71
+
72
+ ## Webhooks
73
+
74
+ **Setup webhook URL**
75
+ ```bash
76
+ curl -X PUT \
77
+ "https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/webhook" \
78
+ -H "Authorization: Bearer <API_TOKEN>" \
79
+ -H "Content-Type: application/json" \
80
+ -d '{"notificationUrl": "https://your-worker.workers.dev/webhook"}'
81
+
82
+ # Save the returned `secret` for signature verification
83
+ ```
84
+
85
+ **Store secret**
86
+ ```bash
87
+ wrangler secret put WEBHOOK_SECRET
88
+ ```
89
+
90
+ ## Direct Upload / Live / Watermark Config
91
+
92
+ ```typescript
93
+ // Direct upload
94
+ const uploadConfig = {
95
+ maxDurationSeconds: 3600,
96
+ expiry: new Date(Date.now() + 3600000).toISOString(),
97
+ requireSignedURLs: true,
98
+ allowedOrigins: ['https://yourdomain.com'],
99
+ meta: { creator: 'user-123' }
100
+ };
101
+
102
+ // Live input
103
+ const liveConfig = {
104
+ recording: { mode: 'automatic', timeoutSeconds: 30 },
105
+ deleteRecordingAfterDays: 30
106
+ };
107
+
108
+ // Watermark
109
+ const watermark = {
110
+ name: 'Logo', opacity: 0.7, padding: 20,
111
+ position: 'lowerRight', scale: 0.15
112
+ };
113
+ ```
114
+
115
+ ## Access Rules & Player Config
116
+
117
+ ```typescript
118
+ // Access rules: allow US/CA, block CN/RU, or IP allowlist
119
+ const geoRestrict = [
120
+ { type: 'ip.geoip.country', action: 'allow', country: ['US', 'CA'] },
121
+ { type: 'any', action: 'block' }
122
+ ];
123
+
124
+ // Player params for iframe
125
+ const playerParams = new URLSearchParams({
126
+ autoplay: 'true', muted: 'true', preload: 'auto', defaultTextTrack: 'en'
127
+ });
128
+ ```
129
+
130
+ ## In This Reference
131
+
132
+ - [README.md](./README.md) - Overview and quick start
133
+ - [api.md](./api.md) - On-demand video APIs
134
+ - [api-live.md](./api-live.md) - Live streaming APIs
135
+ - [patterns.md](./patterns.md) - Full-stack flows, best practices
136
+ - [gotchas.md](./gotchas.md) - Error codes, troubleshooting
137
+
138
+ ## See Also
139
+
140
+ - [wrangler](../wrangler/) - Wrangler CLI and configuration
141
+ - [workers](../workers/) - Deploy Stream APIs in Workers
@@ -0,0 +1,130 @@
1
+ # Stream Gotchas
2
+
3
+ ## Common Errors
4
+
5
+ ### "ERR_NON_VIDEO"
6
+
7
+ **Cause:** Uploaded file is not a valid video format
8
+ **Solution:** Ensure file is in supported format (MP4, MKV, MOV, AVI, FLV, MPEG-2 TS/PS, MXF, LXF, GXF, 3GP, WebM, MPG, QuickTime)
9
+
10
+ ### "ERR_DURATION_EXCEED_CONSTRAINT"
11
+
12
+ **Cause:** Video duration exceeds `maxDurationSeconds` constraint
13
+ **Solution:** Increase `maxDurationSeconds` in direct upload config or trim video before upload
14
+
15
+ ### "ERR_FETCH_ORIGIN_ERROR"
16
+
17
+ **Cause:** Failed to download video from URL (upload from URL)
18
+ **Solution:** Ensure URL is publicly accessible, uses HTTPS, and video file is available
19
+
20
+ ### "ERR_MALFORMED_VIDEO"
21
+
22
+ **Cause:** Video file is corrupted or improperly encoded
23
+ **Solution:** Re-encode video using FFmpeg or check source file integrity
24
+
25
+ ### "ERR_DURATION_TOO_SHORT"
26
+
27
+ **Cause:** Video must be at least 0.1 seconds long
28
+ **Solution:** Ensure video has valid duration (not a single frame)
29
+
30
+ ## Troubleshooting
31
+
32
+ ### Video stuck in "inprogress" state
33
+ - **Cause**: Processing large/complex video
34
+ - **Solution**: Wait up to 5 minutes for processing; use webhooks instead of polling
35
+
36
+ ### Signed URL returns 403
37
+ - **Cause**: Token expired or invalid signature
38
+ - **Solution**: Check expiration timestamp, verify JWK is correct, ensure clock sync
39
+
40
+ ### Live stream not connecting
41
+ - **Cause**: Invalid RTMPS URL or stream key
42
+ - **Solution**: Use exact URL/key from API, ensure firewall allows outbound 443
43
+
44
+ ### Webhook signature verification fails
45
+ - **Cause**: Incorrect secret or timestamp window
46
+ - **Solution**: Use exact secret from webhook setup, allow 5-minute timestamp drift
47
+
48
+ ### Video uploads but isn't visible
49
+ - **Cause**: `requireSignedURLs` enabled without providing token
50
+ - **Solution**: Generate signed token or set `requireSignedURLs: false` for public videos
51
+
52
+ ### Player shows infinite loading
53
+ - **Cause**: CORS issue with allowedOrigins
54
+ - **Solution**: Add your domain to `allowedOrigins` array
55
+
56
+ ## Limits
57
+
58
+ | Resource | Limit |
59
+ |----------|-------|
60
+ | Max file size | 30 GB |
61
+ | Max frame rate | 60 fps (recommended) |
62
+ | Max duration per direct upload | Configurable via `maxDurationSeconds` |
63
+ | Token generation (API endpoint) | 1,000/day recommended (use signing keys for higher) |
64
+ | Live input outputs (simulcast) | 5 per live input |
65
+ | Webhook retry attempts | 5 (exponential backoff) |
66
+ | Webhook timeout | 30 seconds |
67
+ | Caption file size | 5 MB |
68
+ | Watermark image size | 2 MB |
69
+ | Metadata keys per video | Unlimited |
70
+ | Search results per page | Max 1,000 |
71
+
72
+ ## Performance Issues
73
+
74
+ ### Upload is slow
75
+ - **Cause**: Large file size or network constraints
76
+ - **Solution**: Use TUS resumable upload, compress video before upload, check bandwidth
77
+
78
+ ### Playback buffering
79
+ - **Cause**: Network congestion or low bandwidth
80
+ - **Solution**: Use ABR (adaptive bitrate) with HLS/DASH, reduce max bitrate
81
+
82
+ ### High processing time
83
+ - **Cause**: Complex video codec, high resolution
84
+ - **Solution**: Pre-encode with H.264 (most efficient), reduce resolution
85
+
86
+ ## Type Safety
87
+
88
+ ```typescript
89
+ // Error response type
90
+ interface StreamError {
91
+ success: false;
92
+ errors: Array<{
93
+ code: number;
94
+ message: string;
95
+ }>;
96
+ }
97
+
98
+ // Handle errors
99
+ async function uploadWithErrorHandling(url: string, file: File) {
100
+ const formData = new FormData();
101
+ formData.append('file', file);
102
+ const response = await fetch(url, { method: 'POST', body: formData });
103
+ const result = await response.json();
104
+
105
+ if (!result.success) {
106
+ throw new Error(result.errors[0]?.message || 'Upload failed');
107
+ }
108
+ return result;
109
+ }
110
+ ```
111
+
112
+ ## Security Gotchas
113
+
114
+ 1. **Never expose API token in frontend** - Use direct creator uploads
115
+ 2. **Always verify webhook signatures** - Prevent spoofed notifications
116
+ 3. **Set appropriate token expiration** - Short-lived for security
117
+ 4. **Use requireSignedURLs for private content** - Prevent unauthorized access
118
+ 5. **Whitelist allowedOrigins** - Prevent hotlinking/embedding on unauthorized sites
119
+
120
+ ## In This Reference
121
+
122
+ - [README.md](./README.md) - Overview and quick start
123
+ - [configuration.md](./configuration.md) - Setup and config
124
+ - [api.md](./api.md) - On-demand video APIs
125
+ - [api-live.md](./api-live.md) - Live streaming APIs
126
+ - [patterns.md](./patterns.md) - Full-stack flows, best practices
127
+
128
+ ## See Also
129
+
130
+ - [workers](../workers/) - Deploy Stream APIs securely