wrangler 0.0.0-e7a0cd5b → 0.0.0-e87ad068

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 (255) hide show
  1. package/README.md +3 -3
  2. package/bin/wrangler.js +30 -10
  3. package/miniflare-dist/index.mjs +254 -128
  4. package/package.json +27 -19
  5. package/src/__tests__/api-dev.test.ts +65 -36
  6. package/src/__tests__/api-devregistry.test.ts +121 -0
  7. package/src/__tests__/api.test.ts +27 -5
  8. package/src/__tests__/configuration.test.ts +797 -98
  9. package/src/__tests__/constellation.test.ts +371 -0
  10. package/src/__tests__/d1/d1.test.ts +82 -0
  11. package/src/__tests__/d1/execute.test.ts +66 -0
  12. package/src/__tests__/d1/migrate.test.ts +257 -0
  13. package/src/__tests__/d1/splitter.test.ts +255 -0
  14. package/src/__tests__/delete.test.ts +91 -49
  15. package/src/__tests__/deployments.test.ts +330 -56
  16. package/src/__tests__/dev.test.tsx +198 -90
  17. package/src/__tests__/generate.test.ts +12 -10
  18. package/src/__tests__/guess-worker-format.test.ts +35 -0
  19. package/src/__tests__/helpers/end-event-loop.ts +6 -0
  20. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  21. package/src/__tests__/helpers/mock-console.ts +6 -0
  22. package/src/__tests__/helpers/mock-dialogs.ts +71 -85
  23. package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
  24. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
  25. package/src/__tests__/helpers/mock-known-routes.ts +7 -2
  26. package/src/__tests__/helpers/mock-kv.ts +29 -16
  27. package/src/__tests__/helpers/mock-oauth-flow.ts +103 -92
  28. package/src/__tests__/helpers/mock-process.ts +8 -13
  29. package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
  30. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  31. package/src/__tests__/helpers/msw/handlers/deployments.ts +128 -27
  32. package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
  33. package/src/__tests__/helpers/msw/handlers/oauth.ts +13 -18
  34. package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
  35. package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
  36. package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
  37. package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
  38. package/src/__tests__/helpers/msw/index.ts +32 -1
  39. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  40. package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
  41. package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
  42. package/src/__tests__/index.test.ts +92 -72
  43. package/src/__tests__/init.test.ts +1033 -631
  44. package/src/__tests__/jest.setup.ts +19 -42
  45. package/src/__tests__/kv.test.ts +355 -231
  46. package/src/__tests__/logger.test.ts +68 -2
  47. package/src/__tests__/logout.test.ts +47 -0
  48. package/src/__tests__/metrics.test.ts +94 -51
  49. package/src/__tests__/middleware.scheduled.test.ts +42 -32
  50. package/src/__tests__/middleware.test.ts +212 -122
  51. package/src/__tests__/mtls-certificates.test.ts +589 -0
  52. package/src/__tests__/pages/deployment-list.test.ts +80 -0
  53. package/src/__tests__/pages/functions-build.test.ts +529 -0
  54. package/src/__tests__/pages/pages.test.ts +81 -0
  55. package/src/__tests__/pages/project-create.test.ts +63 -0
  56. package/src/__tests__/pages/project-list.test.ts +110 -0
  57. package/src/__tests__/pages/project-upload.test.ts +500 -0
  58. package/src/__tests__/pages/publish.test.ts +2864 -0
  59. package/src/__tests__/pages-deployment-tail.test.ts +957 -0
  60. package/src/__tests__/parse.test.ts +106 -0
  61. package/src/__tests__/publish.test.ts +2227 -1005
  62. package/src/__tests__/pubsub.test.ts +226 -100
  63. package/src/__tests__/queues.test.ts +238 -77
  64. package/src/__tests__/r2.test.ts +55 -57
  65. package/src/__tests__/secret.test.ts +179 -130
  66. package/src/__tests__/tail.test.ts +313 -113
  67. package/src/__tests__/test-old-node-version.js +3 -3
  68. package/src/__tests__/traverse-module-graph.test.ts +220 -0
  69. package/src/__tests__/tsconfig-sanity.ts +12 -0
  70. package/src/__tests__/tsconfig.json +8 -0
  71. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  72. package/src/__tests__/type-generation.test.ts +43 -26
  73. package/src/__tests__/unstableDev.test.ts +61 -0
  74. package/src/__tests__/user.test.ts +35 -72
  75. package/src/__tests__/whoami.test.tsx +8 -114
  76. package/src/__tests__/worker-namespace.test.ts +83 -69
  77. package/src/api/dev.ts +180 -60
  78. package/src/api/index.ts +10 -1
  79. package/src/api/mtls-certificate.ts +148 -0
  80. package/src/api/pages/create-worker-bundle-contents.ts +80 -0
  81. package/src/api/pages/index.ts +5 -0
  82. package/src/api/pages/publish.tsx +371 -0
  83. package/src/bundle.ts +315 -148
  84. package/src/cfetch/index.ts +0 -2
  85. package/src/cfetch/internal.ts +33 -33
  86. package/src/cli.ts +4 -4
  87. package/src/config/config.ts +14 -7
  88. package/src/config/environment.ts +120 -24
  89. package/src/config/index.ts +117 -35
  90. package/src/config/validation-helpers.ts +1 -1
  91. package/src/config/validation.ts +430 -19
  92. package/src/constellation/createProject.tsx +51 -0
  93. package/src/constellation/deleteProject.ts +51 -0
  94. package/src/constellation/deleteProjectModel.ts +76 -0
  95. package/src/constellation/index.ts +75 -0
  96. package/src/constellation/listCatalog.tsx +35 -0
  97. package/src/constellation/listModel.tsx +49 -0
  98. package/src/constellation/listProject.tsx +28 -0
  99. package/src/constellation/listRuntime.tsx +28 -0
  100. package/src/constellation/options.ts +17 -0
  101. package/src/constellation/types.ts +17 -0
  102. package/src/constellation/uploadModel.tsx +84 -0
  103. package/src/constellation/utils.ts +90 -0
  104. package/src/create-worker-preview.ts +19 -8
  105. package/src/create-worker-upload-form.ts +81 -18
  106. package/src/d1/backups.tsx +47 -46
  107. package/src/d1/constants.ts +5 -0
  108. package/src/d1/create.tsx +85 -37
  109. package/src/d1/{delete.tsx → delete.ts} +12 -15
  110. package/src/d1/execute.tsx +228 -156
  111. package/src/d1/index.ts +31 -7
  112. package/src/d1/list.tsx +27 -13
  113. package/src/d1/migrations/apply.tsx +235 -0
  114. package/src/d1/migrations/create.tsx +79 -0
  115. package/src/d1/migrations/helpers.ts +171 -0
  116. package/src/d1/migrations/index.ts +3 -0
  117. package/src/d1/migrations/list.tsx +95 -0
  118. package/src/d1/migrations/options.ts +23 -0
  119. package/src/d1/options.ts +12 -2
  120. package/src/d1/splitter.ts +161 -0
  121. package/src/d1/types.ts +32 -0
  122. package/src/d1/utils.ts +12 -2
  123. package/src/delete.ts +8 -16
  124. package/src/deployments.ts +340 -46
  125. package/src/deprecated/index.ts +8 -302
  126. package/src/dev/dev.tsx +66 -46
  127. package/src/dev/local.tsx +339 -104
  128. package/src/dev/remote.tsx +36 -3
  129. package/src/dev/start-server.ts +146 -101
  130. package/src/dev/use-esbuild.ts +82 -56
  131. package/src/dev/validate-dev-props.ts +9 -0
  132. package/src/{dev-registry.tsx → dev-registry.ts} +13 -1
  133. package/src/dev.tsx +202 -125
  134. package/src/dialogs.ts +136 -0
  135. package/src/dispatch-namespace.ts +21 -17
  136. package/src/docs/helpers.ts +50 -0
  137. package/src/docs/index.ts +54 -0
  138. package/src/entry.ts +26 -11
  139. package/src/environment-variables/factory.ts +89 -0
  140. package/src/environment-variables/misc-variables.ts +30 -0
  141. package/src/generate/index.ts +303 -0
  142. package/src/git-client.ts +15 -4
  143. package/src/{index.tsx → index.ts} +148 -63
  144. package/src/init.ts +301 -197
  145. package/src/inspect.ts +122 -6
  146. package/src/jest.d.ts +4 -0
  147. package/src/kv/helpers.ts +7 -4
  148. package/src/kv/index.ts +15 -17
  149. package/src/logger.ts +36 -5
  150. package/src/metrics/metrics-config.ts +3 -3
  151. package/src/metrics/send-event.ts +6 -1
  152. package/src/miniflare-cli/assets.ts +64 -28
  153. package/src/miniflare-cli/index.ts +6 -9
  154. package/src/miniflare-cli/tsconfig.json +9 -0
  155. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  156. package/src/miniflare-cli/types.ts +11 -0
  157. package/src/module-collection.ts +92 -26
  158. package/src/mtls-certificate/cli.ts +155 -0
  159. package/src/pages/build.ts +423 -0
  160. package/src/pages/buildFunctions.ts +140 -0
  161. package/src/pages/deployment-tails.ts +281 -0
  162. package/src/pages/deployments.tsx +11 -33
  163. package/src/pages/{dev.tsx → dev.ts} +192 -126
  164. package/src/pages/errors.ts +1 -0
  165. package/src/pages/functions/buildPlugin.ts +73 -69
  166. package/src/pages/functions/buildWorker.ts +342 -117
  167. package/src/pages/functions/tsconfig.json +8 -0
  168. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  169. package/src/pages/{functions.tsx → functions.ts} +8 -4
  170. package/src/pages/{index.tsx → index.ts} +11 -3
  171. package/src/pages/projects.tsx +12 -22
  172. package/src/pages/prompt-select-project.tsx +31 -0
  173. package/src/pages/publish.tsx +45 -214
  174. package/src/pages/types.ts +6 -9
  175. package/src/pages/upload.tsx +58 -14
  176. package/src/pages/utils.ts +14 -3
  177. package/src/parse.ts +23 -1
  178. package/src/paths.ts +1 -1
  179. package/src/proxy.ts +5 -0
  180. package/src/publish/index.ts +20 -16
  181. package/src/publish/publish.ts +81 -48
  182. package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
  183. package/src/queues/cli/commands/consumer/add.ts +24 -24
  184. package/src/queues/cli/commands/consumer/index.ts +3 -6
  185. package/src/queues/cli/commands/consumer/remove.ts +11 -18
  186. package/src/queues/cli/commands/create.ts +8 -8
  187. package/src/queues/cli/commands/delete.ts +8 -8
  188. package/src/queues/cli/commands/index.ts +6 -4
  189. package/src/queues/cli/commands/list.ts +8 -8
  190. package/src/queues/client.ts +1 -0
  191. package/src/queues/utils.ts +18 -0
  192. package/src/r2/constants.ts +4 -0
  193. package/src/r2/helpers.ts +1 -0
  194. package/src/r2/index.ts +40 -28
  195. package/src/secret/index.ts +18 -17
  196. package/src/{sites.tsx → sites.ts} +165 -53
  197. package/src/tail/createTail.ts +103 -3
  198. package/src/tail/filters.ts +1 -1
  199. package/src/tail/index.ts +8 -11
  200. package/src/tail/printing.ts +27 -0
  201. package/src/traverse-module-graph.ts +54 -0
  202. package/src/tsconfig-sanity.ts +16 -0
  203. package/src/type-generation.ts +85 -57
  204. package/src/user/access.ts +0 -1
  205. package/src/user/auth-variables.ts +113 -0
  206. package/src/user/choose-account.tsx +1 -31
  207. package/src/user/index.ts +0 -1
  208. package/src/user/{user.tsx → user.ts} +124 -82
  209. package/src/utils/render.ts +93 -0
  210. package/src/{whoami.tsx → whoami.ts} +37 -71
  211. package/src/worker.ts +61 -3
  212. package/src/yargs-types.ts +22 -5
  213. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  214. package/templates/__tests__/tsconfig.json +8 -0
  215. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  216. package/templates/checked-fetch.js +9 -3
  217. package/templates/d1-beta-facade.js +95 -25
  218. package/templates/facade.d.ts +14 -0
  219. package/templates/first-party-worker-module-facade.ts +4 -3
  220. package/templates/format-dev-errors.ts +8 -6
  221. package/templates/gitignore +1 -0
  222. package/templates/init-tests/test-jest-new-worker.js +3 -5
  223. package/templates/init-tests/test-vitest-new-worker.js +3 -5
  224. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  225. package/templates/middleware/loader-modules.ts +2 -2
  226. package/templates/middleware/loader-sw.ts +51 -31
  227. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  228. package/templates/new-worker.ts +3 -0
  229. package/templates/pages-dev-pipeline.ts +4 -1
  230. package/templates/pages-dev-util.ts +4 -1
  231. package/templates/pages-shim.ts +4 -1
  232. package/templates/pages-template-plugin.ts +19 -10
  233. package/templates/serve-static-assets.ts +17 -14
  234. package/templates/service-bindings-module-facade.js +1 -0
  235. package/templates/tsconfig-sanity.ts +11 -0
  236. package/templates/tsconfig.init.json +105 -0
  237. package/templates/tsconfig.json +5 -103
  238. package/templates/tsconfig.tsbuildinfo +1 -0
  239. package/wrangler-dist/cli.d.ts +902 -77
  240. package/wrangler-dist/cli.js +131685 -140615
  241. package/wrangler-dist/wasm-sync.wasm +0 -0
  242. package/src/__tests__/api-devregistry.test.js +0 -57
  243. package/src/__tests__/d1.test.ts +0 -72
  244. package/src/__tests__/dialogs.test.tsx +0 -40
  245. package/src/__tests__/helpers/mock-cfetch.ts +0 -333
  246. package/src/__tests__/pages.test.ts +0 -2223
  247. package/src/d1/types.tsx +0 -14
  248. package/src/dialogs.tsx +0 -163
  249. package/src/environment-variables.ts +0 -50
  250. package/src/pages/build.tsx +0 -238
  251. package/src/user/env-vars.ts +0 -46
  252. package/templates/experimental-local-cache-stubs.js +0 -27
  253. /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
  254. /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
  255. /package/src/pages/{hash.tsx → hash.ts} +0 -0
