wrangler 4.116.0 → 4.118.0

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.
@@ -127,11 +127,17 @@
127
127
  "items": {
128
128
  "type": "string"
129
129
  }
130
+ },
131
+ "events": {
132
+ "type": "array",
133
+ "items": {
134
+ "$ref": "#/definitions/ArtifactsEventTrigger"
135
+ }
130
136
  }
131
137
  },
132
138
  "additionalProperties": false,
133
- "description": "\"Cron\" definitions to trigger a Worker's \"scheduled\" function.\n\nLets you call Workers periodically, much like a cron job.\n\nMore details here https://developers.cloudflare.com/workers/platform/cron-triggers\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
134
- "markdownDescription": "\"Cron\" definitions to trigger a Worker's \"scheduled\" function.\n\nLets you call Workers periodically, much like a cron job.\n\nMore details here https://developers.cloudflare.com/workers/platform/cron-triggers\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
139
+ "description": "Definitions that trigger a Worker from a schedule or a Cloudflare event.\n\nMore details about cron triggers: https://developers.cloudflare.com/workers/platform/cron-triggers\n\nMore details about Artifacts events: https://developers.cloudflare.com/artifacts/guides/event-subscriptions/\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
140
+ "markdownDescription": "Definitions that trigger a Worker from a schedule or a Cloudflare event.\n\nMore details about cron triggers: https://developers.cloudflare.com/workers/platform/cron-triggers\n\nMore details about Artifacts events: https://developers.cloudflare.com/artifacts/guides/event-subscriptions/\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
135
141
  "default": {
136
142
  "crons": []
137
143
  }
@@ -1882,11 +1888,17 @@
1882
1888
  "items": {
1883
1889
  "type": "string"
1884
1890
  }
1891
+ },
1892
+ "events": {
1893
+ "type": "array",
1894
+ "items": {
1895
+ "$ref": "#/definitions/ArtifactsEventTrigger"
1896
+ }
1885
1897
  }
1886
1898
  },
1887
1899
  "additionalProperties": false,
1888
- "description": "\"Cron\" definitions to trigger a Worker's \"scheduled\" function.\n\nLets you call Workers periodically, much like a cron job.\n\nMore details here https://developers.cloudflare.com/workers/platform/cron-triggers\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
1889
- "markdownDescription": "\"Cron\" definitions to trigger a Worker's \"scheduled\" function.\n\nLets you call Workers periodically, much like a cron job.\n\nMore details here https://developers.cloudflare.com/workers/platform/cron-triggers\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
1900
+ "description": "Definitions that trigger a Worker from a schedule or a Cloudflare event.\n\nMore details about cron triggers: https://developers.cloudflare.com/workers/platform/cron-triggers\n\nMore details about Artifacts events: https://developers.cloudflare.com/artifacts/guides/event-subscriptions/\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
1901
+ "markdownDescription": "Definitions that trigger a Worker from a schedule or a Cloudflare event.\n\nMore details about cron triggers: https://developers.cloudflare.com/workers/platform/cron-triggers\n\nMore details about Artifacts events: https://developers.cloudflare.com/artifacts/guides/event-subscriptions/\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
1890
1902
  "default": {
1891
1903
  "crons": []
1892
1904
  }
@@ -3709,6 +3721,65 @@
3709
3721
  ],
3710
3722
  "additionalProperties": false
3711
3723
  },
