diff --git a/.changeset/warm-clowns-visit.md b/.changeset/warm-clowns-visit.md new file mode 100644 index 00000000000..bf7d49908af --- /dev/null +++ b/.changeset/warm-clowns-visit.md @@ -0,0 +1,5 @@ +--- +"wrangler": patch +--- + +Support the deletion of secrets with complex names diff --git a/packages/wrangler/src/__tests__/secret.test.ts b/packages/wrangler/src/__tests__/secret.test.ts index 6a5a7623b29..45d7c58aea3 100644 --- a/packages/wrangler/src/__tests__/secret.test.ts +++ b/packages/wrangler/src/__tests__/secret.test.ts @@ -563,16 +563,15 @@ describe("wrangler secret", () => { msw.use( http.delete( `*/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets/:secretName`, - ({ params }) => { + ({ request, params }) => { expect(params.accountId).toEqual("some-account-id"); expect(params.scriptName).toEqual( legacyEnv && env ? `script-name-${env}` : "script-name" ); - if (!legacyEnv) { - if (env) { - expect(params.secretName).toEqual(input.secretName); - } - } + expect(params.secretName).toEqual(input.secretName); + expect( + new URL(request.url).searchParams.get("url_encoded") + ).toEqual("true"); return HttpResponse.json(createFetchResult(null)); }, { once: true } @@ -616,6 +615,23 @@ describe("wrangler secret", () => { expect(std.err).toMatchInlineSnapshot(`""`); }); + it("should delete a secret which name includes special characters", async () => { + mockDeleteRequest({ scriptName: "script-name", secretName: "the/key" }); + mockConfirm({ + text: "Are you sure you want to permanently delete the secret the/key on the Worker script-name?", + result: true, + }); + await runWrangler("secret delete the/key --name script-name"); + expect(std.out).toMatchInlineSnapshot(` + " + ⛅️ wrangler x.x.x + ────────────────── + 🌀 Deleting the secret the/key on the Worker script-name + ✨ Success! Deleted secret the/key" + `); + expect(std.err).toMatchInlineSnapshot(`""`); + }); + it("should delete a secret: legacy envs", async () => { mockDeleteRequest( { scriptName: "script-name", secretName: "the-key" }, diff --git a/packages/wrangler/src/secret/index.ts b/packages/wrangler/src/secret/index.ts index a03b0d7854a..099732875d7 100644 --- a/packages/wrangler/src/secret/index.ts +++ b/packages/wrangler/src/secret/index.ts @@ -318,7 +318,14 @@ export const secretDeleteCommand = createCommand({ ? `/accounts/${accountId}/workers/scripts/${scriptName}/secrets` : `/accounts/${accountId}/workers/services/${scriptName}/environments/${args.env}/secrets`; - await fetchResult(config, `${url}/${args.key}`, { method: "DELETE" }); + await fetchResult( + config, + `${url}/${encodeURIComponent(args.key)}`, + { method: "DELETE" }, + new URLSearchParams({ + url_encoded: "true", + }) + ); metrics.sendMetricsEvent("delete encrypted variable", { sendMetrics: config.send_metrics, });