wrangler 0.0.0-e95e5a0 → 0.0.0-e98613f8

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 (305) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +26 -4
  3. package/bin/wrangler.js +166 -34
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +1456 -21
  6. package/package.json +191 -148
  7. package/src/__tests__/access.test.ts +25 -0
  8. package/src/__tests__/api-dev.test.ts +209 -0
  9. package/src/__tests__/api-devregistry.test.js +56 -0
  10. package/src/__tests__/api.test.ts +80 -0
  11. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  12. package/src/__tests__/config-cache.test.ts +30 -24
  13. package/src/__tests__/configuration.test.ts +3970 -3114
  14. package/src/__tests__/d1.test.ts +80 -0
  15. package/src/__tests__/delete.test.ts +263 -0
  16. package/src/__tests__/deployments.test.ts +91 -0
  17. package/src/__tests__/dev.test.tsx +1528 -737
  18. package/src/__tests__/dialogs.test.tsx +40 -0
  19. package/src/__tests__/generate.test.ts +235 -0
  20. package/src/__tests__/get-host-from-url.test.ts +16 -0
  21. package/src/__tests__/guess-worker-format.test.ts +68 -68
  22. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  23. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  24. package/src/__tests__/helpers/mock-bin.ts +20 -20
  25. package/src/__tests__/helpers/mock-cfetch.ts +216 -94
  26. package/src/__tests__/helpers/mock-console.ts +58 -39
  27. package/src/__tests__/helpers/mock-dialogs.ts +114 -51
  28. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  29. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  30. package/src/__tests__/helpers/mock-istty.ts +65 -18
  31. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  32. package/src/__tests__/helpers/mock-kv.ts +27 -27
  33. package/src/__tests__/helpers/mock-oauth-flow.ts +229 -228
  34. package/src/__tests__/helpers/mock-process.ts +39 -0
  35. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  36. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  37. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  38. package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
  39. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  40. package/src/__tests__/helpers/msw/handlers/oauth.ts +31 -0
  41. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  42. package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
  43. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  44. package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
  45. package/src/__tests__/helpers/msw/index.ts +21 -0
  46. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  47. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  48. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  49. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  50. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  51. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  52. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  53. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  54. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  55. package/src/__tests__/https-options.test.ts +142 -109
  56. package/src/__tests__/index.test.ts +246 -231
  57. package/src/__tests__/init.test.ts +2887 -1488
  58. package/src/__tests__/jest.setup.ts +163 -30
  59. package/src/__tests__/kv.test.ts +1660 -1439
  60. package/src/__tests__/logger.test.ts +100 -74
  61. package/src/__tests__/logout.test.ts +47 -0
  62. package/src/__tests__/metrics.test.ts +450 -0
  63. package/src/__tests__/middleware.scheduled.test.ts +135 -0
  64. package/src/__tests__/middleware.test.ts +726 -0
  65. package/src/__tests__/package-manager.test.ts +312 -165
  66. package/src/__tests__/pages-deployment-tail.test.ts +820 -0
  67. package/src/__tests__/pages.test.ts +2435 -322
  68. package/src/__tests__/parse.test.ts +253 -245
  69. package/src/__tests__/paths.test.ts +39 -0
  70. package/src/__tests__/publish.test.ts +7536 -4778
  71. package/src/__tests__/pubsub.test.ts +370 -0
  72. package/src/__tests__/queues.test.ts +522 -0
  73. package/src/__tests__/r2.test.ts +388 -209
  74. package/src/__tests__/route.test.ts +18 -18
  75. package/src/__tests__/secret.test.ts +624 -426
  76. package/src/__tests__/tail.test.ts +776 -567
  77. package/src/__tests__/test-old-node-version.js +31 -0
  78. package/src/__tests__/type-generation.test.ts +226 -0
  79. package/src/__tests__/user.test.ts +117 -119
  80. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  81. package/src/__tests__/validate-dev-props.test.ts +56 -0
  82. package/src/__tests__/version.test.ts +35 -0
  83. package/src/__tests__/whoami.test.tsx +264 -91
  84. package/src/__tests__/worker-namespace.test.ts +326 -0
  85. package/src/abort.d.ts +3 -0
  86. package/src/api/dev.ts +210 -0
  87. package/src/api/index.ts +2 -0
  88. package/src/bundle-reporter.tsx +68 -0
  89. package/src/bundle.ts +789 -135
  90. package/src/cfetch/index.ts +123 -67
  91. package/src/cfetch/internal.ts +216 -90
  92. package/src/cli.ts +23 -8
  93. package/src/config/config.ts +236 -195
  94. package/src/config/diagnostics.ts +61 -61
  95. package/src/config/environment.ts +506 -339
  96. package/src/config/index.ts +309 -38
  97. package/src/config/validation-helpers.ts +379 -357
  98. package/src/config/validation.ts +1942 -1263
  99. package/src/config-cache.ts +81 -41
  100. package/src/create-worker-preview.ts +239 -132
  101. package/src/create-worker-upload-form.ts +300 -224
  102. package/src/d1/backups.tsx +223 -0
  103. package/src/d1/constants.ts +2 -0
  104. package/src/d1/create.tsx +63 -0
  105. package/src/d1/delete.tsx +56 -0
  106. package/src/d1/execute.tsx +352 -0
  107. package/src/d1/formatTimeAgo.ts +14 -0
  108. package/src/d1/index.ts +101 -0
  109. package/src/d1/list.tsx +48 -0
  110. package/src/d1/migrations/apply.tsx +184 -0
  111. package/src/d1/migrations/create.tsx +77 -0
  112. package/src/d1/migrations/helpers.ts +147 -0
  113. package/src/d1/migrations/index.tsx +3 -0
  114. package/src/d1/migrations/list.tsx +79 -0
  115. package/src/d1/migrations/options.ts +18 -0
  116. package/src/d1/options.ts +22 -0
  117. package/src/d1/types.tsx +24 -0
  118. package/src/d1/utils.ts +48 -0
  119. package/src/delete.ts +108 -0
  120. package/src/deployments.ts +77 -0
  121. package/src/deprecated/index.ts +438 -0
  122. package/src/dev/dev-vars.ts +20 -17
  123. package/src/dev/dev.tsx +549 -353
  124. package/src/dev/get-local-persistence-path.tsx +31 -0
  125. package/src/dev/local.tsx +870 -292
  126. package/src/dev/remote.tsx +591 -201
  127. package/src/dev/start-server.ts +539 -0
  128. package/src/dev/use-esbuild.ts +183 -97
  129. package/src/dev/validate-dev-props.ts +31 -0
  130. package/src/dev-registry.tsx +201 -0
  131. package/src/dev.tsx +913 -0
  132. package/src/dialogs.tsx +146 -65
  133. package/src/dispatch-namespace.ts +207 -0
  134. package/src/durable.ts +102 -0
  135. package/src/entry.ts +248 -186
  136. package/src/environment-variables.ts +38 -23
  137. package/src/errors.ts +6 -6
  138. package/src/git-client.ts +135 -0
  139. package/src/global-wrangler-config-path.ts +26 -0
  140. package/src/https-options.ts +84 -80
  141. package/src/index.tsx +636 -2617
  142. package/src/init.ts +970 -0
  143. package/src/inspect.ts +706 -562
  144. package/src/intl-polyfill.d.ts +123 -123
  145. package/src/is-ci.ts +14 -0
  146. package/src/is-interactive.ts +16 -0
  147. package/src/kv/helpers.ts +430 -0
  148. package/src/kv/index.ts +596 -0
  149. package/src/logger.ts +67 -41
  150. package/src/metrics/index.ts +5 -0
  151. package/src/metrics/metrics-config.ts +239 -0
  152. package/src/metrics/metrics-dispatcher.ts +96 -0
  153. package/src/metrics/metrics-usage-headers.ts +24 -0
  154. package/src/metrics/send-event.ts +96 -0
  155. package/src/miniflare-cli/assets.ts +220 -0
  156. package/src/miniflare-cli/index.ts +205 -33
  157. package/src/miniflare-cli/request-context.ts +18 -18
  158. package/src/module-collection.ts +221 -212
  159. package/src/open-in-browser.ts +5 -14
  160. package/src/package-manager.ts +182 -90
  161. package/src/pages/build.tsx +270 -0
  162. package/src/pages/constants.ts +18 -0
  163. package/src/pages/deployment-tails.tsx +284 -0
  164. package/src/pages/deployments.tsx +84 -0
  165. package/src/pages/dev.tsx +706 -0
  166. package/src/pages/errors.ts +66 -0
  167. package/src/pages/functions/buildPlugin.ts +107 -0
  168. package/src/pages/functions/buildWorker.ts +166 -0
  169. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  170. package/src/pages/functions/filepath-routing.ts +189 -0
  171. package/src/pages/functions/identifiers.ts +78 -0
  172. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  173. package/src/pages/functions/routes-consolidation.ts +73 -0
  174. package/src/pages/functions/routes-transformation.test.ts +282 -0
  175. package/src/pages/functions/routes-transformation.ts +115 -0
  176. package/src/pages/functions/routes-validation.test.ts +403 -0
  177. package/src/pages/functions/routes-validation.ts +202 -0
  178. package/src/pages/functions/routes.ts +151 -0
  179. package/src/pages/functions.tsx +82 -0
  180. package/src/pages/hash.tsx +13 -0
  181. package/src/pages/index.tsx +102 -0
  182. package/src/pages/projects.tsx +169 -0
  183. package/src/pages/prompt-select-project.tsx +31 -0
  184. package/src/pages/publish.tsx +451 -0
  185. package/src/pages/types.ts +41 -0
  186. package/src/pages/upload.tsx +426 -0
  187. package/src/pages/utils.ts +23 -0
  188. package/src/parse.ts +223 -120
  189. package/src/paths.ts +53 -8
  190. package/src/proxy.ts +628 -383
  191. package/src/publish/index.ts +270 -0
  192. package/src/publish/publish.ts +1035 -0
  193. package/src/pubsub/index.ts +286 -0
  194. package/src/pubsub/pubsub-commands.tsx +624 -0
  195. package/src/queues/cli/commands/consumer/add.ts +71 -0
  196. package/src/queues/cli/commands/consumer/index.ts +22 -0
  197. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  198. package/src/queues/cli/commands/create.ts +25 -0
  199. package/src/queues/cli/commands/delete.ts +26 -0
  200. package/src/queues/cli/commands/index.ts +36 -0
  201. package/src/queues/cli/commands/list.ts +25 -0
  202. package/src/queues/client.ts +135 -0
  203. package/src/queues/utils.ts +18 -0
  204. package/src/r2/constants.ts +4 -0
  205. package/src/r2/helpers.ts +131 -0
  206. package/src/r2/index.ts +289 -0
  207. package/src/routes.ts +140 -0
  208. package/src/secret/index.ts +378 -0
  209. package/src/selfsigned.d.ts +23 -23
  210. package/src/sites.tsx +281 -202
  211. package/src/tail/createTail.ts +379 -0
  212. package/src/tail/filters.ts +108 -110
  213. package/src/tail/index.ts +211 -296
  214. package/src/tail/printing.ts +86 -46
  215. package/src/type-generation.ts +173 -0
  216. package/src/update-check.ts +11 -11
  217. package/src/user/access.ts +69 -0
  218. package/src/user/choose-account.tsx +69 -0
  219. package/src/user/env-vars.ts +46 -0
  220. package/src/user/generate-auth-url.ts +33 -0
  221. package/src/user/generate-random-state.ts +16 -0
  222. package/src/user/index.ts +3 -0
  223. package/src/user/user.tsx +1198 -0
  224. package/src/utils/collectKeyValues.ts +14 -0
  225. package/src/whoami.tsx +141 -42
  226. package/src/worker.ts +174 -101
  227. package/src/yargs-types.ts +24 -0
  228. package/src/zones.ts +191 -0
  229. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  230. package/templates/checked-fetch.js +17 -0
  231. package/templates/d1-beta-facade.js +205 -0
  232. package/templates/first-party-worker-module-facade.ts +18 -0
  233. package/templates/format-dev-errors.ts +32 -0
  234. package/templates/init-tests/test-jest-new-worker.js +25 -0
  235. package/templates/init-tests/test-vitest-new-worker.js +26 -0
  236. package/templates/middleware/common.ts +62 -0
  237. package/templates/middleware/loader-modules.ts +84 -0
  238. package/templates/middleware/loader-sw.ts +227 -0
  239. package/templates/middleware/middleware-miniflare3-json-error.ts +20 -0
  240. package/templates/middleware/middleware-pretty-error.ts +40 -0
  241. package/templates/middleware/middleware-scheduled.ts +15 -0
  242. package/templates/new-worker-scheduled.js +17 -0
  243. package/templates/new-worker-scheduled.ts +32 -0
  244. package/templates/new-worker.js +3 -3
  245. package/templates/new-worker.ts +18 -3
  246. package/templates/no-op-worker.js +10 -0
  247. package/templates/pages-dev-pipeline.ts +28 -0
  248. package/templates/pages-dev-util.ts +52 -0
  249. package/templates/pages-shim.ts +9 -0
  250. package/templates/pages-template-plugin.ts +171 -0
  251. package/templates/pages-template-worker.ts +189 -0
  252. package/templates/serve-static-assets.ts +63 -0
  253. package/templates/service-bindings-module-facade.js +54 -0
  254. package/templates/service-bindings-sw-facade.js +42 -0
  255. package/templates/tsconfig.json +96 -95
  256. package/wrangler-dist/cli.d.ts +893 -0
  257. package/wrangler-dist/cli.js +95201 -44118
  258. package/pages/functions/buildPlugin.ts +0 -92
  259. package/pages/functions/buildWorker.ts +0 -138
  260. package/pages/functions/filepath-routing.ts +0 -189
  261. package/pages/functions/identifiers.ts +0 -78
  262. package/pages/functions/routes.ts +0 -156
  263. package/pages/functions/template-plugin.ts +0 -146
  264. package/pages/functions/template-worker.ts +0 -143
  265. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  266. package/src/kv.ts +0 -319
  267. package/src/miniflare-cli/enum-keys.ts +0 -17
  268. package/src/pages.tsx +0 -1866
  269. package/src/publish.ts +0 -469
  270. package/src/r2.ts +0 -50
  271. package/src/user.tsx +0 -1193
  272. package/templates/static-asset-facade.js +0 -47
  273. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  274. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  275. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  276. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  277. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  278. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  279. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  280. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  281. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  282. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  283. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  284. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  285. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  286. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  287. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  288. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  289. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  290. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  291. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  292. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  293. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  294. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  295. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  296. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  297. package/vendor/wrangler-mime/LICENSE +0 -21
  298. package/vendor/wrangler-mime/Mime.js +0 -97
  299. package/vendor/wrangler-mime/README.md +0 -187
  300. package/vendor/wrangler-mime/cli.js +0 -46
  301. package/vendor/wrangler-mime/index.js +0 -4
  302. package/vendor/wrangler-mime/lite.js +0 -4
  303. package/vendor/wrangler-mime/package.json +0 -52
  304. package/vendor/wrangler-mime/types/other.js +0 -1
  305. package/vendor/wrangler-mime/types/standard.js +0 -1
