-
Notifications
You must be signed in to change notification settings - Fork 952
Extend error handling of proxy request errors in ProxyWorker #4867
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🦋 Changeset detectedLatest commit: 9be110c The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
A wrangler prerelease is available for testing. You can install this latest build in your project with: npm install --save-dev https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/7792075553/npm-package-wrangler-4867 You can reference the automatically updated head of this PR with: npm install --save-dev https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/prs/4867/npm-package-wrangler-4867 Or you can use npx https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/7792075553/npm-package-wrangler-4867 dev path/to/script.js Additional artifacts:npx https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/7792075553/npm-package-create-cloudflare-4867 --no-auto-update npm install https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/7792075553/npm-package-miniflare-4867 npm install https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/7792075553/npm-package-cloudflare-pages-shared-4867 Note that these links will no longer work once the GitHub Actions artifact expires.
Please ensure constraints are pinned, and |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #4867 +/- ##
==========================================
- Coverage 70.70% 70.63% -0.07%
==========================================
Files 291 293 +2
Lines 15164 15214 +50
Branches 3859 3876 +17
==========================================
+ Hits 10721 10747 +26
- Misses 4443 4467 +24 |
by requeuing the request (only if it is GET or HEAD)
|
||
// if the request can be retried (subset of idempotent requests which have no body), requeue it | ||
else if (request.method === "GET" || request.method === "HEAD") { | ||
this.requestQueue.set(request, deferredResponse); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will this not put this request onto the back of the queue after subsequent pending requests?
Don't we want the aborted requests to be retried before any pending requests?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added 2 commits to do our best to fire off requests by order of arrival but it still comes down to when the .catch is hit – we won't be able to guarantee request order in the case:
- request1 comes in, request1 proxied
- reloadStart received, pauses proxying
- request2 comes in, held in queue
- reloadComplete received, unpauses proxying, request2 proxied
- workerd for request1 eventually exits and request1 fails, request1 is requeued
Although I just simulated this scenario delaying miniflare killing the workerd instance by 5 seconds (guaranteeing the new workerd instance starts up earlier). I expected to have to call this.processQueue
to actually process the request after requeuing it but the test still passed so need to a further look on Monday
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there likely to be a delay before a request errors when the workerd is reloaded? Is the error due to the request timing out (which of course would introduce this delay) or because the connection was closed (which feels like it should error pretty instantly).
In the latter case, it feels like as a new workerd boots up and becomes available to receive messages we should have two lists of requests:
- requests that failed when the connection closed and need retrying
- requests that arrived after the connection closed and are pending
Our logic, therefore could be to put these retry requests in their own list and make sure we empty that when a workerd reload event comes it, before trying to send any of the pending requests.
Of course, if some of these retryable requests do not fail until after the new workerd has loaded and started accepting requests there is not much we can do about that, since the boat has already sailed. But always prioritising retyable requests over pending requests feels like as good as we can offer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Had that last comment drafted and forgot to hit send, noticed later and just hit send but forgot to add that the request order sorting has minimal effect per batch because the requestQueue is processed synchronously and that order would have minimal effect on the order they're received by the UserWorker over the http async boundary. Brendan has also suggested something similar in another comment
I forgot to hit send originally because I got nerdsniped by the lack of a processQueue
call. Like I mentioned, I simulated this scenario delaying miniflare killing the workerd instance by 5 seconds. I've since confirmed with @mrbbot that this also delays the starting of the next workerd instance which waits for the previous to terminate. Which confirms why I could never hit the race condition I described above – step 4 is (essentially) guaranteed to happen after step 5.
I confirmed this by timestamping the events and the timing is incredibly consistent:
- 13-18ms between
pause
message and.catch
- 1060-1070ms between
.catch
andplay
message
Therefore, we don't need to consider the edge case I discussed above.
Further, I pushed those 2 commits to demonstrate (1) the little effort required to order the requests, (2) that the order they are fired still doesn't guarantee the order in which they arrive. I intended to revert the commits because I don't think the added overhead is justified by the only slightly better chance of maintaining the received order. But I like your suggestion of a second queue for requests to retry so I've instead gone with that approach which is just as good (enough) but adds way less overhead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.changeset/few-houses-wait.md
Outdated
"wrangler": patch | ||
--- | ||
|
||
Previously, when running `wrangler dev`, requests inflight during a UserWorker reload (due to config or source file changes) would fail. Now, if those inflight requests are GET or HEAD requests, they will be reproxied against the new UserWorker. This adds to the guarantee that requests made during local development reach the latest worker. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you update this to follow the Changeset message format
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
|
||
// we can't guarantee some requests won't get retried in a later batch | ||
// but we can at least order the current batch | ||
queue.sort((a, b) => a.order - b.order); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder how much of an effect this will have, considering all the fetch()
s are kicked off synchronously in this function. Feels like we're assuming workerd
will only send one request at a time to the user worker, and the user worker will handle one of these requests at a time. Whilst this is kinda true, it's likely the user worker will do asynchronous work which could allow parts of the request to be executed out of order.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've switched to having a separate queue for retries and prioritising those in the batch. I agree we don't need to order them more accurately than that
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One minor nit but LGTM
requestQueue = new Map<Request, DeferredPromise<Response>>(); | ||
requestRetryQueue = new Map<Request, DeferredPromise<Response>>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there any need for these to be Maps rather than just arrays?
I don't see anywhere that we look up the promise based on the request.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The original idea was to ensure a single entry per request but now there are 2 queues that doesn't imply the guarantee it did before. But it also makes deletes easier.
* ci: only deploy Workers when pushing to special branches (#4848) Previously every push to `main` that contained changes to a Worker package would cause that Worker to be deploy "to production". This meant that we had to be very careful about merging PRs that touch these Workers files. Now production deployment is only run for a Worker on a push to its special deployment branch (e.g. `deploy-worker/playground-preview-worker`). This allows us to land PRs to `main` and then collect up changes to release in a single go by updating the special deployment branch in a controlled way. Moreover it is also easy to see what changes will be released by looking at the difference between `main` and the deployment branch for the Worker package directory. The three workers in this repo now follow this pattern: - edge-preview-authenticated-proxy - format-errors - playground-preview-worker In addition, the Playground Preview Worker has end-to-end tests that are run on every push to the `main` branch, and also any PRs that have the "playground-worker" label. For these tests the Worker is deployed to the testing environment before running the tests against this deployment. * C3: bump `create-next-app` and handle new `next.config.mjs` defaults (#4863) * bump create-next-app from 14.0.4 to 14.1.0 * C3: handle new next.config.mjs default files * [wrangler] Support ai bindings in getBindingsProxy (#4869) * Retain AI service binding from miniflare options * Update changeset * chore: bump `workerd` to `1.20240129.0` (#4874) * [C3] Bump create-vue from 3.9.1 to 3.9.2 in /packages/create-cloudflare/src/frameworks (#4870) * [C3] Bump create-vue in /packages/create-cloudflare/src/frameworks Bumps [create-vue](https://github.com/vuejs/create-vue) from 3.9.1 to 3.9.2. - [Release notes](https://github.com/vuejs/create-vue/releases) - [Commits](vuejs/create-vue@v3.9.1...v3.9.2) --- updated-dependencies: - dependency-name: create-vue dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * Exclude standardPricingWarning from dryrun (#4880) * Exclude standardPricingWarning from dryrun That way we do not need authentication for dryrun, again. * fixup! Exclude standardPricingWarning from dryrun * fixup! Exclude standardPricingWarning from dryrun --------- Co-authored-by: petero-dk <2478689+petero-dk@users.noreply.github.com> * Implements Python support in miniflare. (#4873) * Fix changesets (#4885) * fix dario-piotrowicz's changesets * fix existing C3 changesets and amend the changeset text in the creation logic * Version Packages (#4854) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * [C3] Bump create-qwik from 1.4.2 to 1.4.3 in /packages/create-cloudflare/src/frameworks (#4881) * [C3] Bump create-qwik in /packages/create-cloudflare/src/frameworks Bumps [create-qwik](https://github.com/BuilderIO/qwik/tree/HEAD/packages/create-qwik) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/BuilderIO/qwik/releases) - [Commits](https://github.com/BuilderIO/qwik/commits/v1.4.3/packages/create-qwik) --- updated-dependencies: - dependency-name: create-qwik dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * [wrangler] fix: listen on loopback for wrangler dev port check and login (#4830) The `wrangler dev` port availability check triggers a firewall prompt on macOS while it briefly opens and closes listeners. The OAuth callback server from `wrangler login` has the same issue. Fix both cases by listening on the loopback address only by default. Fixed some new test failures by using locally available IP addresses: wrangler:test: ● wrangler dev › ip › should use to `ip` from `wrangler.toml`, if available wrangler:test: listen EADDRNOTAVAIL: address not available 1.2.3.4:8787 wrangler:test: wrangler:test: ● wrangler dev › ip › should use --ip command line arg, if provided wrangler:test: listen EADDRNOTAVAIL: address not available 5.6.7.8:8787 Relates to #4430 * remove outdated and no longer valid miniflare development section from CONTRIBUTING.md (#4893) * [C3] Bump @angular/create from 17.1.1 to 17.1.2 in /packages/create-cloudflare/src/frameworks (#4892) * [C3] Bump @angular/create in /packages/create-cloudflare/src/frameworks Bumps [@angular/create](https://github.com/angular/angular-cli) from 17.1.1 to 17.1.2. - [Release notes](https://github.com/angular/angular-cli/releases) - [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md) - [Commits](angular/angular-cli@17.1.1...17.1.2) --- updated-dependencies: - dependency-name: "@angular/create" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * [Stream] WebRTC Template Improvements (#4157) * Add port numbers to fix stackblitz automatic startup * Pull the variables up and show clear instructions * fixup! Pull the variables up and show clear instructions --------- Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> * fix: return 4xx error from playground preview worker on invalid tokens (#4904) Previously, we were passing user-controllable token inputs (`X-CF-Token` header, `user` search param, `token` cookie) directly to the `DurableObjectNamespace#idFromString()` function. This validated the token to be a valid Durable Object ID, but threw a reportable `TypeError`, generating a 500 response and increasing the errored request count. This is a user error, so shouldn't be reported. This change wraps calls to `idFromString()` inside `try`/`catch`es, and re-throws non-reportable user errors that generate 4xx responses. We could just validate that the tokens were 64 hex digits before calling `idFromString()`, but this approach ensures the IDs are for the `UserSession` object by validating the signature encoded in the ID too. * chore: rename deprecated Vitest `TestContext.meta` properties to `TestContext.task` (#4897) This is a precursor to updating to latest Vitest. * [wrangler] fix: stop rebuild attempts when sources are missing (#3886) (#4877) * [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * Update .changeset/hip-files-count.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * !fixup: [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * !fixup: [wrangler] fix: stop rebuild attempts when sources are missing (#3886) --------- Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [C3] Bump create-remix from 2.5.1 to 2.6.0 in /packages/create-cloudflare/src/frameworks (#4903) * [C3] Bump create-remix in /packages/create-cloudflare/src/frameworks Bumps [create-remix](https://github.com/remix-run/remix/tree/HEAD/packages/create-remix) from 2.5.1 to 2.6.0. - [Release notes](https://github.com/remix-run/remix/releases) - [Changelog](https://github.com/remix-run/remix/blob/main/packages/create-remix/CHANGELOG.md) - [Commits](https://github.com/remix-run/remix/commits/create-remix@2.6.0/packages/create-remix) --- updated-dependencies: - dependency-name: create-remix dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * fix: ensure that the Pages dev proxy server does not change the Host header (#4888) * fix: ensure that the Pages dev proxy server does not change the Host header Previously, when configuring `wrangler pages dev` to use a proxy to a 3rd party dev server, the proxy would replace the Host header, resulting in problems at the dev server if it was checking for cross-site scripting attacks. Now the proxy server passes through the Host header unaltered making it invisible to the 3rd party dev server. Fixes #4799 * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fix: fallback to returning stack trace if `format-errors` broken (#4908) * expose cf object from Miniflare instances (#4905) * expose cf object from Miniflare instances --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * Add a `ctx` field to the `getBindingsProxy` result (#4922) * split get-bindings-proxy fixture tests in multiple files * add ctx to getBindingsProxy * add ctx tests to get-bindings-proxy fixture --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * fix(d1): intercept and stringify errors thrown in --json mode (#4872) * fix(d1): intercept and stringify errors thrown in --json mode * fix: add light parsing on d1 execute error message * add test * wip * implement JsonFriendlyFatalError * address PR feedback * fix: don't report invalid `format-errors` input (#4911) * [D1] Add user friendly D1 validation error messages for `dev --remote` and `deploy` (#4914) * chore: refactor user friendly errors and add 10063 code handling * chore: add user friendly error message to deployments * chore: lint * chore: cleanup directory * chore: fix remote error handling * chore: add patch change set * chore: move ABORT_ERR logic out of the user friendly error handler * chore: fix syntax * Update .changeset/fair-shoes-melt.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> --------- Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [D1] teach wrangler how to fetch insights about D1's queries (#4909) * [D1] teach wrangler how to fetch insights about D1's queries * add options for sorting and number of results * add a means of filtering the datetime geq/leq * add more options, fix tests * add wrangler banner, add warning text * add changeset * rename last to timePeriod * use string format over numbers as >1mo's data could be possible * Update red-icons-flow.md * make it possible to order by count * Update red-icons-flow.md * PR feedback * Update .changeset/red-icons-flow.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * address PR feedback --------- Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [wrangler] test: fix E2E tests (#4907) * ci: ensure E2E tests failures not reported as successes #4458 accidentally left `continue-on-error: true` in the workflow. This meant that E2E test failures weren't reported as check failures. * test: remove redundant `deploy.test.ts` E2E test This test was a strict subset of `deployments.test.ts`, and wasn't providing any additional value. * test: remove standard pricing warning from E2E test output This warning may not be shown if an account has opted-in to standard pricing. This change normalises output to remove it, meaning tests can be run on any account, regardless of opt-in state. * test: update format of writing logs message in E2E tests * test: use `fallback` instead of `default` in E2E tests #4571 updated the message logged in non-interactive contexts for default values to use the word `fallback` instead of `default`. * fix: ensure `--log-level` argument applied immediately Some messages were being logged before the `--log-level` argument was applied. In particular, this meant the "writing logs to" message at `debug` level, was not output when using `--log-level=debug`. * test: improve reliability of `dev.test.ts` E2E test This change makes a few improvements to `dev.test.ts`: - Shorter timeouts for `fetch()` retries - Replaces `get-port` with native port `0` implementation - Waits for stdout handlers to be registered before starting `wrangler dev` - Ignores errors if we failed to find a proccess to kill (assumes the process was already killed) * fix: throw `UserError`s for R2 object/bucket not-found errors These errors should not be reported to Sentry. * global install * Ensure internal workers listen on ipv4 only * shorter timeouts --------- Co-authored-by: Samuel Macleod <smacleod@cloudflare.com> * Python support (#4901) * Implements wrangler deploy/dev support for Python. * Migrate to `--no-bundle` approach * Basic support for `requirements.txt` * address review comments * Strip package versions * Support deploying * Address comments * Fix tests --------- Co-authored-by: Dominik Picheta <dominik@cloudflare.com> * Version Packages (#4891) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * [C3] Add `getBindingsProxy` support to qwik template (#4927) * Split package.json update into multiple phases * Add getBindingsProxy to qwik template * Add support for testing dev scripts in c3 e2e tests * Refactor framework e2e verification helpers * Add support for verifying build script in framework e2es * Refactor e2e helpers * Refactor workers e2e tests to re-align with frameworks tests * Refactor RunnerConfig in e2e tests * Fixing cli e2e tests * changeset * remove leftover test value * Fix issue with npm tests & fix e2e logging * Addressing PR feedback * [playground-preview-worker] fix: don't report invalid upload input (#4937) * fix: don't report invalid `edge-preview-authenticated-proxy` URLs (#4939) * [D1] print wrangler banner at the start of every D1 command (#4938) * fix: make the entrypoint optional for the `types` command (#4931) --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * add a `cf` field to the `getBindingsProxy` result (#4926) --------- Co-authored-by: James Culveyhouse <jculveyhouse@cloudflare.com> * Improve DX with `node:*` modules (#4499) * Turn node build failures into warnings * Allow files to suppress warnings for specific modules * Remove comment-based allow-listing * Add changeset * Update .changeset/chatty-balloons-impress.md Co-authored-by: James M Snell <jasnell@gmail.com> * Pass through `defineNavigatorUserAgent` * Add tests * lockfile * Linting * fix tests --------- Co-authored-by: James M Snell <jasnell@gmail.com> * improve(r2): Update Sippy endpoint request payloads to match new schema (#4928) * fix(r2): update Sippy API request payloads * improve(r2): rename sippy flags for clarity * improve(r2): stricter existence in Sippy * [C3] Bump create-qwik from 1.4.3 to 1.4.4 in /packages/create-cloudflare/src/frameworks (#4935) * [C3] Bump create-qwik in /packages/create-cloudflare/src/frameworks Bumps [create-qwik](https://github.com/BuilderIO/qwik/tree/HEAD/packages/create-qwik) from 1.4.3 to 1.4.4. - [Release notes](https://github.com/BuilderIO/qwik/releases) - [Commits](https://github.com/BuilderIO/qwik/commits/v1.4.4/packages/create-qwik) --- updated-dependencies: - dependency-name: create-qwik dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * fix: allow `port` option to be specified with `unstable_dev()` (#4953) * Extend error handling of proxy request errors in ProxyWorker (#4867) * ignore stale proxy errors * attempt to recover from ProxyWorker fetch errors by requeuing the request (only if it is GET or HEAD) * add test * add changeset * refactor to flatten nested if-else blocks * requeue request for retry at front of queue * sort batch of requests in queue by order of arrival * Revert "sort batch of requests in queue by order of arrival" This reverts commit 3329f19. * Revert "requeue request for retry at front of queue" This reverts commit f0377b7. * prioritise requests being retried over requests being proxied for the first time * better comments * update changeset to match recommeded format * Update five-cooks-share.md (#4956) * Version Packages (#4934) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> Co-authored-by: Dario Piotrowicz <dario@cloudflare.com> Co-authored-by: James Culveyhouse <jculveyhouse@cloudflare.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> Co-authored-by: petero-dk <2478689+petero-dk@users.noreply.github.com> Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com> Co-authored-by: workers-devprod@cloudflare.com <116369605+workers-devprod@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Peter Wu <peter@lekensteyn.nl> Co-authored-by: Taylor Smith <tsmith@tsmith.com> Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> Co-authored-by: Magnus Dahlstrand <magnusdahlstrand@users.noreply.github.com> Co-authored-by: Max Rozen <3822106+rozenmd@users.noreply.github.com> Co-authored-by: Nora Söderlund <norasoderlund@icloud.com> Co-authored-by: Samuel Macleod <smacleod@cloudflare.com> Co-authored-by: Dominik Picheta <dominik@cloudflare.com> Co-authored-by: James M Snell <jasnell@gmail.com> Co-authored-by: Siddhant <siddhant@cloudflare.com> Co-authored-by: Rahul Sethi <5822355+RamIdeas@users.noreply.github.com>
* ci: only deploy Workers when pushing to special branches (#4848) Previously every push to `main` that contained changes to a Worker package would cause that Worker to be deploy "to production". This meant that we had to be very careful about merging PRs that touch these Workers files. Now production deployment is only run for a Worker on a push to its special deployment branch (e.g. `deploy-worker/playground-preview-worker`). This allows us to land PRs to `main` and then collect up changes to release in a single go by updating the special deployment branch in a controlled way. Moreover it is also easy to see what changes will be released by looking at the difference between `main` and the deployment branch for the Worker package directory. The three workers in this repo now follow this pattern: - edge-preview-authenticated-proxy - format-errors - playground-preview-worker In addition, the Playground Preview Worker has end-to-end tests that are run on every push to the `main` branch, and also any PRs that have the "playground-worker" label. For these tests the Worker is deployed to the testing environment before running the tests against this deployment. * C3: bump `create-next-app` and handle new `next.config.mjs` defaults (#4863) * bump create-next-app from 14.0.4 to 14.1.0 * C3: handle new next.config.mjs default files * [wrangler] Support ai bindings in getBindingsProxy (#4869) * Retain AI service binding from miniflare options * Update changeset * chore: bump `workerd` to `1.20240129.0` (#4874) * [C3] Bump create-vue from 3.9.1 to 3.9.2 in /packages/create-cloudflare/src/frameworks (#4870) * [C3] Bump create-vue in /packages/create-cloudflare/src/frameworks Bumps [create-vue](https://github.com/vuejs/create-vue) from 3.9.1 to 3.9.2. - [Release notes](https://github.com/vuejs/create-vue/releases) - [Commits](vuejs/create-vue@v3.9.1...v3.9.2) --- updated-dependencies: - dependency-name: create-vue dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * Exclude standardPricingWarning from dryrun (#4880) * Exclude standardPricingWarning from dryrun That way we do not need authentication for dryrun, again. * fixup! Exclude standardPricingWarning from dryrun * fixup! Exclude standardPricingWarning from dryrun --------- Co-authored-by: petero-dk <2478689+petero-dk@users.noreply.github.com> * Implements Python support in miniflare. (#4873) * Fix changesets (#4885) * fix dario-piotrowicz's changesets * fix existing C3 changesets and amend the changeset text in the creation logic * Version Packages (#4854) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * [C3] Bump create-qwik from 1.4.2 to 1.4.3 in /packages/create-cloudflare/src/frameworks (#4881) * [C3] Bump create-qwik in /packages/create-cloudflare/src/frameworks Bumps [create-qwik](https://github.com/BuilderIO/qwik/tree/HEAD/packages/create-qwik) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/BuilderIO/qwik/releases) - [Commits](https://github.com/BuilderIO/qwik/commits/v1.4.3/packages/create-qwik) --- updated-dependencies: - dependency-name: create-qwik dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * [wrangler] fix: listen on loopback for wrangler dev port check and login (#4830) The `wrangler dev` port availability check triggers a firewall prompt on macOS while it briefly opens and closes listeners. The OAuth callback server from `wrangler login` has the same issue. Fix both cases by listening on the loopback address only by default. Fixed some new test failures by using locally available IP addresses: wrangler:test: ● wrangler dev › ip › should use to `ip` from `wrangler.toml`, if available wrangler:test: listen EADDRNOTAVAIL: address not available 1.2.3.4:8787 wrangler:test: wrangler:test: ● wrangler dev › ip › should use --ip command line arg, if provided wrangler:test: listen EADDRNOTAVAIL: address not available 5.6.7.8:8787 Relates to #4430 * remove outdated and no longer valid miniflare development section from CONTRIBUTING.md (#4893) * [C3] Bump @angular/create from 17.1.1 to 17.1.2 in /packages/create-cloudflare/src/frameworks (#4892) * [C3] Bump @angular/create in /packages/create-cloudflare/src/frameworks Bumps [@angular/create](https://github.com/angular/angular-cli) from 17.1.1 to 17.1.2. - [Release notes](https://github.com/angular/angular-cli/releases) - [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md) - [Commits](angular/angular-cli@17.1.1...17.1.2) --- updated-dependencies: - dependency-name: "@angular/create" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * [Stream] WebRTC Template Improvements (#4157) * Add port numbers to fix stackblitz automatic startup * Pull the variables up and show clear instructions * fixup! Pull the variables up and show clear instructions --------- Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> * fix: return 4xx error from playground preview worker on invalid tokens (#4904) Previously, we were passing user-controllable token inputs (`X-CF-Token` header, `user` search param, `token` cookie) directly to the `DurableObjectNamespace#idFromString()` function. This validated the token to be a valid Durable Object ID, but threw a reportable `TypeError`, generating a 500 response and increasing the errored request count. This is a user error, so shouldn't be reported. This change wraps calls to `idFromString()` inside `try`/`catch`es, and re-throws non-reportable user errors that generate 4xx responses. We could just validate that the tokens were 64 hex digits before calling `idFromString()`, but this approach ensures the IDs are for the `UserSession` object by validating the signature encoded in the ID too. * chore: rename deprecated Vitest `TestContext.meta` properties to `TestContext.task` (#4897) This is a precursor to updating to latest Vitest. * [wrangler] fix: stop rebuild attempts when sources are missing (#3886) (#4877) * [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * Update .changeset/hip-files-count.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * !fixup: [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * !fixup: [wrangler] fix: stop rebuild attempts when sources are missing (#3886) --------- Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [C3] Bump create-remix from 2.5.1 to 2.6.0 in /packages/create-cloudflare/src/frameworks (#4903) * [C3] Bump create-remix in /packages/create-cloudflare/src/frameworks Bumps [create-remix](https://github.com/remix-run/remix/tree/HEAD/packages/create-remix) from 2.5.1 to 2.6.0. - [Release notes](https://github.com/remix-run/remix/releases) - [Changelog](https://github.com/remix-run/remix/blob/main/packages/create-remix/CHANGELOG.md) - [Commits](https://github.com/remix-run/remix/commits/create-remix@2.6.0/packages/create-remix) --- updated-dependencies: - dependency-name: create-remix dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * fix: ensure that the Pages dev proxy server does not change the Host header (#4888) * fix: ensure that the Pages dev proxy server does not change the Host header Previously, when configuring `wrangler pages dev` to use a proxy to a 3rd party dev server, the proxy would replace the Host header, resulting in problems at the dev server if it was checking for cross-site scripting attacks. Now the proxy server passes through the Host header unaltered making it invisible to the 3rd party dev server. Fixes #4799 * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fix: fallback to returning stack trace if `format-errors` broken (#4908) * expose cf object from Miniflare instances (#4905) * expose cf object from Miniflare instances --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * Add a `ctx` field to the `getBindingsProxy` result (#4922) * split get-bindings-proxy fixture tests in multiple files * add ctx to getBindingsProxy * add ctx tests to get-bindings-proxy fixture --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * fix(d1): intercept and stringify errors thrown in --json mode (#4872) * fix(d1): intercept and stringify errors thrown in --json mode * fix: add light parsing on d1 execute error message * add test * wip * implement JsonFriendlyFatalError * address PR feedback * fix: don't report invalid `format-errors` input (#4911) * [D1] Add user friendly D1 validation error messages for `dev --remote` and `deploy` (#4914) * chore: refactor user friendly errors and add 10063 code handling * chore: add user friendly error message to deployments * chore: lint * chore: cleanup directory * chore: fix remote error handling * chore: add patch change set * chore: move ABORT_ERR logic out of the user friendly error handler * chore: fix syntax * Update .changeset/fair-shoes-melt.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> --------- Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [D1] teach wrangler how to fetch insights about D1's queries (#4909) * [D1] teach wrangler how to fetch insights about D1's queries * add options for sorting and number of results * add a means of filtering the datetime geq/leq * add more options, fix tests * add wrangler banner, add warning text * add changeset * rename last to timePeriod * use string format over numbers as >1mo's data could be possible * Update red-icons-flow.md * make it possible to order by count * Update red-icons-flow.md * PR feedback * Update .changeset/red-icons-flow.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * address PR feedback --------- Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [wrangler] test: fix E2E tests (#4907) * ci: ensure E2E tests failures not reported as successes #4458 accidentally left `continue-on-error: true` in the workflow. This meant that E2E test failures weren't reported as check failures. * test: remove redundant `deploy.test.ts` E2E test This test was a strict subset of `deployments.test.ts`, and wasn't providing any additional value. * test: remove standard pricing warning from E2E test output This warning may not be shown if an account has opted-in to standard pricing. This change normalises output to remove it, meaning tests can be run on any account, regardless of opt-in state. * test: update format of writing logs message in E2E tests * test: use `fallback` instead of `default` in E2E tests #4571 updated the message logged in non-interactive contexts for default values to use the word `fallback` instead of `default`. * fix: ensure `--log-level` argument applied immediately Some messages were being logged before the `--log-level` argument was applied. In particular, this meant the "writing logs to" message at `debug` level, was not output when using `--log-level=debug`. * test: improve reliability of `dev.test.ts` E2E test This change makes a few improvements to `dev.test.ts`: - Shorter timeouts for `fetch()` retries - Replaces `get-port` with native port `0` implementation - Waits for stdout handlers to be registered before starting `wrangler dev` - Ignores errors if we failed to find a proccess to kill (assumes the process was already killed) * fix: throw `UserError`s for R2 object/bucket not-found errors These errors should not be reported to Sentry. * global install * Ensure internal workers listen on ipv4 only * shorter timeouts --------- Co-authored-by: Samuel Macleod <smacleod@cloudflare.com> * Python support (#4901) * Implements wrangler deploy/dev support for Python. * Migrate to `--no-bundle` approach * Basic support for `requirements.txt` * address review comments * Strip package versions * Support deploying * Address comments * Fix tests --------- Co-authored-by: Dominik Picheta <dominik@cloudflare.com> * Version Packages (#4891) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * [C3] Add `getBindingsProxy` support to qwik template (#4927) * Split package.json update into multiple phases * Add getBindingsProxy to qwik template * Add support for testing dev scripts in c3 e2e tests * Refactor framework e2e verification helpers * Add support for verifying build script in framework e2es * Refactor e2e helpers * Refactor workers e2e tests to re-align with frameworks tests * Refactor RunnerConfig in e2e tests * Fixing cli e2e tests * changeset * remove leftover test value * Fix issue with npm tests & fix e2e logging * Addressing PR feedback * [playground-preview-worker] fix: don't report invalid upload input (#4937) * fix: don't report invalid `edge-preview-authenticated-proxy` URLs (#4939) * [D1] print wrangler banner at the start of every D1 command (#4938) * fix: make the entrypoint optional for the `types` command (#4931) --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * add a `cf` field to the `getBindingsProxy` result (#4926) --------- Co-authored-by: James Culveyhouse <jculveyhouse@cloudflare.com> * Improve DX with `node:*` modules (#4499) * Turn node build failures into warnings * Allow files to suppress warnings for specific modules * Remove comment-based allow-listing * Add changeset * Update .changeset/chatty-balloons-impress.md Co-authored-by: James M Snell <jasnell@gmail.com> * Pass through `defineNavigatorUserAgent` * Add tests * lockfile * Linting * fix tests --------- Co-authored-by: James M Snell <jasnell@gmail.com> * improve(r2): Update Sippy endpoint request payloads to match new schema (#4928) * fix(r2): update Sippy API request payloads * improve(r2): rename sippy flags for clarity * improve(r2): stricter existence in Sippy * [C3] Bump create-qwik from 1.4.3 to 1.4.4 in /packages/create-cloudflare/src/frameworks (#4935) * [C3] Bump create-qwik in /packages/create-cloudflare/src/frameworks Bumps [create-qwik](https://github.com/BuilderIO/qwik/tree/HEAD/packages/create-qwik) from 1.4.3 to 1.4.4. - [Release notes](https://github.com/BuilderIO/qwik/releases) - [Commits](https://github.com/BuilderIO/qwik/commits/v1.4.4/packages/create-qwik) --- updated-dependencies: - dependency-name: create-qwik dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * fix: allow `port` option to be specified with `unstable_dev()` (#4953) * Extend error handling of proxy request errors in ProxyWorker (#4867) * ignore stale proxy errors * attempt to recover from ProxyWorker fetch errors by requeuing the request (only if it is GET or HEAD) * add test * add changeset * refactor to flatten nested if-else blocks * requeue request for retry at front of queue * sort batch of requests in queue by order of arrival * Revert "sort batch of requests in queue by order of arrival" This reverts commit 3329f19. * Revert "requeue request for retry at front of queue" This reverts commit f0377b7. * prioritise requests being retried over requests being proxied for the first time * better comments * update changeset to match recommeded format * Update five-cooks-share.md (#4956) * Version Packages (#4934) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> Co-authored-by: Dario Piotrowicz <dario@cloudflare.com> Co-authored-by: James Culveyhouse <jculveyhouse@cloudflare.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> Co-authored-by: petero-dk <2478689+petero-dk@users.noreply.github.com> Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com> Co-authored-by: workers-devprod@cloudflare.com <116369605+workers-devprod@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Peter Wu <peter@lekensteyn.nl> Co-authored-by: Taylor Smith <tsmith@tsmith.com> Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> Co-authored-by: Magnus Dahlstrand <magnusdahlstrand@users.noreply.github.com> Co-authored-by: Max Rozen <3822106+rozenmd@users.noreply.github.com> Co-authored-by: Nora Söderlund <norasoderlund@icloud.com> Co-authored-by: Samuel Macleod <smacleod@cloudflare.com> Co-authored-by: Dominik Picheta <dominik@cloudflare.com> Co-authored-by: James M Snell <jasnell@gmail.com> Co-authored-by: Siddhant <siddhant@cloudflare.com> Co-authored-by: Rahul Sethi <5822355+RamIdeas@users.noreply.github.com>
* ci: only deploy Workers when pushing to special branches (#4848) Previously every push to `main` that contained changes to a Worker package would cause that Worker to be deploy "to production". This meant that we had to be very careful about merging PRs that touch these Workers files. Now production deployment is only run for a Worker on a push to its special deployment branch (e.g. `deploy-worker/playground-preview-worker`). This allows us to land PRs to `main` and then collect up changes to release in a single go by updating the special deployment branch in a controlled way. Moreover it is also easy to see what changes will be released by looking at the difference between `main` and the deployment branch for the Worker package directory. The three workers in this repo now follow this pattern: - edge-preview-authenticated-proxy - format-errors - playground-preview-worker In addition, the Playground Preview Worker has end-to-end tests that are run on every push to the `main` branch, and also any PRs that have the "playground-worker" label. For these tests the Worker is deployed to the testing environment before running the tests against this deployment. * C3: bump `create-next-app` and handle new `next.config.mjs` defaults (#4863) * bump create-next-app from 14.0.4 to 14.1.0 * C3: handle new next.config.mjs default files * [wrangler] Support ai bindings in getBindingsProxy (#4869) * Retain AI service binding from miniflare options * Update changeset * chore: bump `workerd` to `1.20240129.0` (#4874) * [C3] Bump create-vue from 3.9.1 to 3.9.2 in /packages/create-cloudflare/src/frameworks (#4870) * [C3] Bump create-vue in /packages/create-cloudflare/src/frameworks Bumps [create-vue](https://github.com/vuejs/create-vue) from 3.9.1 to 3.9.2. - [Release notes](https://github.com/vuejs/create-vue/releases) - [Commits](vuejs/create-vue@v3.9.1...v3.9.2) --- updated-dependencies: - dependency-name: create-vue dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * Exclude standardPricingWarning from dryrun (#4880) * Exclude standardPricingWarning from dryrun That way we do not need authentication for dryrun, again. * fixup! Exclude standardPricingWarning from dryrun * fixup! Exclude standardPricingWarning from dryrun --------- Co-authored-by: petero-dk <2478689+petero-dk@users.noreply.github.com> * Implements Python support in miniflare. (#4873) * Fix changesets (#4885) * fix dario-piotrowicz's changesets * fix existing C3 changesets and amend the changeset text in the creation logic * Version Packages (#4854) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * [C3] Bump create-qwik from 1.4.2 to 1.4.3 in /packages/create-cloudflare/src/frameworks (#4881) * [C3] Bump create-qwik in /packages/create-cloudflare/src/frameworks Bumps [create-qwik](https://github.com/BuilderIO/qwik/tree/HEAD/packages/create-qwik) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/BuilderIO/qwik/releases) - [Commits](https://github.com/BuilderIO/qwik/commits/v1.4.3/packages/create-qwik) --- updated-dependencies: - dependency-name: create-qwik dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * [wrangler] fix: listen on loopback for wrangler dev port check and login (#4830) The `wrangler dev` port availability check triggers a firewall prompt on macOS while it briefly opens and closes listeners. The OAuth callback server from `wrangler login` has the same issue. Fix both cases by listening on the loopback address only by default. Fixed some new test failures by using locally available IP addresses: wrangler:test: ● wrangler dev › ip › should use to `ip` from `wrangler.toml`, if available wrangler:test: listen EADDRNOTAVAIL: address not available 1.2.3.4:8787 wrangler:test: wrangler:test: ● wrangler dev › ip › should use --ip command line arg, if provided wrangler:test: listen EADDRNOTAVAIL: address not available 5.6.7.8:8787 Relates to #4430 * remove outdated and no longer valid miniflare development section from CONTRIBUTING.md (#4893) * [C3] Bump @angular/create from 17.1.1 to 17.1.2 in /packages/create-cloudflare/src/frameworks (#4892) * [C3] Bump @angular/create in /packages/create-cloudflare/src/frameworks Bumps [@angular/create](https://github.com/angular/angular-cli) from 17.1.1 to 17.1.2. - [Release notes](https://github.com/angular/angular-cli/releases) - [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md) - [Commits](angular/angular-cli@17.1.1...17.1.2) --- updated-dependencies: - dependency-name: "@angular/create" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * [Stream] WebRTC Template Improvements (#4157) * Add port numbers to fix stackblitz automatic startup * Pull the variables up and show clear instructions * fixup! Pull the variables up and show clear instructions --------- Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> * fix: return 4xx error from playground preview worker on invalid tokens (#4904) Previously, we were passing user-controllable token inputs (`X-CF-Token` header, `user` search param, `token` cookie) directly to the `DurableObjectNamespace#idFromString()` function. This validated the token to be a valid Durable Object ID, but threw a reportable `TypeError`, generating a 500 response and increasing the errored request count. This is a user error, so shouldn't be reported. This change wraps calls to `idFromString()` inside `try`/`catch`es, and re-throws non-reportable user errors that generate 4xx responses. We could just validate that the tokens were 64 hex digits before calling `idFromString()`, but this approach ensures the IDs are for the `UserSession` object by validating the signature encoded in the ID too. * chore: rename deprecated Vitest `TestContext.meta` properties to `TestContext.task` (#4897) This is a precursor to updating to latest Vitest. * [wrangler] fix: stop rebuild attempts when sources are missing (#3886) (#4877) * [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * fixup! [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * Update .changeset/hip-files-count.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * !fixup: [wrangler] fix: stop rebuild attempts when sources are missing (#3886) * !fixup: [wrangler] fix: stop rebuild attempts when sources are missing (#3886) --------- Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [C3] Bump create-remix from 2.5.1 to 2.6.0 in /packages/create-cloudflare/src/frameworks (#4903) * [C3] Bump create-remix in /packages/create-cloudflare/src/frameworks Bumps [create-remix](https://github.com/remix-run/remix/tree/HEAD/packages/create-remix) from 2.5.1 to 2.6.0. - [Release notes](https://github.com/remix-run/remix/releases) - [Changelog](https://github.com/remix-run/remix/blob/main/packages/create-remix/CHANGELOG.md) - [Commits](https://github.com/remix-run/remix/commits/create-remix@2.6.0/packages/create-remix) --- updated-dependencies: - dependency-name: create-remix dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * fix: ensure that the Pages dev proxy server does not change the Host header (#4888) * fix: ensure that the Pages dev proxy server does not change the Host header Previously, when configuring `wrangler pages dev` to use a proxy to a 3rd party dev server, the proxy would replace the Host header, resulting in problems at the dev server if it was checking for cross-site scripting attacks. Now the proxy server passes through the Host header unaltered making it invisible to the 3rd party dev server. Fixes #4799 * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fixup! fix: ensure that the Pages dev proxy server does not change the Host header * fix: fallback to returning stack trace if `format-errors` broken (#4908) * expose cf object from Miniflare instances (#4905) * expose cf object from Miniflare instances --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * Add a `ctx` field to the `getBindingsProxy` result (#4922) * split get-bindings-proxy fixture tests in multiple files * add ctx to getBindingsProxy * add ctx tests to get-bindings-proxy fixture --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * fix(d1): intercept and stringify errors thrown in --json mode (#4872) * fix(d1): intercept and stringify errors thrown in --json mode * fix: add light parsing on d1 execute error message * add test * wip * implement JsonFriendlyFatalError * address PR feedback * fix: don't report invalid `format-errors` input (#4911) * [D1] Add user friendly D1 validation error messages for `dev --remote` and `deploy` (#4914) * chore: refactor user friendly errors and add 10063 code handling * chore: add user friendly error message to deployments * chore: lint * chore: cleanup directory * chore: fix remote error handling * chore: add patch change set * chore: move ABORT_ERR logic out of the user friendly error handler * chore: fix syntax * Update .changeset/fair-shoes-melt.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> --------- Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [D1] teach wrangler how to fetch insights about D1's queries (#4909) * [D1] teach wrangler how to fetch insights about D1's queries * add options for sorting and number of results * add a means of filtering the datetime geq/leq * add more options, fix tests * add wrangler banner, add warning text * add changeset * rename last to timePeriod * use string format over numbers as >1mo's data could be possible * Update red-icons-flow.md * make it possible to order by count * Update red-icons-flow.md * PR feedback * Update .changeset/red-icons-flow.md Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * address PR feedback --------- Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> * [wrangler] test: fix E2E tests (#4907) * ci: ensure E2E tests failures not reported as successes #4458 accidentally left `continue-on-error: true` in the workflow. This meant that E2E test failures weren't reported as check failures. * test: remove redundant `deploy.test.ts` E2E test This test was a strict subset of `deployments.test.ts`, and wasn't providing any additional value. * test: remove standard pricing warning from E2E test output This warning may not be shown if an account has opted-in to standard pricing. This change normalises output to remove it, meaning tests can be run on any account, regardless of opt-in state. * test: update format of writing logs message in E2E tests * test: use `fallback` instead of `default` in E2E tests #4571 updated the message logged in non-interactive contexts for default values to use the word `fallback` instead of `default`. * fix: ensure `--log-level` argument applied immediately Some messages were being logged before the `--log-level` argument was applied. In particular, this meant the "writing logs to" message at `debug` level, was not output when using `--log-level=debug`. * test: improve reliability of `dev.test.ts` E2E test This change makes a few improvements to `dev.test.ts`: - Shorter timeouts for `fetch()` retries - Replaces `get-port` with native port `0` implementation - Waits for stdout handlers to be registered before starting `wrangler dev` - Ignores errors if we failed to find a proccess to kill (assumes the process was already killed) * fix: throw `UserError`s for R2 object/bucket not-found errors These errors should not be reported to Sentry. * global install * Ensure internal workers listen on ipv4 only * shorter timeouts --------- Co-authored-by: Samuel Macleod <smacleod@cloudflare.com> * Python support (#4901) * Implements wrangler deploy/dev support for Python. * Migrate to `--no-bundle` approach * Basic support for `requirements.txt` * address review comments * Strip package versions * Support deploying * Address comments * Fix tests --------- Co-authored-by: Dominik Picheta <dominik@cloudflare.com> * Version Packages (#4891) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * [C3] Add `getBindingsProxy` support to qwik template (#4927) * Split package.json update into multiple phases * Add getBindingsProxy to qwik template * Add support for testing dev scripts in c3 e2e tests * Refactor framework e2e verification helpers * Add support for verifying build script in framework e2es * Refactor e2e helpers * Refactor workers e2e tests to re-align with frameworks tests * Refactor RunnerConfig in e2e tests * Fixing cli e2e tests * changeset * remove leftover test value * Fix issue with npm tests & fix e2e logging * Addressing PR feedback * [playground-preview-worker] fix: don't report invalid upload input (#4937) * fix: don't report invalid `edge-preview-authenticated-proxy` URLs (#4939) * [D1] print wrangler banner at the start of every D1 command (#4938) * fix: make the entrypoint optional for the `types` command (#4931) --------- Co-authored-by: MrBBot <bcoll@cloudflare.com> * add a `cf` field to the `getBindingsProxy` result (#4926) --------- Co-authored-by: James Culveyhouse <jculveyhouse@cloudflare.com> * Improve DX with `node:*` modules (#4499) * Turn node build failures into warnings * Allow files to suppress warnings for specific modules * Remove comment-based allow-listing * Add changeset * Update .changeset/chatty-balloons-impress.md Co-authored-by: James M Snell <jasnell@gmail.com> * Pass through `defineNavigatorUserAgent` * Add tests * lockfile * Linting * fix tests --------- Co-authored-by: James M Snell <jasnell@gmail.com> * improve(r2): Update Sippy endpoint request payloads to match new schema (#4928) * fix(r2): update Sippy API request payloads * improve(r2): rename sippy flags for clarity * improve(r2): stricter existence in Sippy * [C3] Bump create-qwik from 1.4.3 to 1.4.4 in /packages/create-cloudflare/src/frameworks (#4935) * [C3] Bump create-qwik in /packages/create-cloudflare/src/frameworks Bumps [create-qwik](https://github.com/BuilderIO/qwik/tree/HEAD/packages/create-qwik) from 1.4.3 to 1.4.4. - [Release notes](https://github.com/BuilderIO/qwik/releases) - [Commits](https://github.com/BuilderIO/qwik/commits/v1.4.4/packages/create-qwik) --- updated-dependencies: - dependency-name: create-qwik dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * [C3] Update frameworks cli dependencies --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> * fix: allow `port` option to be specified with `unstable_dev()` (#4953) * Extend error handling of proxy request errors in ProxyWorker (#4867) * ignore stale proxy errors * attempt to recover from ProxyWorker fetch errors by requeuing the request (only if it is GET or HEAD) * add test * add changeset * refactor to flatten nested if-else blocks * requeue request for retry at front of queue * sort batch of requests in queue by order of arrival * Revert "sort batch of requests in queue by order of arrival" This reverts commit 3329f19. * Revert "requeue request for retry at front of queue" This reverts commit f0377b7. * prioritise requests being retried over requests being proxied for the first time * better comments * update changeset to match recommeded format * Update five-cooks-share.md (#4956) * Version Packages (#4934) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com> Co-authored-by: Dario Piotrowicz <dario@cloudflare.com> Co-authored-by: James Culveyhouse <jculveyhouse@cloudflare.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater <wrangler@cloudflare.com> Co-authored-by: petero-dk <2478689+petero-dk@users.noreply.github.com> Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com> Co-authored-by: workers-devprod@cloudflare.com <116369605+workers-devprod@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Peter Wu <peter@lekensteyn.nl> Co-authored-by: Taylor Smith <tsmith@tsmith.com> Co-authored-by: Peter Bacon Darwin <pbacondarwin@cloudflare.com> Co-authored-by: Magnus Dahlstrand <magnusdahlstrand@users.noreply.github.com> Co-authored-by: Max Rozen <3822106+rozenmd@users.noreply.github.com> Co-authored-by: Nora Söderlund <norasoderlund@icloud.com> Co-authored-by: Samuel Macleod <smacleod@cloudflare.com> Co-authored-by: Dominik Picheta <dominik@cloudflare.com> Co-authored-by: James M Snell <jasnell@gmail.com> Co-authored-by: Siddhant <siddhant@cloudflare.com> Co-authored-by: Rahul Sethi <5822355+RamIdeas@users.noreply.github.com>
(Potentially) fixes #4562
What this PR solves / how to test:
Before, the ProxyWorker had no resolution for errors that occur while requests are proxied and just logged the error to the terminal. This was because we expected inflight requests to be completed before workerd shuts down and therefore requests would only fail for unexpected reasons with no recovery strategy. But it seems, from reported issues, that requests are failing while the UserWorker is reloaded (workerd shuts down and a new workerd starts).
Now, given requests are known to fail during reloads, requests are now requeued (to retry) if they are GET or HEAD requests (because these are the subset of idempotent requests which have no body and can safely be retried).
I managed to simulate the scenario with a worker which takes a while to respond to a request. And can confirm the test failed before these code changes and passes afterwards.
Author has addressed the following:
Note for PR author:
We want to celebrate and highlight awesome PR review! If you think this PR received a particularly high-caliber review, please assign it the label
highlight pr review
so future reviewers can take inspiration and learn from it.