wrangler 0.0.0-ecc8b172 → 0.0.0-ecded1af1

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 (250) hide show
  1. package/README.md +17 -19
  2. package/bin/wrangler.js +24 -93
  3. package/config-schema.json +3115 -0
  4. package/package.json +197 -190
  5. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  6. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  7. package/templates/__tests__/tsconfig.json +8 -0
  8. package/templates/checked-fetch.js +19 -6
  9. package/templates/facade.d.ts +19 -0
  10. package/templates/gitignore +2 -3
  11. package/templates/init-tests/test-jest-new-worker.js +3 -5
  12. package/templates/init-tests/test-vitest-new-worker.js +4 -6
  13. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  14. package/templates/middleware/common.ts +9 -4
  15. package/templates/middleware/loader-modules.ts +94 -44
  16. package/templates/middleware/loader-sw.ts +48 -32
  17. package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
  18. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  19. package/templates/middleware/middleware-mock-analytics-engine.d.ts +3 -0
  20. package/templates/middleware/middleware-mock-analytics-engine.ts +30 -0
  21. package/templates/middleware/middleware-scheduled.ts +15 -1
  22. package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
  23. package/templates/middleware/middleware-serve-static-assets.ts +56 -0
  24. package/templates/modules-watch-stub.js +4 -0
  25. package/templates/new-worker-scheduled.ts +1 -1
  26. package/templates/new-worker.ts +4 -1
  27. package/templates/pages-dev-pipeline.ts +10 -13
  28. package/templates/pages-dev-util.ts +55 -0
  29. package/templates/pages-shim.ts +1 -1
  30. package/templates/pages-template-plugin.ts +37 -14
  31. package/templates/pages-template-worker.ts +33 -7
  32. package/templates/startDevWorker/InspectorProxyWorker.ts +664 -0
  33. package/templates/startDevWorker/ProxyWorker.ts +336 -0
  34. package/templates/tsconfig-sanity.ts +11 -0
  35. package/templates/tsconfig.init.json +22 -0
  36. package/templates/tsconfig.json +5 -102
  37. package/wrangler-dist/InspectorProxyWorker.js +464 -0
  38. package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
  39. package/wrangler-dist/ProxyWorker.js +241 -0
  40. package/wrangler-dist/ProxyWorker.js.map +6 -0
  41. package/wrangler-dist/cli.d.ts +26095 -471
  42. package/wrangler-dist/cli.js +178062 -122008
  43. package/wrangler-dist/wasm-sync.wasm +0 -0
  44. package/Cloudflare_CA.pem +0 -18
  45. package/import_meta_url.js +0 -3
  46. package/miniflare-config-stubs/.env.empty +0 -0
  47. package/miniflare-config-stubs/package.empty.json +0 -1
  48. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  49. package/miniflare-dist/index.mjs +0 -6310
  50. package/src/__tests__/api-dev.test.ts +0 -209
  51. package/src/__tests__/api-devregistry.test.js +0 -56
  52. package/src/__tests__/api.test.ts +0 -80
  53. package/src/__tests__/config-cache-without-cache-dir.test.ts +0 -38
  54. package/src/__tests__/config-cache.test.ts +0 -42
  55. package/src/__tests__/configuration.test.ts +0 -3864
  56. package/src/__tests__/d1.test.ts +0 -70
  57. package/src/__tests__/delete.test.ts +0 -116
  58. package/src/__tests__/dev.test.tsx +0 -1357
  59. package/src/__tests__/dialogs.test.tsx +0 -40
  60. package/src/__tests__/generate.test.ts +0 -235
  61. package/src/__tests__/get-host-from-url.test.ts +0 -16
  62. package/src/__tests__/guess-worker-format.test.ts +0 -85
  63. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  64. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  65. package/src/__tests__/helpers/mock-account-id.ts +0 -48
  66. package/src/__tests__/helpers/mock-bin.ts +0 -36
  67. package/src/__tests__/helpers/mock-cfetch.ts +0 -333
  68. package/src/__tests__/helpers/mock-console.ts +0 -106
  69. package/src/__tests__/helpers/mock-dialogs.ts +0 -153
  70. package/src/__tests__/helpers/mock-get-zone-from-host.ts +0 -8
  71. package/src/__tests__/helpers/mock-http-server.ts +0 -46
  72. package/src/__tests__/helpers/mock-istty.ts +0 -74
  73. package/src/__tests__/helpers/mock-known-routes.ts +0 -7
  74. package/src/__tests__/helpers/mock-kv.ts +0 -33
  75. package/src/__tests__/helpers/mock-oauth-flow.ts +0 -252
  76. package/src/__tests__/helpers/mock-process.ts +0 -39
  77. package/src/__tests__/helpers/mock-stdin.ts +0 -108
  78. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  79. package/src/__tests__/helpers/msw/handlers/namespaces.ts +0 -104
  80. package/src/__tests__/helpers/msw/handlers/oauth.ts +0 -36
  81. package/src/__tests__/helpers/msw/handlers/r2.ts +0 -80
  82. package/src/__tests__/helpers/msw/handlers/script.ts +0 -75
  83. package/src/__tests__/helpers/msw/handlers/user.ts +0 -63
  84. package/src/__tests__/helpers/msw/index.ts +0 -15
  85. package/src/__tests__/helpers/run-in-tmp.ts +0 -38
  86. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  87. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +0 -1
  88. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +0 -5
  89. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +0 -1
  90. package/src/__tests__/helpers/worker-scripts/parent-worker.js +0 -8
  91. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +0 -5
  92. package/src/__tests__/helpers/write-worker-source.ts +0 -31
  93. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  94. package/src/__tests__/https-options.test.ts +0 -163
  95. package/src/__tests__/index.test.ts +0 -251
  96. package/src/__tests__/init.test.ts +0 -2816
  97. package/src/__tests__/jest.setup.ts +0 -191
  98. package/src/__tests__/kv.test.ts +0 -1675
  99. package/src/__tests__/logger.test.ts +0 -141
  100. package/src/__tests__/metrics.test.ts +0 -450
  101. package/src/__tests__/middleware.scheduled.test.ts +0 -135
  102. package/src/__tests__/middleware.test.ts +0 -726
  103. package/src/__tests__/package-manager.test.ts +0 -353
  104. package/src/__tests__/pages.test.ts +0 -2111
  105. package/src/__tests__/parse.test.ts +0 -330
  106. package/src/__tests__/paths.test.ts +0 -39
  107. package/src/__tests__/publish.test.ts +0 -7119
  108. package/src/__tests__/pubsub.test.ts +0 -367
  109. package/src/__tests__/r2.test.ts +0 -371
  110. package/src/__tests__/route.test.ts +0 -45
  111. package/src/__tests__/secret.test.ts +0 -644
  112. package/src/__tests__/tail.test.ts +0 -800
  113. package/src/__tests__/test-old-node-version.js +0 -31
  114. package/src/__tests__/user.test.ts +0 -155
  115. package/src/__tests__/utils-collectKeyValues.test.ts +0 -47
  116. package/src/__tests__/validate-dev-props.test.ts +0 -56
  117. package/src/__tests__/version.test.ts +0 -35
  118. package/src/__tests__/whoami.test.tsx +0 -278
  119. package/src/__tests__/worker-namespace.test.ts +0 -321
  120. package/src/abort.d.ts +0 -3
  121. package/src/api/dev.ts +0 -208
  122. package/src/api/index.ts +0 -2
  123. package/src/bundle-reporter.tsx +0 -29
  124. package/src/bundle.ts +0 -756
  125. package/src/cfetch/index.ts +0 -160
  126. package/src/cfetch/internal.ts +0 -263
  127. package/src/cli.ts +0 -29
  128. package/src/config/README.md +0 -107
  129. package/src/config/config.ts +0 -275
  130. package/src/config/diagnostics.ts +0 -80
  131. package/src/config/environment.ts +0 -505
  132. package/src/config/index.ts +0 -293
  133. package/src/config/validation-helpers.ts +0 -597
  134. package/src/config/validation.ts +0 -1930
  135. package/src/config-cache.ts +0 -85
  136. package/src/create-worker-preview.ts +0 -275
  137. package/src/create-worker-upload-form.ts +0 -301
  138. package/src/d1/backups.tsx +0 -212
  139. package/src/d1/create.tsx +0 -54
  140. package/src/d1/delete.tsx +0 -56
  141. package/src/d1/execute.tsx +0 -294
  142. package/src/d1/formatTimeAgo.ts +0 -14
  143. package/src/d1/index.ts +0 -75
  144. package/src/d1/list.tsx +0 -48
  145. package/src/d1/options.ts +0 -12
  146. package/src/d1/types.tsx +0 -14
  147. package/src/d1/utils.ts +0 -39
  148. package/src/delete.ts +0 -86
  149. package/src/deprecated/index.ts +0 -453
  150. package/src/dev/dev-vars.ts +0 -36
  151. package/src/dev/dev.tsx +0 -575
  152. package/src/dev/get-local-persistence-path.tsx +0 -31
  153. package/src/dev/local.tsx +0 -686
  154. package/src/dev/remote.tsx +0 -601
  155. package/src/dev/start-server.ts +0 -506
  156. package/src/dev/use-esbuild.ts +0 -197
  157. package/src/dev/validate-dev-props.ts +0 -31
  158. package/src/dev-registry.tsx +0 -201
  159. package/src/dev.tsx +0 -865
  160. package/src/dialogs.tsx +0 -163
  161. package/src/dispatch-namespace.ts +0 -206
  162. package/src/durable.ts +0 -102
  163. package/src/entry.ts +0 -329
  164. package/src/environment-variables.ts +0 -50
  165. package/src/errors.ts +0 -11
  166. package/src/git-client.ts +0 -124
  167. package/src/global-wrangler-config-path.ts +0 -26
  168. package/src/https-options.ts +0 -127
  169. package/src/index.tsx +0 -582
  170. package/src/init.ts +0 -970
  171. package/src/inspect.ts +0 -747
  172. package/src/intl-polyfill.d.ts +0 -139
  173. package/src/is-ci.ts +0 -14
  174. package/src/is-interactive.ts +0 -12
  175. package/src/kv/helpers.ts +0 -430
  176. package/src/kv/index.ts +0 -645
  177. package/src/logger.ts +0 -80
  178. package/src/metrics/index.ts +0 -5
  179. package/src/metrics/metrics-config.ts +0 -239
  180. package/src/metrics/metrics-dispatcher.ts +0 -96
  181. package/src/metrics/metrics-usage-headers.ts +0 -24
  182. package/src/metrics/send-event.ts +0 -94
  183. package/src/miniflare-cli/README.md +0 -30
  184. package/src/miniflare-cli/assets.ts +0 -215
  185. package/src/miniflare-cli/index.ts +0 -208
  186. package/src/miniflare-cli/request-context.ts +0 -40
  187. package/src/module-collection.ts +0 -267
  188. package/src/open-in-browser.ts +0 -17
  189. package/src/package-manager.ts +0 -219
  190. package/src/pages/build.tsx +0 -238
  191. package/src/pages/constants.ts +0 -16
  192. package/src/pages/deployments.tsx +0 -106
  193. package/src/pages/dev.tsx +0 -689
  194. package/src/pages/errors.ts +0 -66
  195. package/src/pages/functions/buildPlugin.ts +0 -110
  196. package/src/pages/functions/buildWorker.ts +0 -156
  197. package/src/pages/functions/filepath-routing.test.ts +0 -234
  198. package/src/pages/functions/filepath-routing.ts +0 -189
  199. package/src/pages/functions/identifiers.ts +0 -78
  200. package/src/pages/functions/routes-consolidation.test.ts +0 -250
  201. package/src/pages/functions/routes-consolidation.ts +0 -73
  202. package/src/pages/functions/routes-transformation.test.ts +0 -282
  203. package/src/pages/functions/routes-transformation.ts +0 -115
  204. package/src/pages/functions/routes-validation.test.ts +0 -403
  205. package/src/pages/functions/routes-validation.ts +0 -202
  206. package/src/pages/functions/routes.ts +0 -151
  207. package/src/pages/functions.tsx +0 -82
  208. package/src/pages/hash.tsx +0 -13
  209. package/src/pages/index.tsx +0 -94
  210. package/src/pages/projects.tsx +0 -169
  211. package/src/pages/publish.tsx +0 -436
  212. package/src/pages/types.ts +0 -49
  213. package/src/pages/upload.tsx +0 -398
  214. package/src/pages/utils.ts +0 -12
  215. package/src/parse.ts +0 -286
  216. package/src/paths.ts +0 -71
  217. package/src/proxy.ts +0 -657
  218. package/src/publish/index.ts +0 -267
  219. package/src/publish/publish.ts +0 -913
  220. package/src/pubsub/index.ts +0 -286
  221. package/src/pubsub/pubsub-commands.tsx +0 -623
  222. package/src/r2/helpers.ts +0 -131
  223. package/src/r2/index.ts +0 -277
  224. package/src/routes.ts +0 -140
  225. package/src/secret/index.ts +0 -403
  226. package/src/selfsigned.d.ts +0 -29
  227. package/src/sites.tsx +0 -372
  228. package/src/tail/createTail.ts +0 -315
  229. package/src/tail/filters.ts +0 -277
  230. package/src/tail/index.ts +0 -217
  231. package/src/tail/printing.ts +0 -107
  232. package/src/update-check.ts +0 -19
  233. package/src/user/choose-account.tsx +0 -69
  234. package/src/user/env-vars.ts +0 -46
  235. package/src/user/generate-auth-url.ts +0 -33
  236. package/src/user/generate-random-state.ts +0 -16
  237. package/src/user/index.ts +0 -3
  238. package/src/user/user.tsx +0 -1192
  239. package/src/utils/collectKeyValues.ts +0 -14
  240. package/src/whoami.tsx +0 -169
  241. package/src/worker.ts +0 -234
  242. package/src/yargs-types.ts +0 -7
  243. package/src/zones.ts +0 -165
  244. package/templates/d1-beta-facade.js +0 -174
  245. package/templates/experimental-local-cache-stubs.js +0 -27
  246. package/templates/first-party-worker-module-facade.ts +0 -18
  247. package/templates/format-dev-errors.ts +0 -32
  248. package/templates/serve-static-assets.ts +0 -63
  249. package/templates/service-bindings-module-facade.js +0 -54
  250. package/templates/service-bindings-sw-facade.js +0 -42
