edgepress 2026.10.12 → 2026.10.14

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.
Files changed (66) hide show
  1. package/README.md +34 -5
  2. package/config.yml +171 -171
  3. package/content/assets/edgepress/brand/sources/export-manifest.json +181 -181
  4. package/content/assets/edgepress-markdown-guide.svg +21 -21
  5. package/content/guides/markdown-media.md +38 -0
  6. package/content/guides/product-demos.md +30 -30
  7. package/content/pages/deployment/en.json +1 -1
  8. package/content/posts/2026-09-24-edgepress-release-2026-9-1/en.md +1 -1
  9. package/content/posts/2026-09-24-edgepress-release-2026-9-1/zh-cn.md +1 -1
  10. package/languages/base/en.json +98 -98
  11. package/languages/packs/zh-CN.json +98 -98
  12. package/package.json +93 -90
  13. package/src/assets.js +187 -186
  14. package/src/browser-audit.js +158 -158
  15. package/src/build.js +293 -291
  16. package/src/cli.js +399 -364
  17. package/src/content.js +233 -233
  18. package/src/data-saver.js +3 -3
  19. package/src/generators.js +414 -420
  20. package/src/i18n.js +86 -86
  21. package/src/markdown.js +195 -160
  22. package/src/page-block-catalog.json +345 -0
  23. package/src/page-check.js +1 -1
  24. package/src/page-editor-client.js +396 -0
  25. package/src/page-editor-extension.js +86 -0
  26. package/src/page-editor.css +1 -0
  27. package/src/page-editor.html +40 -0
  28. package/src/page-editor.js +178 -0
  29. package/src/page-scaffold.js +70 -0
  30. package/src/plugin-api.js +77 -77
  31. package/src/report-visuals.js +642 -642
  32. package/src/revision-cards.js +30 -30
  33. package/src/rss.js +100 -0
  34. package/src/theme.js +4 -4
  35. package/src/video-metadata.js +36 -0
  36. package/static/edgepress/fonts/faces.css +2217 -2217
  37. package/static/edgepress/media-viewer.js +67 -10
  38. package/static/edgepress/project-demo.js +83 -83
  39. package/static/edgepress/search.js +84 -84
  40. package/tests/assets-runtime.test.mjs +26 -26
  41. package/tests/audit.test.mjs +142 -142
  42. package/tests/brand-regression.test.mjs +110 -110
  43. package/tests/document-package.test.mjs +4 -9
  44. package/tests/embed-syntax.test.mjs +68 -68
  45. package/tests/image-viewer.test.mjs +36 -36
  46. package/tests/markdown-media.test.mjs +119 -0
  47. package/tests/oembed-layout.test.mjs +13 -4
  48. package/tests/page-editor.test.mjs +106 -0
  49. package/tests/page-scaffold.test.mjs +125 -0
  50. package/tests/project-demo.test.mjs +73 -73
  51. package/tests/release-version.test.mjs +28 -0
  52. package/tests/rss.test.mjs +54 -0
  53. package/tests/video-metadata.test.mjs +28 -0
  54. package/tests/writing.test.mjs +83 -83
  55. package/themes/atelier/assets/style.css +340 -340
  56. package/themes/default/assets/style.css +371 -371
  57. package/themes/default/layouts/partials/head.html +1 -1
  58. package/themes/folio/assets/style.css +515 -515
  59. package/themes/folio/theme.json +5 -5
  60. package/themes/signal/assets/style.css +332 -332
  61. package/tools/README.md +10 -10
  62. package/tools/assets/generate-brand-assets.py +160 -160
  63. package/tools/assets/video-preview.mjs +15 -0
  64. package/tools/recordings/demo-workbench.mjs +53 -53
  65. package/tools/recordings/desktop-recording.mjs +70 -70
  66. package/tools/recordings/vm-desktop.mjs +59 -59
package/README.md CHANGED
@@ -8,7 +8,7 @@ EdgePress automatically registers page-specific native WebMCP tools for reading
8
8
 
9
9
  Document previews use the browser-only `document-viewer` package: PDF, DOC/DOCX, PPT/PPTX and XLS/XLSX render inside the page automatically without moving keyboard focus. Articles accept `!document[Report](/documents/report.docx)`; Pages support `type: document`. Remote direct-file URLs require a configured consent service and CORS. See the theme-development guide.
