wrangler 0.0.0-e3ce82b → 0.0.0-e41c7e41

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 (264) hide show
  1. package/README.md +23 -3
  2. package/bin/wrangler.js +150 -62
  3. package/kv-asset-handler.js +1 -0
  4. package/miniflare-dist/index.mjs +1451 -21
  5. package/package.json +191 -153
  6. package/src/__tests__/access.test.ts +25 -0
  7. package/src/__tests__/api-dev.test.ts +209 -0
  8. package/src/__tests__/api-devregistry.test.js +56 -0
  9. package/src/__tests__/api.test.ts +80 -0
  10. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  11. package/src/__tests__/config-cache.test.ts +30 -24
  12. package/src/__tests__/configuration.test.ts +3970 -3476
  13. package/src/__tests__/d1.test.ts +80 -0
  14. package/src/__tests__/delete.test.ts +230 -0
  15. package/src/__tests__/deployments.test.ts +91 -0
  16. package/src/__tests__/dev.test.tsx +1508 -955
  17. package/src/__tests__/dialogs.test.tsx +40 -0
  18. package/src/__tests__/generate.test.ts +235 -0
  19. package/src/__tests__/get-host-from-url.test.ts +16 -0
  20. package/src/__tests__/guess-worker-format.test.ts +68 -68
  21. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  22. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  23. package/src/__tests__/helpers/mock-bin.ts +20 -20
  24. package/src/__tests__/helpers/mock-cfetch.ts +216 -94
  25. package/src/__tests__/helpers/mock-console.ts +58 -39
  26. package/src/__tests__/helpers/mock-dialogs.ts +94 -71
  27. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  28. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  29. package/src/__tests__/helpers/mock-istty.ts +65 -18
  30. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  31. package/src/__tests__/helpers/mock-kv.ts +27 -27
  32. package/src/__tests__/helpers/mock-oauth-flow.ts +225 -228
  33. package/src/__tests__/helpers/mock-process.ts +39 -0
  34. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  35. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  36. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  37. package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
  38. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  39. package/src/__tests__/helpers/msw/handlers/oauth.ts +36 -0
  40. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  41. package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
  42. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  43. package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
  44. package/src/__tests__/helpers/msw/index.ts +21 -0
  45. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  46. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  47. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  48. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  49. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  50. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  51. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  52. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  53. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  54. package/src/__tests__/https-options.test.ts +142 -109
  55. package/src/__tests__/index.test.ts +241 -234
  56. package/src/__tests__/init.test.ts +2869 -1606
  57. package/src/__tests__/jest.setup.ts +159 -34
  58. package/src/__tests__/kv.test.ts +1660 -1466
  59. package/src/__tests__/logger.test.ts +100 -74
  60. package/src/__tests__/metrics.test.ts +450 -0
  61. package/src/__tests__/middleware.scheduled.test.ts +135 -0
  62. package/src/__tests__/middleware.test.ts +726 -0
  63. package/src/__tests__/package-manager.test.ts +303 -303
  64. package/src/__tests__/pages-deployment-tail.test.ts +820 -0
  65. package/src/__tests__/pages.test.ts +2423 -735
  66. package/src/__tests__/parse.test.ts +252 -252
  67. package/src/__tests__/paths.test.ts +39 -0
  68. package/src/__tests__/publish.test.ts +7505 -5627
  69. package/src/__tests__/pubsub.test.ts +370 -0
  70. package/src/__tests__/queues.test.ts +371 -0
  71. package/src/__tests__/r2.test.ts +388 -228
  72. package/src/__tests__/route.test.ts +18 -18
  73. package/src/__tests__/secret.test.ts +622 -459
  74. package/src/__tests__/tail.test.ts +677 -567
  75. package/src/__tests__/test-old-node-version.js +31 -0
  76. package/src/__tests__/type-generation.test.ts +226 -0
  77. package/src/__tests__/user.test.ts +140 -116
  78. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  79. package/src/__tests__/validate-dev-props.test.ts +56 -0
  80. package/src/__tests__/version.test.ts +35 -0
  81. package/src/__tests__/whoami.test.tsx +264 -125
  82. package/src/__tests__/worker-namespace.test.ts +326 -0
  83. package/src/abort.d.ts +1 -1
  84. package/src/api/dev.ts +210 -0
  85. package/src/api/index.ts +2 -0
  86. package/src/bundle-reporter.tsx +68 -0
  87. package/src/bundle.ts +785 -159
  88. package/src/cfetch/index.ts +120 -81
  89. package/src/cfetch/internal.ts +207 -86
  90. package/src/cli.ts +23 -8
  91. package/src/config/config.ts +236 -195
  92. package/src/config/diagnostics.ts +61 -61
  93. package/src/config/environment.ts +498 -357
  94. package/src/config/index.ts +302 -193
  95. package/src/config/validation-helpers.ts +379 -366
  96. package/src/config/validation.ts +1931 -1376
  97. package/src/config-cache.ts +81 -41
  98. package/src/create-worker-preview.ts +239 -142
  99. package/src/create-worker-upload-form.ts +300 -238
  100. package/src/d1/backups.tsx +218 -0
  101. package/src/d1/constants.ts +2 -0
  102. package/src/d1/create.tsx +63 -0
  103. package/src/d1/delete.tsx +56 -0
  104. package/src/d1/execute.tsx +352 -0
  105. package/src/d1/formatTimeAgo.ts +14 -0
  106. package/src/d1/index.ts +99 -0
  107. package/src/d1/list.tsx +48 -0
  108. package/src/d1/migrations.tsx +446 -0
  109. package/src/d1/options.ts +22 -0
  110. package/src/d1/types.tsx +24 -0
  111. package/src/d1/utils.ts +48 -0
  112. package/src/delete.ts +108 -0
  113. package/src/deployments.ts +77 -0
  114. package/src/deprecated/index.ts +438 -0
  115. package/src/dev/dev-vars.ts +20 -17
  116. package/src/dev/dev.tsx +522 -333
  117. package/src/dev/get-local-persistence-path.tsx +31 -0
  118. package/src/dev/local.tsx +866 -302
  119. package/src/dev/remote.tsx +591 -225
  120. package/src/dev/start-server.ts +538 -0
  121. package/src/dev/use-esbuild.ts +183 -97
  122. package/src/dev/validate-dev-props.ts +31 -0
  123. package/src/dev-registry.tsx +201 -0
  124. package/src/dev.tsx +905 -0
  125. package/src/dialogs.tsx +132 -99
  126. package/src/dispatch-namespace.ts +207 -0
  127. package/src/durable.ts +87 -87
  128. package/src/entry.ts +235 -228
  129. package/src/environment-variables.ts +38 -23
  130. package/src/errors.ts +6 -6
  131. package/src/git-client.ts +124 -0
  132. package/src/global-wrangler-config-path.ts +26 -0
  133. package/src/https-options.ts +84 -80
  134. package/src/index.tsx +625 -2789
  135. package/src/init.ts +970 -0
  136. package/src/inspect.ts +698 -593
  137. package/src/intl-polyfill.d.ts +123 -123
  138. package/src/is-ci.ts +14 -0
  139. package/src/is-interactive.ts +16 -0
  140. package/src/kv/helpers.ts +430 -0
  141. package/src/kv/index.ts +596 -0
  142. package/src/logger.ts +67 -41
  143. package/src/metrics/index.ts +5 -0
  144. package/src/metrics/metrics-config.ts +239 -0
  145. package/src/metrics/metrics-dispatcher.ts +96 -0
  146. package/src/metrics/metrics-usage-headers.ts +24 -0
  147. package/src/metrics/send-event.ts +96 -0
  148. package/src/miniflare-cli/assets.ts +215 -0
  149. package/src/miniflare-cli/index.ts +205 -33
  150. package/src/miniflare-cli/request-context.ts +18 -18
  151. package/src/module-collection.ts +221 -212
  152. package/src/open-in-browser.ts +4 -6
  153. package/src/package-manager.ts +173 -128
  154. package/src/pages/build.tsx +270 -0
  155. package/src/pages/constants.ts +18 -0
  156. package/src/pages/deployment-tails.tsx +284 -0
  157. package/src/pages/deployments.tsx +84 -0
  158. package/src/pages/dev.tsx +708 -0
  159. package/src/pages/errors.ts +66 -0
  160. package/src/pages/functions/buildPlugin.ts +107 -0
  161. package/src/pages/functions/buildWorker.ts +166 -0
  162. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  163. package/src/pages/functions/filepath-routing.ts +189 -0
  164. package/src/pages/functions/identifiers.ts +78 -0
  165. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  166. package/src/pages/functions/routes-consolidation.ts +73 -0
  167. package/src/pages/functions/routes-transformation.test.ts +282 -0
  168. package/src/pages/functions/routes-transformation.ts +115 -0
  169. package/src/pages/functions/routes-validation.test.ts +403 -0
  170. package/src/pages/functions/routes-validation.ts +202 -0
  171. package/src/pages/functions/routes.ts +151 -0
  172. package/src/pages/functions.tsx +82 -0
  173. package/src/pages/hash.tsx +13 -0
  174. package/src/pages/index.tsx +102 -0
  175. package/src/pages/projects.tsx +169 -0
  176. package/src/pages/prompt-select-project.tsx +31 -0
  177. package/src/pages/publish.tsx +451 -0
  178. package/src/pages/types.ts +41 -0
  179. package/src/pages/upload.tsx +426 -0
  180. package/src/pages/utils.ts +23 -0
  181. package/src/parse.ts +208 -125
  182. package/src/paths.ts +53 -8
  183. package/src/proxy.ts +618 -407
  184. package/src/publish/index.ts +270 -0
  185. package/src/publish/publish.ts +1035 -0
  186. package/src/pubsub/index.ts +286 -0
  187. package/src/pubsub/pubsub-commands.tsx +624 -0
  188. package/src/queues/cli/commands/consumer/add.ts +71 -0
  189. package/src/queues/cli/commands/consumer/index.ts +22 -0
  190. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  191. package/src/queues/cli/commands/create.ts +25 -0
  192. package/src/queues/cli/commands/delete.ts +26 -0
  193. package/src/queues/cli/commands/index.ts +33 -0
  194. package/src/queues/cli/commands/list.ts +25 -0
  195. package/src/queues/client.ts +135 -0
  196. package/src/r2/constants.ts +4 -0
  197. package/src/r2/helpers.ts +131 -0
  198. package/src/r2/index.ts +289 -0
  199. package/src/routes.ts +140 -0
  200. package/src/secret/index.ts +378 -0
  201. package/src/selfsigned.d.ts +23 -23
  202. package/src/sites.tsx +273 -227
  203. package/src/tail/createTail.ts +379 -0
  204. package/src/tail/filters.ts +108 -110
  205. package/src/tail/index.ts +211 -296
  206. package/src/tail/printing.ts +86 -46
  207. package/src/type-generation.ts +173 -0
  208. package/src/update-check.ts +11 -11
  209. package/src/user/access.ts +69 -0
  210. package/src/user/choose-account.tsx +69 -0
  211. package/src/user/env-vars.ts +46 -0
  212. package/src/user/generate-auth-url.ts +33 -0
  213. package/src/user/generate-random-state.ts +16 -0
  214. package/src/user/index.ts +3 -0
  215. package/src/user/user.tsx +1192 -0
  216. package/src/utils/collectKeyValues.ts +14 -0
  217. package/src/whoami.tsx +141 -43
  218. package/src/worker.ts +171 -107
  219. package/src/yargs-types.ts +24 -0
  220. package/src/zones.ts +158 -40
  221. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  222. package/templates/checked-fetch.js +17 -0
  223. package/templates/d1-beta-facade.js +205 -0
  224. package/templates/first-party-worker-module-facade.ts +18 -0
  225. package/templates/format-dev-errors.ts +32 -0
  226. package/templates/init-tests/test-jest-new-worker.js +25 -0
  227. package/templates/init-tests/test-vitest-new-worker.js +26 -0
  228. package/templates/middleware/common.ts +62 -0
  229. package/templates/middleware/loader-modules.ts +84 -0
  230. package/templates/middleware/loader-sw.ts +227 -0
  231. package/templates/middleware/middleware-miniflare3-json-error.ts +20 -0
  232. package/templates/middleware/middleware-pretty-error.ts +40 -0
  233. package/templates/middleware/middleware-scheduled.ts +15 -0
  234. package/templates/new-worker-scheduled.js +3 -3
  235. package/templates/new-worker-scheduled.ts +15 -15
  236. package/templates/new-worker.js +3 -3
  237. package/templates/new-worker.ts +15 -15
  238. package/templates/no-op-worker.js +10 -0
  239. package/templates/pages-dev-pipeline.ts +28 -0
  240. package/templates/pages-dev-util.ts +52 -0
  241. package/templates/pages-shim.ts +9 -0
  242. package/templates/pages-template-plugin.ts +171 -0
  243. package/templates/pages-template-worker.ts +189 -0
  244. package/templates/serve-static-assets.ts +63 -0
  245. package/templates/service-bindings-module-facade.js +54 -0
  246. package/templates/service-bindings-sw-facade.js +42 -0
  247. package/templates/tsconfig.json +96 -95
  248. package/wrangler-dist/cli.d.ts +893 -0
  249. package/wrangler-dist/cli.js +146109 -108690
  250. package/pages/functions/buildPlugin.ts +0 -105
  251. package/pages/functions/buildWorker.ts +0 -151
  252. package/pages/functions/filepath-routing.ts +0 -189
  253. package/pages/functions/identifiers.ts +0 -78
  254. package/pages/functions/routes.ts +0 -156
  255. package/pages/functions/template-plugin.ts +0 -147
  256. package/pages/functions/template-worker.ts +0 -143
  257. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  258. package/src/kv.ts +0 -408
  259. package/src/miniflare-cli/enum-keys.ts +0 -17
  260. package/src/pages.tsx +0 -2093
  261. package/src/publish.ts +0 -721
  262. package/src/r2.ts +0 -50
  263. package/src/user.tsx +0 -1214
  264. package/templates/static-asset-facade.js +0 -43
@@ -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,33 @@
1
+ import { type BuilderCallback } from "yargs";
2
+ import { type CommonYargsOptions } from "../../../yargs-types";
3
+ import { consumers } from "./consumer";
4
+
5
+ import { options as createOptions, handler as createHandler } from "./create";
6
+ import { options as deleteOptions, handler as deleteHandler } from "./delete";
7
+ import { options as listOptions, handler as listHandler } from "./list";
8
+
9
+ export const queues: BuilderCallback<CommonYargsOptions, unknown> = (yargs) => {
10
+ yargs.command("list", "List Queues", listOptions, listHandler);
11
+
12
+ yargs.command(
13
+ "create <name>",
14
+ "Create a Queue",
15
+ createOptions,
16
+ createHandler
17
+ );
18
+
19
+ yargs.command(
20
+ "delete <name>",
21
+ "Delete a Queue",
22
+ deleteOptions,
23
+ deleteHandler
24
+ );
25
+
26
+ yargs.command(
27
+ "consumer",
28
+ "Configure Queue Consumers",
29
+ async (consumersYargs) => {
30
+ await consumers(consumersYargs);
31
+ }
32
+ );
33
+ };
@@ -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,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
+ }