@@ -1,644 +0,0 @@
1
- import * as fs from "node:fs";
2
- import { writeFileSync } from "node:fs";
3
- import * as TOML from "@iarna/toml";
4
- import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
5
- import { setMockResponse, unsetAllMocks } from "./helpers/mock-cfetch";
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";
17
- import { useMockStdin } from "./helpers/mock-stdin";
18
- import { runInTempDir } from "./helpers/run-in-tmp";
19
- import { runWrangler } from "./helpers/run-wrangler";
20
-
21
- describe("wrangler secret", () => {
22
- const std = mockConsoleMethods();
23
-
24
- runInTempDir();
25
- mockAccountId();
26
- mockApiToken();
27
-
28
- afterEach(() => {
29
- unsetAllMocks();
30
- clearConfirmMocks();
31
- clearPromptMocks();
32
- });
33
-
34
- describe("put", () => {
35
- function mockPutRequest(
36
- input: { name: string; text: string },
37
- env?: string,
38
- legacyEnv = false
39
- ) {
40
- const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
41
- 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);
57
-
58
- return { name, type };
59
- }
60
- );
61
- }
62
-
63
- describe("interactive", () => {
64
- useMockStdin({ isTTY: true });
65
-
66
- it("should trim stdin secret value", async () => {
67
- mockPrompt({
68
- text: "Enter a secret value:",
69
- type: "password",
70
- result: `hunter2
71
- `,
72
- });
73
-
74
- mockPutRequest({ name: `secret-name`, text: `hunter2` });
75
- await runWrangler("secret put secret-name --name script-name");
76
- expect(std.out).toMatchInlineSnapshot(`
77
- "🌀 Creating the secret for the Worker \\"script-name\\"
78
- ✨ Success! Uploaded secret secret-name"
79
- `);
80
- });
81
-
82
- it("should create a secret", async () => {
83
- mockPrompt({
84
- text: "Enter a secret value:",
85
- type: "password",
86
- result: "the-secret",
87
- });
88
-
89
- mockPutRequest({ name: "the-key", text: "the-secret" });
90
- await runWrangler("secret put the-key --name script-name");
91
-
92
- expect(std.out).toMatchInlineSnapshot(`
93
- "🌀 Creating the secret for the Worker \\"script-name\\"
94
- ✨ Success! Uploaded secret the-key"
95
- `);
96
- expect(std.err).toMatchInlineSnapshot(`""`);
97
- });
98
-
99
- it("should create secret:bulk", async () => {
100
- writeFileSync(
101
- "secret.json",
102
- JSON.stringify({
103
- "secret-name-1": "secret_text",
104
- "secret-name-2": "secret_text",
105
- })
106
- );
107
-
108
- // User counter to pass different secrets to the request mock
109
- 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
- }
119
- );
120
-
121
- await runWrangler("secret:bulk ./secret.json --name script-name");
122
-
123
- expect(std.out).toMatchInlineSnapshot(`
124
- "🌀 Creating the secrets for the Worker \\"script-name\\"
125
- ✨ Successfully created secret for key: secret-name-1
126
- ✨ Successfully created secret for key: secret-name-2
127
-
128
- Finished processing secrets JSON file:
129
- ✨ 2 secrets successfully uploaded"
130
- `);
131
- expect(std.err).toMatchInlineSnapshot(`""`);
132
- });
133
-
134
- it("should handle failed secret:bulk", async () => {
135
- writeFileSync(
136
- "secret.json",
137
- JSON.stringify({
138
- "secret-name-1": "secret_text",
139
- "secret-name-2": "secret_text",
140
- })
141
- );
142
-
143
- // User counter to pass different secrets to the request mock
144
- 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
- }
156
- );
157
-
158
- await runWrangler("secret:bulk ./secret.json --name script-name");
159
-
160
- expect(std.out).toMatchInlineSnapshot(`
161
- "🌀 Creating the secrets for the Worker \\"script-name\\"
162
-
163
- Finished processing secrets JSON file:
164
- ✨ 0 secrets successfully uploaded
165
- 🚨 2 secrets failed to upload"
166
- `);
167
- expect(std.err).toMatchInlineSnapshot(`
168
- "X [ERROR] 🚨 Error uploading secret for key: secret-name-1:
169
-
170
- Failed to create secret 1
171
-
172
-
173
- X [ERROR] 🚨 Error uploading secret for key: secret-name-2:
174
-
175
- Failed to create secret 2
176
-
177
- "
178
- `);
179
- });
180
-
181
- it("should count success and failed secret:bulk", async () => {
182
- writeFileSync(
183
- "secret.json",
184
- JSON.stringify({
185
- "secret-name-1": "secret_text",
186
- "secret-name-2": "secret_text",
187
- "secret-name-3": "secret_text",
188
- "secret-name-4": "secret_text",
189
- "secret-name-5": "secret_text",
190
- "secret-name-6": "secret_text",
191
- "secret-name-7": "secret_text",
192
- })
193
- );
194
-
195
- // User counter to pass different secrets to the request mock
196
- 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
- );
210
- }
211
- }
212
- );
213
-
214
- await runWrangler("secret:bulk ./secret.json --name script-name");
215
-
216
- expect(std.out).toMatchInlineSnapshot(`
217
- "🌀 Creating the secrets for the Worker \\"script-name\\"
218
- ✨ Successfully created secret for key: secret-name-2
219
- ✨ Successfully created secret for key: secret-name-4
220
- ✨ Successfully created secret for key: secret-name-6
221
-
222
- Finished processing secrets JSON file:
223
- ✨ 3 secrets successfully uploaded
224
- 🚨 4 secrets failed to upload"
225
- `);
226
- expect(std.err).toMatchInlineSnapshot(`
227
- "X [ERROR] 🚨 Error uploading secret for key: secret-name-1:
228
-
229
- Failed to create secret 1
230
-
231
-
232
- X [ERROR] 🚨 Error uploading secret for key: secret-name-3:
233
-
234
- Failed to create secret 3
235
-
236
-
237
- X [ERROR] 🚨 Error uploading secret for key: secret-name-5:
238
-
239
- Failed to create secret 5
240
-
241
-
242
- X [ERROR] 🚨 Error uploading secret for key: secret-name-7:
243
-
244
- Failed to create secret 7
245
-
246
- "
247
- `);
248
- });
249
-
250
- it("should create a secret: legacy envs", async () => {
251
- mockPrompt({
252
- text: "Enter a secret value:",
253
- type: "password",
254
- result: "the-secret",
255
- });
256
-
257
- mockPutRequest(
258
- { name: "the-key", text: "the-secret" },
259
- "some-env",
260
- true
261
- );
262
- await runWrangler(
263
- "secret put the-key --name script-name --env some-env --legacy-env"
264
- );
265
-
266
- expect(std.out).toMatchInlineSnapshot(`
267
- "🌀 Creating the secret for the Worker \\"script-name-some-env\\"
268
- ✨ Success! Uploaded secret the-key"
269
- `);
270
- expect(std.err).toMatchInlineSnapshot(`""`);
271
- });
272
-
273
- it("should create a secret: service envs", async () => {
274
- mockPrompt({
275
- text: "Enter a secret value:",
276
- type: "password",
277
- result: "the-secret",
278
- });
279
-
280
- mockPutRequest(
281
- { name: "the-key", text: "the-secret" },
282
- "some-env",
283
- false
284
- );
285
- await runWrangler(
286
- "secret put the-key --name script-name --env some-env --legacy-env false"
287
- );
288
-
289
- expect(std.out).toMatchInlineSnapshot(`
290
- "🌀 Creating the secret for the Worker \\"script-name\\" (some-env)
291
- ✨ Success! Uploaded secret the-key"
292
- `);
293
- expect(std.err).toMatchInlineSnapshot(`""`);
294
- });
295
-
296
- it("should error without a script name", async () => {
297
- let error: Error | undefined;
298
- try {
299
- await runWrangler("secret put the-key");
300
- } catch (e) {
301
- error = e as Error;
302
- }
303
- expect(std.out).toMatchInlineSnapshot(`
304
- "
305
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new/choose"
306
- `);
307
- expect(std.err).toMatchInlineSnapshot(`
308
- "X [ERROR] Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`
309
-
310
- "
311
- `);
312
- expect(error).toMatchInlineSnapshot(
313
- `[Error: Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`]`
314
- );
315
- });
316
- });
317
-
318
- describe("non-interactive", () => {
319
- const mockStdIn = useMockStdin({ isTTY: false });
320
-
321
- it("should trim stdin secret value, from piped input", async () => {
322
- mockPutRequest({ name: "the-key", text: "the-secret" });
323
- // Pipe the secret in as three chunks to test that we reconstitute it correctly.
324
- mockStdIn.send(
325
- `the`,
326
- `-`,
327
- `secret
328
- ` // whitespace & newline being removed
329
- );
330
- await runWrangler("secret put the-key --name script-name");
331
-
332
- expect(std.out).toMatchInlineSnapshot(`
333
- "🌀 Creating the secret for the Worker \\"script-name\\"
334
- ✨ Success! Uploaded secret the-key"
335
- `);
336
- expect(std.warn).toMatchInlineSnapshot(`""`);
337
- expect(std.err).toMatchInlineSnapshot(`""`);
338
- });
339
-
340
- it("should create a secret, from piped input", async () => {
341
- mockPutRequest({ name: "the-key", text: "the-secret" });
342
- // Pipe the secret in as three chunks to test that we reconstitute it correctly.
343
- mockStdIn.send("the", "-", "secret");
344
- await runWrangler("secret put the-key --name script-name");
345
-
346
- expect(std.out).toMatchInlineSnapshot(`
347
- "🌀 Creating the secret for the Worker \\"script-name\\"
348
- ✨ Success! Uploaded secret the-key"
349
- `);
350
- expect(std.warn).toMatchInlineSnapshot(`""`);
351
- expect(std.err).toMatchInlineSnapshot(`""`);
352
- });
353
-
354
- it("should error if the piped input fails", async () => {
355
- mockPutRequest({ name: "the-key", text: "the-secret" });
356
- mockStdIn.throwError(new Error("Error in stdin stream"));
357
- await expect(
358
- runWrangler("secret put the-key --name script-name")
359
- ).rejects.toThrowErrorMatchingInlineSnapshot(`"Error in stdin stream"`);
360
-
361
- expect(std.out).toMatchInlineSnapshot(`
362
- "
363
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new/choose"
364
- `);
365
- expect(std.warn).toMatchInlineSnapshot(`""`);
366
- });
367
-
368
- describe("with accountId", () => {
369
- mockAccountId({ accountId: null });
370
-
371
- it("should error if request for memberships fails", async () => {
372
- mockGetMembershipsFail();
373
- await expect(
374
- runWrangler("secret put the-key --name script-name")
375
- ).rejects.toThrowErrorMatchingInlineSnapshot(
376
- `"A request to the Cloudflare API (/memberships) failed."`
377
- );
378
- });
379
-
380
- it("should error if a user has no account", async () => {
381
- mockGetMemberships([]);
382
- await expect(runWrangler("secret put the-key --name script-name"))
383
- .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
- `);
387
- });
388
-
389
- it("should use the account from wrangler.toml", async () => {
390
- fs.writeFileSync(
391
- "wrangler.toml",
392
- TOML.stringify({
393
- account_id: "some-account-id",
394
- }),
395
- "utf-8"
396
- );
397
- mockStdIn.send("the-secret");
398
- mockPutRequest({ name: "the-key", text: "the-secret" });
399
- await runWrangler("secret put the-key --name script-name");
400
- expect(std.out).toMatchInlineSnapshot(`
401
- "🌀 Creating the secret for the Worker \\"script-name\\"
402
- ✨ Success! Uploaded secret the-key"
403
- `);
404
- expect(std.warn).toMatchInlineSnapshot(`""`);
405
- expect(std.err).toMatchInlineSnapshot(`""`);
406
- });
407
-
408
- it("should error if a user has multiple accounts, and has not specified an account in wrangler.toml", async () => {
409
- mockGetMemberships([
410
- {
411
- id: "1",
412
- account: { id: "account-id-1", name: "account-name-1" },
413
- },
414
- {
415
- id: "2",
416
- account: { id: "account-id-2", name: "account-name-2" },
417
- },
418
- {
419
- id: "3",
420
- account: { id: "account-id-3", name: "account-name-3" },
421
- },
422
- ]);
423
-
424
- await expect(runWrangler("secret put the-key --name script-name"))
425
- .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
- `);
433
- });
434
- });
435
- });
436
- });
437
-
438
- describe("delete", () => {
439
- function mockDeleteRequest(
440
- input: {
441
- scriptName: string;
442
- secretName: string;
443
- },
444
- env?: string,
445
- legacyEnv = false
446
- ) {
447
- const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
448
- 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);
463
- }
464
- } else {
465
- expect(envOrSecretName).toEqual(input.secretName);
466
- }
467
- return null;
468
- }
469
- );
470
- }
471
- it("should delete a secret", async () => {
472
- mockDeleteRequest({ scriptName: "script-name", secretName: "the-key" });
473
- mockConfirm({
474
- text: "Are you sure you want to permanently delete the secret the-key on the Worker script-name?",
475
- result: true,
476
- });
477
- await runWrangler("secret delete the-key --name script-name");
478
- expect(std.out).toMatchInlineSnapshot(`
479
- "🌀 Deleting the secret the-key on the Worker script-name
480
- ✨ Success! Deleted secret the-key"
481
- `);
482
- expect(std.err).toMatchInlineSnapshot(`""`);
483
- });
484
-
485
- it("should delete a secret: legacy envs", async () => {
486
- mockDeleteRequest(
487
- { scriptName: "script-name", secretName: "the-key" },
488
- "some-env",
489
- true
490
- );
491
- mockConfirm({
492
- text: "Are you sure you want to permanently delete the secret the-key on the Worker script-name-some-env?",
493
- result: true,
494
- });
495
- await runWrangler(
496
- "secret delete the-key --name script-name --env some-env --legacy-env"
497
- );
498
- expect(std.out).toMatchInlineSnapshot(`
499
- "🌀 Deleting the secret the-key on the Worker script-name-some-env
500
- ✨ Success! Deleted secret the-key"
501
- `);
502
- expect(std.err).toMatchInlineSnapshot(`""`);
503
- });
504
-
505
- it("should delete a secret: service envs", async () => {
506
- mockDeleteRequest(
507
- { scriptName: "script-name", secretName: "the-key" },
508
- "some-env"
509
- );
510
- mockConfirm({
511
- text: "Are you sure you want to permanently delete the secret the-key on the Worker script-name (some-env)?",
512
- result: true,
513
- });
514
- await runWrangler(
515
- "secret delete the-key --name script-name --env some-env --legacy-env false"
516
- );
517
- expect(std.out).toMatchInlineSnapshot(`
518
- "🌀 Deleting the secret the-key on the Worker script-name (some-env)
519
- ✨ Success! Deleted secret the-key"
520
- `);
521
- expect(std.err).toMatchInlineSnapshot(`""`);
522
- });
523
-
524
- it("should error without a script name", async () => {
525
- let error: Error | undefined;
526
-
527
- try {
528
- await runWrangler("secret delete the-key");
529
- } catch (e) {
530
- error = e as Error;
531
- }
532
- expect(std.out).toMatchInlineSnapshot(`
533
- "
534
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new/choose"
535
- `);
536
- expect(std.err).toMatchInlineSnapshot(`
537
- "X [ERROR] Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`
538
-
539
- "
540
- `);
541
- expect(error).toMatchInlineSnapshot(
542
- `[Error: Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`]`
543
- );
544
- });
545
- });
546
-
547
- describe("list", () => {
548
- function mockListRequest(
549
- input: { scriptName: string },
550
- env?: string,
551
- legacyEnv = false
552
- ) {
553
- const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
554
- 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
- }
566
-
567
- return [
568
- {
569
- name: "the-secret-name",
570
- type: "secret_text",
571
- },
572
- ];
573
- }
574
- );
575
- }
576
-
577
- it("should list secrets", async () => {
578
- mockListRequest({ scriptName: "script-name" });
579
- await runWrangler("secret list --name script-name");
580
- expect(std.out).toMatchInlineSnapshot(`
581
- "[
582
- {
583
- \\"name\\": \\"the-secret-name\\",
584
- \\"type\\": \\"secret_text\\"
585
- }
586
- ]"
587
- `);
588
- expect(std.err).toMatchInlineSnapshot(`""`);
589
- });
590
-
591
- it("should list secrets: legacy envs", async () => {
592
- mockListRequest({ scriptName: "script-name" }, "some-env", true);
593
- await runWrangler(
594
- "secret list --name script-name --env some-env --legacy-env"
595
- );
596
- expect(std.out).toMatchInlineSnapshot(`
597
- "[
598
- {
599
- \\"name\\": \\"the-secret-name\\",
600
- \\"type\\": \\"secret_text\\"
601
- }
602
- ]"
603
- `);
604
- expect(std.err).toMatchInlineSnapshot(`""`);
605
- });
606
-
607
- it("should list secrets: service envs", async () => {
608
- mockListRequest({ scriptName: "script-name" }, "some-env");
609
- await runWrangler(
610
- "secret list --name script-name --env some-env --legacy-env false"
611
- );
612
- expect(std.out).toMatchInlineSnapshot(`
613
- "[
614
- {
615
- \\"name\\": \\"the-secret-name\\",
616
- \\"type\\": \\"secret_text\\"
617
- }
618
- ]"
619
- `);
620
- expect(std.err).toMatchInlineSnapshot(`""`);
621
- });
622
-
623
- it("should error without a script name", async () => {
624
- let error: Error | undefined;
625
- try {
626
- await runWrangler("secret list");
627
- } catch (e) {
628
- error = e as Error;
629
- }
630
- expect(std.out).toMatchInlineSnapshot(`
631
- "
632
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new/choose"
633
- `);
634
- expect(std.err).toMatchInlineSnapshot(`
635
- "X [ERROR] Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`
636
-
637
- "
638
- `);
639
- expect(error).toMatchInlineSnapshot(
640
- `[Error: Required Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`]`
641
- );
642
- });
643
- });
644
- });