10
10
 
11
- The dependency is pinned to a full commit in the public [document-viewer repository](https://github.com/jsw-teams/document-viewer). Cloud `npm ci` needs no sibling checkout, bundled source snapshot or Office conversion software. Publish and validate document-viewer first, then update the dependency URL and lockfile here. Sites can consume the resulting pinned EdgePress commit without copying either implementation.
11
+ The dependency is pinned to a full commit in the public [document-viewer repository](https://github.com/jsw-teams/document-viewer). Cloud `npm install` needs no sibling checkout, bundled source snapshot or Office conversion software. Publish and validate document-viewer first, then update the dependency URL and lockfile here. Sites can consume the resulting pinned EdgePress commit without copying either implementation.
12
12
 
13
13
  [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/jsw-teams/edgepress)
14
14
  [![Deploy to EdgeOne Pages](https://cdnstatic.tencentcs.com/edgeone/pages/deploy.svg)](https://edgeone.ai/pages/new?repository-url=https%3A%2F%2Fgithub.com%2Fjsw-teams%2Fedgepress&build-command=npm%20run%20build&install-command=npm%20ci&output-directory=dist)
@@ -36,7 +36,7 @@ Buttons open repository setup. Cloudflare, Vercel, Netlify and EdgeOne support r
36
36
 
37
37
  ## Quick start
38
38
 
39
- The commands below install the published npm release and initialize a new project directory. For the latest GitHub changes, use the deployment buttons or clone this repository, then run `npm ci` and `npm run dev` from its root:
39
+ The commands below install the published npm release and initialize a new project directory. For the latest GitHub changes, use the deployment buttons or clone this repository, then run `npm install` and `npm run dev` from its root:
40
40
 
41
41
  mkdir my-edgepress-site
42
42
  cd my-edgepress-site
@@ -45,10 +45,37 @@ The commands below install the published npm release and initialize a new projec
45
45
  npm install
46
46
  npm run dev
47
47
 
48
- Use Node.js 22.12 or newer. Set the real site URL and operator contact in config.yml before publishing. Deploy with edgepress deploy. When developing EdgePress itself, use `npm ci`, then `npm link` to expose the local CLI.
48
+ Use Node.js 22.12 or newer. Set the real site URL and operator contact in config.yml before publishing. Deploy with edgepress deploy. When developing EdgePress itself, use `npm install`, then `npm link` to expose the local CLI.
49
49
 
50
50
  Run `edgepress init` in a new project directory to scaffold a site pinned to the installed EdgePress release. The initializer keeps the existing package name and scripts.
51
51
 
52
+ ## Maintainer npm and GitHub releases
53
+
54
+ Releases use **year.month.number of updates in that month**, not the calendar day. For example, `2026.10.12` is the twelfth update in October 2026; `2026.10.13` follows it, and November starts at `2026.11.1`. The release workflow uses **UTC** for the month boundary and checks `package.json`, existing `vYYYY.M.N` tags and published npm versions to avoid reusing a version.
55
+
56
+ Once the npm package owner has configured **Trusted Publishing** at [npmjs.com](https://www.npmjs.com/package/edgepress/access), choose GitHub Actions with owner `jsw-teams`, repository `edgepress`, workflow filename **`publish.yml`**, and allow **`npm publish`** (not only staging). No environment name is used. This is a one-time npm-side setup; no long-lived `NPM_TOKEN` is required. Restrict traditional publish tokens after confirming the first successful trusted publish.
57
+
58
+ To publish new source, a repository maintainer opens **Actions → Publish npm and GitHub Release → Run workflow** on `main`. The manual-only job installs Node 22 and npm 11, determines the next monthly update number, updates both package manifests, audits dependencies, runs the full browser test suite, builds the project and packs the source. Only after all checks pass does it push a non-force release commit and tag, publish that exact archive to npm with provenance, and create a GitHub Release containing the same `.tgz` and SHA-256 checksum. Ordinary pushes and PRs cannot trigger a publish.
59
+
60
+ **Recovery:** If a run fails *after* pushing its version tag, do not launch a new release blindly: check whether the tag, npm version or GitHub Release already exists and reconcile the incomplete publish first. npm versions cannot be overwritten. Protected branches must explicitly permit the GitHub Actions bot to create the release commit/tag or use a maintainer-approved release branch process.
61
+
62
+ ## Visual Pages editor / 可视化页面编辑器
63
+
64
+ Run `npm run editor` (or `npx edgepress editor` in an initialized site), then open **http://127.0.0.1:4178/**. The editor now supports **+ 新建页面**: choose a title, optional URL slug and configured language; the new JSON Page opens immediately in the visual canvas. Existing Pages can still be selected, arranged into 1–4 columns and edited without touching JSON.
65
+
66
+ 从命令行也可以新建页面:
67
+
68
+ ```sh
69
+ edgepress new pages "About our project" --lang en --slug about
70
+ edgepress new pages "关于我们" --lang zh-cn --slug about
71
+ ```
72
+
73
+ The shortcut `edgepress new page` is also accepted. By default, the CLI creates `content/pages/<slug>/<locale>.json` in the site's default language. Existing pages, legacy `.md` equivalents, and symlinked directories cannot be overwritten. The generated `$schema` reference points to the installed framework (or the local development schema). Run `npm run editor` to continue editing, and `npm run build` to validate the actual generated site.
74
+
75
+ **Shared block catalog:** `src/page-block-catalog.json` ships with the npm package and defines starter templates for **all 30 supported Pages block types**. This includes site-reusable `link-directory`, `media-text`, `feature-grid`, `privacy-controller`, `document`, `media-viewer` and consent-controlled integrations used by other frontends. Reuse the public EdgePress catalog from site projects (including private ones); do not copy private pages or integrate site-specific services into the framework. Third-party service, CAPTCHA, ad and local-tool blocks are available as templates but **require site configuration and valid resource URLs** before a build; inserting the template does not activate a service.
76
+
77
+ The editor runs **only on 127.0.0.1**, never on deployed static sites. It enforces origin checks, path restrictions, revision-conflict detection and atomic saves. Unrecognized block properties are kept; complex nested fields can still be edited in the inspector's advanced JSON input. The canvas previews structure, not theme-perfect output. Articles remain Markdown.
78
+
52
79
  ## External link prompts
53
80
 
54
81
  The optional local prompt shows the complete destination URL (including path, query and fragment) once, with no duplicate hostname, and lets the visitor return or continue. It makes no request to the destination before confirmation. Configure exact origins, not wildcard domains:
@@ -173,7 +200,7 @@ Project guides are published from content/pages/: project introduction, quick st
173
200
 
174
201
  Version 2026.10.1 starts the October 2026 release series. Read the [October release notes](content/posts/2026-10-01-edgepress-release-2026-10-1/). The September updates are recorded in the [request 1 notes](content/posts/2026-09-24-edgepress-release-2026-9-1/), [request 2 notes](content/posts/2026-09-25-edgepress-release-2026-9-2/), [request 3 notes](content/posts/2026-09-25-edgepress-release-2026-9-3/), [request 4 notes](content/posts/2026-09-25-edgepress-release-2026-9-4/), [request 5 notes](content/posts/2026-09-25-edgepress-release-2026-9-5/), [request 6 notes](content/posts/2026-09-25-edgepress-release-2026-9-6/), [request 7 notes](content/posts/2026-09-26-edgepress-release-2026-9-7/), [request 8 notes](content/posts/2026-09-26-edgepress-release-2026-9-8/), [request 9 notes](content/posts/2026-09-26-edgepress-release-2026-9-9/), and [request 10 notes](content/posts/2026-09-27-edgepress-release-2026-9-10/).
175
202
 
176
- This release publishes page media from content/assets/, updates Wrangler to 4.144.0, and adds scheduled dependency checks and version-scoped Codex Security scans. Optional services remain disabled until a visitor makes an explicit choice.
203
+ This release publishes page media from content/assets/ and updates Wrangler to 4.144.0. GitHub Actions retains only scheduled and lockfile-change dependency security audits. Optional services remain disabled until a visitor makes an explicit choice.
177
204
 
178
205
  ## Journal categories, navigation, and author profiles
179
206
 
@@ -227,7 +254,7 @@ Multiple post lists on the same page share a displayed-article set: an article a
227
254
 
228
255
  ## Static platform deployment
229
256
 
230
- Run npm run deploy:cloudflare, npm run deploy:vercel, npm run deploy:netlify, npm run deploy:edgeone -- -n my-site, or npm run deploy:esa -- --name my-site. Platform authentication is required. GitHub Actions also provides a manual Deploy static website workflow using repository Secrets.
257
+ Run npm run deploy:cloudflare, npm run deploy:vercel, npm run deploy:netlify, npm run deploy:edgeone -- -n my-site, or npm run deploy:esa -- --name my-site. Platform authentication is required. Deployments run locally; GitHub Actions is limited to dependency security audits.
231
258
 
232
259
 
233
260
  All platforms build dist/. CSS and JS are fingerprinted, with one-year immutable cache policies for Cloudflare, Vercel, Netlify and EdgeOne. ESA uses the same assets; set its browser and edge cache rules for hashed CSS/JS while leaving HTML short-lived. See the [deployment guide](content/pages/deployment/en.json) and [ESA build configuration](https://help.aliyun.com/en/edge-security-acceleration/esa/user-guide/build-pages).
@@ -261,3 +288,5 @@ Real static website output demonstrates what the builder produces. Product recor
261
288
  Project recordings use manual play/pause and a seekable progress bar, with theme colors and keyboard support. The reproducible CLI/editor workbench lives in [tools/recordings/demo-workbench.mjs](tools/recordings/demo-workbench.mjs); see [the recording guide](content/guides/product-demos.md). Built-in navigation and page icons come from the pinned Lucide 1.52 library, bundled locally with its license.
262
289
 
263
290
  Development files: tests/ contains regression tests and fixtures; tools/assets/ maintains source assets; tools/recordings/ contains desktop capture workflows; tools/verification/ contains browser audits; tools/reports/ holds generated evidence. Run npm test and npm run check after changes.
291
+
292
+ Dependency maintenance uses compatible release ranges without retained lockfiles. The media and document viewers follow Git semver release ranges; audits resolve fresh dependency snapshots outside the checkout and remove them after use. Dependabot checks daily, including security updates; changed dependencies must pass the full browser suite before release.
package/config.yml CHANGED
@@ -1,10 +1,10 @@
1
1
  # Site configuration (site, theme, privacy, optional consent services).
2
2
  # Build paths and enabled locales belong to edgepress.config.mjs.
3
- site:
4
- timeZone: Asia/Taipei
5
- title: EdgePress
6
- description: A static website builder for Cloudflare Workers with editable pages, Markdown posts, themes, and plugins.
7
- url: https://example.org
3
+ site:
4
+ timeZone: Asia/Taipei
5
+ title: EdgePress
6
+ description: A static website builder for Cloudflare Workers with editable pages, Markdown posts, themes, and plugins.
7
+ url: https://example.org
8
8
  language: en
9
9
  dataSaver: # site (optional text view; requires the theme dataSaver assets)
10
10
  enabled: false
@@ -13,169 +13,169 @@ site:
13
13
  detectSlowConnection: false
14
14
  respectBrowserPreference: false
15
15
  promptAfterMs: 5000
16
- head:
17
- titleSuffix: ""
18
- titleSeparator: " · "
19
- header:
20
- showBrand: true
21
- brandLabel: ""
22
- components:
23
- header: true
24
- primaryNavigation: true
25
- languageNavigation: true
26
- footer: true
27
- footerNavigation: true
28
- navigation:
29
- - key: home
30
- url: "@home"
31
- labels:
32
- en: Home
33
- zh-CN: 首页
34
- - key: guides
35
- url: /project-introduction/
36
- labels:
37
- en: Guides
38
- zh-CN: 项目指南
39
- - key: quick-start
40
- url: /quick-start/
41
- labels:
42
- en: Quick start
43
- zh-CN: 快速入门
44
- - key: posts
45
- url: "@archives"
46
- labels:
47
- en: Posts
48
- zh-CN: 文章
49
- - key: search
50
- url: "@search"
51
- labels:
52
- en: Search
53
- zh-CN: 搜索
54
- footerNavigation:
55
- - key: privacy
56
- url: /privacy-policy/
57
- labels:
58
- en: Privacy policy
59
- zh-CN: 隐私政策
60
- - key: feed
61
- url: "@feed"
62
- labels:
63
- en: Atom feed
64
- zh-CN: Atom 订阅
65
- footer: ""
66
- author:
67
- name: toewpq
68
- avatar: /edgepress/brand/avatar.png
69
- seo:
70
- author: toewpq
71
- keywords:
72
- - Markdown website builder
73
- - Cloudflare Workers
74
- - static site generator
75
- image: https://example.org/edgepress/brand/og-image.png
76
- robots: index,follow
77
- agentSeo:
78
- enabled: true
79
- summary: A static website builder for Cloudflare Workers, with row-based editable pages, Markdown posts,
80
- themes, plugins, and consent-gated integrations.
81
- topics:
82
- - Markdown website builder
83
- - Cloudflare Workers
84
- - composable page blocks
85
- - plugin development
86
- llmsTxt: true
87
- agentCrawlers:
88
- - GPTBot
89
- - ClaudeBot
90
- - PerplexityBot
91
- privacy:
92
- controller:
93
- name: toewpq
94
- contact: toewpq@gmail.com
95
- policyUrl: /privacy-policy/
96
- plugins:
97
- consent:
98
- enabled: true
99
- proposedDate: 2026-09-26
100
- effectiveDate: 2026-09-26
101
- expiresDays: 180
102
- services:
103
- - id: cloudflare-web-analytics
104
- provider: cloudflare-web-analytics
105
- name:
106
- en: Cloudflare Web Analytics
107
- zh-CN: Cloudflare 网站分析
108
- purpose:
109
- en: Measure visits and page performance to improve this site, only after you opt in.
110
- zh-CN: 在你同意后统计访问与页面性能,用于改进本站。
111
- dataCategories:
112
- en: Performance timing and page-view metrics; dimensions can include path, referrer, device, browser,
113
- operating system, and country. Cloudflare receives the beacon request's source IP and says it
114
- discards it at the nearest data center without storing it in core databases or logs.
115
- zh-CN: 性能计时和页面浏览指标,维度可能包括页面路径、来源页、设备、浏览器、操作系统和国家或地区。Cloudflare 会在信标请求中接收来源 IP,并表示会在最近的数据中心将其丢弃,不保存到核心数据库或日志中。
116
- recipient:
117
- en: Cloudflare, Inc.
118
- zh-CN: Cloudflare, Inc.
119
- retention:
120
- en: Unsampled beacon data is kept for 7 days, then aggregated to about 10% for long-term storage. Dashboard
121
- history is available for 6 months.
122
- zh-CN: 未采样的信标数据保留 7 天,之后会汇总为约 10% 的长期数据。仪表板可查看最近 6 个月的历史记录。
123
- privacyUrl: https://developers.cloudflare.com/speed/observatory/rum-beacon/
124
- token: 8347d72ba9f84e6783bf441e7832a80e
125
- - id: youtube
126
- provider: oembed
127
- enabled: true
128
- name: YouTube
129
- purpose:
130
- en: With your permission, load YouTube media and its player on request.
131
- zh-CN: 在你同意后,按你的请求加载 YouTube 分享内容及播放器。
132
- dataCategories:
133
- en: Requested content URL, IP address, browser information; provider cookies may be used after loading.
134
- zh-CN: 请求的内容链接、IP 地址、浏览器信息;加载后平台可能使用其 Cookie。
135
- recipient: YouTube
136
- retention:
137
- en: The site keeps the consent choice for 180 days; provider retention follows its linked privacy policy.
138
- zh-CN: 本站保存授权选择 180 天;平台处理与保留规则见所链接的隐私政策。
139
- privacyUrl: https://policies.google.com/privacy
140
- backendUrl: https://www.youtube.com
141
- oembedEndpoint: https://www.youtube.com/oembed
142
- sourceOrigins:
143
- - https://www.youtube.com
144
- - https://youtu.be
145
- - https://youtube.com
146
- - https://m.youtube.com
147
- embedOrigins:
148
- - https://www.youtube.com
149
- - https://www.youtube-nocookie.com
150
- - id: x-posts
151
- provider: oembed
152
- enabled: true
153
- name: X
154
- purpose:
155
- en: With your permission, load X media and its player on request.
156
- zh-CN: 在你同意后,按你的请求加载 X 分享内容及播放器。
157
- dataCategories:
158
- en: Requested content URL, IP address, browser information; provider cookies may be used after loading.
159
- zh-CN: 请求的内容链接、IP 地址、浏览器信息;加载后平台可能使用其 Cookie。
160
- recipient: X
161
- retention:
162
- en: The site keeps the consent choice for 180 days; provider retention follows its linked privacy policy.
163
- zh-CN: 本站保存授权选择 180 天;平台处理与保留规则见所链接的隐私政策。
164
- privacyUrl: https://x.com/en/privacy
165
- backendUrl: https://x.com
166
- oembedEndpoint: https://publish.x.com/oembed
167
- sourceOrigins:
168
- - https://x.com
169
- - https://twitter.com
170
- - https://www.x.com
171
- - https://www.twitter.com
172
- embedOrigins:
173
- - https://platform.x.com
174
- - https://platform.twitter.com
175
- - https://syndication.twitter.com
176
- - https://cdn.syndication.twimg.com
177
- - https://pbs.twimg.com
178
- - https://abs.twimg.com
179
- - https://video.twimg.com
180
- embedScripts:
181
- - https://platform.x.com/widgets.js
16
+ head:
17
+ titleSuffix: ""
18
+ titleSeparator: " · "
19
+ header:
20
+ showBrand: true
21
+ brandLabel: ""
22
+ components:
23
+ header: true
24
+ primaryNavigation: true
25
+ languageNavigation: true
26
+ footer: true
27
+ footerNavigation: true
28
+ navigation:
29
+ - key: home
30
+ url: "@home"
31
+ labels:
32
+ en: Home
33
+ zh-CN: 首页
34
+ - key: guides
35
+ url: /project-introduction/
36
+ labels:
37
+ en: Guides
38
+ zh-CN: 项目指南
39
+ - key: quick-start
40
+ url: /quick-start/
41
+ labels:
42
+ en: Quick start
43
+ zh-CN: 快速入门
44
+ - key: posts
45
+ url: "@archives"
46
+ labels:
47
+ en: Posts
48
+ zh-CN: 文章
49
+ - key: search
50
+ url: "@search"
51
+ labels:
52
+ en: Search
53
+ zh-CN: 搜索
54
+ footerNavigation:
55
+ - key: privacy
56
+ url: /privacy-policy/
57
+ labels:
58
+ en: Privacy policy
59
+ zh-CN: 隐私政策
60
+ - key: feed
61
+ url: "@feed"
62
+ labels:
63
+ en: Atom feed
64
+ zh-CN: Atom 订阅
65
+ footer: ""
66
+ author:
67
+ name: toewpq
68
+ avatar: /edgepress/brand/avatar.png
69
+ seo:
70
+ author: toewpq
71
+ keywords:
72
+ - Markdown website builder
73
+ - Cloudflare Workers
74
+ - static site generator
75
+ image: https://example.org/edgepress/brand/og-image.png
76
+ robots: index,follow
77
+ agentSeo:
78
+ enabled: true
79
+ summary: A static website builder for Cloudflare Workers, with row-based editable pages, Markdown posts,
80
+ themes, plugins, and consent-gated integrations.
81
+ topics:
82
+ - Markdown website builder
83
+ - Cloudflare Workers
84
+ - composable page blocks
85
+ - plugin development
86
+ llmsTxt: true
87
+ agentCrawlers:
88
+ - GPTBot
89
+ - ClaudeBot
90
+ - PerplexityBot
91
+ privacy:
92
+ controller:
93
+ name: toewpq
94
+ contact: toewpq@gmail.com
95
+ policyUrl: /privacy-policy/
96
+ plugins:
97
+ consent:
98
+ enabled: true
99
+ proposedDate: 2026-09-26
100
+ effectiveDate: 2026-09-26
101
+ expiresDays: 180
102
+ services:
103
+ - id: cloudflare-web-analytics
104
+ provider: cloudflare-web-analytics
105
+ name:
106
+ en: Cloudflare Web Analytics
107
+ zh-CN: Cloudflare 网站分析
108
+ purpose:
109
+ en: Measure visits and page performance to improve this site, only after you opt in.
110
+ zh-CN: 在你同意后统计访问与页面性能,用于改进本站。
111
+ dataCategories:
112
+ en: Performance timing and page-view metrics; dimensions can include path, referrer, device, browser,
113
+ operating system, and country. Cloudflare receives the beacon request's source IP and says it
114
+ discards it at the nearest data center without storing it in core databases or logs.
115
+ zh-CN: 性能计时和页面浏览指标,维度可能包括页面路径、来源页、设备、浏览器、操作系统和国家或地区。Cloudflare 会在信标请求中接收来源 IP,并表示会在最近的数据中心将其丢弃,不保存到核心数据库或日志中。
116
+ recipient:
117
+ en: Cloudflare, Inc.
118
+ zh-CN: Cloudflare, Inc.
119
+ retention:
120
+ en: Unsampled beacon data is kept for 7 days, then aggregated to about 10% for long-term storage. Dashboard
121
+ history is available for 6 months.
122
+ zh-CN: 未采样的信标数据保留 7 天,之后会汇总为约 10% 的长期数据。仪表板可查看最近 6 个月的历史记录。
123
+ privacyUrl: https://developers.cloudflare.com/speed/observatory/rum-beacon/
124
+ token: 8347d72ba9f84e6783bf441e7832a80e
125
+ - id: youtube
126
+ provider: oembed
127
+ enabled: true
128
+ name: YouTube
129
+ purpose:
130
+ en: With your permission, load YouTube media and its player on request.
131
+ zh-CN: 在你同意后,按你的请求加载 YouTube 分享内容及播放器。
132
+ dataCategories:
133
+ en: Requested content URL, IP address, browser information; provider cookies may be used after loading.
134
+ zh-CN: 请求的内容链接、IP 地址、浏览器信息;加载后平台可能使用其 Cookie。
135
+ recipient: YouTube
136
+ retention:
137
+ en: The site keeps the consent choice for 180 days; provider retention follows its linked privacy policy.
138
+ zh-CN: 本站保存授权选择 180 天;平台处理与保留规则见所链接的隐私政策。
139
+ privacyUrl: https://policies.google.com/privacy
140
+ backendUrl: https://www.youtube.com
141
+ oembedEndpoint: https://www.youtube.com/oembed
142
+ sourceOrigins:
143
+ - https://www.youtube.com
144
+ - https://youtu.be
145
+ - https://youtube.com
146
+ - https://m.youtube.com
147
+ embedOrigins:
148
+ - https://www.youtube.com
149
+ - https://www.youtube-nocookie.com
150
+ - id: x-posts
151
+ provider: oembed
152
+ enabled: true
153
+ name: X
154
+ purpose:
155
+ en: With your permission, load X media and its player on request.
156
+ zh-CN: 在你同意后,按你的请求加载 X 分享内容及播放器。
157
+ dataCategories:
158
+ en: Requested content URL, IP address, browser information; provider cookies may be used after loading.
159
+ zh-CN: 请求的内容链接、IP 地址、浏览器信息;加载后平台可能使用其 Cookie。
160
+ recipient: X
161
+ retention:
162
+ en: The site keeps the consent choice for 180 days; provider retention follows its linked privacy policy.
163
+ zh-CN: 本站保存授权选择 180 天;平台处理与保留规则见所链接的隐私政策。
164
+ privacyUrl: https://x.com/en/privacy
165
+ backendUrl: https://x.com
166
+ oembedEndpoint: https://publish.x.com/oembed
167
+ sourceOrigins:
168
+ - https://x.com
169
+ - https://twitter.com
170
+ - https://www.x.com
171
+ - https://www.twitter.com
172
+ embedOrigins:
173
+ - https://platform.x.com
174
+ - https://platform.twitter.com
175
+ - https://syndication.twitter.com
176
+ - https://cdn.syndication.twimg.com
177
+ - https://pbs.twimg.com
178
+ - https://abs.twimg.com
179
+ - https://video.twimg.com
180
+ embedScripts:
181
+ - https://platform.x.com/widgets.js