@@ -1,34 +1,44 @@
1
1
  import * as fs from "node:fs";
2
2
  import { writeFileSync } from "node:fs";
3
3
  import * as TOML from "@iarna/toml";
4
+ import { rest } from "msw";
4
5
  import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
5
- import { setMockResponse, unsetAllMocks } from "./helpers/mock-cfetch";
6
6
  import { mockConsoleMethods } from "./helpers/mock-console";
7
- import {
8
- mockConfirm,
9
- mockPrompt,
10
- clearConfirmMocks,
11
- clearPromptMocks,
12
- } from "./helpers/mock-dialogs";
13
- import {
14
- mockGetMemberships,
15
- mockGetMembershipsFail,
16
- } from "./helpers/mock-oauth-flow";
7
+ import { mockConfirm, mockPrompt, clearDialogs } from "./helpers/mock-dialogs";
8
+ import { useMockIsTTY } from "./helpers/mock-istty";
9
+ import { mockGetMembershipsFail } from "./helpers/mock-oauth-flow";
17
10
  import { useMockStdin } from "./helpers/mock-stdin";
11
+ import { msw } from "./helpers/msw";
18
12
  import { runInTempDir } from "./helpers/run-in-tmp";
19
13
  import { runWrangler } from "./helpers/run-wrangler";
