memory-journal-mcp 7.7.0 → 8.0.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 (531) hide show
  1. package/README.md +126 -56
  2. package/dist/chunk-6OHRCNYW.js +3231 -0
  3. package/dist/chunk-JFMITANR.js +5168 -0
  4. package/dist/{chunk-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
  5. package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
  6. package/dist/cli.js +21 -3
  7. package/dist/index.d.ts +16 -13
  8. package/dist/index.js +4 -2
  9. package/dist/resources-IJVKDFGS.js +2 -0
  10. package/dist/tools-44DGXE3V.js +2 -0
  11. package/dist/worker-script.js +201 -20
  12. package/package.json +7 -4
  13. package/skills/README.md +62 -25
  14. package/skills/adversarial-performance/SKILL.md +139 -0
  15. package/skills/adversarial-performance/references/audit-categories.md +462 -0
  16. package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
  17. package/skills/adversarial-performance/references/copilot-usage.md +16 -0
  18. package/skills/adversarial-performance/references/feedback-loop.md +177 -0
  19. package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
  20. package/skills/adversarial-planner/SKILL.md +23 -54
  21. package/skills/adversarial-planner/references/copilot-integration.md +25 -40
  22. package/skills/adversarial-planner/references/copilot-usage.md +16 -0
  23. package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
  24. package/skills/adversarial-security/SKILL.md +149 -0
  25. package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
  26. package/skills/adversarial-security/references/audit-categories.md +723 -0
  27. package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
  28. package/skills/adversarial-security/references/copilot-usage.md +16 -0
  29. package/skills/adversarial-security/references/feedback-loop.md +206 -0
  30. package/skills/adversarial-security/references/journal-opt-out.md +7 -0
  31. package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
  32. package/skills/adversarial-skill-audit/SKILL.md +118 -0
  33. package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
  34. package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
  35. package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
  36. package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
  37. package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
  38. package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
  39. package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
  40. package/skills/adversarial-workflow-audit/SKILL.md +82 -0
  41. package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
  42. package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
  43. package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
  44. package/skills/agents-sdk/SKILL.md +220 -0
  45. package/skills/agents-sdk/references/callable.md +92 -0
  46. package/skills/agents-sdk/references/codemode.md +209 -0
  47. package/skills/agents-sdk/references/email.md +144 -0
  48. package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
  49. package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
  50. package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
  51. package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
  52. package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
  53. package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
  54. package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
  55. package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
  56. package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
  57. package/skills/agents-sdk/references/mcp.md +157 -0
  58. package/skills/agents-sdk/references/state-scheduling.md +164 -0
  59. package/skills/agents-sdk/references/streaming-chat.md +168 -0
  60. package/skills/agents-sdk/references/workflows.md +136 -0
  61. package/skills/auth-identity/SKILL.md +48 -0
  62. package/skills/autonomous-dev/SKILL.md +46 -23
  63. package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
  64. package/skills/aws/SKILL.md +39 -0
  65. package/skills/azure/SKILL.md +38 -0
  66. package/skills/bin/sync.js +7 -1
  67. package/skills/biome/SKILL.md +59 -0
  68. package/skills/bun/SKILL.md +8 -2
  69. package/skills/cloudflare/SKILL.md +37 -0
  70. package/skills/cloudflare/references/agents-sdk/README.md +95 -0
  71. package/skills/cloudflare/references/agents-sdk/api.md +195 -0
  72. package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
  73. package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
  74. package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
  75. package/skills/cloudflare/references/ai-gateway/README.md +176 -0
  76. package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
  77. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
  78. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  79. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
  80. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
  81. package/skills/cloudflare/references/ai-search/README.md +145 -0
  82. package/skills/cloudflare/references/ai-search/api.md +87 -0
  83. package/skills/cloudflare/references/ai-search/configuration.md +91 -0
  84. package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
  85. package/skills/cloudflare/references/ai-search/patterns.md +87 -0
  86. package/skills/cloudflare/references/analytics-engine/README.md +96 -0
  87. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  88. package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
  89. package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
  90. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  91. package/skills/cloudflare/references/api/README.md +66 -0
  92. package/skills/cloudflare/references/api/api.md +205 -0
  93. package/skills/cloudflare/references/api/configuration.md +158 -0
  94. package/skills/cloudflare/references/api/gotchas.md +231 -0
  95. package/skills/cloudflare/references/api/patterns.md +208 -0
  96. package/skills/cloudflare/references/api-shield/README.md +44 -0
  97. package/skills/cloudflare/references/api-shield/api.md +153 -0
  98. package/skills/cloudflare/references/api-shield/configuration.md +210 -0
  99. package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
  100. package/skills/cloudflare/references/api-shield/patterns.md +185 -0
  101. package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
  102. package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
  103. package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
  104. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
  105. package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
  106. package/skills/cloudflare/references/bindings/README.md +127 -0
  107. package/skills/cloudflare/references/bindings/api.md +214 -0
  108. package/skills/cloudflare/references/bindings/configuration.md +200 -0
  109. package/skills/cloudflare/references/bindings/gotchas.md +210 -0
  110. package/skills/cloudflare/references/bindings/patterns.md +205 -0
  111. package/skills/cloudflare/references/bot-management/README.md +95 -0
  112. package/skills/cloudflare/references/bot-management/api.md +175 -0
  113. package/skills/cloudflare/references/bot-management/configuration.md +175 -0
  114. package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
  115. package/skills/cloudflare/references/bot-management/patterns.md +181 -0
  116. package/skills/cloudflare/references/browser-rendering/README.md +84 -0
  117. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  118. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  119. package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
  120. package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
  121. package/skills/cloudflare/references/c3/README.md +111 -0
  122. package/skills/cloudflare/references/c3/api.md +71 -0
  123. package/skills/cloudflare/references/c3/configuration.md +85 -0
  124. package/skills/cloudflare/references/c3/gotchas.md +97 -0
  125. package/skills/cloudflare/references/c3/patterns.md +84 -0
  126. package/skills/cloudflare/references/cache-reserve/README.md +150 -0
  127. package/skills/cloudflare/references/cache-reserve/api.md +184 -0
  128. package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
  129. package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
  130. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  131. package/skills/cloudflare/references/containers/README.md +87 -0
  132. package/skills/cloudflare/references/containers/api.md +197 -0
  133. package/skills/cloudflare/references/containers/configuration.md +191 -0
  134. package/skills/cloudflare/references/containers/gotchas.md +182 -0
  135. package/skills/cloudflare/references/containers/patterns.md +204 -0
  136. package/skills/cloudflare/references/cron-triggers/README.md +101 -0
  137. package/skills/cloudflare/references/cron-triggers/api.md +224 -0
  138. package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
  139. package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
  140. package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
  141. package/skills/cloudflare/references/d1/README.md +137 -0
  142. package/skills/cloudflare/references/d1/api.md +213 -0
  143. package/skills/cloudflare/references/d1/configuration.md +198 -0
  144. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  145. package/skills/cloudflare/references/d1/patterns.md +240 -0
  146. package/skills/cloudflare/references/ddos/README.md +42 -0
  147. package/skills/cloudflare/references/ddos/api.md +158 -0
  148. package/skills/cloudflare/references/ddos/configuration.md +94 -0
  149. package/skills/cloudflare/references/ddos/gotchas.md +114 -0
  150. package/skills/cloudflare/references/ddos/patterns.md +220 -0
  151. package/skills/cloudflare/references/decision-trees.md +95 -0
  152. package/skills/cloudflare/references/do-storage/README.md +79 -0
  153. package/skills/cloudflare/references/do-storage/api.md +107 -0
  154. package/skills/cloudflare/references/do-storage/configuration.md +114 -0
  155. package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
  156. package/skills/cloudflare/references/do-storage/patterns.md +210 -0
  157. package/skills/cloudflare/references/do-storage/testing.md +186 -0
  158. package/skills/cloudflare/references/durable-objects/README.md +194 -0
  159. package/skills/cloudflare/references/durable-objects/api.md +205 -0
  160. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  161. package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
  162. package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
  163. package/skills/cloudflare/references/email-routing/README.md +89 -0
  164. package/skills/cloudflare/references/email-routing/api.md +192 -0
  165. package/skills/cloudflare/references/email-routing/configuration.md +187 -0
  166. package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
  167. package/skills/cloudflare/references/email-routing/patterns.md +241 -0
  168. package/skills/cloudflare/references/email-workers/README.md +153 -0
  169. package/skills/cloudflare/references/email-workers/api.md +227 -0
  170. package/skills/cloudflare/references/email-workers/configuration.md +115 -0
  171. package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
  172. package/skills/cloudflare/references/email-workers/patterns.md +108 -0
  173. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  174. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  175. package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
  176. package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
  177. package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
  178. package/skills/cloudflare/references/hyperdrive/README.md +84 -0
  179. package/skills/cloudflare/references/hyperdrive/api.md +149 -0
  180. package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
  181. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  182. package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
  183. package/skills/cloudflare/references/images/README.md +65 -0
  184. package/skills/cloudflare/references/images/api.md +101 -0
  185. package/skills/cloudflare/references/images/configuration.md +206 -0
  186. package/skills/cloudflare/references/images/gotchas.md +106 -0
  187. package/skills/cloudflare/references/images/patterns.md +126 -0
  188. package/skills/cloudflare/references/kv/README.md +90 -0
  189. package/skills/cloudflare/references/kv/api.md +163 -0
  190. package/skills/cloudflare/references/kv/configuration.md +148 -0
  191. package/skills/cloudflare/references/kv/gotchas.md +133 -0
  192. package/skills/cloudflare/references/kv/patterns.md +195 -0
  193. package/skills/cloudflare/references/miniflare/README.md +113 -0
  194. package/skills/cloudflare/references/miniflare/api.md +204 -0
  195. package/skills/cloudflare/references/miniflare/configuration.md +174 -0
  196. package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
  197. package/skills/cloudflare/references/miniflare/patterns.md +187 -0
  198. package/skills/cloudflare/references/network-interconnect/README.md +104 -0
  199. package/skills/cloudflare/references/network-interconnect/api.md +220 -0
  200. package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
  201. package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
  202. package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
  203. package/skills/cloudflare/references/observability/README.md +93 -0
  204. package/skills/cloudflare/references/observability/api.md +168 -0
  205. package/skills/cloudflare/references/observability/configuration.md +178 -0
  206. package/skills/cloudflare/references/observability/gotchas.md +125 -0
  207. package/skills/cloudflare/references/observability/patterns.md +105 -0
  208. package/skills/cloudflare/references/pages/README.md +92 -0
  209. package/skills/cloudflare/references/pages/api.md +205 -0
  210. package/skills/cloudflare/references/pages/configuration.md +216 -0
  211. package/skills/cloudflare/references/pages/gotchas.md +218 -0
  212. package/skills/cloudflare/references/pages/patterns.md +215 -0
  213. package/skills/cloudflare/references/pages-functions/README.md +104 -0
  214. package/skills/cloudflare/references/pages-functions/api.md +159 -0
  215. package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
  216. package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
  217. package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
  218. package/skills/cloudflare/references/pipelines/README.md +109 -0
  219. package/skills/cloudflare/references/pipelines/api.md +214 -0
  220. package/skills/cloudflare/references/pipelines/configuration.md +98 -0
  221. package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
  222. package/skills/cloudflare/references/pipelines/patterns.md +87 -0
  223. package/skills/cloudflare/references/product-index.md +112 -0
  224. package/skills/cloudflare/references/pulumi/README.md +113 -0
  225. package/skills/cloudflare/references/pulumi/api.md +230 -0
  226. package/skills/cloudflare/references/pulumi/configuration.md +213 -0
  227. package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
  228. package/skills/cloudflare/references/pulumi/patterns.md +260 -0
  229. package/skills/cloudflare/references/queues/README.md +99 -0
  230. package/skills/cloudflare/references/queues/api.md +211 -0
  231. package/skills/cloudflare/references/queues/configuration.md +151 -0
  232. package/skills/cloudflare/references/queues/gotchas.md +210 -0
  233. package/skills/cloudflare/references/queues/patterns.md +220 -0
  234. package/skills/cloudflare/references/r2/README.md +97 -0
  235. package/skills/cloudflare/references/r2/api.md +235 -0
  236. package/skills/cloudflare/references/r2/configuration.md +176 -0
  237. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  238. package/skills/cloudflare/references/r2/patterns.md +203 -0
  239. package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
  240. package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
  241. package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
  242. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
  243. package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
  244. package/skills/cloudflare/references/r2-sql/README.md +138 -0
  245. package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
  246. package/skills/cloudflare/references/r2-sql/api.md +159 -0
  247. package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
  248. package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
  249. package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
  250. package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
  251. package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
  252. package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
  253. package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
  254. package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
  255. package/skills/cloudflare/references/realtimekit/README.md +118 -0
  256. package/skills/cloudflare/references/realtimekit/api.md +234 -0
  257. package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
  258. package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
  259. package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
  260. package/skills/cloudflare/references/sandbox/README.md +104 -0
  261. package/skills/cloudflare/references/sandbox/api.md +200 -0
  262. package/skills/cloudflare/references/sandbox/configuration.md +154 -0
  263. package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
  264. package/skills/cloudflare/references/sandbox/patterns.md +195 -0
  265. package/skills/cloudflare/references/secrets-store/README.md +77 -0
  266. package/skills/cloudflare/references/secrets-store/api.md +199 -0
  267. package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
  268. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  269. package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
  270. package/skills/cloudflare/references/smart-placement/README.md +143 -0
  271. package/skills/cloudflare/references/smart-placement/api.md +192 -0
  272. package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
  273. package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
  274. package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
  275. package/skills/cloudflare/references/snippets/README.md +74 -0
  276. package/skills/cloudflare/references/snippets/api.md +214 -0
  277. package/skills/cloudflare/references/snippets/configuration.md +239 -0
  278. package/skills/cloudflare/references/snippets/gotchas.md +104 -0
  279. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  280. package/skills/cloudflare/references/spectrum/README.md +52 -0
  281. package/skills/cloudflare/references/spectrum/api.md +184 -0
  282. package/skills/cloudflare/references/spectrum/configuration.md +203 -0
  283. package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
  284. package/skills/cloudflare/references/spectrum/patterns.md +206 -0
  285. package/skills/cloudflare/references/static-assets/README.md +65 -0
  286. package/skills/cloudflare/references/static-assets/api.md +201 -0
  287. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  288. package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
  289. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  290. package/skills/cloudflare/references/stream/README.md +123 -0
  291. package/skills/cloudflare/references/stream/api-live.md +202 -0
  292. package/skills/cloudflare/references/stream/api.md +206 -0
  293. package/skills/cloudflare/references/stream/configuration.md +151 -0
  294. package/skills/cloudflare/references/stream/gotchas.md +139 -0
  295. package/skills/cloudflare/references/stream/patterns.md +217 -0
  296. package/skills/cloudflare/references/tail-workers/README.md +92 -0
  297. package/skills/cloudflare/references/tail-workers/api.md +203 -0
  298. package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
  299. package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
  300. package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
  301. package/skills/cloudflare/references/terraform/README.md +100 -0
  302. package/skills/cloudflare/references/terraform/api.md +178 -0
  303. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  304. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  305. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  306. package/skills/cloudflare/references/tunnel/README.md +137 -0
  307. package/skills/cloudflare/references/tunnel/api.md +205 -0
  308. package/skills/cloudflare/references/tunnel/configuration.md +163 -0
  309. package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
  310. package/skills/cloudflare/references/tunnel/networking.md +174 -0
  311. package/skills/cloudflare/references/tunnel/patterns.md +199 -0
  312. package/skills/cloudflare/references/turn/README.md +86 -0
  313. package/skills/cloudflare/references/turn/api.md +236 -0
  314. package/skills/cloudflare/references/turn/configuration.md +181 -0
  315. package/skills/cloudflare/references/turn/gotchas.md +236 -0
  316. package/skills/cloudflare/references/turn/patterns.md +228 -0
  317. package/skills/cloudflare/references/turnstile/README.md +102 -0
  318. package/skills/cloudflare/references/turnstile/api.md +253 -0
  319. package/skills/cloudflare/references/turnstile/configuration.md +242 -0
  320. package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
  321. package/skills/cloudflare/references/turnstile/patterns.md +195 -0
  322. package/skills/cloudflare/references/vectorize/README.md +133 -0
  323. package/skills/cloudflare/references/vectorize/api.md +89 -0
  324. package/skills/cloudflare/references/vectorize/configuration.md +91 -0
  325. package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
  326. package/skills/cloudflare/references/vectorize/patterns.md +92 -0
  327. package/skills/cloudflare/references/waf/README.md +125 -0
  328. package/skills/cloudflare/references/waf/api.md +203 -0
  329. package/skills/cloudflare/references/waf/configuration.md +215 -0
  330. package/skills/cloudflare/references/waf/gotchas.md +208 -0
  331. package/skills/cloudflare/references/waf/patterns.md +236 -0
  332. package/skills/cloudflare/references/web-analytics/README.md +149 -0
  333. package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
  334. package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
  335. package/skills/cloudflare/references/web-analytics/integration.md +63 -0
  336. package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
  337. package/skills/cloudflare/references/workerd/README.md +85 -0
  338. package/skills/cloudflare/references/workerd/api.md +219 -0
  339. package/skills/cloudflare/references/workerd/configuration.md +200 -0
  340. package/skills/cloudflare/references/workerd/gotchas.md +151 -0
  341. package/skills/cloudflare/references/workerd/patterns.md +205 -0
  342. package/skills/cloudflare/references/workers/README.md +110 -0
  343. package/skills/cloudflare/references/workers/api.md +197 -0
  344. package/skills/cloudflare/references/workers/configuration.md +184 -0
  345. package/skills/cloudflare/references/workers/frameworks.md +200 -0
  346. package/skills/cloudflare/references/workers/gotchas.md +145 -0
  347. package/skills/cloudflare/references/workers/patterns.md +220 -0
  348. package/skills/cloudflare/references/workers-ai/README.md +206 -0
  349. package/skills/cloudflare/references/workers-ai/api.md +115 -0
  350. package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
  351. package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
  352. package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
  353. package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
  354. package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
  355. package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
  356. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  357. package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
  358. package/skills/cloudflare/references/workers-playground/README.md +131 -0
  359. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  360. package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
  361. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  362. package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
  363. package/skills/cloudflare/references/workers-vpc/README.md +130 -0
  364. package/skills/cloudflare/references/workers-vpc/api.md +196 -0
  365. package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
  366. package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
  367. package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
  368. package/skills/cloudflare/references/workflows/README.md +72 -0
  369. package/skills/cloudflare/references/workflows/api.md +237 -0
  370. package/skills/cloudflare/references/workflows/configuration.md +158 -0
  371. package/skills/cloudflare/references/workflows/gotchas.md +97 -0
  372. package/skills/cloudflare/references/workflows/patterns.md +245 -0
  373. package/skills/cloudflare/references/wrangler/README.md +143 -0
  374. package/skills/cloudflare/references/wrangler/api.md +188 -0
  375. package/skills/cloudflare/references/wrangler/configuration.md +198 -0
  376. package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
  377. package/skills/cloudflare/references/wrangler/patterns.md +211 -0
  378. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
  379. package/skills/cloudflare/references/zaraz/README.md +114 -0
  380. package/skills/cloudflare/references/zaraz/api.md +118 -0
  381. package/skills/cloudflare/references/zaraz/configuration.md +94 -0
  382. package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
  383. package/skills/cloudflare/references/zaraz/patterns.md +77 -0
  384. package/skills/docker/SKILL.md +7 -101
  385. package/skills/docker/references/advanced-examples.md +71 -0
  386. package/skills/docker/references/templates.md +34 -0
  387. package/skills/docs-marketer/SKILL.md +178 -0
  388. package/skills/docs-marketer/references/audit-categories.md +328 -0
  389. package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
  390. package/skills/docs-marketer/references/copilot-usage.md +16 -0
  391. package/skills/docs-marketer/references/feedback-loop.md +155 -0
  392. package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
  393. package/skills/drizzle-orm/SKILL.md +82 -0
  394. package/skills/durable-objects/SKILL.md +167 -0
  395. package/skills/durable-objects/references/advanced_features.md +29 -0
  396. package/skills/durable-objects/references/rules.md +300 -0
  397. package/skills/durable-objects/references/testing.md +261 -0
  398. package/skills/durable-objects/references/workers.md +336 -0
  399. package/skills/gcp/SKILL.md +37 -0
  400. package/skills/github-actions/SKILL.md +5 -58
  401. package/skills/github-actions/references/templates.md +65 -0
  402. package/skills/github-commander/SKILL.md +13 -21
  403. package/skills/github-commander/workflows/copilot-audit.md +12 -12
  404. package/skills/github-copilot-cli/SKILL.md +21 -26
  405. package/skills/github-repo-setup/SKILL.md +136 -0
  406. package/skills/github-repo-setup/references/community-standards.md +136 -0
  407. package/skills/github-repo-setup/references/github-automation.md +490 -0
  408. package/skills/github-repo-setup/references/inline-templates.md +205 -0
  409. package/skills/github-repo-setup/references/project-config.md +320 -0
  410. package/skills/gitlab/SKILL.md +7 -2
  411. package/skills/gitlab/package-lock.json +389 -389
  412. package/skills/golang/SKILL.md +8 -1
  413. package/skills/graphql/SKILL.md +30 -0
  414. package/skills/hono/SKILL.md +82 -0
  415. package/skills/journal-optimizer/SKILL.md +206 -0
  416. package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
  417. package/skills/llm-app-engineering/SKILL.md +18 -0
  418. package/skills/monorepo/SKILL.md +56 -0
  419. package/skills/multi-agent-orchestration/SKILL.md +14 -0
  420. package/skills/mysql/SKILL.md +6 -2
  421. package/skills/next-best-practices/SKILL.md +86 -0
  422. package/skills/next-best-practices/references/cache-components-examples.md +234 -0
  423. package/skills/next-best-practices/references/cache-components.md +210 -0
  424. package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
  425. package/skills/next-best-practices/references/upgrade.md +43 -0
  426. package/skills/next-cache-components/SKILL.md +441 -0
  427. package/skills/next-upgrade/SKILL.md +43 -0
  428. package/skills/next-upgrade/references/decision-tree.md +33 -0
  429. package/skills/nodejs/SKILL.md +46 -0
  430. package/skills/opentelemetry/SKILL.md +62 -0
  431. package/skills/package.json +39 -4
  432. package/skills/playwright-standard/SKILL.md +6 -11
  433. package/skills/playwright-standard/references/locators.md +7 -0
  434. package/skills/postgres/SKILL.md +6 -1
  435. package/skills/python/SKILL.md +8 -70
  436. package/skills/python/references/advanced-patterns.md +37 -0
  437. package/skills/python/references/config-templates.md +48 -0
  438. package/skills/rag-pipelines/SKILL.md +14 -0
  439. package/skills/redis/SKILL.md +31 -0
  440. package/skills/render/SKILL.md +35 -0
  441. package/skills/rust/SKILL.md +15 -25
  442. package/skills/rust/references/borrow-checker.md +13 -0
  443. package/skills/rust/references/ecosystem.md +11 -0
  444. package/skills/sandbox-sdk/SKILL.md +186 -0
  445. package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
  446. package/skills/sandbox-sdk/references/examples.md +52 -0
  447. package/skills/shadcn-ui/SKILL.md +22 -57
  448. package/skills/skill-builder/SKILL.md +23 -424
  449. package/skills/skill-builder/references/tutorial.md +457 -0
  450. package/skills/sqlite/SKILL.md +16 -5
  451. package/skills/table.md +59 -0
  452. package/skills/tailwind-css/SKILL.md +11 -60
  453. package/skills/tailwind-css/references/component-patterns.md +52 -0
  454. package/skills/trpc/SKILL.md +56 -0
  455. package/skills/typescript/SKILL.md +30 -433
  456. package/skills/typescript/references/tutorial.md +453 -0
  457. package/skills/vercel-ai-sdk/SKILL.md +48 -0
  458. package/skills/vitest-standard/SKILL.md +5 -11
  459. package/skills/vitest-standard/references/assertions.md +11 -0
  460. package/skills/web-perf/SKILL.md +207 -0
  461. package/skills/workers-best-practices/SKILL.md +120 -0
  462. package/skills/workers-best-practices/references/anti-patterns.md +18 -0
  463. package/skills/workers-best-practices/references/review.md +174 -0
  464. package/skills/workers-best-practices/references/rules.md +485 -0
  465. package/skills/wrangler/SKILL.md +43 -0
  466. package/skills/wrangler/references/cli-commands.md +861 -0
  467. package/skills/zod/SKILL.md +48 -0
  468. package/dist/tools-P4VGG4FH.js +0 -1
  469. package/skills/react-best-practices/AGENTS.md +0 -2883
  470. package/skills/react-best-practices/SKILL.md +0 -138
  471. /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
  472. /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
  473. /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
  474. /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
  475. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
  476. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
  477. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
  478. /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
  479. /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
  480. /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
  481. /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
  482. /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
  483. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
  484. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
  485. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
  486. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
  487. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
  488. /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
  489. /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
  490. /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
  491. /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
  492. /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
  493. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
  494. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
  495. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
  496. /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
  497. /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
  498. /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
  499. /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
  500. /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
  501. /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
  502. /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
  503. /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
  504. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
  505. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
  506. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
  507. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
  508. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
  509. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
  510. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
  511. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
  512. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
  513. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
  514. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
  515. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
  516. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
  517. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
  518. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
  519. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
  520. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
  521. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
  522. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
  523. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
  524. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
  525. /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
  526. /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
  527. /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
  528. /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
  529. /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
  530. /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
  531. /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
@@ -0,0 +1,206 @@
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
+
11
+ ```typescript
12
+ import Cloudflare from 'cloudflare'
13
+
14
+ const client = new Cloudflare({ apiToken: env.CF_API_TOKEN })
15
+
16
+ const uploadData = await client.stream.directUpload.create({
17
+ account_id: env.CF_ACCOUNT_ID,
18
+ maxDurationSeconds: 3600,
19
+ requireSignedURLs: true,
20
+ meta: { creator: 'user-123' },
21
+ })
22
+ // Returns: { uploadURL: string, uid: string }
23
+ ```
24
+
25
+ **Frontend: Upload file**
26
+
27
+ ```typescript
28
+ async function uploadVideo(file: File, uploadURL: string) {
29
+ const formData = new FormData()
30
+ formData.append('file', file)
31
+ return fetch(uploadURL, { method: 'POST', body: formData }).then((r) => r.json())
32
+ }
33
+ ```
34
+
35
+ ### Upload from URL
36
+
37
+ ```typescript
38
+ const video = await client.stream.copy.create({
39
+ account_id: env.CF_ACCOUNT_ID,
40
+ url: 'https://example.com/video.mp4',
41
+ meta: { name: 'My Video' },
42
+ requireSignedURLs: false,
43
+ })
44
+ ```
45
+
46
+ ## Playback APIs
47
+
48
+ ### Embed Player (iframe)
49
+
50
+ ```html
51
+ <iframe
52
+ src="https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/iframe?autoplay=true&muted=true"
53
+ style="border: none;"
54
+ height="720"
55
+ width="1280"
56
+ allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;"
57
+ allowfullscreen="true"
58
+ ></iframe>
59
+ ```
60
+
61
+ ### HLS/DASH Manifest URLs
62
+
63
+ ```typescript
64
+ // HLS
65
+ const hlsUrl = `https://customer-<CODE>.cloudflarestream.com/${videoId}/manifest/video.m3u8`
66
+
67
+ // DASH
68
+ const dashUrl = `https://customer-<CODE>.cloudflarestream.com/${videoId}/manifest/video.mpd`
69
+ ```
70
+
71
+ ### Thumbnails
72
+
73
+ ```typescript
74
+ // At specific time (seconds)
75
+ const thumb = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.jpg?time=10s`
76
+
77
+ // By percentage
78
+ const thumbPct = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.jpg?time=50%`
79
+
80
+ // Animated GIF
81
+ const gif = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.gif`
82
+ ```
83
+
84
+ ## Signed URLs
85
+
86
+ ```typescript
87
+ // Low volume (<1k/day): Use API
88
+ async function getSignedToken(accountId: string, videoId: string, apiToken: string) {
89
+ const response = await fetch(
90
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/${videoId}/token`,
91
+ {
92
+ method: 'POST',
93
+ headers: { Authorization: `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
94
+ body: JSON.stringify({
95
+ exp: Math.floor(Date.now() / 1000) + 3600,
96
+ accessRules: [{ type: 'ip.geoip.country', action: 'allow', country: ['US'] }],
97
+ }),
98
+ }
99
+ )
100
+ return (await response.json()).result.token
101
+ }
102
+
103
+ // High volume: Self-sign with RS256 JWT (see "Self-Sign JWT" in patterns.md)
104
+ ```
105
+
106
+ ## Captions & Clips
107
+
108
+ ### Upload Captions
109
+
110
+ ```typescript
111
+ async function uploadCaption(
112
+ accountId: string,
113
+ videoId: string,
114
+ apiToken: string,
115
+ language: string,
116
+ captionFile: File
117
+ ) {
118
+ const formData = new FormData()
119
+ formData.append('file', captionFile)
120
+ return fetch(
121
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/${videoId}/captions/${language}`,
122
+ {
123
+ method: 'PUT',
124
+ headers: { Authorization: `Bearer ${apiToken}` },
125
+ body: formData,
126
+ }
127
+ ).then((r) => r.json())
128
+ }
129
+ ```
130
+
131
+ ### Generate AI Captions
132
+
133
+ ```typescript
134
+ // TODO: Requires Workers AI integration - see workers-ai reference
135
+ async function generateAICaptions(accountId: string, videoId: string, apiToken: string) {
136
+ return fetch(
137
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/${videoId}/captions/generate`,
138
+ {
139
+ method: 'POST',
140
+ headers: { Authorization: `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
141
+ body: JSON.stringify({ language: 'en' }),
142
+ }
143
+ ).then((r) => r.json())
144
+ }
145
+ ```
146
+
147
+ ### Clip Video
148
+
149
+ ```typescript
150
+ async function clipVideo(
151
+ accountId: string,
152
+ videoId: string,
153
+ apiToken: string,
154
+ startTime: number,
155
+ endTime: number
156
+ ) {
157
+ return fetch(`https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/clip`, {
158
+ method: 'POST',
159
+ headers: { Authorization: `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
160
+ body: JSON.stringify({
161
+ clippedFromVideoUID: videoId,
162
+ startTimeSeconds: startTime,
163
+ endTimeSeconds: endTime,
164
+ }),
165
+ }).then((r) => r.json())
166
+ }
167
+ ```
168
+
169
+ ## Video Management
170
+
171
+ ```typescript
172
+ // List videos
173
+ const videos = await client.stream.videos.list({
174
+ account_id: env.CF_ACCOUNT_ID,
175
+ search: 'keyword', // optional
176
+ })
177
+
178
+ // Get video details
179
+ const video = await client.stream.videos.get(videoId, {
180
+ account_id: env.CF_ACCOUNT_ID,
181
+ })
182
+
183
+ // Update video
184
+ await client.stream.videos.update(videoId, {
185
+ account_id: env.CF_ACCOUNT_ID,
186
+ meta: { title: 'New Title' },
187
+ requireSignedURLs: true,
188
+ })
189
+
190
+ // Delete video
191
+ await client.stream.videos.delete(videoId, {
192
+ account_id: env.CF_ACCOUNT_ID,
193
+ })
194
+ ```
195
+
196
+ ## In This Reference
197
+
198
+ - [README.md](./README.md) - Overview and quick start
199
+ - [configuration.md](./configuration.md) - Setup and config
200
+ - [api-live.md](./api-live.md) - Live streaming APIs (RTMPS/SRT/WebRTC)
201
+ - [patterns.md](./patterns.md) - Full-stack flows, best practices
202
+ - [gotchas.md](./gotchas.md) - Error codes, troubleshooting
203
+
204
+ ## See Also
205
+
206
+ - [workers](../workers/) - Deploy Stream APIs in Workers
@@ -0,0 +1,151 @@
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
+
59
+ ```bash
60
+ curl -X POST \
61
+ "https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/keys" \
62
+ -H "Authorization: Bearer <API_TOKEN>"
63
+
64
+ # Save `id` and `jwk` (base64) from response
65
+ ```
66
+
67
+ **Store in secrets**
68
+
69
+ ```bash
70
+ wrangler secret put STREAM_KEY_ID
71
+ wrangler secret put STREAM_JWK
72
+ ```
73
+
74
+ ## Webhooks
75
+
76
+ **Setup webhook URL**
77
+
78
+ ```bash
79
+ curl -X PUT \
80
+ "https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/webhook" \
81
+ -H "Authorization: Bearer <API_TOKEN>" \
82
+ -H "Content-Type: application/json" \
83
+ -d '{"notificationUrl": "https://your-worker.workers.dev/webhook"}'
84
+
85
+ # Save the returned `secret` for signature verification
86
+ ```
87
+
88
+ **Store secret**
89
+
90
+ ```bash
91
+ wrangler secret put WEBHOOK_SECRET
92
+ ```
93
+
94
+ ## Direct Upload / Live / Watermark Config
95
+
96
+ ```typescript
97
+ // Direct upload
98
+ const uploadConfig = {
99
+ maxDurationSeconds: 3600,
100
+ expiry: new Date(Date.now() + 3600000).toISOString(),
101
+ requireSignedURLs: true,
102
+ allowedOrigins: ['https://yourdomain.com'],
103
+ meta: { creator: 'user-123' },
104
+ }
105
+
106
+ // Live input
107
+ const liveConfig = {
108
+ recording: { mode: 'automatic', timeoutSeconds: 30 },
109
+ deleteRecordingAfterDays: 30,
110
+ }
111
+
112
+ // Watermark
113
+ const watermark = {
114
+ name: 'Logo',
115
+ opacity: 0.7,
116
+ padding: 20,
117
+ position: 'lowerRight',
118
+ scale: 0.15,
119
+ }
120
+ ```
121
+
122
+ ## Access Rules & Player Config
123
+
124
+ ```typescript
125
+ // Access rules: allow US/CA, block CN/RU, or IP allowlist
126
+ const geoRestrict = [
127
+ { type: 'ip.geoip.country', action: 'allow', country: ['US', 'CA'] },
128
+ { type: 'any', action: 'block' },
129
+ ]
130
+
131
+ // Player params for iframe
132
+ const playerParams = new URLSearchParams({
133
+ autoplay: 'true',
134
+ muted: 'true',
135
+ preload: 'auto',
136
+ defaultTextTrack: 'en',
137
+ })
138
+ ```
139
+
140
+ ## In This Reference
141
+
142
+ - [README.md](./README.md) - Overview and quick start
143
+ - [api.md](./api.md) - On-demand video APIs
144
+ - [api-live.md](./api-live.md) - Live streaming APIs
145
+ - [patterns.md](./patterns.md) - Full-stack flows, best practices
146
+ - [gotchas.md](./gotchas.md) - Error codes, troubleshooting
147
+
148
+ ## See Also
149
+
150
+ - [wrangler](../wrangler/) - Wrangler CLI and configuration
151
+ - [workers](../workers/) - Deploy Stream APIs in Workers
@@ -0,0 +1,139 @@
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
+
34
+ - **Cause**: Processing large/complex video
35
+ - **Solution**: Wait up to 5 minutes for processing; use webhooks instead of polling
36
+
37
+ ### Signed URL returns 403
38
+
39
+ - **Cause**: Token expired or invalid signature
40
+ - **Solution**: Check expiration timestamp, verify JWK is correct, ensure clock sync
41
+
42
+ ### Live stream not connecting
43
+
44
+ - **Cause**: Invalid RTMPS URL or stream key
45
+ - **Solution**: Use exact URL/key from API, ensure firewall allows outbound 443
46
+
47
+ ### Webhook signature verification fails
48
+
49
+ - **Cause**: Incorrect secret or timestamp window
50
+ - **Solution**: Use exact secret from webhook setup, allow 5-minute timestamp drift
51
+
52
+ ### Video uploads but isn't visible
53
+
54
+ - **Cause**: `requireSignedURLs` enabled without providing token
55
+ - **Solution**: Generate signed token or set `requireSignedURLs: false` for public videos
56
+
57
+ ### Player shows infinite loading
58
+
59
+ - **Cause**: CORS issue with allowedOrigins
60
+ - **Solution**: Add your domain to `allowedOrigins` array
61
+
62
+ ## Limits
63
+
64
+ | Resource | Limit |
65
+ | ------------------------------- | --------------------------------------------------- |
66
+ | Max file size | 30 GB |
67
+ | Max frame rate | 60 fps (recommended) |
68
+ | Max duration per direct upload | Configurable via `maxDurationSeconds` |
69
+ | Token generation (API endpoint) | 1,000/day recommended (use signing keys for higher) |
70
+ | Live input outputs (simulcast) | 5 per live input |
71
+ | Webhook retry attempts | 5 (exponential backoff) |
72
+ | Webhook timeout | 30 seconds |
73
+ | Caption file size | 5 MB |
74
+ | Watermark image size | 2 MB |
75
+ | Metadata keys per video | Unlimited |
76
+ | Search results per page | Max 1,000 |
77
+
78
+ ## Performance Issues
79
+
80
+ ### Upload is slow
81
+
82
+ - **Cause**: Large file size or network constraints
83
+ - **Solution**: Use TUS resumable upload, compress video before upload, check bandwidth
84
+
85
+ ### Playback buffering
86
+
87
+ - **Cause**: Network congestion or low bandwidth
88
+ - **Solution**: Use ABR (adaptive bitrate) with HLS/DASH, reduce max bitrate
89
+
90
+ ### High processing time
91
+
92
+ - **Cause**: Complex video codec, high resolution
93
+ - **Solution**: Pre-encode with H.264 (most efficient), reduce resolution
94
+
95
+ ## Type Safety
96
+
97
+ ```typescript
98
+ // Error response type
99
+ interface StreamError {
100
+ success: false
101
+ errors: Array<{
102
+ code: number
103
+ message: string
104
+ }>
105
+ }
106
+
107
+ // Handle errors
108
+ async function uploadWithErrorHandling(url: string, file: File) {
109
+ const formData = new FormData()
110
+ formData.append('file', file)
111
+ const response = await fetch(url, { method: 'POST', body: formData })
112
+ const result = await response.json()
113
+
114
+ if (!result.success) {
115
+ throw new Error(result.errors[0]?.message || 'Upload failed')
116
+ }
117
+ return result
118
+ }
119
+ ```
120
+
121
+ ## Security Gotchas
122
+
123
+ 1. **Never expose API token in frontend** - Use direct creator uploads
124
+ 2. **Always verify webhook signatures** - Prevent spoofed notifications
125
+ 3. **Set appropriate token expiration** - Short-lived for security
126
+ 4. **Use requireSignedURLs for private content** - Prevent unauthorized access
127
+ 5. **Whitelist allowedOrigins** - Prevent hotlinking/embedding on unauthorized sites
128
+
129
+ ## In This Reference
130
+
131
+ - [README.md](./README.md) - Overview and quick start
132
+ - [configuration.md](./configuration.md) - Setup and config
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
+
137
+ ## See Also
138
+
139
+ - [workers](../workers/) - Deploy Stream APIs securely
@@ -0,0 +1,217 @@
1
+ # Stream Patterns
2
+
3
+ Common workflows, full-stack flows, and best practices.
4
+
5
+ ## React Stream Player
6
+
7
+ `npm install @cloudflare/stream-react`
8
+
9
+ ```tsx
10
+ import { Stream } from '@cloudflare/stream-react'
11
+
12
+ export function VideoPlayer({ videoId, token }: { videoId: string; token?: string }) {
13
+ return <Stream controls src={token ? `${videoId}?token=${token}` : videoId} responsive />
14
+ }
15
+ ```
16
+
17
+ ## Full-Stack Upload Flow
18
+
19
+ **Backend API (Workers/Pages)**
20
+
21
+ ```typescript
22
+ import Cloudflare from 'cloudflare'
23
+
24
+ export default {
25
+ async fetch(request: Request, env: Env): Promise<Response> {
26
+ const { videoName } = await request.json()
27
+ const client = new Cloudflare({ apiToken: env.CF_API_TOKEN })
28
+ const { uploadURL, uid } = await client.stream.directUpload.create({
29
+ account_id: env.CF_ACCOUNT_ID,
30
+ maxDurationSeconds: 3600,
31
+ requireSignedURLs: true,
32
+ meta: { name: videoName },
33
+ })
34
+ return Response.json({ uploadURL, uid })
35
+ },
36
+ }
37
+ ```
38
+
39
+ **Frontend component**
40
+
41
+ ```tsx
42
+ import { useState } from 'react'
43
+
44
+ export function VideoUploader() {
45
+ const [uploading, setUploading] = useState(false)
46
+ const [progress, setProgress] = useState(0)
47
+
48
+ async function handleUpload(file: File) {
49
+ setUploading(true)
50
+ const { uploadURL, uid } = await fetch('/api/upload-url', {
51
+ method: 'POST',
52
+ body: JSON.stringify({ videoName: file.name }),
53
+ }).then((r) => r.json())
54
+
55
+ const xhr = new XMLHttpRequest()
56
+ xhr.upload.onprogress = (e) => setProgress((e.loaded / e.total) * 100)
57
+ xhr.onload = () => {
58
+ setUploading(false)
59
+ window.location.href = `/videos/${uid}`
60
+ }
61
+ xhr.open('POST', uploadURL)
62
+ const formData = new FormData()
63
+ formData.append('file', file)
64
+ xhr.send(formData)
65
+ }
66
+
67
+ return (
68
+ <div>
69
+ <input
70
+ type="file"
71
+ accept="video/*"
72
+ onChange={(e) => e.target.files?.[0] && handleUpload(e.target.files[0])}
73
+ disabled={uploading}
74
+ />
75
+ {uploading && <progress value={progress} max={100} />}
76
+ </div>
77
+ )
78
+ }
79
+ ```
80
+
81
+ ## TUS Resumable Upload
82
+
83
+ For large files (>500MB). `npm install tus-js-client`
84
+
85
+ ```typescript
86
+ import * as tus from 'tus-js-client'
87
+
88
+ async function uploadWithTUS(file: File, uploadURL: string, onProgress?: (pct: number) => void) {
89
+ return new Promise<string>((resolve, reject) => {
90
+ const upload = new tus.Upload(file, {
91
+ endpoint: uploadURL,
92
+ retryDelays: [0, 3000, 5000, 10000, 20000],
93
+ chunkSize: 50 * 1024 * 1024,
94
+ metadata: { filename: file.name, filetype: file.type },
95
+ onError: reject,
96
+ onProgress: (up, total) => onProgress?.((up / total) * 100),
97
+ onSuccess: () => resolve(upload.url?.split('/').pop() || ''),
98
+ })
99
+ upload.start()
100
+ })
101
+ }
102
+ ```
103
+
104
+ ## Video State Polling
105
+
106
+ ```typescript
107
+ async function waitForVideoReady(client: Cloudflare, accountId: string, videoId: string) {
108
+ for (let i = 0; i < 60; i++) {
109
+ const video = await client.stream.videos.get(videoId, { account_id: accountId })
110
+ if (video.readyToStream || video.status.state === 'error') return video
111
+ await new Promise((resolve) => setTimeout(resolve, 5000))
112
+ }
113
+ throw new Error('Video processing timeout')
114
+ }
115
+ ```
116
+
117
+ ## Webhook Handler
118
+
119
+ ```typescript
120
+ export default {
121
+ async fetch(request: Request, env: Env): Promise<Response> {
122
+ const signature = request.headers.get('Webhook-Signature')
123
+ const body = await request.text()
124
+ if (!signature || !(await verifyWebhook(signature, body, env.WEBHOOK_SECRET))) {
125
+ return new Response('Unauthorized', { status: 401 })
126
+ }
127
+ const payload = JSON.parse(body)
128
+ if (payload.readyToStream) console.log(`Video ${payload.uid} ready`)
129
+ return new Response('OK')
130
+ },
131
+ }
132
+
133
+ async function verifyWebhook(sig: string, body: string, secret: string): Promise<boolean> {
134
+ const parts = Object.fromEntries(sig.split(',').map((p) => p.split('=')))
135
+ const timestamp = parseInt(parts.time || '0', 10)
136
+ if (Math.abs(Date.now() / 1000 - timestamp) > 300) return false
137
+
138
+ const key = await crypto.subtle.importKey(
139
+ 'raw',
140
+ new TextEncoder().encode(secret),
141
+ { name: 'HMAC', hash: 'SHA-256' },
142
+ false,
143
+ ['sign']
144
+ )
145
+ const computed = await crypto.subtle.sign(
146
+ 'HMAC',
147
+ key,
148
+ new TextEncoder().encode(`${timestamp}.${body}`)
149
+ )
150
+ const hex = Array.from(new Uint8Array(computed), (b) => b.toString(16).padStart(2, '0')).join('')
151
+ return hex === parts.sig1
152
+ }
153
+ ```
154
+
155
+ ## Self-Sign JWT (High Volume Tokens)
156
+
157
+ For >1k tokens/day. Prerequisites: Create signing key (see configuration.md).
158
+
159
+ ```typescript
160
+ async function selfSignToken(keyId: string, jwkBase64: string, videoId: string, expiresIn = 3600) {
161
+ const key = await crypto.subtle.importKey(
162
+ 'jwk',
163
+ JSON.parse(atob(jwkBase64)),
164
+ { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },
165
+ false,
166
+ ['sign']
167
+ )
168
+ const now = Math.floor(Date.now() / 1000)
169
+ const header = btoa(JSON.stringify({ alg: 'RS256', kid: keyId }))
170
+ .replace(/=/g, '')
171
+ .replace(/\+/g, '-')
172
+ .replace(/\//g, '_')
173
+ const payload = btoa(JSON.stringify({ sub: videoId, kid: keyId, exp: now + expiresIn, nbf: now }))
174
+ .replace(/=/g, '')
175
+ .replace(/\+/g, '-')
176
+ .replace(/\//g, '_')
177
+ const message = `${header}.${payload}`
178
+ const sig = await crypto.subtle.sign('RSASSA-PKCS1-v1_5', key, new TextEncoder().encode(message))
179
+ const b64Sig = btoa(String.fromCharCode(...new Uint8Array(sig)))
180
+ .replace(/=/g, '')
181
+ .replace(/\+/g, '-')
182
+ .replace(/\//g, '_')
183
+ return `${message}.${b64Sig}`
184
+ }
185
+
186
+ // With access rules (geo-restriction)
187
+ const payloadWithRules = {
188
+ sub: videoId,
189
+ kid: keyId,
190
+ exp: now + 3600,
191
+ nbf: now,
192
+ accessRules: [{ type: 'ip.geoip.country', action: 'allow', country: ['US'] }],
193
+ }
194
+ ```
195
+
196
+ ## Best Practices
197
+
198
+ - **Use Direct Creator Uploads** - Avoid proxying through servers
199
+ - **Enable requireSignedURLs** - Control private content access
200
+ - **Self-sign tokens at scale** - Use signing keys for >1k/day
201
+ - **Set allowedOrigins** - Prevent hotlinking
202
+ - **Use webhooks over polling** - Efficient status updates
203
+ - **Set maxDurationSeconds** - Prevent abuse
204
+ - **Enable live recordings** - Auto VOD after stream
205
+
206
+ ## In This Reference
207
+
208
+ - [README.md](./README.md) - Overview and quick start
209
+ - [configuration.md](./configuration.md) - Setup and config
210
+ - [api.md](./api.md) - On-demand video APIs
211
+ - [api-live.md](./api-live.md) - Live streaming APIs
212
+ - [gotchas.md](./gotchas.md) - Error codes, troubleshooting
213
+
214
+ ## See Also
215
+
216
+ - [workers](../workers/) - Deploy Stream APIs in Workers
217
+ - [pages](../pages/) - Integrate Stream with Pages