Skip to content

Commit 4aba48a

Browse files
committed
Merge commit '0d7ef0a4e6064fdc22d5aa436090ae4105bfcad3' into jun/d1/rr
2 parents bec5654 + 0d7ef0a commit 4aba48a

File tree

320 files changed

+3526
-3216
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

320 files changed

+3526
-3216
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
/.github/actions/assign-pr/index.js @cloudflare/pcx-technical-writing
1111
/.github/styles/cloudflare/spelling-exceptions.txt @cloudflare/pcx-technical-writing
1212
/src/components/ @cloudflare/developer-advocacy @kristianfreeman @kodster28 @pedrosousa @marciocloudflare @haleycode @maxvp @GregBrimble @KianNH @WalshyDev
13+
/src/schemas/tags.ts @kodster28 @KianNH @joslyn-cf
1314
*.js @cloudflare/developer-advocacy @kristianfreeman @kodster28 @pedrosousa @haleycode @maxvp @marciocloudflare @GregBrimble @KianNH @WalshyDev
1415
*.ts @cloudflare/developer-advocacy @kristianfreeman @kodster28 @pedrosousa @haleycode @maxvp @marciocloudflare @GregBrimble @KianNH @WalshyDev
1516
/src/content/workers-ai-models/ @craigsdennis @pedrosousa @cloudflare/pcx-technical-writing

package-lock.json

Lines changed: 234 additions & 325 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
"@astrojs/starlight-docsearch": "0.6.0",
3737
"@astrojs/starlight-tailwind": "3.0.0",
3838
"@astrojs/tailwind": "5.1.5",
39-
"@cloudflare/vitest-pool-workers": "0.7.7",
40-
"@cloudflare/workers-types": "4.20250303.0",
39+
"@cloudflare/vitest-pool-workers": "0.7.8",
40+
"@cloudflare/workers-types": "4.20250311.0",
4141
"@codingheads/sticky-header": "1.0.2",
4242
"@expressive-code/plugin-collapsible-sections": "0.40.2",
4343
"@floating-ui/react": "0.27.5",
@@ -50,8 +50,8 @@
5050
"@types/node": "22.13.9",
5151
"@types/react": "19.0.7",
5252
"@types/react-dom": "19.0.4",
53-
"@typescript-eslint/parser": "8.26.0",
54-
"algoliasearch": "5.20.4",
53+
"@typescript-eslint/parser": "8.26.1",
54+
"algoliasearch": "5.21.0",
5555
"astro": "5.4.1",
5656
"astro-breadcrumbs": "3.3.1",
5757
"astro-icon": "1.1.5",
@@ -62,7 +62,7 @@
6262
"dedent": "1.5.3",
6363
"dompurify": "3.2.4",
6464
"dot-prop": "9.0.0",
65-
"eslint": "9.21.0",
65+
"eslint": "9.22.0",
6666
"eslint-plugin-astro": "1.3.1",
6767
"eslint-plugin-jsx-a11y": "6.10.2",
6868
"eslint-plugin-react": "7.37.4",
@@ -111,8 +111,8 @@
111111
"tippy.js": "6.3.7",
112112
"ts-blank-space": "0.6.1",
113113
"tsx": "4.19.3",
114-
"typescript": "5.7.3",
115-
"typescript-eslint": "8.25.0",
114+
"typescript": "5.8.2",
115+
"typescript-eslint": "8.26.1",
116116
"unified": "11.0.5",
117117
"unist-util-visit": "5.0.0",
118118
"vite-tsconfig-paths": "5.1.4",

public/_redirects

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@
401401
/support/dns/troubleshooting/my-dns-doesnt-work/ /dns/troubleshooting/dns-issues/ 301
402402
/support/dns/troubleshooting/why-was-my-domain-deleted-from-cloudflare/ /dns/zone-setups/troubleshooting/domain-deleted/ 301
403403

