wrangler 0.0.0-e7a0cd5b → 0.0.0-e7cf0caa
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.
- package/README.md +3 -3
- package/bin/wrangler.js +30 -10
- package/miniflare-dist/index.mjs +126 -74
- package/package.json +27 -19
- package/src/__tests__/api-dev.test.ts +65 -36
- package/src/__tests__/api-devregistry.test.ts +121 -0
- package/src/__tests__/api.test.ts +27 -5
- package/src/__tests__/configuration.test.ts +567 -86
- package/src/__tests__/d1/d1.test.ts +82 -0
- package/src/__tests__/d1/execute.test.ts +66 -0
- package/src/__tests__/d1/migrate.test.ts +157 -0
- package/src/__tests__/d1/splitter.test.ts +255 -0
- package/src/__tests__/delete.test.ts +91 -49
- package/src/__tests__/deployments.test.ts +330 -56
- package/src/__tests__/dev.test.tsx +198 -90
- package/src/__tests__/generate.test.ts +12 -10
- package/src/__tests__/guess-worker-format.test.ts +35 -0
- package/src/__tests__/helpers/end-event-loop.ts +6 -0
- package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
- package/src/__tests__/helpers/mock-console.ts +6 -0
- package/src/__tests__/helpers/mock-dialogs.ts +71 -85
- package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
- package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
- package/src/__tests__/helpers/mock-known-routes.ts +7 -2
- package/src/__tests__/helpers/mock-kv.ts +29 -16
- package/src/__tests__/helpers/mock-oauth-flow.ts +103 -92
- package/src/__tests__/helpers/mock-process.ts +8 -13
- package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
- package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
- package/src/__tests__/helpers/msw/handlers/deployments.ts +128 -27
- package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
- package/src/__tests__/helpers/msw/handlers/oauth.ts +13 -18
- package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
- package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
- package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
- package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
- package/src/__tests__/helpers/msw/index.ts +32 -1
- package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
- package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
- package/src/__tests__/index.test.ts +90 -72
- package/src/__tests__/init.test.ts +927 -631
- package/src/__tests__/jest.setup.ts +19 -42
- package/src/__tests__/kv.test.ts +355 -231
- package/src/__tests__/logger.test.ts +68 -2
- package/src/__tests__/logout.test.ts +47 -0
- package/src/__tests__/metrics.test.ts +94 -51
- package/src/__tests__/middleware.scheduled.test.ts +42 -32
- package/src/__tests__/middleware.test.ts +212 -122
- package/src/__tests__/mtls-certificates.test.ts +588 -0
- package/src/__tests__/pages/deployment-list.test.ts +80 -0
- package/src/__tests__/pages/functions-build.test.ts +452 -0
- package/src/__tests__/pages/pages.test.ts +81 -0
- package/src/__tests__/pages/project-create.test.ts +63 -0
- package/src/__tests__/pages/project-list.test.ts +110 -0
- package/src/__tests__/pages/project-upload.test.ts +500 -0
- package/src/__tests__/pages/publish.test.ts +2864 -0
- package/src/__tests__/pages-deployment-tail.test.ts +955 -0
- package/src/__tests__/parse.test.ts +106 -0
- package/src/__tests__/publish.test.ts +1615 -852
- package/src/__tests__/pubsub.test.ts +226 -100
- package/src/__tests__/queues.test.ts +238 -77
- package/src/__tests__/r2.test.ts +55 -57
- package/src/__tests__/secret.test.ts +179 -130
- package/src/__tests__/tail.test.ts +267 -109
- package/src/__tests__/test-old-node-version.js +3 -3
- package/src/__tests__/traverse-module-graph.test.ts +220 -0
- package/src/__tests__/tsconfig-sanity.ts +12 -0
- package/src/__tests__/tsconfig.json +8 -0
- package/src/__tests__/tsconfig.tsbuildinfo +1 -0
- package/src/__tests__/type-generation.test.ts +43 -26
- package/src/__tests__/user.test.ts +35 -72
- package/src/__tests__/whoami.test.tsx +8 -114
- package/src/__tests__/worker-namespace.test.ts +83 -69
- package/src/api/dev.ts +168 -60
- package/src/api/index.ts +10 -1
- package/src/api/mtls-certificate.ts +148 -0
- package/src/api/pages/create-worker-bundle-contents.ts +76 -0
- package/src/api/pages/index.ts +5 -0
- package/src/api/pages/publish.tsx +355 -0
- package/src/bundle.ts +263 -140
- package/src/cfetch/index.ts +0 -2
- package/src/cfetch/internal.ts +16 -21
- package/src/cli.ts +4 -4
- package/src/config/config.ts +14 -7
- package/src/config/environment.ts +79 -24
- package/src/config/index.ts +99 -38
- package/src/config/validation-helpers.ts +1 -1
- package/src/config/validation.ts +248 -19
- package/src/create-worker-preview.ts +19 -8
- package/src/create-worker-upload-form.ts +60 -22
- package/src/d1/backups.tsx +43 -42
- package/src/d1/constants.ts +2 -0
- package/src/d1/create.tsx +44 -30
- package/src/d1/{delete.tsx → delete.ts} +11 -14
- package/src/d1/execute.tsx +209 -151
- package/src/d1/index.ts +31 -7
- package/src/d1/list.tsx +22 -10
- package/src/d1/migrations/apply.tsx +212 -0
- package/src/d1/migrations/create.tsx +79 -0
- package/src/d1/migrations/helpers.ts +172 -0
- package/src/d1/migrations/index.ts +3 -0
- package/src/d1/migrations/list.tsx +95 -0
- package/src/d1/migrations/options.ts +23 -0
- package/src/d1/options.ts +12 -2
- package/src/d1/splitter.ts +161 -0
- package/src/d1/{types.tsx → types.ts} +11 -0
- package/src/d1/utils.ts +12 -2
- package/src/delete.ts +8 -16
- package/src/deployments.ts +340 -46
- package/src/deprecated/index.ts +8 -302
- package/src/dev/dev.tsx +57 -44
- package/src/dev/local.tsx +294 -91
- package/src/dev/remote.tsx +32 -3
- package/src/dev/start-server.ts +89 -68
- package/src/dev/use-esbuild.ts +17 -18
- package/src/dev/validate-dev-props.ts +9 -0
- package/src/{dev-registry.tsx → dev-registry.ts} +2 -1
- package/src/dev.tsx +178 -118
- package/src/dialogs.ts +136 -0
- package/src/dispatch-namespace.ts +21 -17
- package/src/docs/index.ts +97 -0
- package/src/entry.ts +19 -11
- package/src/environment-variables/factory.ts +88 -0
- package/src/environment-variables/misc-variables.ts +30 -0
- package/src/generate/index.ts +298 -0
- package/src/git-client.ts +15 -4
- package/src/{index.tsx → index.ts} +137 -63
- package/src/init.ts +249 -187
- package/src/inspect.ts +16 -1
- package/src/jest.d.ts +4 -0
- package/src/kv/index.ts +15 -17
- package/src/logger.ts +32 -5
- package/src/metrics/metrics-config.ts +3 -3
- package/src/metrics/send-event.ts +6 -1
- package/src/miniflare-cli/assets.ts +64 -28
- package/src/miniflare-cli/index.ts +4 -7
- package/src/miniflare-cli/tsconfig.json +9 -0
- package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
- package/src/miniflare-cli/types.ts +11 -0
- package/src/module-collection.ts +91 -25
- package/src/mtls-certificate/cli.ts +155 -0
- package/src/pages/build.ts +410 -0
- package/src/pages/buildFunctions.ts +140 -0
- package/src/pages/deployment-tails.ts +281 -0
- package/src/pages/deployments.tsx +11 -33
- package/src/pages/{dev.tsx → dev.ts} +147 -124
- package/src/pages/errors.ts +1 -0
- package/src/pages/functions/buildPlugin.ts +72 -69
- package/src/pages/functions/buildWorker.ts +249 -114
- package/src/pages/functions/tsconfig.json +8 -0
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
- package/src/pages/{functions.tsx → functions.ts} +8 -4
- package/src/pages/{index.tsx → index.ts} +11 -3
- package/src/pages/projects.tsx +12 -22
- package/src/pages/prompt-select-project.tsx +31 -0
- package/src/pages/publish.tsx +45 -214
- package/src/pages/types.ts +6 -9
- package/src/pages/upload.tsx +58 -14
- package/src/pages/utils.ts +14 -3
- package/src/parse.ts +23 -1
- package/src/paths.ts +1 -1
- package/src/proxy.ts +5 -0
- package/src/publish/index.ts +20 -16
- package/src/publish/publish.ts +72 -47
- package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
- package/src/queues/cli/commands/consumer/add.ts +24 -24
- package/src/queues/cli/commands/consumer/index.ts +3 -6
- package/src/queues/cli/commands/consumer/remove.ts +11 -18
- package/src/queues/cli/commands/create.ts +8 -8
- package/src/queues/cli/commands/delete.ts +8 -8
- package/src/queues/cli/commands/index.ts +6 -4
- package/src/queues/cli/commands/list.ts +8 -8
- package/src/queues/client.ts +1 -0
- package/src/queues/utils.ts +18 -0
- package/src/r2/constants.ts +4 -0
- package/src/r2/helpers.ts +1 -0
- package/src/r2/index.ts +40 -28
- package/src/secret/index.ts +14 -17
- package/src/{sites.tsx → sites.ts} +1 -1
- package/src/tail/createTail.ts +94 -3
- package/src/tail/filters.ts +1 -1
- package/src/tail/index.ts +8 -11
- package/src/tail/printing.ts +15 -0
- package/src/traverse-module-graph.ts +53 -0
- package/src/tsconfig-sanity.ts +16 -0
- package/src/type-generation.ts +79 -57
- package/src/user/access.ts +0 -1
- package/src/user/auth-variables.ts +113 -0
- package/src/user/choose-account.tsx +1 -31
- package/src/user/index.ts +0 -1
- package/src/user/{user.tsx → user.ts} +123 -82
- package/src/utils/render.ts +93 -0
- package/src/{whoami.tsx → whoami.ts} +37 -71
- package/src/worker.ts +35 -3
- package/src/yargs-types.ts +22 -5
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
- package/templates/checked-fetch.js +9 -3
- package/templates/d1-beta-facade.js +95 -25
- package/templates/facade.d.ts +14 -0
- package/templates/first-party-worker-module-facade.ts +4 -3
- package/templates/format-dev-errors.ts +8 -6
- package/templates/gitignore +1 -0
- package/templates/init-tests/test-jest-new-worker.js +3 -5
- package/templates/init-tests/test-vitest-new-worker.js +3 -5
- package/templates/init-tests/test-vitest-new-worker.ts +25 -0
- package/templates/middleware/loader-modules.ts +2 -2
- package/templates/middleware/loader-sw.ts +51 -31
- package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
- package/templates/new-worker.ts +3 -0
- package/templates/pages-dev-pipeline.ts +4 -1
- package/templates/pages-shim.ts +4 -1
- package/templates/pages-template-plugin.ts +19 -10
- package/templates/serve-static-assets.ts +17 -14
- package/templates/service-bindings-module-facade.js +1 -0
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +105 -0
- package/templates/tsconfig.json +5 -103
- package/templates/tsconfig.tsbuildinfo +1 -0
- package/wrangler-dist/cli.d.ts +826 -77
- package/wrangler-dist/cli.js +130734 -140838
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/src/__tests__/api-devregistry.test.js +0 -57
- package/src/__tests__/d1.test.ts +0 -72
- package/src/__tests__/dialogs.test.tsx +0 -40
- package/src/__tests__/helpers/mock-cfetch.ts +0 -333
- package/src/__tests__/pages.test.ts +0 -2223
- package/src/dialogs.tsx +0 -163
- package/src/environment-variables.ts +0 -50
- package/src/pages/build.tsx +0 -238
- package/src/user/env-vars.ts +0 -46
- package/templates/experimental-local-cache-stubs.js +0 -27
- /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
- /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
- /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
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
59
|
-
|
|
68
|
+
return res.once(ctx.json(createFetchResult({ name, type })));
|
|
69
|
+
}
|
|
70
|
+
)
|
|
60
71
|
);
|
|
61
72
|
}
|
|
62
73
|
|
|
63
74
|
describe("interactive", () => {
|
|
64
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-1:[0m
|
|
169
189
|
|
|
170
|
-
|
|
190
|
+
request to
|
|
191
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
192
|
+
failed, reason: Failed to create secret 1
|
|
171
193
|
|
|
172
194
|
|
|
173
195
|
[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-2:[0m
|
|
174
196
|
|
|
175
|
-
|
|
197
|
+
request to
|
|
198
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
199
|
+
failed, reason: Failed to create secret 2
|
|
176
200
|
|
|
177
201
|
"
|
|
178
202
|
`);
|
|
179
203
|
});
|
|
180
204
|
|
|
181
|
-
it("should count success and
|
|
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
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-1:[0m
|
|
228
258
|
|
|
229
|
-
|
|
259
|
+
request to
|
|
260
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
261
|
+
failed, reason: Failed to create secret 1
|
|
230
262
|
|
|
231
263
|
|
|
232
264
|
[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-3:[0m
|
|
233
265
|
|
|
234
|
-
|
|
266
|
+
request to
|
|
267
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
268
|
+
failed, reason: Failed to create secret 3
|
|
235
269
|
|
|
236
270
|
|
|
237
271
|
[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-5:[0m
|
|
238
272
|
|
|
239
|
-
|
|
273
|
+
request to
|
|
274
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
275
|
+
failed, reason: Failed to create secret 5
|
|
240
276
|
|
|
241
277
|
|
|
242
278
|
[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-7:[0m
|
|
243
279
|
|
|
244
|
-
|
|
280
|
+
request to
|
|
281
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
[32mIf you think this is a bug then please create an issue at https://github.com/cloudflare/
|
|
343
|
+
[32mIf you think this is a bug then please create an issue at https://github.com/cloudflare/workers-sdk/issues/new/choose[0m"
|
|
306
344
|
`);
|
|
307
345
|
expect(std.err).toMatchInlineSnapshot(`
|
|
308
346
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mRequired Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`[0m
|
|
@@ -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
|
-
[32mIf you think this is a bug then please create an issue at https://github.com/cloudflare/
|
|
404
|
+
[32mIf you think this is a bug then please create an issue at https://github.com/cloudflare/workers-sdk/issues/new/choose[0m"
|
|
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
|
-
|
|
385
|
-
|
|
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
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
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
|
-
|
|
465
|
-
expect(envOrSecretName).toEqual(input.secretName);
|
|
506
|
+
return res.once(ctx.json(createFetchResult(null)));
|
|
466
507
|
}
|
|
467
|
-
|
|
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
|
-
[32mIf you think this is a bug then please create an issue at https://github.com/cloudflare/
|
|
575
|
+
[32mIf you think this is a bug then please create an issue at https://github.com/cloudflare/workers-sdk/issues/new/choose[0m"
|
|
535
576
|
`);
|
|
536
577
|
expect(std.err).toMatchInlineSnapshot(`
|
|
537
578
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mRequired Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`[0m
|
|
@@ -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
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
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
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
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
|
-
[32mIf you think this is a bug then please create an issue at https://github.com/cloudflare/
|
|
681
|
+
[32mIf you think this is a bug then please create an issue at https://github.com/cloudflare/workers-sdk/issues/new/choose[0m"
|
|
633
682
|
`);
|
|
634
683
|
expect(std.err).toMatchInlineSnapshot(`
|
|
635
684
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mRequired Worker name missing. Please specify the Worker name in wrangler.toml, or pass it as an argument with \`--name <worker-name>\`[0m
|