3724
+ "ArtifactsEventTrigger": {
3725
+ "type": "object",
3726
+ "properties": {
3727
+ "type": {
3728
+ "$ref": "#/definitions/ArtifactsEventType"
3729
+ },
3730
+ "filter": {
3731
+ "type": "object",
3732
+ "properties": {
3733
+ "namespace": {
3734
+ "type": "string"
3735
+ },
3736
+ "repo_name": {
3737
+ "type": "string"
3738
+ }
3739
+ },
3740
+ "additionalProperties": false
3741
+ },
3742
+ "targets": {
3743
+ "type": "array",
3744
+ "items": {
3745
+ "type": "object",
3746
+ "properties": {
3747
+ "type": {
3748
+ "type": "string",
3749
+ "const": "workflow"
3750
+ },
3751
+ "workflow_name": {
3752
+ "type": "string"
3753
+ }
3754
+ },
3755
+ "required": [
3756
+ "type",
3757
+ "workflow_name"
3758
+ ],
3759
+ "additionalProperties": false
3760
+ }
3761
+ }
3762
+ },
3763
+ "required": [
3764
+ "type",
3765
+ "targets"
3766
+ ],
3767
+ "additionalProperties": false
3768
+ },
3769
+ "ArtifactsEventType": {
3770
+ "type": "string",
3771
+ "enum": [
3772
+ "cf.artifacts.repo.created",
3773
+ "cf.artifacts.repo.deleted",
3774
+ "cf.artifacts.repo.forked",
3775
+ "cf.artifacts.repo.imported",
3776
+ "cf.artifacts.repo.pushed",
3777
+ "cf.artifacts.repo.cloned",
3778
+ "cf.artifacts.repo.fetched",
3779
+ "cf.artifacts.repo.token.created",
3780
+ "cf.artifacts.repo.token.revoked"
3781
+ ]
3782
+ },
3712
3783
  "UserLimits": {
3713
3784
  "type": "object",
3714
3785
  "properties": {
@@ -3918,16 +3989,16 @@
3918
3989
  "additionalProperties": false,
3919
3990
  "properties": {
3920
3991
  "logpush": {
3921
- "$ref": "#/definitions/interface-769040647-10754-20876-769040647-0-532202004818536"
3992
+ "$ref": "#/definitions/interface-769040647-10754-20982-769040647-0-539242004818536"
3922
3993
  },
3923
3994
  "observability": {
3924
- "$ref": "#/definitions/interface-769040647-10754-20876-769040647-0-532202004818536"
3995
+ "$ref": "#/definitions/interface-769040647-10754-20982-769040647-0-539242004818536"
3925
3996
  },
3926
3997
  "limits": {
3927
- "$ref": "#/definitions/interface-769040647-10754-20876-769040647-0-532202004818536"
3998
+ "$ref": "#/definitions/interface-769040647-10754-20982-769040647-0-539242004818536"
3928
3999
  },
3929
4000
  "cache": {
3930
- "$ref": "#/definitions/interface-769040647-10754-20876-769040647-0-532202004818536"
4001
+ "$ref": "#/definitions/interface-769040647-10754-20982-769040647-0-539242004818536"
3931
4002
  },
3932
4003
  "define": {
3933
4004
  "type": "object",
@@ -5199,7 +5270,7 @@
5199
5270
  "description": "Configuration for Worker Previews.\n\nThis defines the settings used when creating Preview deployments. Previews are branches of your Worker's main instance used to test features during feature development outside of production.\n\nThe `previews` block contains any intentionally divergent configuration intended solely for Previews, including:\n- All non-inheritable properties (environment variables and bindings like KV, D1, R2, etc.)\n- Select inheritable properties: `logpush`, `observability`, `limits`, `cache`",
5200
5271
  "markdownDescription": "Configuration for Worker Previews.\n\nThis defines the settings used when creating Preview deployments.\nPreviews are branches of your Worker's main instance used to test features\nduring feature development outside of production.\n\nThe `previews` block contains any intentionally divergent configuration intended solely for Previews, including:\n- All non-inheritable properties (environment variables and bindings like KV, D1, R2, etc.)\n- Select inheritable properties: `logpush`, `observability`, `limits`, `cache`"
5201
5272
  },
5202
- "interface-769040647-10754-20876-769040647-0-532202004818536": {
5273
+ "interface-769040647-10754-20982-769040647-0-539242004818536": {
5203
5274
  "type": "object",
5204
5275
  "properties": {
5205
5276
  "name": {
@@ -5311,11 +5382,17 @@
5311
5382
  "items": {
5312
5383
  "type": "string"
5313
5384
  }
5385
+ },
5386
+ "events": {
5387
+ "type": "array",
5388
+ "items": {
5389
+ "$ref": "#/definitions/ArtifactsEventTrigger"
5390
+ }
5314
5391
  }
5315
5392
  },
5316
5393
  "additionalProperties": false,
5317
- "description": "\"Cron\" definitions to trigger a Worker's \"scheduled\" function.\n\nLets you call Workers periodically, much like a cron job.\n\nMore details here https://developers.cloudflare.com/workers/platform/cron-triggers\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
5318
- "markdownDescription": "\"Cron\" definitions to trigger a Worker's \"scheduled\" function.\n\nLets you call Workers periodically, much like a cron job.\n\nMore details here https://developers.cloudflare.com/workers/platform/cron-triggers\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
5394
+ "description": "Definitions that trigger a Worker from a schedule or a Cloudflare event.\n\nMore details about cron triggers: https://developers.cloudflare.com/workers/platform/cron-triggers\n\nMore details about Artifacts events: https://developers.cloudflare.com/artifacts/guides/event-subscriptions/\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
5395
+ "markdownDescription": "Definitions that trigger a Worker from a schedule or a Cloudflare event.\n\nMore details about cron triggers: https://developers.cloudflare.com/workers/platform/cron-triggers\n\nMore details about Artifacts events: https://developers.cloudflare.com/artifacts/guides/event-subscriptions/\n\nFor reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers",
5319
5396
  "default": {
5320
5397
  "crons": []
5321
5398
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrangler",
3
- "version": "4.116.0",
3
+ "version": "4.118.0",
4
4
  "description": "Command-line interface for all things Cloudflare Workers",
5
5
  "keywords": [
6
6
  "assembly",
@@ -67,9 +67,9 @@
67
67
  "path-to-regexp": "6.3.0",
68
68
  "unenv": "2.0.0-rc.24",
69
69
  "workerd": "1.20260730.1",
70
+ "@cloudflare/kv-asset-handler": "0.5.0",
70
71
  "@cloudflare/unenv-preset": "2.16.1",
71
- "miniflare": "4.20260730.0",
72
- "@cloudflare/kv-asset-handler": "0.5.0"
72
+ "miniflare": "5.20260730.0-alpha"
73
73
  },
74
74
  "devDependencies": {
75
75
  "@aws-sdk/client-s3": "^3.721.0",
@@ -156,22 +156,22 @@
156
156
  "yaml": "^2.8.1",
157
157
  "yargs": "^17.7.2",
158
158
  "zod": "4.4.3",
159
- "@cloudflare/autoconfig": "0.2.2",
160
159
  "@cloudflare/build-output-utils": "0.1.0",
161
- "@cloudflare/cli-shared-helpers": "0.1.18",
160
+ "@cloudflare/cli-shared-helpers": "0.1.19",
162
161
  "@cloudflare/codemod": "1.1.0",
163
- "@cloudflare/config": "0.4.0",
164
162
  "@cloudflare/containers-shared": "0.16.0",
163
+ "@cloudflare/autoconfig": "0.2.3",
164
+ "@cloudflare/deploy-helpers": "0.6.4",
165
+ "@cloudflare/config": "0.4.0",
165
166
  "@cloudflare/pages-functions": "0.1.0",
166
- "@cloudflare/deploy-helpers": "0.6.3",
167
- "@cloudflare/remote-bindings": "0.0.4",
168
- "@cloudflare/pages-shared": "^0.13.162",
169
- "@cloudflare/runtime-types": "0.0.7",
170
- "@cloudflare/workers-auth": "0.5.4",
167
+ "@cloudflare/remote-bindings": "0.0.6",
168
+ "@cloudflare/pages-shared": "^0.13.163",
169
+ "@cloudflare/runtime-types": "0.0.8",
171
170
  "@cloudflare/workers-shared": "0.19.9",
172
- "@cloudflare/workers-tsconfig": "0.0.0",
173
- "@cloudflare/workers-utils": "0.30.0",
174
- "@cloudflare/workflows-shared": "0.12.2"
171
+ "@cloudflare/workers-auth": "0.5.6",
172
+ "@cloudflare/workers-utils": "0.31.0",
173
+ "@cloudflare/workflows-shared": "0.12.2",
174
+ "@cloudflare/workers-tsconfig": "0.0.0"
175
175
  },
176
176
  "peerDependencies": {
177
177
  "@cloudflare/workers-types": "^5.20260730.1"
@@ -2,7 +2,7 @@
2
2
  * Welcome to Cloudflare Workers! This is your first scheduled worker.
3
3
  *
4
4
  * - Run `wrangler dev` in your terminal to start a development server
5
- * - Run `curl "http://localhost:8787/cdn-cgi/handler/scheduled"` to trigger the scheduled event
5
+ * - Run `curl "http://localhost:8787/cdn-cgi/local/scheduled"` to trigger the scheduled event
6
6
  * - Go back to the console to see what your worker has logged
7
7
  * - Update the Cron trigger in wrangler.toml (see https://developers.cloudflare.com/workers/configuration/cron-triggers/)
8
8
  * - Run `wrangler publish --name my-worker` to publish your worker
@@ -2,7 +2,7 @@
2
2
  * Welcome to Cloudflare Workers! This is your first scheduled worker.
3
3
  *
4
4
  * - Run `wrangler dev` in your terminal to start a development server
5
- * - Run `curl "http://localhost:8787/cdn-cgi/handler/scheduled"` to trigger the scheduled event
5
+ * - Run `curl "http://localhost:8787/cdn-cgi/local/scheduled"` to trigger the scheduled event
6
6
  * - Go back to the console to see what your worker has logged
7
7
  * - Update the Cron trigger in wrangler.toml (see https://developers.cloudflare.com/workers/configuration/cron-triggers/)
8
8
  * - Run `wrangler deploy --name my-worker` to deploy your worker
@@ -132,6 +132,13 @@ export class ProxyWorker implements DurableObject {
132
132
  request.url
133
133
  );
134
134
 
135
+ // rewrite requests to old miniflare paths
136
+ // because wrangler cannot have a breaking change
137
+ userWorkerUrl.pathname = rewriteLegacyMiniflarePath(
138
+ userWorkerUrl.pathname
139
+ );
140
+ innerUrl.pathname = rewriteLegacyMiniflarePath(innerUrl.pathname);
141
+
135
142
  // Preserve client `Accept-Encoding`, rather than using Worker's default
136
143
  // of `Accept-Encoding: br, gzip`
137
144
  const encoding = request.cf?.clientAcceptEncoding;
@@ -238,6 +245,26 @@ export class ProxyWorker implements DurableObject {
238
245
  function isRequestFromProxyController(req: Request, env: Env): boolean {
239
246
  return req.headers.get("Authorization") === env.PROXY_CONTROLLER_AUTH_SECRET;
240
247
  }
248
+
249
+ // Miniflare v5 moved its internal endpoints under `/cdn-cgi/local/` (and
250
+ // `/__cf_local/` for endpoints that must remain reachable over tunnels). These
251
+ // map the pre-v5 paths onto their current equivalents.
252
+ const LEGACY_PATH_REWRITES: readonly [string, string][] = [
253
+ ["/cdn-cgi/handler", "/cdn-cgi/local"],
254
+ ["/cdn-cgi/mf/scheduled", "/cdn-cgi/local/scheduled"],
255
+ ["/cdn-cgi/mf/stream", "/__cf_local/stream"],
256
+ ["/cdn-cgi/mf/imagedelivery", "/__cf_local/imagedelivery"],
257
+ ["/cdn-cgi/explorer", "/cdn-cgi/local/explorer"],
258
+ ];
259
+
260
+ function rewriteLegacyMiniflarePath(pathname: string): string {
261
+ for (const [oldPrefix, newPrefix] of LEGACY_PATH_REWRITES) {
262
+ if (pathname === oldPrefix || pathname.startsWith(`${oldPrefix}/`)) {
263
+ return newPrefix + pathname.slice(oldPrefix.length);
264
+ }
265
+ }
266
+ return pathname;
267
+ }
241
268
  function isHtmlResponse(res: Response): boolean {
242
269
  return res.headers.get("content-type")?.startsWith("text/html") ?? false;
243
270
  }
@@ -122,6 +122,10 @@ var ProxyWorker = class {
122
122
  proxyData.userWorkerInnerUrlOverrides ?? {},
123
123
  request.url
124
124
  );
125
+ userWorkerUrl.pathname = rewriteLegacyMiniflarePath(
126
+ userWorkerUrl.pathname
127
+ );
128
+ innerUrl.pathname = rewriteLegacyMiniflarePath(innerUrl.pathname);
125
129
  const encoding = request.cf?.clientAcceptEncoding;
126
130
  if (encoding !== void 0) headers.set("Accept-Encoding", encoding);
127
131
  rewriteUrlRelatedHeaders(headers, outerUrl, innerUrl);
@@ -180,6 +184,21 @@ var ProxyWorker = class {
180
184
  function isRequestFromProxyController(req, env) {
181
185
  return req.headers.get("Authorization") === env.PROXY_CONTROLLER_AUTH_SECRET;
182
186
  }
187
+ var LEGACY_PATH_REWRITES = [
188
+ ["/cdn-cgi/handler", "/cdn-cgi/local"],
189
+ ["/cdn-cgi/mf/scheduled", "/cdn-cgi/local/scheduled"],
190
+ ["/cdn-cgi/mf/stream", "/__cf_local/stream"],
191
+ ["/cdn-cgi/mf/imagedelivery", "/__cf_local/imagedelivery"],
192
+ ["/cdn-cgi/explorer", "/cdn-cgi/local/explorer"]
193
+ ];
194
+ function rewriteLegacyMiniflarePath(pathname) {
195
+ for (const [oldPrefix, newPrefix] of LEGACY_PATH_REWRITES) {
196
+ if (pathname === oldPrefix || pathname.startsWith(`${oldPrefix}/`)) {
197
+ return newPrefix + pathname.slice(oldPrefix.length);
198
+ }
199
+ }
200
+ return pathname;
201
+ }
183
202
  function isHtmlResponse(res) {
184
203
  return res.headers.get("content-type")?.startsWith("text/html") ?? false;
185
204
  }
@@ -197,13 +197,13 @@ declare function deploy({ directory, accountId, projectName, branch, skipCaching
197
197
  };
198
198
  };
199
199
  latest_stage: {
200
- status: "skipped" | "active" | "canceled" | "success" | "idle" | "failure";
200
+ status: "success" | "skipped" | "active" | "canceled" | "idle" | "failure";
201
201
  name: "queued" | "build" | "deploy" | "initialize" | "clone_repo";
202
202
  started_on: string | null;
203
203
  ended_on: string | null;
204
204
  };
205
205
  stages: {
206
- status: "skipped" | "active" | "canceled" | "success" | "idle" | "failure";
206
+ status: "success" | "skipped" | "active" | "canceled" | "idle" | "failure";
207
207
  name: "queued" | "build" | "deploy" | "initialize" | "clone_repo";
208
208
  started_on: string | null;
209
209
  ended_on: string | null;
@@ -536,6 +536,11 @@ declare abstract class Controller {
536
536
  protected bus: ControllerBus;
537
537
  constructor(bus: ControllerBus);
538
538
  teardown(): Promise<void>;
539
+ /**
540
+ * Whether `teardown()` has been called, which subclasses should check before
541
+ * starting any new work.
542
+ */
543
+ protected get tearingDown(): boolean;
539
544
  protected emitErrorEvent(event: ErrorEvent): void;
540
545
  }
541
546
  declare abstract class RuntimeController extends Controller {
@@ -1706,11 +1711,11 @@ interface EnvironmentInheritable {
1706
1711
  */
1707
1712
  exports: Exports;
1708
1713
  /**
1709
- * "Cron" definitions to trigger a Worker's "scheduled" function.
1714
+ * Definitions that trigger a Worker from a schedule or a Cloudflare event.
1710
1715
  *
1711
- * Lets you call Workers periodically, much like a cron job.
1716
+ * More details about cron triggers: https://developers.cloudflare.com/workers/platform/cron-triggers
1712
1717
  *
1713
- * More details here https://developers.cloudflare.com/workers/platform/cron-triggers
1718
+ * More details about Artifacts events: https://developers.cloudflare.com/artifacts/guides/event-subscriptions/
1714
1719
  *
1715
1720
  * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers
1716
1721
  *
@@ -1718,7 +1723,8 @@ interface EnvironmentInheritable {
1718
1723
  * @inheritable
1719
1724
  */
1720
1725
  triggers: {
1721
- crons: string[] | undefined;
1726
+ crons?: string[];
1727
+ events?: ArtifactsEventTrigger[];
1722
1728
  };
1723
1729
  /**
1724
1730
  * Specify limits for runtime behavior.
@@ -1905,6 +1911,19 @@ type DurableObjectBindings = {
1905
1911
  /** The service environment of the script_name to bind to */
1906
1912
  environment?: string;
1907
1913
  }[];
1914
+ declare const ARTIFACTS_EVENT_TYPES: readonly ["cf.artifacts.repo.created", "cf.artifacts.repo.deleted", "cf.artifacts.repo.forked", "cf.artifacts.repo.imported", "cf.artifacts.repo.pushed", "cf.artifacts.repo.cloned", "cf.artifacts.repo.fetched", "cf.artifacts.repo.token.created", "cf.artifacts.repo.token.revoked"];
1915
+ type ArtifactsEventType = (typeof ARTIFACTS_EVENT_TYPES)[number];
1916
+ type ArtifactsEventTrigger = {
1917
+ type: ArtifactsEventType;
1918
+ filter?: {
1919
+ namespace?: string;
1920
+ repo_name?: string;
1921
+ };
1922
+ targets: {
1923
+ type: "workflow";
1924
+ workflow_name: string;
1925
+ }[];
1926
+ };
1908
1927
  type WorkflowBinding = {
1909
1928
  /** The name of the binding used to refer to the Workflow */
1910
1929
  binding: string;