404+
# Durable Objects
404405
/durable-objects/examples/durable-object-example/ /durable-objects/examples/durable-object-in-memory-state/ 301
405406
/durable-objects/api/hibernatable-websockets-api/ /durable-objects/best-practices/websockets/ 301
406407
/durable-objects/api/alarms-in-durable-objects/ /durable-objects/api/alarms/ 301
@@ -428,6 +429,15 @@
428429
/durable-objects/changelog/ /durable-objects/release-notes/ 301
429430
/durable-objects/glossary/ /durable-objects/reference/glossary/ 301
430431
/durable-objects/get-started/walkthrough/ /durable-objects/get-started/tutorial/ 301
432+
/durable-objects/get-started/video-series/intro/ /durable-objects/video-tutorials/ 301
433+
/durable-objects/get-started/video-series/app-frontend/ /durable-objects/video-tutorials/ 301
434+
/durable-objects/get-started/video-series/deploy-app/ /durable-objects/video-tutorials/ 301
435+
/durable-objects/get-started/video-series/durable-objects/ /durable-objects/video-tutorials/ 301
436+
/durable-objects/get-started/video-series/index/ /durable-objects/video-tutorials/ 301
437+
/durable-objects/get-started/video-series/make-answer-webrtc-calls/ /durable-objects/video-tutorials/ 301
438+
/durable-objects/get-started/video-series/real-time-messaging/ /durable-objects/video-tutorials/ 301
439+
/durable-objects/get-started/video-series/serverless-websocket/ /durable-objects/video-tutorials/ 301
440+
/durable-objects/get-started/video-series/ /durable-objects/video-tutorials/ 301
431441