@@ -0,0 +1,38 @@
1
+ import { type Argv } from "yargs";
2
+ import { readConfig } from "../../../../config";
3
+ import { logger } from "../../../../logger";
4
+ import { deleteConsumer } from "../../../client";
5
+ import type { CommonYargsOptions } from "../../../../yargs-types";
6
+
7
+ type Args = CommonYargsOptions & {
8
+ config?: string;
9
+ ["queue-name"]: string;
10
+ ["script-name"]: string;
11
+ };
12
+
13
+ export function options(yargs: Argv<CommonYargsOptions>): Argv<Args> {
14
+ return yargs
15
+ .positional("queue-name", {
16
+ type: "string",
17
+ demandOption: true,
18
+ description: "Name of the queue to configure",
19
+ })
20
+ .positional("script-name", {
21
+ type: "string",
22
+ demandOption: true,
23
+ description: "Name of the consumer script",
24
+ });
25
+ }
26
+
27
+ export async function handler(args: Args) {
28
+ const config = readConfig(args.config, args);
29
+
30
+ logger.log(`Removing consumer from queue ${args["queue-name"]}.`);
31
+ await deleteConsumer(
32
+ config,
33
+ args["queue-name"],
34
+ args["script-name"],
35
+ args.env
36
+ );
37
+ logger.log(`Removed consumer from queue ${args["queue-name"]}.`);
38
+ }
@@ -0,0 +1,25 @@
1
+ import { type Argv } from "yargs";
2
+ import { readConfig } from "../../../config";
3
+ import { logger } from "../../../logger";
4
+ import { createQueue } from "../../client";
5
+
6
+ interface Args {
7
+ config?: string;
8
+ name: string;
9
+ }
10
+
11
+ export function options(yargs: Argv): Argv<Args> {
12
+ return yargs.positional("name", {
13
+ type: "string",
14
+ demandOption: true,
15
+ description: "The name of the queue",
16
+ });
17
+ }
18
+
19
+ export async function handler(args: Args) {
20
+ const config = readConfig(args.config, args);
21
+
22
+ logger.log(`Creating queue ${args.name}.`);
23
+ await createQueue(config, { queue_name: args.name });
24
+ logger.log(`Created queue ${args.name}.`);
25
+ }
@@ -0,0 +1,26 @@
1
+ import { type Argv } from "yargs";
2
+ import { readConfig } from "../../../config";
3
+ import { logger } from "../../../logger";
4
+ import { deleteQueue } from "../../client";
5
+
6
+ interface Args {
7
+ config?: string;
8
+ name: string;
9
+ }
10
+
11
+ export function options(yargs: Argv): Argv<Args> {
12
+ // TODO(soon) --force option
13
+ return yargs.positional("name", {
14
+ type: "string",
15
+ demandOption: true,
16
+ description: "The name of the queue",
17
+ });
18
+ }
19
+
20
+ export async function handler(args: Args) {
21
+ const config = readConfig(args.config, args);
22
+
23
+ logger.log(`Deleting queue ${args.name}.`);
24
+ await deleteQueue(config, args.name);
25
+ logger.log(`Deleted queue ${args.name}.`);
26
+ }
@@ -0,0 +1,36 @@
1
+ import { type BuilderCallback } from "yargs";
2
+ import { type CommonYargsOptions } from "../../../yargs-types";
3
+ import { HandleUnauthorizedError } from "../../utils";
4
+ import { consumers } from "./consumer";
5
+
6
+ import { options as createOptions, handler as createHandler } from "./create";
7
+ import { options as deleteOptions, handler as deleteHandler } from "./delete";
8
+ import { options as listOptions, handler as listHandler } from "./list";
9
+
10
+ export const queues: BuilderCallback<CommonYargsOptions, unknown> = (yargs) => {
11
+ yargs.command("list", "List Queues", listOptions, listHandler);
12
+
13
+ yargs.command(
14
+ "create <name>",
15
+ "Create a Queue",
16
+ createOptions,
17
+ createHandler
18
+ );
19
+
20
+ yargs.command(
21
+ "delete <name>",
22
+ "Delete a Queue",
23
+ deleteOptions,
24
+ deleteHandler
25
+ );
26
+
27
+ yargs.command(
28
+ "consumer",
29
+ "Configure Queue Consumers",
30
+ async (consumersYargs) => {
31
+ await consumers(consumersYargs);
32
+ }
33
+ );
34
+
35
+ yargs.fail(HandleUnauthorizedError);
36
+ };
@@ -0,0 +1,25 @@
1
+ import { type Argv } from "yargs";
2
+ import { readConfig } from "../../../config";
3
+ import { logger } from "../../../logger";
4
+ import { listQueues } from "../../client";
5
+
6
+ interface Args {
7
+ config?: string;
8
+ page?: number;
9
+ }
10
+
11
+ export function options(yargs: Argv): Argv<Args> {
12
+ return yargs.options({
13
+ page: {
14
+ type: "number",
15
+ describe: "Page number for pagination",
16
+ },
17
+ });
18
+ }
19
+
20
+ export async function handler(args: Args) {
21
+ const config = readConfig(args.config, args);
22
+
23
+ const queues = await listQueues(config, args.page);
24
+ logger.log(JSON.stringify(queues));
25
+ }
@@ -0,0 +1,135 @@
1
+ import { fetchResult } from "../cfetch";
2
+ import { type Config } from "../config";
3
+ import { requireAuth } from "../user";
4
+
5
+ export async function createQueue(
6
+ config: Config,
7
+ body: CreateQueueBody
8
+ ): Promise<QueueResponse> {
9
+ const accountId = await requireAuth(config);
10
+ return await fetchResult(`/accounts/${accountId}/workers/queues`, {
11
+ method: "POST",
12
+ body: JSON.stringify(body),
13
+ });
14
+ }
15
+
16
+ export interface CreateQueueBody {
17
+ queue_name: string;
18
+ }
19
+
20
+ export interface QueueResponse {
21
+ queue_name: string;
22
+ created_on: string;
23
+ modified_on: string;
24
+ }
25
+
26
+ export async function deleteQueue(
27
+ config: Config,
28
+ queueName: string
29
+ ): Promise<void> {
30
+ const accountId = await requireAuth(config);
31
+ return await fetchResult(
32
+ `/accounts/${accountId}/workers/queues/${queueName}`,
33
+ {
34
+ method: "DELETE",
35
+ }
36
+ );
37
+ }
38
+
39
+ // TODO(soon) show detailed queue response
40
+ export async function listQueues(
41
+ config: Config,
42
+ page?: number
43
+ ): Promise<QueueResponse[]> {
44
+ page = page ?? 1;
45
+ const accountId = await requireAuth(config);
46
+ return await fetchResult(
47
+ `/accounts/${accountId}/workers/queues`,
48
+ {},
49
+ new URLSearchParams({ page: page.toString() })
50
+ );
51
+ }
52
+
53
+ export async function getQueue(
54
+ config: Config,
55
+ queueName: string
56
+ ): Promise<QueueResponse> {
57
+ const accountId = await requireAuth(config);
58
+ return await fetchResult(
59
+ `/accounts/${accountId}/workers/queues/${queueName}`,
60
+ {}
61
+ );
62
+ }
63
+
64
+ export async function postConsumer(
65
+ config: Config,
66
+ queueName: string,
67
+ body: PostConsumerBody
68
+ ): Promise<ConsumerResponse> {
69
+ const accountId = await requireAuth(config);
70
+ return fetchResult(
71
+ `/accounts/${accountId}/workers/queues/${queueName}/consumers`,
72
+ {
73
+ method: "POST",
74
+ body: JSON.stringify(body),
75
+ }
76
+ );
77
+ }
78
+
79
+ export interface PutConsumerBody {
80
+ settings: ConsumerSettings;
81
+ dead_letter_queue?: string;
82
+ }
83
+
84
+ export interface PostConsumerBody extends PutConsumerBody {
85
+ script_name: string;
86
+ environment_name: string;
87
+ }
88
+
89
+ export interface ConsumerSettings {
90
+ batch_size?: number;
91
+ max_retries?: number;
92
+ max_wait_time_ms?: number;
93
+ }
94
+
95
+ export interface ConsumerResponse extends PostConsumerBody {
96
+ queue_name: string;
97
+ script_name: string;
98
+ environment_name: string;
99
+ settings: ConsumerSettings;
100
+ dead_letter_queue?: string;
101
+ }
102
+
103
+ export async function deleteConsumer(
104
+ config: Config,
105
+ queueName: string,
106
+ scriptName: string,
107
+ envName?: string
108
+ ): Promise<void> {
109
+ const accountId = await requireAuth(config);
110
+ let resource = `/accounts/${accountId}/workers/queues/${queueName}/consumers/${scriptName}`;
111
+ if (envName !== undefined) {
112
+ resource += `/environments/${envName}`;
113
+ }
114
+ return fetchResult(resource, {
115
+ method: "DELETE",
116
+ });
117
+ }
118
+
119
+ export async function putConsumer(
120
+ config: Config,
121
+ queueName: string,
122
+ scriptName: string,
123
+ envName: string | undefined,
124
+ body: PutConsumerBody
125
+ ): Promise<ConsumerResponse> {
126
+ const accountId = await requireAuth(config);
127
+ let resource = `/accounts/${accountId}/workers/queues/${queueName}/consumers/${scriptName}`;
128
+ if (envName !== undefined) {
129
+ resource += `/environments/${envName}`;
130
+ }
131
+ return fetchResult(resource, {
132
+ method: "PUT",
133
+ body: JSON.stringify(body),
134
+ });
135
+ }
@@ -0,0 +1,18 @@
1
+ import { logger } from "../logger";
2
+ import { type ParseError } from "../parse";
3
+ import { getAccountId } from "../user";
4
+
5
+ const isFetchError = (err: unknown): err is ParseError => err instanceof Error;
6
+
7
+ export const HandleUnauthorizedError = async (_msg: string, err: Error) => {
8
+ //@ts-expect-error non-standard property on Error
9
+ if (isFetchError(err) && err.code === 10023) {
10
+ const accountId = await getAccountId();
11
+ if (accountId) {
12
+ return logger.log(
13
+ `Queues is not currently enabled on this account. Go to https://dash.cloudflare.com/${accountId}/workers/queues to enable it.`
14
+ );
15
+ }
16
+ }
17
+ throw err;
18
+ };
@@ -0,0 +1,4 @@
1
+ /**
2
+ * The maximum file size we can upload using the V4 API.
3
+ */
4
+ export const MAX_UPLOAD_SIZE = 300 * 1024 * 1024;
@@ -0,0 +1,131 @@
1
+ import { Readable } from "node:stream";
2
+ import { fetchResult } from "../cfetch";
3
+ import { fetchR2Objects } from "../cfetch/internal";
4
+ import type { HeadersInit } from "undici";
5
+
6
+ /**
7
+ * Information about a bucket, returned from `listR2Buckets()`.
8
+ */
9
+ export interface R2BucketInfo {
10
+ name: string;
11
+ creation_date: string;
12
+ }
13
+
14
+ /**
15
+ * Fetch a list of all the buckets under the given `accountId`.
16
+ */
17
+ export async function listR2Buckets(
18
+ accountId: string
19
+ ): Promise<R2BucketInfo[]> {
20
+ const results = await fetchResult<{
21
+ buckets: R2BucketInfo[];
22
+ }>(`/accounts/${accountId}/r2/buckets`);
23
+ return results.buckets;
24
+ }
25
+
26
+ /**
27
+ * Create a bucket with the given `bucketName` within the account given by `accountId`.
28
+ *
29
+ * A 400 is returned if the account already owns a bucket with this name.
30
+ * A bucket must be explicitly deleted to be replaced.
31
+ */
32
+ export async function createR2Bucket(
33
+ accountId: string,
34
+ bucketName: string
35
+ ): Promise<void> {
36
+ return await fetchResult<void>(`/accounts/${accountId}/r2/buckets`, {
37
+ method: "POST",
38
+ body: JSON.stringify({ name: bucketName }),
39
+ });
40
+ }
41
+
42
+ /**
43
+ * Delete a bucket with the given name
44
+ */
45
+ export async function deleteR2Bucket(
46
+ accountId: string,
47
+ bucketName: string
48
+ ): Promise<void> {
49
+ return await fetchResult<void>(
50
+ `/accounts/${accountId}/r2/buckets/${bucketName}`,
51
+ { method: "DELETE" }
52
+ );
53
+ }
54
+
55
+ export function bucketAndKeyFromObjectPath(objectPath = ""): {
56
+ bucket: string;
57
+ key: string;
58
+ } {
59
+ const match = /^([^/]+)\/(.*)/.exec(objectPath);
60
+ if (match === null) {
61
+ throw new Error(
62
+ `The object path must be in the form of {bucket}/{key} you provided ${objectPath}`
63
+ );
64
+ }
65
+
66
+ return { bucket: match[1], key: match[2] };
67
+ }
68
+
69
+ /**
70
+ * Downloads an object
71
+ */
72
+ export async function getR2Object(
73
+ accountId: string,
74
+ bucketName: string,
75
+ objectName: string
76
+ ): Promise<Readable> {
77
+ const response = await fetchR2Objects(
78
+ `/accounts/${accountId}/r2/buckets/${bucketName}/objects/${objectName}`,
79
+ { method: "GET" }
80
+ );
81
+
82
+ return Readable.from(response.body);
83
+ }
84
+
85
+ /**
86
+ * Uploads an object
87
+ */
88
+ export async function putR2Object(
89
+ accountId: string,
90
+ bucketName: string,
91
+ objectName: string,
92
+ object: Readable | Buffer,
93
+ options: Record<string, unknown>
94
+ ): Promise<void> {
95
+ const headerKeys = [
96
+ "content-length",
97
+ "content-type",
98
+ "content-disposition",
99
+ "content-encoding",
100
+ "content-language",
101
+ "cache-control",
102
+ "expires",
103
+ ];
104
+ const headers: HeadersInit = {};
105
+ for (const key of headerKeys) {
106
+ const value = options[key] || "";
107
+ if (value && typeof value === "string") headers[key] = value;
108
+ }
109
+
110
+ await fetchR2Objects(
111
+ `/accounts/${accountId}/r2/buckets/${bucketName}/objects/${objectName}`,
112
+ {
113
+ body: object,
114
+ headers,
115
+ method: "PUT",
116
+ }
117
+ );
118
+ }
119
+ /**
120
+ * Delete an Object
121
+ */
122
+ export async function deleteR2Object(
123
+ accountId: string,
124
+ bucketName: string,
125
+ objectName: string
126
+ ): Promise<void> {
127
+ await fetchR2Objects(
128
+ `/accounts/${accountId}/r2/buckets/${bucketName}/objects/${objectName}`,
129
+ { method: "DELETE" }
130
+ );
131
+ }