20
14
 
15
+ function createFetchResult(result: unknown, success = true) {
16
+ return {
17
+ success,
18
+ errors: [],
19
+ messages: [],
20
+ result,
21
+ };
22
+ }
23
+
24
+ export function mockGetMemberships(
25
+ accounts: { id: string; account: { id: string; name: string } }[]
26
+ ) {
27
+ msw.use(
28
+ rest.get("*/memberships", (req, res, ctx) => {
29
+ return res.once(ctx.json(createFetchResult(accounts)));
30
+ })
31
+ );
32
+ }
33
+
21
34
  describe("wrangler secret", () => {
22
35
  const std = mockConsoleMethods();
23
-
36
+ const { setIsTTY } = useMockIsTTY();
24
37
  runInTempDir();
25
38
  mockAccountId();
26
39
  mockApiToken();
27
-
28
40
  afterEach(() => {
29
- unsetAllMocks();
30
- clearConfirmMocks();
31
- clearPromptMocks();
41
+ clearDialogs();
32
42
  });
33
43
 
34
44
  describe("put", () => {
@@ -39,34 +49,37 @@ describe("wrangler secret", () => {
39
49
  ) {
40
50
  const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
41
51
  const environment = env && !legacyEnv ? "/environments/:envName" : "";
42
- setMockResponse(
43
- `/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets`,
44
- "PUT",
45
- ([_url, accountId, scriptName, envName], { body }) => {
46
- expect(accountId).toEqual("some-account-id");
47
- expect(scriptName).toEqual(
48
- legacyEnv && env ? `script-name-${env}` : "script-name"
49
- );
50
- if (!legacyEnv) {
51
- expect(envName).toEqual(env);
52
- }
53
- const { name, text, type } = JSON.parse(body as string);
54
- expect(type).toEqual("secret_text");
55
- expect(name).toEqual(input.name);
56
- expect(text).toEqual(input.text);
52
+ msw.use(
53
+ rest.put(
54
+ `*/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets`,
55
+ async (req, res, ctx) => {
56
+ expect(req.params.accountId).toEqual("some-account-id");
57
+ expect(req.params.scriptName).toEqual(
58
+ legacyEnv && env ? `script-name-${env}` : "script-name"
59
+ );
60
+ if (!legacyEnv) {
61
+ expect(req.params.envName).toEqual(env);
62
+ }
63
+ const { name, text, type } = await req.json();
64
+ expect(type).toEqual("secret_text");
65
+ expect(name).toEqual(input.name);
66
+ expect(text).toEqual(input.text);
57
67
 
58
- return { name, type };
59
- }
68
+ return res.once(ctx.json(createFetchResult({ name, type })));
69
+ }
70
+ )
60
71
  );
61
72
  }
62
73
 
63
74
  describe("interactive", () => {
64
- useMockStdin({ isTTY: true });
75
+ beforeEach(() => {
76
+ setIsTTY(true);
77
+ });
65
78
 
66
79
  it("should trim stdin secret value", async () => {
67
80
  mockPrompt({
68
81
  text: "Enter a secret value:",
69
- type: "password",
82
+ options: { isSecret: true },
70
83
  result: `hunter2
71
84
  `,
72
85
  });
@@ -82,7 +95,7 @@ describe("wrangler secret", () => {
82
95
  it("should create a secret", async () => {
83
96
  mockPrompt({
84
97
  text: "Enter a secret value:",
85
- type: "password",
98
+ options: { isSecret: true },
86
99
  result: "the-secret",
87
100
  });
88
101
 
@@ -107,15 +120,23 @@ describe("wrangler secret", () => {
107
120
 
108
121
  // User counter to pass different secrets to the request mock
109
122
  let counter = 0;
110
- setMockResponse(
111
- `/accounts/:accountId/workers/scripts/:scriptName/secrets`,
112
- "PUT",
113
- ([_url, accountId]) => {
114
- expect(accountId).toEqual("some-account-id");
115
- counter++;
116
-
117
- return { name: `secret-name-${counter}`, type: "secret_text" };
118
- }
123
+ msw.use(
124
+ rest.put(
125
+ `*/accounts/:accountId/workers/scripts/:scriptName/secrets`,
126
+ (req, res, ctx) => {
127
+ expect(req.params.accountId).toEqual("some-account-id");
128
+ counter++;
129
+
130
+ return res(
131
+ ctx.json(
132
+ createFetchResult({
133
+ name: `secret-name-${counter}`,
134
+ type: "secret_text",
135
+ })
136
+ )
137
+ );
138
+ }
139
+ )
119
140
  );
120
141
 
121
142
  await runWrangler("secret:bulk ./secret.json --name script-name");
@@ -131,7 +152,7 @@ describe("wrangler secret", () => {
131
152
  expect(std.err).toMatchInlineSnapshot(`""`);
132
153
  });
133
154
 
134
- it("should handle failed secret:bulk", async () => {
155
+ it("should handle network failure on secret:bulk", async () => {
135
156
  writeFileSync(
136
157
  "secret.json",
137
158
  JSON.stringify({
@@ -142,17 +163,16 @@ describe("wrangler secret", () => {
142
163
 
143
164
  // User counter to pass different secrets to the request mock
144
165
  let counter = 0;
145
- setMockResponse(
146
- `/accounts/:accountId/workers/scripts/:scriptName/secrets`,
147
- "PUT",
148
- ([_url, accountId]) => {
149
- expect(accountId).toEqual("some-account-id");
150
- counter++;
151
-
152
- return Promise.reject(
153
- new Error(`Failed to create secret ${counter}`)
154
- );
155
- }
166
+ msw.use(
167
+ rest.put(
168
+ `*/accounts/:accountId/workers/scripts/:scriptName/secrets`,
169
+ (req, res) => {
170
+ expect(req.params.accountId).toEqual("some-account-id");
171
+ counter++;
172
+
173
+ return res.networkError(`Failed to create secret ${counter}`);
174
+ }
175
+ )
156
176
  );
157
177
 
158
178
  await runWrangler("secret:bulk ./secret.json --name script-name");
@@ -167,18 +187,22 @@ describe("wrangler secret", () => {
167
187
  expect(std.err).toMatchInlineSnapshot(`
168
188
  "X [ERROR] 🚨 Error uploading secret for key: secret-name-1:
169
189
 
170
- Failed to create secret 1
190
+ request to
191
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
192
+ failed, reason: Failed to create secret 1
171
193
 
172
194
 
173
195
  X [ERROR] 🚨 Error uploading secret for key: secret-name-2:
174
196
 
175
- Failed to create secret 2
197
+ request to
198
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
199
+ failed, reason: Failed to create secret 2
176
200
 
177
201
  "
178
202
  `);
179
203
  });
180
204
 
181
- it("should count success and failed secret:bulk", async () => {
205
+ it("should count success and network failure on secret:bulk", async () => {
182
206
  writeFileSync(
183
207
  "secret.json",
184
208
  JSON.stringify({
@@ -194,21 +218,27 @@ describe("wrangler secret", () => {
194
218
 
195
219
  // User counter to pass different secrets to the request mock
196
220
  let counter = 0;
197
- setMockResponse(
198
- `/accounts/:accountId/workers/scripts/:scriptName/secrets`,
199
- "PUT",
200
- ([_url, accountId]) => {
201
- expect(accountId).toEqual("some-account-id");
202
- counter++;
203
-
204
- if (counter % 2 === 0) {
205
- return { name: `secret-name-${counter}`, type: "secret_text" };
206
- } else {
207
- return Promise.reject(
208
- new Error(`Failed to create secret ${counter}`)
209
- );
221
+ msw.use(
222
+ rest.put(
223
+ `*/accounts/:accountId/workers/scripts/:scriptName/secrets`,
224
+ (req, res, ctx) => {
225
+ expect(req.params.accountId).toEqual("some-account-id");
226
+ counter++;
227
+
228
+ if (counter % 2 === 0) {
229
+ return res(
230
+ ctx.json(
231
+ createFetchResult({
232
+ name: `secret-name-${counter}`,
233
+ type: "secret_text",
234
+ })
235
+ )
236
+ );
237
+ } else {
238
+ return res.networkError(`Failed to create secret ${counter}`);
239
+ }
210
240
  }
211
- }
241
+ )
212
242
  );
213
243
 
214
244
  await runWrangler("secret:bulk ./secret.json --name script-name");
@@ -226,22 +256,30 @@ describe("wrangler secret", () => {
226
256
  expect(std.err).toMatchInlineSnapshot(`
227
257
  "X [ERROR] 🚨 Error uploading secret for key: secret-name-1:
228
258
 
229
- Failed to create secret 1
259
+ request to
260
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
261
+ failed, reason: Failed to create secret 1
230
262
 
231
263
 
232
264
  X [ERROR] 🚨 Error uploading secret for key: secret-name-3:
233
265
 
234
- Failed to create secret 3
266
+ request to
267
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
268
+ failed, reason: Failed to create secret 3
235
269
 
236
270
 
237
271
  X [ERROR] 🚨 Error uploading secret for key: secret-name-5:
238
272
 
239
- Failed to create secret 5
273
+ request to
274
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
275
+ failed, reason: Failed to create secret 5
240
276
 
241
277
 
242
278
  X [ERROR] 🚨 Error uploading secret for key: secret-name-7:
243
279
 
244
- Failed to create secret 7
280
+ request to
281
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
282
+ failed, reason: Failed to create secret 7
245
283
 
246
284
  "
247
285
  `);
@@ -250,7 +288,7 @@ describe("wrangler secret", () => {
250
288
  it("should create a secret: legacy envs", async () => {
251
289
  mockPrompt({
252
290
  text: "Enter a secret value:",
253
- type: "password",
291
+ options: { isSecret: true },
254
292
  result: "the-secret",
255
293
  });
256
294
 
@@ -273,7 +311,7 @@ describe("wrangler secret", () => {
273
311
  it("should create a secret: service envs", async () => {
274
312
  mockPrompt({
275
313
  text: "Enter a secret value:",
276
- type: "password",
314
+ options: { isSecret: true },
277
315
  result: "the-secret",
278
316
  });
279
317
 
@@ -302,7 +340,7 @@ describe("wrangler secret", () => {
302
340
  }
303
341
  expect(std.out).toMatchInlineSnapshot(`
304
342
  "
305
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new/choose"
343
+ If you think this is a bug then please create an issue at https://github.com/cloudflare/workers-sdk/issues/new/choose"
306
344
  `);
307
345
  expect(std.err).toMatchInlineSnapshot(`
308
346
  "X [ERROR] Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`
@@ -316,6 +354,9 @@ describe("wrangler secret", () => {
316
354
  });
317
355
 
318
356
  describe("non-interactive", () => {
357
+ beforeEach(() => {
358
+ setIsTTY(false);
359
+ });
319
360
  const mockStdIn = useMockStdin({ isTTY: false });
320
361
 
321
362
  it("should trim stdin secret value, from piped input", async () => {
@@ -360,7 +401,7 @@ describe("wrangler secret", () => {
360
401
 
361
402
  expect(std.out).toMatchInlineSnapshot(`
362
403
  "
363
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new/choose"
404
+ If you think this is a bug then please create an issue at https://github.com/cloudflare/workers-sdk/issues/new/choose"
364
405
  `);
365
406
  expect(std.warn).toMatchInlineSnapshot(`""`);
366
407
  });
@@ -381,9 +422,9 @@ describe("wrangler secret", () => {
381
422
  mockGetMemberships([]);
382
423
  await expect(runWrangler("secret put the-key --name script-name"))
383
424
  .rejects.toThrowErrorMatchingInlineSnapshot(`
384
- "Failed to automatically retrieve account IDs for the logged in user.
385
- In a non-interactive environment, it is mandatory to specify an account ID, either by assigning its value to CLOUDFLARE_ACCOUNT_ID, or as \`account_id\` in your \`wrangler.toml\` file."
386
- `);
425
+ "Failed to automatically retrieve account IDs for the logged in user.
426
+ In a non-interactive environment, it is mandatory to specify an account ID, either by assigning its value to CLOUDFLARE_ACCOUNT_ID, or as \`account_id\` in your \`wrangler.toml\` file."
427
+ `);
387
428
  });
388
429
 
389
430
  it("should use the account from wrangler.toml", async () => {
@@ -423,19 +464,22 @@ describe("wrangler secret", () => {
423
464
 
424
465
  await expect(runWrangler("secret put the-key --name script-name"))
425
466
  .rejects.toThrowErrorMatchingInlineSnapshot(`
426
- "More than one account available but unable to select one in non-interactive mode.
427
- Please set the appropriate \`account_id\` in your \`wrangler.toml\` file.
428
- Available accounts are (\\"<name>\\" - \\"<id>\\"):
429
- \\"account-name-1\\" - \\"account-id-1\\")
430
- \\"account-name-2\\" - \\"account-id-2\\")
431
- \\"account-name-3\\" - \\"account-id-3\\")"
432
- `);
467
+ "More than one account available but unable to select one in non-interactive mode.
468
+ Please set the appropriate \`account_id\` in your \`wrangler.toml\` file.
469
+ Available accounts are (\`<name>\`: \`<account_id>\`):
470
+ \`account-name-1\`: \`account-id-1\`
471
+ \`account-name-2\`: \`account-id-2\`
472
+ \`account-name-3\`: \`account-id-3\`"
473
+ `);
433
474
  });
434
475
  });
435
476
  });
436
477
  });
437
478
 
438
479
  describe("delete", () => {
480
+ beforeEach(() => {
481
+ setIsTTY(true);
482
+ });
439
483
  function mockDeleteRequest(
440
484
  input: {
441
485
  scriptName: string;
@@ -446,28 +490,25 @@ describe("wrangler secret", () => {
446
490
  ) {
447
491
  const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
448
492
  const environment = env && !legacyEnv ? "/environments/:envName" : "";
449
- setMockResponse(
450
- `/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets/:secretName`,
451
- "DELETE",
452
- ([_url, accountId, scriptName, envOrSecretName, secretName]) => {
453
- expect(accountId).toEqual("some-account-id");
454
- expect(scriptName).toEqual(
455
- legacyEnv && env ? `script-name-${env}` : "script-name"
456
- );
457
- if (!legacyEnv) {
458
- if (env) {
459
- expect(envOrSecretName).toEqual(env);
460
- expect(secretName).toEqual(input.secretName);
461
- } else {
462
- expect(envOrSecretName).toEqual(input.secretName);
493
+ msw.use(
494
+ rest.delete(
495
+ `*/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets/:secretName`,
496
+ (req, res, ctx) => {
497
+ expect(req.params.accountId).toEqual("some-account-id");
498
+ expect(req.params.scriptName).toEqual(
499
+ legacyEnv && env ? `script-name-${env}` : "script-name"
500
+ );
501
+ if (!legacyEnv) {
502
+ if (env) {
503
+ expect(req.params.secretName).toEqual(input.secretName);
504
+ }
463
505
  }
464
- } else {
465
- expect(envOrSecretName).toEqual(input.secretName);
506
+ return res.once(ctx.json(createFetchResult(null)));
466
507
  }
467
- return null;
468
- }
508
+ )
469
509
  );
470
510
  }
511
+
471
512
  it("should delete a secret", async () => {
472
513
  mockDeleteRequest({ scriptName: "script-name", secretName: "the-key" });
473
514
  mockConfirm({
@@ -531,7 +572,7 @@ describe("wrangler secret", () => {
531
572
  }
532
573
  expect(std.out).toMatchInlineSnapshot(`
533
574
  "
534
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new/choose"
575
+ If you think this is a bug then please create an issue at https://github.com/cloudflare/workers-sdk/issues/new/choose"
535
576
  `);
536
577
  expect(std.err).toMatchInlineSnapshot(`
537
578
  "X [ERROR] Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`
@@ -545,6 +586,9 @@ describe("wrangler secret", () => {
545
586
  });
546
587
 
547
588
  describe("list", () => {
589
+ beforeEach(() => {
590
+ setIsTTY(true);
591
+ });
548
592
  function mockListRequest(
549
593
  input: { scriptName: string },
550
594
  env?: string,
@@ -552,25 +596,30 @@ describe("wrangler secret", () => {
552
596
  ) {
553
597
  const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
554
598
  const environment = env && !legacyEnv ? "/environments/:envName" : "";
555
- setMockResponse(
556
- `/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets`,
557
- "GET",
558
- ([_url, accountId, scriptName, envName]) => {
559
- expect(accountId).toEqual("some-account-id");
560
- expect(scriptName).toEqual(
561
- legacyEnv && env ? `script-name-${env}` : "script-name"
562
- );
563
- if (!legacyEnv) {
564
- expect(envName).toEqual(env);
565
- }
599
+ msw.use(
600
+ rest.get(
601
+ `*/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets`,
602
+ (req, res, ctx) => {
603
+ expect(req.params.accountId).toEqual("some-account-id");
604
+ expect(req.params.scriptName).toEqual(
605
+ legacyEnv && env ? `script-name-${env}` : "script-name"
606
+ );
607
+ if (!legacyEnv) {
608
+ expect(req.params.envName).toEqual(env);
609
+ }
566
610
 
567
- return [
568
- {
569
- name: "the-secret-name",
570
- type: "secret_text",
571
- },
572
- ];
573
- }
611
+ return res.once(
612
+ ctx.json(
613
+ createFetchResult([
614
+ {
615
+ name: "the-secret-name",
616
+ type: "secret_text",
617
+ },
618
+ ])
619
+ )
620
+ );
621
+ }
622
+ )
574
623
  );
575
624
  }
576
625
 
@@ -629,7 +678,7 @@ describe("wrangler secret", () => {
629
678
  }
630
679
  expect(std.out).toMatchInlineSnapshot(`
631
680
  "
632
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new/choose"
681
+ If you think this is a bug then please create an issue at https://github.com/cloudflare/workers-sdk/issues/new/choose"
633
682
  `);
634
683
  expect(std.err).toMatchInlineSnapshot(`
635
684
  "X [ERROR] Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`