432442
# email-routing
433443
/email-routing/enable-email-routing/ /email-routing/get-started/enable-email-routing/ 301
@@ -1945,6 +1955,7 @@
19451955
/cloudflare-one/policies/filtering/http-policies/data-loss-prevention/* /cloudflare-one/policies/data-loss-prevention/ 301
19461956
/cloudflare-one/policies/data-loss-prevention/configuration-guides/* /cloudflare-one/policies/data-loss-prevention/dlp-policies/common-policies/ 301
19471957
/cloudflare-one/insights/dex/fleet-status/ /cloudflare-one/insights/dex/monitoring/ 301
1958+
/cloudflare-one/identity/idp-integration/gsuite/ /cloudflare-one/identity/idp-integration/google-workspace/ 301
19481959

19491960
# Learning paths
19501961
/learning-paths/modules/cybersafe/cybersafe-account-creation/* /learning-paths/cybersafe/account-creation/:splat 301

public/robots.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ Disallow: /plans/
55
Disallow: /constellation
66
Disallow: /cdn-cgi/
77
Disallow: /google-tag-first-party-mode/
8+
Disallow: /security/
89

910
Sitemap: https://developers.cloudflare.com/sitemap-index.xml

src/components/APIRequest.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ const tokenGroups = operation["x-api-token-group"];
136136
</span>
137137
<ul>
138138
{tokenGroups.map((group) => (
139-
<li>{group}</li>
139+
<li><code>{group}</code></li>
140140
))}
141141
</ul>
142142
</Details>

src/components/ListTutorials.astro

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ if (!currentProduct) {
2020
}
2121
2222
const productTitle = currentProduct.data.product.title;
23+
const videoText = "🎥 Video"
24+
const tutorialText = "📝 Tutorial"
2325
2426
const docs = await getCollection("docs", (entry) => {
2527
return (
@@ -82,7 +84,7 @@ const timeAgo = (date?: Date) => {
8284
<Fragment set:html={anchor} />
8385
</td>
8486
<td>{timeAgo(tutorial.data.updated)}</td>
85-
<td>{tutorial.data.content_type}</td>
87+
<td>{tutorial.collection === "docs" ? tutorialText : videoText}</td>
8688
<td>{tutorial.data.difficulty}</td>
8789
</tr>
8890
);

src/components/overrides/Head.astro

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type { CollectionEntry } from "astro:content";
1010
// grab the current top-level folder. Remove . characters for 1.1.1.1 URL
1111
const currentSection = Astro.url.pathname.split("/")[1].replaceAll(".", "");
1212
const head = Astro.locals.starlightRoute.entry.data.head;
13+
const noIndexProductsList = ["style-guide", "security"];
1314
1415
if (currentSection) {
1516
const product = await getEntry("products", currentSection);
@@ -77,7 +78,7 @@ if (currentSection) {
7778
}
7879
}
7980
80-
if (currentSection === "style-guide") {
81+
if (noIndexProductsList.includes(currentSection)) {
8182
head.push({
8283
tag: "meta",
8384
attrs: {
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
title: Threaded replies now possible in Email Workers
3+
description: You can now use Email Workers to send multiple replies to the same email thread.
4+
date: 2025-03-12T18:00:00Z
5+
---
6+
7+
We’re removing some of the restrictions in Email Routing so that AI Agents and task automation can better handle email workflows, including how Workers can [reply](/email-routing/email-workers/reply-email-workers/) to incoming emails.
8+
9+
It's now possible to keep a threaded email conversation with an [Email Worker](/email-routing/email-workers/) script as long as:
10+
11+
* The incoming email has to have valid [DMARC](https://www.cloudflare.com/learning/dns/dns-records/dns-dmarc-record/).
12+
* The email can only be replied to once in the same `EmailMessage` event.
13+
* The recipient in the reply must match the incoming sender.
14+
* The outgoing sender domain must match the same domain that received the email.
15+
* Every time an email passes through Email Routing or another MTA, an entry is added to the `References` list. We stop accepting replies to emails with more than 100 `References` entries to prevent abuse or accidental loops.
16+
17+
Here's an example of a Worker responding to Emails using a Workers AI model:
18+
19+
```ts title="AI model responding to emails"
20+
import PostalMime from "postal-mime";
21+
import {createMimeMessage} from "mimetext"
22+
import { EmailMessage } from "cloudflare:email";
23+
24+
export default {
25+
async email(message, env, ctx) {
26+
const email = await PostalMime.parse(message.raw)
27+
const res = await env.AI.run('@cf/meta/llama-2-7b-chat-fp16', {
28+
messages: [{
29+
role: "user",
30+
content: email.text ?? ''
31+
}]
32+
})
33+
34+
// message-id is generated by mimetext
35+
const response = createMimeMessage()
36+
response.setHeader("In-Reply-To", message.headers.get("Message-ID")!);
37+
response.setSender("[email protected]");
38+
response.setRecipient(message.from);
39+
response.setSubject("Llama response");
40+
response.addMessage({
41+
contentType: 'text/plain',
42+
data: res instanceof ReadableStream ? await new Response(res).text() : res.response!
43+
})
44+
45+
const replyMessage = new EmailMessage("<email>", message.from, response.asRaw());
46+
await message.reply(replyMessage)
47+
}
48+
} satisfies ExportedHandler<Env>;
49+
```
50+
51+
See [Reply to emails from Workers](/email-routing/email-workers/reply-email-workers/) for more information.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
title: Use the latest JavaScript features with Wrangler CLI v4
3+
description: Wrangler v4 is available!
4+
products:
5+
- workers
6+
date: 2025-03-13T09:00:00Z
7+
---
8+
9+
import { PackageManagers } from "~/components";
10+
11+
We've released the next major version of [Wrangler](/workers/wrangler/), the CLI for Cloudflare Workers — `[email protected]`. Wrangler v4 is a major release focused on updates to underlying systems and dependencies, along with improvements to keep Wrangler commands consistent and clear.
12+
13+
You can run the following command to install it in your projects:
14+
15+
<PackageManagers pkg="wrangler@latest" />
16+
17+
Unlike previous major versions of Wrangler, which were [foundational rewrites](https://blog.cloudflare.com/wrangler-v2-beta/) and [rearchitectures](https://blog.cloudflare.com/wrangler3/) — Version 4 of Wrangler includes a much smaller set of changes. If you use Wrangler today, your workflow is very unlikely to change.
18+
19+
A [detailed migration guide](/workers/wrangler/migration/update-v3-to-v4) is available and if you find a bug or hit a roadblock when upgrading to Wrangler v4, [open an issue on the `cloudflare/workers-sdk` repository on GitHub](https://github.com/cloudflare/workers-sdk/issues/new?template=bug-template.yaml).
20+
21+
Going forward, we'll continue supporting Wrangler v3 with bug fixes and security updates until Q1 2026, and with critical security updates until Q1 2027, at which point it will be out of support.

0 commit comments

Comments
 (0)